| handlerequired | 1 | handle | key | Groups the rows of one product, which must be contiguous. Any text; it seeds the slug when the product is created. Required on every row. | ceramic-mug |
|---|
| id | 2 | uuid | product | Adstic Orb product uuid. Blank creates a product; filled updates that product, which must belong to your tenant. | — |
|---|
| namerequired | 3 | text | product | The product title. Required on the first row of each handle group. | Ceramic mug |
|---|
| subtitle | 4 | text | product | Short line shown under the title. Optional. | 100% cotton |
|---|
| description | 5 | longtext | product | Plain text or HTML. May contain commas, quotes and newlines — the cell is RFC 4180 quoted, so never split the file by line. | Soft tee. Wash at 30°, inside out. |
|---|
| status | 6 | enum | product | active or draft. Blank means active. A digital product is always imported as draft regardless of this cell. | draft |
|---|
| product_type | 7 | enum | product | physical or digital. Blank means physical. | digital |
|---|
| pricerequired | 8 | money | product | Required, >= 0. Major units with a dot decimal mark — 19.90, never 1990 and never a comma. Stored as price_cents. | 29.90 |
|---|
| compare_at_price | 9 | money | product | The reference ("was") price. Must be strictly greater than price when set. | 34.90 |
|---|
| cost_price | 10 | money | product | Your cost, stored as cost_cents. Never shown to customers. | 11.20 |
|---|
| currency | 11 | text | product | ISO 4217 code. Blank means EUR. | EUR |
|---|
| sku | 12 | text | product | Product-level SKU, used when the product has no variants. | TSH |
|---|
| barcode | 13 | text | product | EAN / UPC / ISBN or your own reference. Text, so leading zeros survive. | 0012345678905 |
|---|
| stock | 14 | integer | product | Whole number. Blank means stock is not tracked (NULL), which is not the same as 0. | 40 |
|---|
| continue_selling | 15 | boolean | product | TRUE keeps selling at zero stock. Blank means FALSE. | FALSE |
|---|
| weight_grams | 16 | integer | product | Integer grams, no unit text and no decimals. | 350 |
|---|
| brand | 17 | text | product | Free text. | Adstic |
|---|
| categories | 18 | categories | product | Pipe-separated list of paths; levels inside a path are joined with " > ". Maximum depth 3. Categories that do not exist yet are created. | Home > Kitchen > Mugs|Sale |
|---|
| tags | 19 | list | product | Pipe-separated. Tags that do not exist yet are created. | cotton|summer |
|---|
| image_url | 20 | url | product | Main image, http(s). Stored as given — Adstic Orb does not re-host it. | https://example.com/t.jpg |
|---|
| gallery | 21 | urllist | product | Pipe-separated http(s) URLs for the remaining images. There are no extra image rows in this format. | https://example.com/t1.jpg|https://example.com/t2.jpg |
|---|
| video_url | 22 | url | product | Optional product video, http(s). | — |
|---|
| seo_title | 23 | text | product | Up to 70 characters. | Logo T-shirt |
|---|
| seo_description | 24 | text | product | Up to 160 characters. | Soft cotton t-shirt. |
|---|
| variant_label | 25 | text | product | The NAME of the choice, on the product row: "Size", or "Color / Size" when several Shopify options were combined into one axis. | Color / Size |
|---|
| variant_name | 26 | text | variant | This variant's value: "L", or "Red / L" for a combined axis. Blank on every row of a product means the product has no variants. | Black / M |
|---|
| variant_sku | 27 | text | variant | SKU of this variant. | TSH-BK-M |
|---|
| variant_barcode | 28 | text | variant | Barcode of this variant. Text, so leading zeros survive. | 0012345678912 |
|---|
| variant_price | 29 | money | variant | Major units. Blank falls back to the product price. | 31.90 |
|---|
| variant_compare_at_price | 30 | money | variant | Reference price for this variant. Must exceed the price that applies to it. | — |
|---|
| variant_stock | 31 | integer | variant | Whole number. Blank means this variant is not stock-tracked. | 5 |
|---|
| image_altnew in v2 | 32 | text | product | Alt text for the main image. From Shopify's "Image alt text" on the product's first image row. | Black t-shirt with the logo on the front |
|---|
| gallery_altnew in v2 | 33 | list | product | Pipe-separated alt texts, POSITIONAL with gallery: entry 2 describes gallery URL 2. An empty entry is a picture with no alt, so "a||c" is legitimate and must not be compacted. More entries than pictures is an error. | Front||Seam detail |
|---|
| requires_shippingnew in v2 | 34 | boolean | product | FALSE for something that is never posted. Blank means TRUE, unlike most columns here — so a Shopify FALSE has to be written out, not left empty. | TRUE |
|---|
| weight_display_unitnew in v2 | 35 | enum | product | Display unit only; weight_grams stays the stored value. | g |
|---|
| unit_price_measurenew in v2 | 36 | decimal | product | Pack quantity for the EU unit price, greater than zero. All four unit-price columns go together or none do. | 500 |
|---|
| unit_price_measure_unitnew in v2 | 37 | enum | product | Unit of the pack quantity. Must measure the same thing as the base unit — 500 ml cannot be quoted per 1 kg. | g |
|---|
| unit_price_base_measurenew in v2 | 38 | decimal | product | The base the price is quoted per, greater than zero. | 1 |
|---|
| unit_price_base_unitnew in v2 | 39 | enum | product | Unit of the base measure, same kind as the pack unit. | kg |
|---|
| vat_ratenew in v2 | 40 | decimal | product | Per-product VAT percent, 0 or more and under 100. BLANK means the shop's own rate, which is not the same as 0 — 0 is a zero-rated supply. | 20 |
|---|
| charge_taxnew in v2 | 41 | boolean | product | FALSE marks a VAT-exempt supply. Blank means TRUE. | TRUE |
|---|
| tax_codenew in v2 | 42 | text | product | Avalara or Shopify Tax code, straight from Shopify's own column. | A9277 |
|---|
| package_lengthnew in v2 | 43 | decimal | product | Packed length, expressed in package_dimension_unit. The importer converts to millimetres, so the unit is required as soon as any dimension is set. | 30 |
|---|
| package_widthnew in v2 | 44 | decimal | product | Packed width, in package_dimension_unit. | 20 |
|---|
| package_heightnew in v2 | 45 | decimal | product | Packed height, in package_dimension_unit. | 3 |
|---|
| package_dimension_unitnew in v2 | 46 | enum | product | The unit the three packed dimensions are in. Required once any of them is filled: "30, 20, 3" in centimetres and in inches are parcels that differ by a factor of 2.54. | cm |
|---|
| google_categorynew in v2 | 47 | text | product | Google product category: a numeric id or the full "A > B > C" path. | Apparel & Accessories > Clothing > Shirts & Tops |
|---|
| google_gendernew in v2 | 48 | enum | product | male, female or unisex, lowercase. Shopify's own cell is free text, so "Unisex" is normalised; anything outside the list is dropped to "not set" rather than stored. | unisex |
|---|
| google_age_groupnew in v2 | 49 | enum | product | newborn, infant, toddler, kids or adult. Shopify writes prose like "Adult (13+ years old)", which is mapped to adult. | adult |
|---|
| google_mpnnew in v2 | 50 | text | product | Manufacturer part number. | TSH-12345-BK |
|---|
| google_conditionnew in v2 | 51 | enum | product | new, refurbished or used, lowercase. | new |
|---|
| google_custom_productnew in v2 | 52 | boolean | product | TRUE means no GTIN or MPN exists for this product (handmade, custom). The Adstic Orb feed then sends Google identifier_exists=no. | FALSE |
|---|
| google_custom_label_0new in v2 | 53 | text | product | Google Ads custom label 0. The five labels are positional. | Top Seller |
|---|
| google_custom_label_1new in v2 | 54 | text | product | Google Ads custom label 1. | — |
|---|
| google_custom_label_2new in v2 | 55 | text | product | Google Ads custom label 2. | — |
|---|
| google_custom_label_3new in v2 | 56 | text | product | Google Ads custom label 3. | — |
|---|
| google_custom_label_4new in v2 | 57 | text | product | Google Ads custom label 4. | — |
|---|
| google_ad_groupnew in v2 | 58 | text | product | Google Ads ad group name. Stored by Adstic Orb; not a feed attribute. | Graphic Tees |
|---|
| google_ad_labelsnew in v2 | 59 | list | product | Pipe-separated ads labels, up to ten. Shopify's cell is comma-separated, so it is re-split. | merch|tees |
|---|
| variant_image_urlnew in v2 | 60 | url | variant | This variant's own picture, http(s). Falls back to the product's. From Shopify's "Variant image URL". | https://example.com/t-bk-m.jpg |
|---|
| variant_image_altnew in v2 | 61 | text | variant | Alt text for the variant image. Shopify has no column for it — it only alt-texts product images — so this is blank from a Shopify export. | Black t-shirt, size M |
|---|
| variant_weight_gramsnew in v2 | 62 | integer | variant | Integer grams for this variant; blank falls back to the product's. Shopify's weight IS per variant, so this is where it belongs. | 180 |
|---|
| variant_cost_pricenew in v2 | 63 | money | variant | What this variant cost you, major units. Never shown to customers. From Shopify's per-variant "Cost per item". | 11.20 |
|---|
| variant_unit_price_measurenew in v2 | 64 | decimal | variant | Pack size of this variant for the unit price, greater than zero. The UNITS stay on the product: a 500 g and a 1 kg bag share a base (per 1 kg) but not a pack size. | 500 |
|---|