Complete Catalog Pagination
Shopify returns product lists in pages, with a maximum page size of 250. BMOS follows Shopify's cursor links until the final page instead of treating the first page as the whole store.
- Preview and Import All use the same paginated retrieval path.
- Temporary Shopify throttling and server errors receive bounded retries.
- A multi-page failure is reported as an error rather than silently returning a partial catalog as successful.
- Sync results distinguish products found, imported, updated, and failed.
Inventory Modes
Quantity and sellability are separate facts. BMOS stores the real quantity and publishes an explicit inventory_mode that tells storefronts and agents how to interpret it.
| Mode | Meaning | Availability rule |
|---|---|---|
tracked | Inventory is enforced. | Zero or below is out of stock. |
continue_selling | Orders remain allowed after inventory reaches zero. | Available at zero or negative quantity. |
untracked | No authoritative stock count is maintained. | Always available; quantity should normally be null. |
unavailable | The product is explicitly disabled. | Out of stock regardless of quantity. |
Shopify Mapping
- Shopify Continue selling when out of stock maps to
continue_selling. - A Shopify variant without inventory tracking maps to
untracked. - A tracked variant that denies sales at zero maps to
tracked. - Draft, archived, or otherwise inactive Shopify products map to
unavailable. - A product remains available when at least one imported Shopify variant is sellable.
Existing Shopify imports need one resync after this feature is deployed so BMOS can backfill the policy and tracking metadata that older imports did not retain.
Agent Feed Contract
Agent feed v0.2 and BMOS public offers expose availability, mode, and quantity together:
{
"availability": "in_stock",
"inventory_mode": "continue_selling",
"inventory_quantity": 0,
"inventory_quantity_known": true,
"inventory_tracking": false
}This is intentional: the quantity is truthfully zero, while Shopify still permits purchase. BMOS discovery and agent-shopping results use computed availability, so a sellable product is not demoted merely because its count is zero.
See Public Offers for live storefront hydration and API Docs for the full feed response.
Reconcile a Sync
- Open the Shopify connection and run Preview or Import All.
- Compare Shopify's accessible product count with the sync's found count.
- Confirm that imported + updated + failed explains the processed count.
- Review failures individually; do not interpret the imported count alone as the number Shopify returned.
- Spot-check tracked-zero, continue-selling, untracked, inactive, and multi-variant products in the BMOS feed.
If Counts Still Differ
Pagination removes the first-page cap, but Shopify Admin totals can still differ from what an app may access or import. Check:
- active, draft, and archived product statuses;
- the app's current Shopify permissions and connection health;
- duplicate or missing SKUs that update existing catalog rows;
- the difference between products found, imported, updated, and failed;
- per-product validation errors shown in the sync report.
Manual and CSV Catalogs
The same modes are available for non-Shopify products. Choose an Inventory Mode in the 51exports product editor, or add an inventory-mode CSV column containing tracked, continue_selling, untracked, or unavailable.