Operations
Products & cross-channel inventory
One product record owns the master stock level. Channel listings are projections of that record, and CrowPrime's job is to keep the projections truthful without oversell.
On this page
Catalog structure
| Level | Holds | Example |
|---|---|---|
| Product | Title, description, brand, images, cost price, default VAT rate | Ceramic mug |
| Variant | Own SKU, barcode, attributes, own stock level | Ceramic mug / blue / 350ml |
| Listing | Channel, channel item ID, channel price and title override, sync flags | eBay item 1234567890 |
Product
- Holds
- Title, description, brand, images, cost price, default VAT rate
- Example
- Ceramic mug
Variant
- Holds
- Own SKU, barcode, attributes, own stock level
- Example
- Ceramic mug / blue / 350ml
Listing
- Holds
- Channel, channel item ID, channel price and title override, sync flags
- Example
- eBay item 1234567890
Products without variants still have exactly one implicit variant, so every sellable unit always has a SKU. SKUs must be unique inside the organization.
Linking channel listings
- 1
Automatic match on import
Imported listings are matched to existing variants by exact SKU, then by barcode.
- 2
Manual link
Unmatched listings land in the Unlinked tab; pick the correct variant or create a product from the listing.
- 3
Channel SKU aliases
Where a channel enforces a different SKU, add it as an alias so future imports match automatically.
Important
Linking two different physical items to one variant will oversell. Review the Unlinked tab before enabling sync after a large import.
How inventory sync works
- Inbound: an order, cancellation or manual channel edit changes availability; CrowPrime records the movement against the master stock.
- Outbound: whenever the master stock changes, an update is queued for every linked, sync-enabled listing.
- Debouncing: rapid successive changes to the same variant are collapsed into a single push carrying the latest quantity.
- Ordering: pushes are serialized per listing so an older value can never overwrite a newer one.
- Verification: a nightly reconciliation compares channel quantities with CrowPrime and reports drift.
Effective quantity formula
pushed_quantity = max(
0,
on_hand
- reserved_for_unshipped_orders
- safety_buffer
)Buffers, thresholds and bundles
| Setting | Scope | Purpose |
|---|---|---|
| Safety buffer | Organization, channel or variant | Holds back units to absorb sync latency or offline sales |
| Low-stock threshold | Variant | Drives the dashboard alert and report flag |
| Max listed quantity | Listing | Caps how much is exposed on a channel |
| Bundle components | Product | Availability is derived from the scarcest component |
| Sync enabled | Listing | Turn a single listing off without unlinking it |
Safety buffer
- Scope
- Organization, channel or variant
- Purpose
- Holds back units to absorb sync latency or offline sales
Low-stock threshold
- Scope
- Variant
- Purpose
- Drives the dashboard alert and report flag
Max listed quantity
- Scope
- Listing
- Purpose
- Caps how much is exposed on a channel
Bundle components
- Scope
- Product
- Purpose
- Availability is derived from the scarcest component
Sync enabled
- Scope
- Listing
- Purpose
- Turn a single listing off without unlinking it
Bulk editing and import
- Filter the product list, select rows and apply a bulk action: set stock, adjust stock by delta, change price, set VAT rate, enable or disable sync.
- CSV import creates and updates products by SKU; a dry-run preview reports the rows that would change before anything is written.
- Export produces the same column set, so export → edit → import is a supported round trip.
sku,title,variant,on_hand,cost_price,price,vat_rate,barcode
MUG-BLU-350,Ceramic mug,Blue / 350ml,42,4.20,14.90,19,4006381333931
MUG-RED-350,Ceramic mug,Red / 350ml,17,4.20,14.90,19,4006381333948Conflicts and failures
| Situation | CrowPrime behavior |
|---|---|
| Two channels sell the last unit simultaneously | Both orders are imported; the second is flagged as oversold in Needs attention so you can refund or restock |
| Quantity edited directly on the marketplace | The nightly reconciliation reports drift and re-pushes the CrowPrime value, which is authoritative |
| Channel rejects a push | Retried with backoff; after repeated failure the listing is flagged with the channel error message |
| Variant unlinked while a push is queued | The queued push is discarded |
Two channels sell the last unit simultaneously
- CrowPrime behavior
- Both orders are imported; the second is flagged as oversold in Needs attention so you can refund or restock
Quantity edited directly on the marketplace
- CrowPrime behavior
- The nightly reconciliation reports drift and re-pushes the CrowPrime value, which is authoritative
Channel rejects a push
- CrowPrime behavior
- Retried with backoff; after repeated failure the listing is flagged with the channel error message
Variant unlinked while a push is queued
- CrowPrime behavior
- The queued push is discarded