Every dropshipping operation we have looked at had the same bug: three stock numbers, all different, all defensible.
Place one: the supplier's spreadsheet
The supplier's stock file is usually a manual export, refreshed when someone remembers. It says 4,800 units. The physical count is 3,100 because 1,700 are allocated to another buyer's order that has not shipped.
available = on_hand - allocated. Most supplier exports give you on_hand and call it stock.
Place two: your own buffer
You hold a safety buffer so a stockout does not kill the listing. The buffer is subtracted somewhere in your pipeline and not subtracted somewhere else. Two weeks later a customer buys the buffer.
Place three: the marketplace cache
Marketplace inventory APIs are eventually consistent. A push at 10:00 shows at 10:04, sometimes. If your sync loop reads back to confirm, it reads stale data and concludes the write failed, so it writes again.
What we changed
One authoritative number, computed not stored. The sync job computes sellable = supplier_available - buffer - pending_orders on every run. Nothing is cached between runs, so there is no second place for the truth to live.
Idempotent pushes keyed on a hash. Each push carries hash(sku, qty). A retry with the same hash is a no-op server-side. This ends the double-write problem without needing read-back confirmation.
A reconciliation report, not a dashboard. Once a day, list SKUs where the three numbers disagree by more than 5%. That report is the only thing anyone reads.
Allocation made explicit. We ask suppliers for allocated units per SKU in the same export. Where they cannot provide it, we assume 15% allocated as a standing haircut, which is closer than zero.
The cost of getting it wrong
A stockout on a live listing is not just a lost sale. It resets the listing's sales history signal, which on most marketplaces takes weeks to rebuild. The inventory cost of holding a buffer is smaller than the ranking cost of running out.
Where the buffer belongs
The buffer size is a commercial decision, not a technical one, and it interacts with how much you buy at once. Small frequent buys shrink the buffer and raise the per-unit cost; large infrequent buys do the opposite. That trade-off is the core of dropshipping versus bulk wholesale for toys.
One thing dropshipping does not change: the safety obligations stay with whoever sells to the consumer. Age grading and small-parts risk are covered in our note on squishy toy safety for kids.
The rule
Never store a stock number you can compute. Every stored number is a future disagreement.

