Troubleshooting

Shopify customs errors: every message, cause and fix

Shopify's customs error messages are terse and they all sound like the same problem. They aren't. Some are format validation, some are missing data, one is a geography surprise, and one only bites developers. This is the index: find your exact message, get the cause and the fix, and follow the link if you need the long version.

Fixing one product or fixing all of them? Every fix below works product by product. If the same error keeps reappearing, the underlying problem is catalog-wide — Origova's free scan lists every variant missing or malforming customs data in about two minutes.

Quick index

Error messageReal causeFix
Harmonized code is invalid Wrong shape, not wrong classification — odd digit count, letters, or stray characters Jump to fix
HS codes and country of origin are required One or more items in the order have empty customs fields Jump to fix
Customs information is required for this order (domestic) The order crosses a customs boundary that doesn't look like a border Jump to fix
You can't purchase a shipping label / label blocked Carrier rejects incomplete customs data at intake Jump to fix
Country of origin is required Origin empty, or set to the shipping country by mistake Jump to fix
Weight can't be blank / weight required Variant weight is 0 or unset Jump to fix
GraphQL: harmonizedSystemCode rejected on productCreate Field is on the inventory item, not the product or variant Jump to fix

"Harmonized code is invalid"

What Shopify is actually checking: the shape of the string, not whether the code is correct for your product. The rule is digits only, and an even number of them — 6, 8, or 10.

The five things that trigger it:

InputWhy it fails
61091007 digits — odd. Codes come in even lengths.
6109.10.00 12Trailing space or embedded whitespace
HS6109.10Letters. Prefixes like "HS" or "HTS" aren't part of the code.
61091Fewer than 6 digits — below the international minimum
6109.10.0012.00More than 10 digits

Fix: strip dots, spaces and letters, then count. If you land on 7 or 9 digits you've probably truncated a 8- or 10-digit national code — go back to the source rather than padding with a zero, because a padded code is a different classification. Dots are fine to type; Shopify strips them. Full breakdown of this error →

"HS codes and country of origin are required"

Cause: at least one item in the order has an empty HS code or country of origin. Shopify names the requirement but not the offending line item, which is why this one wastes so much time.

Fix for one order: open each product in the order → Shipping section → Customs information → fill both fields. Remember they're set per variant, so a product with five sizes has five separate places this data lives, and filling the first one doesn't fill the rest.

Fix for the pattern: if this keeps happening, the catalog has systematic gaps and fixing them order by order is a treadmill. Three ways to find every product missing a code → · Full breakdown of this error →

Customs information demanded on a "domestic" order

Cause: the order crosses a customs boundary that doesn't look like an international border. The usual suspects:

Fix: check the actual origin and destination on the order rather than the customer's apparent country. If it's a territory case, the customs data is genuinely required and there's no way around it. Full breakdown →

Shipping label blocked at purchase

Cause: this is usually downstream of one of the errors above. Since the de minimis suspension, carriers require complete customs data before accepting an international parcel, so they've pushed validation to label purchase rather than risking a hold at the border. Shopify surfaces the rejection.

Fix: complete the customs fields on every variant in the order, then retry. Two things worth knowing:

Don't route around this by switching carrier or service. The parcel still has to clear customs at the other end, and a label bought without complete data becomes a hold instead of a rejection — which is worse, because it happens after the customer is expecting delivery. Why carriers tightened this →

"Country of origin is required"

Cause: the field is empty. But there's a second, quieter failure here that produces no error at all and costs more: setting origin to where you ship from rather than where the product was made.

Country of origin means the country of manufacture or substantial transformation. A shirt made in Portugal and shipped from a New Jersey warehouse is Portugal. Declaring it as the US is a misdeclaration — it applies the wrong duty rate and forfeits any trade-agreement treatment the real origin might qualify for.

Fix: get origin from your supplier or the product label, not from your logistics setup. If you genuinely don't know for a product, that's a supplier question, not a guess. Where the field lives and how to set it in bulk →

