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.

Agentic Task
ShipHeroShopifySlackOperationsData SyncNotifications & AlertsDaily Digests
PromptCreate

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

Inventory reconciliation, Tue 6:00am. 4 SKUs out of sync across 812 checked. Oversell risk, fix first 1. TEE-BLK-L: Shopify 14, ShipHero 0, gap 14, about $420 at risk. Looks like a stalled sync. ShipHero shipped the last units on Friday and Shopify never came down, so the store is still selling these. Everything else 2. MUG-CRM-12: Shopify 6, ShipHero 58, gap 52, about $1,040 of sellable stock hidden from shoppers. The stock is at the Reno warehouse and Shopify is only reading the Austin location. 3. SOCK-WHT-M: Shopify 33, ShipHero 31, gap 2, about $36. Small manual adjustment in ShipHero yesterday, low priority. 4. BUNDLE-GIFT-A: in Shopify, no matching SKU in ShipHero. Unmapped SKU, so it has never reconciled once. Reply with a SKU and I will set Shopify to match ShipHero.

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?
Any SKU where the quantity ShipHero holds in the warehouse does not match the quantity Shopify is showing for that same SKU at the matching location. SKUs that agree are left out of the message, so a clean morning means a very short report.
Will it change my inventory automatically?
No. It reports first and waits. Nothing is written back to Shopify until you confirm the specific SKU you want corrected, and only then does it set the Shopify count to match the warehouse.
What if a SKU exists in one system but not the other?
That gets reported as a finding rather than skipped. An unmatched SKU is often the root cause of drift, so it is called out by name instead of quietly ignored.
Does this work with more than one warehouse or location?
Yes. Tell it which ShipHero warehouse pairs with which Shopify location and it compares each pair separately, rather than lumping all your stock into one number.
Why check every morning if I already have a sync app running?
Sync apps miss things. An update that never arrives, or two apps overwriting each other, leaves a small gap that grows quietly until a customer buys something you cannot ship. A daily check catches it while it is still cheap to fix.

Related templates

Auto-fix your calendar when a flight slips, and flag what's at risk

When your flight moves, your calendar times get corrected automatically and you get a Slack note naming the meetings you're about to miss.

Google Calendar
AviationStack
Slack
Agentic Task
Trace phishing emails to the sending IP and report abuse

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.

AbuseIPDB
Gmail
Slack
Agentic Task
Turn procurement portal tenders into CRM deals each morning

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.

Anchor Browser
Google Sheets
HubSpot
+1
Agentic Task
Turn each week's football fixtures into a venue staffing plan

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.

API-Sports
Google Calendar
Slack
Agentic Task
Auto-correct address typos and hold the orders you can't fix

Every weekday morning, harmless address typos get fixed on unshipped orders, and anything undeliverable is held while the customer confirms it.

Shippo
Shopify
Gmail
+1
Agentic Task
Turn 5 star Yotpo reviews into a weekly marketing content queue

Every Tuesday we pull your best new reviews, draft social captions, email testimonials and product page quotes, then stage them in Notion for approval.

Yotpo
Notion
Slack
Agentic Task

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.