Exports
CSV exports of products and orders: every format, its delimiter and columns, and how its ids match the API.
All exports are CSV, UTF-8 with a BOM (EF BB BF, so Excel opens accents correctly), one header row first, \n line endings. Streamed back as text/csv; charset=utf-8 with Content-Disposition: attachment.
What the API writes differently from the dashboard download (same columns otherwise):
- product ids are
prod_<hex>, exactly as inGET /products(the dashboard file has the bare hex id); - prices have exactly 2 decimals as text (
"15.90"), like the API; - order exports end with the API order id and the channel references (columns below).
A products file exported through the API can be re-imported with POST /imports (csv): the prod_… ids are recognised, so existing products are updated, not duplicated.
Values: text fields that may contain the delimiter are wrapped in "…"; a " inside them becomes '; # is removed from every row (legacy compatibility). Empty cell = no value.
Products — format=standard (default)
Delimiter ,. One row per variant; product-level columns (title, description, option names, images, brand, tags, category, weight, dimensions) are filled on the product's first row only, the following variant rows repeat only id and the variant columns.
| Column | Meaning | Example |
|---|---|---|
id | Product id (prod_…), on every row | prod_6ad22d0ee891b034a5693aa0 |
title | Product title (first row) | Ceramic mug |
description | Product description (HTML allowed, first row) | "<p>Hand made</p>" |
option_1_name | First option name (first row) | Size |
option_1_value | This variant's value | M |
option_2_name / option_2_value | Second option | Color / Blue |
option_3_name / option_3_value | Third option | |
sku | Variant SKU | TSHIRT-M-BLUE |
gtin | Variant barcode (EAN/UPC) | 0080694175826 |
asin | Amazon ASIN | B009DEA0SQ |
quantity | Stock (0 when empty) | 25 |
price | Price in the store currency, 2 decimals | 15.90 |
image_link | Main product image URL (first row) | https://…/a.jpg |
additional_image_link | Other product image URLs, comma-separated inside quotes (first row) | |
variant_image_link | This variant's own image | |
variant_additional_image_link | This variant's other images | |
brand | Brand (first row) | Acme |
tags | Tags, comma-separated inside quotes (first row) | "mug,kitchen" |
category | Seller's own category label (first row) | Kitchen |
weight / weight_unit | Weight and unit (first row) | 0.4 / kg |
height / width / length / dimensions_units | Dimensions and unit (first row) | 10 / 8 / 8 / cm |
Products — format=inventory
Delimiter ,. One row per variant. Stock and price focused.
| Column | Meaning | Example |
|---|---|---|
id | Product id (prod_…) | prod_6ad22d0ee891b034a5693aa0 |
name | Product title (first row of the product only) | Cotton T-shirt |
option_1_name … option_3_value | As in standard | |
sku, gtin, asin | As in standard | |
quantity | Stock | 3 |
price | Price, 2 decimals | 19.90 |
variant_image_link, variant_additional_image_link | As in standard |
Products — format=google
Delimiter | (pipe; | and # are removed from titles and descriptions). One row per product, built from its first variant (Google Merchant Center feed). Products that require attention are left out.
| Column | Meaning | Example |
|---|---|---|
id | Offer id: the first variant's SKU, else the product id (prod_…) | MUG-1 |
title | Title (line breaks removed) | Ceramic mug |
description | Description as plain text (HTML stripped, line breaks removed) | Hand made |
link | The product's URL on the first marketplace it's listed on, else its Nembol storefront page | https://nembolitalia.myshopify.com/products/ceramic-mug |
image_link | Main image | https://…/a.jpg |
additional_image_link | Other images, comma-separated | |
availability | Always in stock | in stock |
price | First variant's price, 2 decimals, no currency (add it in Merchant Center; it's the store currency) | 15.90 |
brand | Brand | Acme |
gtin | First variant's barcode | 0080694175826 |
condition | Always new | new |
google_product_category | Always empty (set it in Merchant Center) |
Orders — format=standard (default)
Delimiter ; (semicolon). One row per order line; order-level columns are on the order's first row only.
| Column | Meaning | Example |
|---|---|---|
Order | The order number the channel shows to the seller (Shopify "#1011" → 1011), on every row | 1011 |
Channel | Channel (first row) | shopify |
Date | Order date YYYY-MM-DD HH:mm:ss (first row) | 2026-10-16 21:00:00 |
Title | Line title | Cotton T-shirt |
SKU | Line SKU | TSHIRT-S-RED |
Variant | Variant name | S / Red |
Quantity | Quantity | 1 |
Item price | Unit price, 2 decimals | 9.90 |
Total price | Sum of the lines (first row) | 19.80 |
Address1, Address2, City, Zip, Province, Country | Shipping address (first row) | |
Email, Name, Phone | Buyer (first row) | |
Currency | Order currency (first row) | USD |
Subtotal, Shipping, Discount, Tax | Money breakdown when the channel reports it (first row; empty for orders imported before tax capture) | 19.80 / 5.00 / 0.00 / 1.60 |
Tax remitted by | seller, or the marketplace that collected the tax (e.g. etsy) | seller |
Order total | What the buyer paid (first row) | 26.40 |
Order ID | API only: the order id in the API (ord_…, same as GET /orders), on every row | ord_057ca3ae7912e009d01612d7 |
Order ID on channel | API only: the channel's own order id, = order_id_on_channel in the API, on every row | 18968716083351 |
Status | API only: the order's status, as status in GET /orders (awaiting_shipment, shipped, canceled, refunded…), on every row. Canceled and refunded orders are in this file: filter on this column for sales totals | shipped |
Orders — format=quickbooks
Delimiter ,. QuickBooks Online invoice-import layout (Settings → Import data → Invoices): one row per order line, the invoice columns repeated on each row. The required QuickBooks columns are unchanged; the API appends two columns at the end, which the QuickBooks mapping screen lets you skip. Canceled and refunded orders are left out, so they never become invoices; partially refunded orders stay, at their original amounts (record the refund in QuickBooks).
| Column | Meaning | Example |
|---|---|---|
InvoiceNo | <channel>-<channel order id> (unique per channel order) | shopify-18968716083351 |
Customer | Buyer name, else email, else <channel> buyer | Test Buyer |
InvoiceDate / DueDate | Order date YYYY-MM-DD (marketplace orders are already paid: due on the invoice date) | 2026-10-16 |
Item(Product/Service) | SKU, else title (≤ 100 chars) | TSHIRT-S-RED |
ItemDescription | Title and variant | Cotton T-shirt — S / Red |
ItemQuantity | Quantity | 1 |
ItemRate | Unit price, 2 decimals | 9.90 |
ItemAmount | Rate × quantity, 2 decimals | 9.90 |
Currency | Line currency | USD |
ItemTaxAmount | Order tax, on the order's first row only | 1.60 |
OrderId | API only: API order id (ord_…), on every row | ord_057ca3ae7912e009d01612d7 |
OrderNumber | API only: the number the channel shows (1011) | 1011 |
One order, three references
| Where | Value for Shopify order #1011 |
|---|---|
API order id (GET /orders, exports Order ID / OrderId) | ord_057ca3ae7912e009d01612d7 |
Channel's own id (order_id_on_channel, standard Order ID on channel, inside QuickBooks InvoiceNo) | 18968716083351 |
Number the seller sees on the channel (API number, standard Order, QuickBooks OrderNumber) | 1011 |
Match exports to the API with Order ID / OrderId (orders) and id (products).
Last updated on October 19, 2026
Need help?
Email us and a human replies, usually within one business day.