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

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. 1

    Automatic match on import

    Imported listings are matched to existing variants by exact SKU, then by barcode.

  2. 2

    Manual link

    Unmatched listings land in the Unlinked tab; pick the correct variant or create a product from the listing.

  3. 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

formula
pushed_quantity = max(
  0,
  on_hand
    - reserved_for_unshipped_orders
    - safety_buffer
)

Buffers, thresholds and bundles

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.
csv
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,4006381333948

Conflicts and failures

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