Weight missing or zero

Cause: variant weight unset or left at 0, which is easy to miss because Shopify only enforces it at the point of buying a label.

Fix: set a real shipped weight per variant — packaging included, since that's what the carrier bills. Beyond the error itself, weight feeds duty-by-weight lanes in some destinations, so a placeholder value can produce a wrong duty assessment rather than a clean failure. Digital products and gift cards should be marked as not requiring shipping, which removes them from this check entirely.

GraphQL: harmonizedSystemCode rejected

Cause: the field isn't where most people look for it. HS code and country of origin live on the inventory item behind a variant, not on the product and not on the variant itself. Passing harmonizedSystemCode at product level in productCreate gets rejected or ignored.

Fix: set it through the inventory item — either nested as inventoryItem input on the variant mutation, or with a separate inventoryItemUpdate call carrying harmonizedSystemCode and countryCodeOfOrigin. Two things that catch people out:

Check the current field placement against Shopify's API reference for the version you're targeting — this has moved between versions. Origova's docs →

When the errors are a symptom, not the problem

One or two of these is a bad afternoon. Hitting them repeatedly means the catalog has systematic gaps, and every new product or supplier import reopens them. Shopify offers no report of which products are missing customs fields — the bulk editor will let you type codes but won't tell you where they're absent, and the product CSV has no column for two of the four fields.

That's the gap Origova fills: it scans the whole catalog, lists every variant missing an HS code, country of origin, or weight, flags malformed codes before Shopify or a carrier rejects them, and applies fixes in bulk — reversibly, written straight back to Shopify, with gift cards and digital products excluded automatically.

Not customs advice This page covers error messages and data mechanics, not classification. Whether a given code is correct for your product is a legal determination — for US classifications start at hts.usitc.gov, and for anything ambiguous ask a licensed customs broker.

Frequently asked questions

Why does Shopify say harmonized code is invalid?

Shopify validates the shape of an HS code, not its accuracy. The code must be digits only and an even number of them — 6, 8, or 10. An odd digit count, a stray letter, a trailing space, or a code padded with zeros to 7 or 9 digits will all be rejected. Strip dots and spaces, count the digits, and make sure the total is even.

Why can't I buy a shipping label without HS codes?

Since the de minimis suspension, carriers require complete customs data before they'll accept an international parcel, so Shopify blocks label purchase when the HS code or country of origin is missing from any item in the order. The fix is to add the missing data to the variants in that order, not to work around the label screen.

Why is Shopify asking for customs information on a domestic order?

Usually because the order crosses a customs boundary even though it looks domestic — US shipments to Puerto Rico, Guam, or other territories, EU shipments to the Canary Islands, or shipments from a fulfilment location in a different country than the customer. Check where the order is actually shipping from and to.

Why does the productCreate GraphQL mutation reject harmonizedSystemCode?

The field lives on the inventory item, not the product or the variant. In current API versions you set it via inventoryItem input with harmonizedSystemCode and countryCodeOfOrigin, or with a separate inventoryItemUpdate call. Passing it at product or variant level will be rejected or silently ignored.

How do I find every product missing an HS code in Shopify?

Shopify has no native report for this. The three realistic methods are walking the admin product by product, exporting the inventory CSV and filtering it, or using an app that scans the catalog. There's no filter in the admin product list for missing customs fields.

Does country of origin mean where I ship from?

No, and this is the most expensive misunderstanding in customs data. Country of origin is where the product was manufactured or substantially transformed, not where your warehouse is. A shirt made in Portugal and shipped from a New Jersey warehouse has Portugal as its country of origin.

Primary sources: the official Harmonized Tariff Schedule (hts.usitc.gov) and Shopify Help Center.

Related: Harmonized code is invalid: the fix · HS codes and country of origin are required · Customs info on a domestic order · Find products missing HS codes · Origova support