# Customs CSV Export in Shopify: Which File Works

> Three Shopify CSVs touch customs data and none carries all of it. Which file has HS code, origin and weight — and how to export a broker-ready set.

Canonical: https://origova.com/shopify-product-csv-hs-code

---

# Exporting customs data from Shopify: which CSV, and what's missing from each

_By [Spencer Flaherty](https://origova.com/about), founder of Origova_

The short answer, because it saves an afternoon: **Shopify has three CSV files that touch customs data and none of them carries all of it.** The product CSV has weight but no HS code and no country of origin. The inventory CSV has `HS Code` and `COO` but no weight. The duties and import taxes CSV has the two customs fields only. So a customs CSV export from Shopify is always at least two files — and adding a column to the product CSV does nothing at all.

This trips up a lot of people because the product CSV is the export everyone knows. It carries titles, variants, prices, weight — so it feels like it should carry customs data too. It does not.

> **Where does your catalog stand?** — Origova scans every variant for missing or malformed HS codes, country of origin and weight — free, at any catalog size. [Run the free scan](https://apps.shopify.com/origova)

## What each Shopify CSV actually contains

_The two exports, and which fields each carries_

|  | Product CSV | Inventory CSV |
|---|---|---|
| Where | Products > Export | Products > Inventory > Export |
| HS code | Not present | `HS Code` |
| Country of origin | Not present | `COO` |
| Weight | `Weight value (grams)` | Not its purpose |
| Requires shipping | `Requires shipping` | Not present |
| Best for | Catalogue content and pricing | Customs data and stock levels |

Shopify's own documentation describes the inventory `HS Code` column as the Harmonized System code for estimating duties and taxes for international customers, and `COO` as the country of origin using ISO country codes. Both are optional columns — which is precisely why so many catalogues have them blank.

## Why the split exists

It is not arbitrary. Shopify stores HS code and country of origin on the `InventoryItem` record rather than on the product or the variant — the developer changelog moved them there and deprecated the older `harmonizedSystemCode` metafield on product variants. The product CSV describes products; these fields are not on products.

> **This is also why the record count surprises people** — Per inventory item means per variant. A product in 6 sizes and 8 colours is 48 rows in the inventory file, each needing its own HS code and origin. A 300-product catalogue of that shape is 14,400 rows.

## The working CSV routine

1. Products > Inventory > **Export**. Pick locations and inventory states.
2. Open the file. Filter the `HS Code` and `COO` columns for blanks — this is your real workload, and it is usually smaller than the whole catalogue.
3. Fill `HS Code` by material group and `COO` by supplier. Use ISO codes for origin: `CN`, not `China`.
4. Products > Inventory > **Import**. Upload, review the summary, confirm.
5. Re-export and count remaining blanks. That number, not the confirmation screen, tells you whether it worked.

## Column formats worth getting right

_Values that pass and values that fail_

| Column | Good | Fails |
|---|---|---|
| `HS Code` | `610910`, `392690` | `6109` (too short), `61091` (odd length), `HS610910` |
| `COO` | `CN`, `IN`, `GB`, `US` | `China`, `UK`, `Made in India`, `EU` |

A code shorter than six digits or with an odd digit count is the malformation behind Shopify's ["Harmonized code is invalid"](/harmonized-code-is-invalid) error. It passes a spreadsheet cell and fails at the label.

## If the CSV route is not for you

_Alternatives to the inventory CSV_

| Route | When it is better |
|---|---|
| Bulk editor | Fewer than ~50 products; no spreadsheet round-trip |
| [Matrixify](/matrixify-hs-codes-shopify) | You are moving other fields too, or need scheduled imports |
| [Origova](/) | You need the list of what is blank before you start |
| Product page, one at a time | A handful of new SKUs |

For all five approaches side by side, see [bulk-adding HS codes in Shopify](/bulk-edit-hs-codes-shopify).

> **Not customs advice** — Origova scans and bulk-fixes the customs data in your Shopify catalog. It does not replace a licensed customs broker and it does not make the final classification decision for you. Classification depends on the product's material, use, composition and origin. Verify classifications with the [HTS](https://hts.usitc.gov), [CBP rulings](https://rulings.cbp.gov), or a licensed customs broker.

## The three-CSV problem, in one table

Shopify documents a third export most merchants never meet: a **duties and import taxes CSV** whose stated purpose is updating HS codes and country of origin, and nothing else. Together the three look like this:

File| Weight| HS code| Country of origin| Where  
---|---|---|---|---  
Product CSV| `Weight value (grams)`| —| —| Products > Export  
Inventory CSV| —| `HS Code`| `COO` (ISO)| Products > Inventory > Export  
Duties & import taxes CSV| —| Yes| Yes| Markets duties settings  
  
Shopify also documents that the product CSV's column format is fixed — Collection is the only column you can add without breaking the file — so merging the customs fields into the file that has weight is not an option. That is the whole reason a customs cleanup is never one round-trip.

## What a broker or 3PL actually asks for

The reason to export customs data is usually not to re-import it. It is to hand it to someone: a customs broker preparing entries, a freight forwarder, a 3PL onboarding your catalog, or an accountant reconciling duty charges.

What they want is one file, one row per shippable unit, with the identifiers to match it back to a shipment. Neither native export gives that directly — the inventory CSV is missing weight, the product CSV is missing the customs fields, and both are shaped for re-import rather than for reading.

## Exporting a customs-ready CSV from Origova

Origova's export is built for that handoff rather than for re-import. It writes **one row per variant**, each carrying its parent product id, with the columns `id`, `title`, `sku`, `countryOfOrigin`, `hsCode`, `weight`, `weightUnit`, `material`, `description`, `productCategory`, `parentProductId` and `isActive` — all three customs fields in the same file.

- **Descriptions come out as plain text** with the HTML stripped, because a broker reading a spreadsheet does not want markup.
- **Weights carry their unit** — written as `10 lb` rather than a bare number in a unit you have to guess.
- **Per-issue slices** are available as well as the full catalog, so you can hand over exactly the products that were missing an HS code rather than all 4,000.
- **Open issues are flagged before export**, so you confirm deliberately if you are exporting an incomplete set.
- Every export is kept in a history list you can re-download from. [The export step in the docs →](https://origova.com/docs)

## Frequently asked questions

### Does the Shopify product CSV have an HS code column?

No. Shopify's product CSV documentation lists Requires shipping, Weight value (grams), Weight unit for display and Fulfillment service as the shipping-related columns. There is no HS code or country of origin column.

### Which Shopify CSV does have HS codes?

The inventory CSV. Shopify documents an HS Code column, described as the Harmonized System code for estimating duties and taxes, and a COO column, described as the country of origin using ISO country codes. Both are optional fields in that file.

### Where do I export the inventory CSV from?

Products > Inventory > Export. Choose the locations and inventory states, then export. Importing is the mirror: Products > Inventory > Import, upload, review the summary and confirm.

### Can I add an HS code column to a product CSV myself?

Adding the column will not make Shopify read it. The product importer maps a documented set of headers; unrecognised columns are ignored. Use the inventory CSV, the bulk editor or an app instead.

### Why is the HS code on the inventory file rather than the product file?

Because Shopify stores it on the InventoryItem record, not the product. Shopify's developer changelog moved HS code and country of origin to InventoryItem and deprecated the older product-variant metafield.

### How do I export customs information from Shopify?

Products > Inventory > Export gives you the HS Code and COO columns. Weight is not in that file — it comes from the separate product export. There is no single native export that carries all three.

### Can I export HS code, country of origin and weight in one CSV?

Not natively. The inventory CSV carries the two customs fields, the product CSV carries weight, and the duties CSV carries the customs fields only. Origova’s export writes all three into one file, one row per variant.

### What format does country of origin need to be in a CSV?

ISO 3166-1 alpha-2 codes — two letters, like US, CN or DE. Country names such as "United States" are not valid values and will fail on import.

### Will a customs broker accept a Shopify CSV export?

They will read it, but a raw inventory export is missing weight and carries columns shaped for re-import rather than for review. Expect to reshape it, or export a file that already carries all three fields with descriptions as plain text.

Sources for this page: [Shopify: Product CSV columns](https://help.shopify.com/en/manual/products/import-export/using-csv) · [Shopify: Inventory CSV](https://help.shopify.com/en/manual/products/inventory/setup/inventory-csv) · [Shopify: Adding HS codes to your products](https://help.shopify.com/en/manual/international/shipping/hs-codes) · [Shopify: Collecting international duties and import taxes at checkout](https://help.shopify.com/en/manual/international/duties-and-import-taxes/charging-duties) (the duties and import taxes CSV) · [Matrixify: HS code and origin in bulk](https://matrixify.app/tutorials/update-shopify-product-hs-code-and-country-of-origin-in-bulk/)

Related: [Bulk-add HS codes, 5 ways](https://origova.com/bulk-edit-hs-codes-shopify) · [Matrixify for HS codes](https://origova.com/matrixify-hs-codes-shopify) · [Shopify customs information](https://origova.com/shopify-customs-information) · [Products missing a weight](https://origova.com/find-products-missing-weight-shopify) · [Origova docs](https://origova.com/docs) · [Find products missing HS codes](https://origova.com/find-products-missing-hs-codes-shopify)
