May 27, 2026 by Alex Massaad · 6 min read
Case Study: How We Automated Multi-Roaster Fulfillment for Swiss Water
This is a case study on the first phase of work we did with Swiss Water Decaffeinated Coffee Inc. The work touches the parts of Shopify that off-the-shelf apps cannot reach, and it’s the kind of project we take on as a Shopify app development agency when a merchant’s operations have outgrown their platform.
The Business
Swiss Water is the global leader in chemical-free decaffeination. Their proprietary process removes 99.9% of caffeine using pure water, temperature, and time, preserving the bean’s original character. The company runs an online marketplace that connects consumers directly with a network of independent specialty roasters across North America. Each roaster sources Swiss Water green beans, roasts them to order, and ships from their own facility.
It’s a powerful discovery model. It’s also a fulfillment architecture that nothing standard supports.
The Problem
Before this project, every order on the central Shopify store required significant manual handling. The Swiss Water team would:
- Identify which roaster was responsible for each product on the order.
- Pull the order data out of Shopify into a separate workflow.
- Generate a shipping label through an unrelated interface.
- Email the label to the roaster for fulfillment.
That ran roughly per order, scaling with volume. Beyond labor cost, there were two structural issues.
Shipping rates were guesses. Because each roaster ships from a different origin, a single flat rate either ate margin on long-distance orders or inflated price enough to push checkout abandonment. There was no version of a flat rate that worked across the network.
The workflow did not scale. As order volume climbed, the marketplace was hitting a ceiling defined by how many orders one team could route manually. Growth would force a proportional increase in operational headcount.
The Constraints
A few constraints shaped the approach:
- Shopify had to stay the source of truth. The marketplace, customer data, plus brand presence all sat on Shopify. Moving order management to a separate platform was off the table.
- Roasters use their own systems. Each roaster has a different fulfillment setup, label printer, plus shipping account. The solution had to fit into their existing workflows, not impose a new one.
- Day-to-day operators are marketing and operations staff, not engineers. The system had to be usable by the people who run the marketplace, without engineering involvement for routine work.
The Approach
We built a custom Shopify application designed specifically for the multi-vendor architecture.
Step 1: Make the store roaster-aware. Using Shopify Metaobjects, we modeled structured roaster profiles and linked them directly to the products each roaster fulfills. With that data structured, every product knows where it ships from.
Step 2: Replace flat rates with live carrier rates. With roaster origins in Metaobjects, the app intercepts checkout and queries live carrier APIs using the resolved origin plus the customer’s destination. The flat-rate compromise disappears. Customers see accurate shipping costs at checkout for the actual route their order will take.
Step 3: Automate the post-purchase routing. The moment an order is placed, the app receives a webhook, parses the line items, plus resolves each product to its associated roaster. It then:
- Creates the order in the correct roaster’s fulfillment queue.
- Generates a pre-paid shipping label using the exact package dimensions plus carrier service the customer selected.
- Dispatches the label directly to the roaster’s team.
Label delivery can fire instantly or batch on a schedule to align with each roaster’s production cycle. The team can change that setting per roaster without code changes.
The Results
The most important outcome is qualitative: a workflow that used to be touched by staff on every order now runs untouched.
- Manual order routing was eliminated. Orders flow from the Shopify customer checkout to the correct roaster’s queue without a human in the loop.
- Manual label generation was eliminated. Labels are produced with the right dimensions, carrier service, plus delivery cadence per roaster.
- The Swiss Water team reclaimed hundreds of hours previously spent on repetitive logistics work. That capacity moved to roaster onboarding, marketing, plus partnership growth.
- Shipping costs at checkout are now accurate to the actual route. Margin protection on long-haul orders plus reduced cart abandonment on short-haul orders.
- The marketplace can scale transaction volume without proportional operational headcount. Ten orders or ten thousand, the same zero-touch process.
Abeer Siddiqui, Marketing Manager at Swiss Water, on the working relationship:
As a team with limited technical background, we found Victoria Garland’s insight invaluable in determining the best plan to build out our automation projects. Phasing the work into digestible workstreams, paired with clear timelines and weekly calls, kept everyone on track and made the progress easy to follow.
Why Off-the-Shelf Did Not Work
Multi-vendor fulfillment apps exist on the Shopify App Store. We looked at them. They fail on this use case for a few reasons:
- Roaster-product linking is not first-class. Most multi-vendor apps assume a single vendor per order or a simple location-based split. Swiss Water has a product-level routing rule that combines roaster identity plus customer location.
- Live rates per origin are not standard. Many apps assume a single warehouse origin or apply rate modifiers without true per-origin carrier queries.
- Label dispatch to a third party is not a typical feature. Apps generate labels for the merchant. Swiss Water needed labels generated for the roaster, with credentials plus accounts that the roaster, not Swiss Water, controls.
The off-the-shelf compromise would have been three apps stitched together with manual reconciliation. The reconciliation work alone would have been more expensive than building the right system once.
What This Project Took
Roughly the shape:
- Discovery plus modeling: mapping the roaster network, plus deciding what data lived in Metaobjects versus app database.
- Storefront work: integrating live rates at checkout.
- Backend app: webhook handlers, carrier integrations, label generation, plus the roaster-facing dispatch layer.
- Admin tooling: so the Swiss Water team can manage roaster profiles, routing rules, plus dispatch settings without us.
- Roaster rollout: onboarding each fulfillment partner into the new flow with documentation plus support.
The build phased into discrete workstreams with weekly check-ins. That cadence matters for a non-technical client team. It keeps decisions visible plus prevents the project from becoming a black box.
What’s Next
This phase established the foundation. Information still only flows in one direction: orders go out to roasters. The next phase, which we’ll cover in a separate case study, layers on order synchronization plus automated tracking updates. Customers get shipping visibility with a built-in delay window to give roasters time to dispatch.
If You Are Looking at a Similar Build
A few signals that your project is in this category:
- Your fulfillment is split across multiple origins (warehouses, dropship vendors, brand partners) plus accurate shipping rates matter at checkout.
- You’re spending operational headcount on order routing that scales linearly with order volume.
- Off-the-shelf multi-vendor apps almost fit but break on one or two critical edge cases that your business actually depends on.
If that’s you, the right starting point is a discovery conversation, not a quote. Real cost depends entirely on the shape of your network, your existing app stack, plus your roadmap. We do this work as a Shopify app development agency plus the storefront side as a Shopify web design agency when the project needs both.
Send us a note with a few details on your fulfillment architecture plus current order volume, and we’ll tell you honestly whether your project shape fits ours.