Catch Shopify and ShipHero stock mismatches before you oversell
Every morning at 6am, compare your storefront stock against what the warehouse actually holds and get a Slack list of only the SKUs that disagree.
Every morning at 6am, reconcile my Shopify storefront inventory against what ShipHero actually holds in the warehouse and tell me where the two disagree. Run this on a cron trigger.
Start on the ShipHero side. Use List warehouse products to pull on-hand and available quantity for every SKU in the warehouse I fulfill from. Stock in ShipHero lives on the warehouse product record and is scoped to a warehouse, so pass the warehouse id and keep the results grouped per warehouse rather than summed. Use Get product when you need extra detail on an individual SKU, such as its price or whether it is a kit.
Then pull the Shopify side. Use List Products and List Variants to build a map from SKU to that variant's inventory item id, then use List Inventory Levels for those inventory items to read the quantity at each location. I will tell you which ShipHero warehouse maps to which Shopify location. Compare each warehouse against its matching location so we are comparing like for like, not summing quantities across every location.
Join the two sides on SKU and work out where they disagree. SKUs where the numbers match are not interesting, leave them out entirely. A SKU that exists on one side but not the other is a real finding, not an error to swallow, so report it as an unmapped or missing SKU.
Post the result to Slack with Send a Message. For each out-of-sync SKU, give me the ShipHero quantity, the Shopify quantity, the gap, and your best assessment of the cause. Causes worth considering: the SKU is unmapped or missing on one side, a sync has stalled and Shopify is holding a stale number, stock is sitting in a location Shopify is not reading, or someone made a recent manual adjustment. Commit to the most likely explanation and say why you think it, rather than just showing me two numbers side by side.
Rank the discrepancies by revenue at risk, using the variant price and the size of the gap. Call out first, at the top of the message, any SKU that Shopify still shows as in stock while ShipHero has none, because those are the ones that turn into oversells. If everything reconciles, say so in a single line instead of sending an empty report.
Do not write anything back on your own. If I reply confirming a correction for a specific SKU, use Set Inventory Level to set the Shopify inventory level for that inventory item at that location to match the ShipHero quantity, then confirm back exactly what you changed.
Example output
What does this prompt do?
- Runs every morning at 6am and compares your Shopify stock counts against the quantity ShipHero actually holds in the warehouse, SKU by SKU.
- Posts a Slack message listing only the SKUs that disagree, with the warehouse number, the storefront number, and the size of the gap.
- Puts the dangerous ones first: anything your store still shows as in stock while the warehouse has none, since those are the SKUs that turn into oversells.
- Explains the likely cause of each mismatch, such as a SKU that was never matched up, a sync that stalled, stock sitting in a location your store is not reading, or a recent manual count change.
- Waits for your go-ahead before touching anything, then corrects the Shopify count to match the warehouse.
What do I need to use this?
- A Shopify store you can connect, with permission to read products and inventory, plus permission to update inventory if you want corrections applied for you.
- A ShipHero account and the warehouse you fulfill from.
- The Shopify location that corresponds to that ShipHero warehouse, so the two sides are compared like for like.
- A Slack workspace and the channel or direct message where the morning report should land.
How can I customize it?
- Change the time. 6am means the list is waiting before the day's orders come in, but any schedule works.
- Set a tolerance. If small counting differences are normal for you, ignore gaps of one or two units and only flag real drift.
- Pick where it lands. A private message for a solo operator, or a shared ops channel so your fulfillment team sees it too.
- Turn the correction step off entirely if you would rather fix every count by hand.
FAQs
What counts as out of sync?
Will it change my inventory automatically?
What if a SKU exists in one system but not the other?
Does this work with more than one warehouse or location?
Why check every morning if I already have a sync app running?
Related templates
When your flight moves, your calendar times get corrected automatically and you get a Slack note naming the meetings you're about to miss.
Every 15 minutes, forwarded phishing reports get traced back to the server that really sent them, with a verdict in Slack and the worst senders reported.
Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.
Every Monday, rank the week's matches by expected demand, put the big ones on your venue calendar, and post a rota-ready summary to Slack.
Every weekday morning, harmless address typos get fixed on unshipped orders, and anything undeliverable is held while the customer confirms it.
Every Tuesday we pull your best new reviews, draft social captions, email testimonials and product page quotes, then stage them in Notion for approval.
Stop hearing about oversells from your customers.
Get a short list every morning of exactly which SKUs drifted, why they drifted, and what the gap is costing you.