← All posts Insights 5 min read

BatchTrack vs. Custom Zapier Flow: When to Switch

Zapier is great until it isn’t. The signals that your batch-tracking Zap has outgrown itself, the real cost comparison, and the migration sequence that doesn’t break anything.

If you sell anything that expires — supplements, cosmetics, food, pharmaceuticals, chemicals, paint — you eventually face the same decision. The simple Zapier flow you set up two years ago has grown into a 14-step Frankenstein. Customers occasionally receive expired stock. Your warehouse team has a private spreadsheet you suspect they’re maintaining out of spite. You’re wondering whether to fix the Zap or buy a real batch management plugin. Here’s how we think about that decision.

The Zapier trap

Zapier is the right tool for ~80% of small integration jobs. It’s drag-and-drop, it’s cheap to start, and it gives non-developers superpowers. But there’s a specific failure mode it falls into for inventory-sensitive operations: the workflow keeps growing until nobody understands it, the person who built it leaves, and it becomes a black box that everyone’s afraid to touch.

The batch tracking version of this story usually goes:

  1. Month 1: A single Zap that tags WooCommerce products with an expiry date from a Google Sheet.
  2. Month 3: A second Zap that emails the team when any product is within 60 days of expiry.
  3. Month 6: A third Zap that auto-applies a 20% discount to near-expiry items.
  4. Month 9: A custom Code-by-Zapier step that handles FIFO logic, because the simple discount isn’t allocating the oldest stock first.
  5. Month 12: A Zapier Path that branches by product category — supplements need a 90-day buffer, cosmetics 30 days, etc.
  6. Month 15: One Zap stops firing for unknown reasons. You spend two days debugging. The fix requires deleting and rebuilding the entire flow.

The Zap “works.” It’s just unmaintainable, slow (each step is a network hop), expensive at scale (Zapier prices on task count), and missing the one thing you actually need: traceable per-batch inventory that flows from receiving to shipment with a real audit trail.

What “batch tracking” actually means in WooCommerce

Batch tracking, done properly, has four pieces. A real plugin gives you all four. A Zap gives you one and a half.

  • Batch-level inventory: The same SKU can have 5 different batches in stock at once, each with its own expiry date and quantity. Total stock = sum of batches.
  • FIFO allocation: When an order comes in, the system automatically allocates from the oldest batch first. You don’t pick. The system does.
  • Near-expiry actions: Auto-discount, auto-hide, auto-notify, auto-flag for clearance — applied per batch, not per SKU.
  • Recall workflow: When a batch needs to be pulled, you can identify every order it shipped in, every customer who received it, and trigger the recall notice — in minutes, not days.

That fourth piece is non-negotiable for regulated industries (cosmetics, supplements, food, pharma) and increasingly important everywhere else as consumers expect transparency about product safety.

The decision framework

Here’s the test we walk customers through. Score yourself honestly.

QuestionStay with Zapier if…Switch to a real plugin if…
How many SKUs need batch tracking?Under 2020+
How many batches in stock at any time?1–2 per SKU3+ per SKU
Regulated industry?NoYes — switch yesterday
Do you do recalls?Never had oneOnce or expecting to
How does your warehouse pick?Whatever’s on topNeeds to pick by batch
Are you near-expiry discounting?Manually, rarelyYes, programmatically
Monthly Zapier task count?Under 1,0005,000+

If you score “switch” on three or more rows, the Zap is costing you more than it’s saving — in time, in errors, and in the customer trust you lose every time someone receives an expired product.

The real cost comparison

Zapier looks cheaper on paper. It usually isn’t, once you count everything.

Cost lineZapier flowPlugin (e.g. BatchTrack)
Licensing / subscription$240–$1,800/yr$89/yr
Build time40–80 hours over a year2–4 hours once
Maintenance~5 hours/month~30 min/month
Error cost (expired ships)2–5 per year × refund + reship0
Audit / compliance supportManual export from sheetsOne-click report
Recall execution time2–5 days15 minutes

Migrating from Zapier to a real plugin

If you decide to switch, don’t rip out the Zap on day one. Run them in parallel for two weeks. Here’s the order we recommend:

  1. Install and configure the plugin with batch data for your top 10 SKUs (the ones that cause the most expiry pain). Don’t try to migrate everything at once.
  2. Disable the Zapier discount/notification rules for those 10 SKUs only. Let the plugin handle them. Keep the Zap running for the rest.
  3. Run a “ghost mode” comparison for one week. Are the plugin’s near-expiry alerts firing on the same items the Zap caught? Are FIFO allocations consistent?
  4. Expand to all SKUs once you’ve validated parity. Decommission the Zap. Cancel the Zapier plan if this was its only use.
  5. Run a fake recall drill in the third week. Pick a batch, identify every order, trigger the recall notice. If it takes longer than 30 minutes, your plugin isn’t set up right.

Where this leaves you

Zapier is a great tool until it isn’t. The signal that you’ve crossed the line is when you stop trusting the flow — when you find yourself double-checking the spreadsheet, when the warehouse keeps its own list, when refunds for expired stock become a normal line item. At that point, the integration is costing you operational confidence, not just task fees.

If you’re at that point and your stack is WooCommerce, BatchTrack is the plugin we built for exactly this. It’s $89/yr, installs in an afternoon, and replaces the entire Zap-and-spreadsheet system with something your warehouse will actually use. If you need bespoke recall workflows or multi-warehouse logic, our implementation team can help.

Either way: stop shipping expired stock. Your customers don’t read the fine print on returns.


Ship it

Need this in your stack?

We build, integrate, and ship — no calls, just delivery.

Start a project →