Import & Connectors
If you can export it, you can start.
Start with a documented import contract that works across established, regional and custom platforms, then connect the channels in your operating scope.
The import contract
Five files, one contract.
v0
Every import goes through staging and preview before it is committed. Nothing lands in your catalogue unchecked, and every committed import is reversible.
CSV or JSON Lines, UTF-8, one file per entity. Published now, at v0, so your team can validate an export against the same rules used during onboarding.
Download the contract (v0)ordersone row per order
- order_idThe id the channel uses. Unique per channel.required
- channelWhere the order came from: shop, marketplace, B2B.required
- marketThe country the goods are placed in — not the buyer's language.required
- currencyISO 4217, three letters.required
- total_grossOrder total including tax, in the order's currency.required
- total_netOrder total excluding tax.required
- total_taxTax total, so the two above can be reconciled rather than trusted.required
- statusThe channel's own status string. Mapped on import, never overwritten.required
- placed_atISO 8601 with an offset. Local time without one cannot be reconciled.required
- updated_atISO 8601 with an offset.
order_linesone row per line of an order
- order_idForeign key to orders.required
- line_idStable within the order, so a re-import updates rather than duplicates.required
- skuYour SKU. Matched to a variant in the product master.required
- gtinGTIN or EAN, where the channel carries one.
- quantityInteger. Negative quantities belong in refunds.required
- unit_price_netPer unit, excluding tax.required
- tax_ratePercentage applied to the line.required
refundsone row per refunded amount
- order_idForeign key to orders.required
- line_idEmpty for an order-level refund.
- amount_grossPositive number; the sign is carried by the entity, not the value.required
- reasonThe channel's reason code, or free text.
- refunded_atISO 8601 with an offset.required
customersone row per customer, only where you already hold the data
- customer_idYour id, or the channel's. Pseudonymous is fine.required
- typeB2C or B2B. Drives price context and tax treatment.required
- countryISO 3166-1 alpha-2.required
- vat_idB2B only, for reverse-charge treatment.
productsone row per sellable variant
- skuThe variant's identifier. Unique in your catalogue.required
- gtinGTIN, EAN or UPC. Validated on import, check digit included.
- mpnManufacturer part number.
- parent_skuThe product master this variant belongs to. Empty for a single-variant product.
- titleOne column per locale: title.en, title.ro, title.es.required
- attributesOne column per attribute, per locale, in the same key.locale shape.
- priceOne column per price context: price.retail.EUR, price.b2b.EUR.
The import path
Export, staging, preview, commit — and reversible.
Staging and preview
Nothing is written until you say so.
The rejected rows are the point. An import that silently accepts a bad check digit is how a catalogue acquires a suppressed listing three weeks later; one that names the row, the column and the rule is how it does not.
- 5 214Parsed
- 312Create
- 4 881Update
- 21Reject
- row 1 942 · gtin8412345678900Check digit does not match — expected 4
- row 2 118 · title.ro—Required for a variant sold on a Romanian channel
Preview only. Nothing is written until you commit — and a commit is reversible.
Connector directory
Find the systems in your operating stack.
Browse commerce platforms, marketplaces and file-based sources by role and market, then confirm the exact data flows required for your implementation.
Browse the integrationsFAQ
Questions people actually ask
Why start with an import contract?
Because European commerce operations often depend on regional or custom platforms as well as well-known storefronts. A documented contract gives every source the same mapping, validation and staging path.
How do I know an import is safe?
Staging, preview, commit — in that order. The file is parsed and validated against the contract without touching your catalogue, you see exactly what would change and what would be rejected and why, and only then does anything land. A committed import is reversible.
What about webhooks?
A webhook inbox: events land, are reconciled, and only then is anything written back. An integration that writes on receipt is an integration that writes the wrong thing during an outage.
Can you support a connector outside the directory?
Share the system, available export or API, required data flows and target channels. We will assess whether the documented import path covers it or whether a dedicated connector belongs in the implementation scope.
Map your data sources before implementation starts.
Tell us which systems hold products, inventory, orders, customers and refunds. We will map the right import and connector path.