Technology  ·  July 28, 2020

Scalable Swag Shipments for Startups

Tyler Menezes, Executive Director and Board Member

As a nonprofit coding organization running physical events, a lot of what CodeDay does (in a normal year) requires sending things in the real-world. Broadly speaking, this includes event supplies to event teams, and swag/awards to community members and volunteers.

In our early days, I was shipping merch from my office, and every quarter I’d get together with a couple volunteers to assemble and ship out all the event supply boxes for the upcoming events. Eventually, this started to take up too much time.

This isn’t unique to organizations in STEM education, I had the same problem when I ran a startup. People love to represent the startups they use, so sending swag is a great way to market! I have fond memories from my last startup of walking around SoMa in the mornings, trying to find mail dropoffs that weren’t too full so I could stuff a some shirts in for our customers.

Today I’ll share our journey to a fully-automated swag distribution infrastructure. I believe this is something any startup could quickly replicate, so I hope this can save you time!

First Attempt: Less Steps to Get Things Out the Door

The first thing we tried was cutting out steps to get things out the door. There were two types of work I was doing: packaging, and labeling.


90% of people who need swag are getting a single SKU: a t-shirt, a set of stickers, a thank-you letter, etc. So I + some volunteers started by just folding all the shirts and then packaging everything into individual envelopes.

Most of the time was spent on folding the shirts. We’ve recently switched to a printer that will just do this for us, Gorilla Screen Printing in Seattle. Super nice folks, and they will happily deliver individually bagged shirts with size stickers on request.

We kept a database of the final shipping weights of each type of packaged product.


At this time, all our backend infrastructure was in PHP, so we started out by writing a PHP library to build shipping labels for UPS and USPS. Nowadays Easypost can do this for you, but as you’ll see soon, I don’t think this is the best route anymore.

The system worked like this: someone shared they were going to CodeDay on social media and then filled out a form with their address, the system generated a shipping label, and it was automatically printed with the Dymo LabelWriter API. Every morning I’d grab the printed labels, stick them on the corresponding items, and then take it to the mailbox.

(On the supplies side, our event management monolith, Clear, would automatically generate labels for event supplies once a quarter.)

A few months after we started using this library, I came across ShipStation, which provides an easy API for entering shipments, and can batch-print shipment labels from a web UI. It was technically less automated than before, but it was nice to have a way to verify what was being shipped and manually add shipments, so we switched everything over.

This worked fine for a year or so, but eventually the volume increased a lot, and they closed the post office next to our office, so we started looking for a better solution.

Second Attempt: Fully Automated Fulfillment

To fully automate things, we started looking at 3rd-party logistics providers. These are companies that operate warehouses and employ workers to receive your items, stock them on a shelf, and then pick and ship them when you call an API.

We did some research into a few, which I included at the end, but most providers were focused on e-commerce or larger volumes. We ended out selecting ShipBob because they had the most sensible pricing for this application.

Speaking of pricing, here’s how it works with ShipBob:

  • You pay a receiving fee for each shipment you send to one of their warehouses. This is on the order of $25 and is insignificant if you’re restocking once or twice a year.
  • You pay a storage fee for each uniquely addressable item. This ranges from $5/mo – $40/mo depending on how much physical space they allocate to it. If you have 1 shirt in 2 colors and 5 sizes each, that’s 1*2*5=10 unique items. So consolidate your merch variations.
  • You pay a pick/pack fee for each item someone has to pack in a box… in theory. First several are free, and most orders are 1 or 2 items.
  • You pay shipping fees which are generally going to be less than what you’re paying now, unless you have a negotiated rate.

All in all, our storage cost was about 1.5-2x what we were paying for a storage locker in Seattle, which feels reasonable to me. We were shipping enough that we had negotiated rates with UPS, so the shipping costs didn’t really change, but for most people that may offset some of the increase in storage.

And obviously this is probably saving a lot of money if you value your time highly.

What About Print-on-Demand?

If you’re going to ship a lot of swag, the pricing won’t work out, and the quality is also not amazing. (Not ideal for something you’re counting on people to wear for marketing.)

We’ve been trying Scalable Press for some of our really one-off items like a “CodeDay professional gamer” beanie we give out for our community gaming tournaments. The interface is really bad, but it can work for these use-cases.

Where We Are Now

CodeDay’s shipping infrastructure is now fully automated! For example, when a volunteer needs a new staff t-shirt, or some stickers for promotion, they just fill out a form, and a week later, it arrives in the mail. If we need to add something manually, we put it in ShipStation and it gets synced to ShipBob.

Every year, we order a year’s worth of supplies from our vendors and ship them to the warehouse. (Gorilla Screen Printing for shirts and hoodies, Zebra Prints for awards, Consolidated Label for holographic award stickers, Sticker Giant for other stickers, and GS-JJ for pins.)

We can go back to thinking about education! Everything is now magic!

Fulfillment Partner Options

Amazon FBA


  • Best prices on picking and shipping fees.
  • Presumably low rate of picking errors (since I’ve never gotten the wrong Amazon product).
  • Wide geographic distribution.
  • Have CodeDay alums working for them. 🙂


  • Complicated fee structure which is structured for e-commerce.
  • The “long-term storage fee.” Amazon wants high inventory turn-over, and fees increase substantially for items which are stored for more than a year.



  • Highly flexible.
  • Wide network of partner warehouse.
  • Have CodeDay alums working for them. 🙂


  • Highly flexible. Shipping isn’t our core competency so we want an opinionated solution.
  • Focused on higher volume sellers.

ShipBob (Our Pick)


  • Own a decent number of warehouses in key markets.
  • Not too flexible, there is a “right way” to do it.
  • Documentation and pricing is less tied to e-commerce than other providers.
  • Reasonable fee structure (pay for shelf/pallet space, picking, and shipping) which is theoretically predictable.


  • Higher picking error rate for visually similar items like shirts, even when items are barcoded.
  • Don’t consistently handle sets. A few times they have opened our sticker sets (a stapled bag labeled “THIS IS A SET DO NOT SEPARATE”) and sent people individual stickers.
  • Pricing is unpredictable in practice. Several times they have shipped a shirt in a 3′ cube box for $90, or stored a few small items on a pallet.

If you liked this post, an easy way to support our work is to follow us on LinkedIn or Twitter. We often post volunteer and mentor opportunities.

Follow us on LinkedIn or Twitter