Reconciliation — keeping inventory honest
Reconciliation is BulkFlow's weekly safety net. It compares what BulkFlow thinks you have (in bulk pools) vs. what Shopify thinks is available (per variant), and surfaces any drift before it becomes an oversell.
Why drift happens
Even with webhooks doing the work, inventory drifts. Common causes:
- Manual edits in Shopify — staff adjusts a variant's "available" count directly, bypassing BulkFlow
- Other apps writing to Shopify — another app pushed inventory changes that BulkFlow didn't witness
- Physical count corrections — your team counted stock, found 5 more cases of widgets than expected
- Webhook lag or drops — Shopify occasionally drops webhooks under load (rare but real)
- Returns processed outside Shopify — refund processed via direct check, no
refunds/createevent
Catching these early (weekly) is much cheaper than catching them late (after an oversell).
How to run it
- Click Reconcile in the sidebar
- Click Run Dry Run (default — no data changes, just a report)
- Review the drift report:
- - Items with no drift: green ✓
- - Items with small drift: yellow ⚠️
- - Items with major drift (>10% of pool): red ❌
- For each red/yellow row:
- - "Believe Shopify" — keep Shopify's count, update BulkFlow's pool to match
- - "Believe BulkFlow" — keep BulkFlow's pool, push BulkFlow's count back to Shopify
- - "Skip" — investigate manually, don't touch this row
- Click Apply — changes write to a new Movements entry with reason "reconciliation"
When to run it
- Once a week minimum — set a Friday afternoon calendar reminder
- After any external sync — Pull-from-Shopify operation, bulk price update via another app, etc.
- After a physical count — physical count writes its own corrections; Reconcile catches anything Shopify still disagrees about
- Before a big sale — Black Friday/Cyber Monday week, run it twice to be safe
Reading the drift columns
| Column | What it means |
|---|---|
| BulkFlow Units | What BulkFlow's bulk pool says we have |
| Shopify Available (sum) | What Shopify says is available across all pack variants, summed back to single units |
| Drift (units) | Shopify minus BulkFlow. Positive = Shopify says more. Negative = Shopify says less. |
| Drift % | Drift as a percentage of the bulk pool. >5% is usually worth a closer look. |
| Last activity | When the most recent movement happened on this item (helps you correlate). |
Recovering from a bad reconcile
Every Reconcile apply creates one Movements row with reason "reconciliation" and the full payload. Pro tier and above can reverse it in 1 click from the Movements history.
To reverse:
- Movements in sidebar
- Filter: reason = "reconciliation"
- Find the row from the bad apply
- Click the "Reverse" button on that row
- Confirm
All changes from that reconcile are undone. Useful when you reconciled with bad data (e.g., a stuck Shopify export was wrong).
Common questions
Q: Is Dry Run safe?
A: Yes — nothing changes. It only reads.
Q: Does Reconcile work with multi-location (BF+)?
A: Yes. Drift is calculated per-location so you can see which warehouse drifted from Shopify.
Q: Can I auto-apply reconcile every week?
A: No, by design. Reconciliation is a judgment call (Shopify vs BulkFlow — who's right?), and we'd rather give you a 10-minute weekly task than automate a wrong decision.
Q: I see drift but the source is obvious (a manual edit I made). Can I skip the workflow?
A: Adjust the item directly via Items → click → Adjust bulk units with reason "manual reconciliation" and skip the Reconcile flow for that one.