The first international order feels like a win, right up until the label screen asks for an HS code, a country of origin and a contents type. Most of it is a one-time setup on your products. Get that right once and every parcel after it goes out with a form that customs can read in a few seconds.
What a customs form actually asks for
Whether it's a USPS form, a commercial invoice or the electronic data your label software sends, the same handful of fields come up:
- Description of each item, in plain words: "cotton t-shirt", "ceramic coffee mug".
- Quantity, value and weight of each line.
- HS code: the item's tariff classification.
- Country of origin: where the item was made.
- Contents type: merchandise, gift, sample, documents, returned goods.
- Signer: the person certifying it's accurate.
- What to do if it can't be delivered: return it to you, or abandon it.
The address, the parcel weight and the service come from the label itself. The rest comes from your products, which is why the setup below pays off.
HS codes, briefly
The Harmonized System is the shared classification customs offices use worldwide. The first six digits are the same in every country; countries can add more digits for their own tariffs. USPS asks, at minimum, for the 6-digit HS code for each item in the package, and says the sender is responsible for getting the classification right.
To find a code, search your product type in the US Census Bureau's Schedule B search (the first six digits of a Schedule B number are the HS code). Classify by what the thing is made of and what it does, not what you call it in your shop: a "cozy lounge set" is a knitted cotton garment as far as customs is concerned.
Country of origin is where it was made, not where you ship from
Shopify defines it as where a product is created or assembled into the form it's sold in. A mug made in Portugal and shipped from your garage in Ohio has a country of origin of Portugal. If you print designs on blanks, the origin is usually the blank's, unless the work you do substantially transforms it. When in doubt, ask your supplier; most put it on the invoice.
Where these live in Shopify
- One product: open the product and scroll to the Shipping section. Set Country of origin and HS code. You can add country-specific codes from the menu next to the HS code field.
- Many products: select them in Products, choose Bulk edit, and add the Shipping columns Harmonized system code and Country of origin.
- A spreadsheet: Settings → Taxes and duties → Duties and import taxes → Manage → Product information → Update with CSV.
- A store default for origin: Settings → Taxes and duties → Customs information. A product's own value overrides it.
Details are in Shopify's HS code help page. Because the codes sit on the product's inventory item, label apps and shipping tools can read them from the order, so you set them once.
Which form your parcel needs (USPS)
USPS forms are generated electronically with the label now, but the form type still depends on the service. From the International Mail Manual:
| Service | Form |
|---|---|
| First-Class Package International, $400 or less | PS Form 2976 or 2976-A |
| First-Class Package International, over $400 | Not allowed: use Priority Mail International or Express |
| Priority Mail International | PS Form 2976-A |
| Priority Mail Express International | PS Form 2976-B |
UPS, FedEx and DHL use a commercial invoice instead, which your label software builds from the same data.
The $2,500 line for US exporters
If the value of the goods under any single Schedule B number in a shipment is over $2,500, the US requires Electronic Export Information (EEI), filed through the Automated Export System, and the label carries the ITN you get back. Below that, the form carries an exemption instead, usually NOEEI 30.37(a) under 15 CFR 30.37. Shipments to Canada are generally exempt, and anything needing an export license must be filed whatever its value. Most small-shop parcels sit well under the line, but a wholesale order of one SKU can cross it fast.
Value: what the customer paid
Declare what the item sold for, after discounts, in your store's currency. Three things trip people up:
- Free items still have a value. A free gift-with-purchase declared at $0 is a common reason for a hold. Use its normal price.
- Don't mark a sale as a gift. "Gift" is for a gift from one person to another, not an order. Customs officers see it all day.
- Don't undervalue. The customer may pay the duty, but the declaration is yours.
Since July 1, 2026, the EU also charges a flat €3 customs duty on low-value parcels (under €150) from non-EU sellers registered for IOSS. If you sell into the EU, check how your checkout or duties app passes that on.
Mistakes that get parcels held
- Vague descriptions. "Merchandise", "clothing", "parts". Say what it is and what it's made of.
- Missing HS codes. USPS lists them as required customs data, and a label without them can be refused or delayed.
- $0 lines. See above.
- Weights that don't add up. The items on the form shouldn't weigh more than the parcel.
- The wrong origin. Your address is not the origin of a product you bought in.
- No signer. Someone has to certify the form. Put a real name on it.
How Pickadoodl does it
I build Pickadoodl. On the Pro plan, its Ship step buys labels through your own EasyPost account, and when an order is going to another country it fills in the customs form from the order:
- Each item's description, quantity, price paid after discounts, and weight come from the order. A free item is declared at its list price.
- The HS code and country of origin come from the product in Shopify. Defaults in Settings cover products that don't have them yet.
- Anything still missing is listed before rates, so you fix it once rather than watch a label fail. Nothing is bought until the form is complete.
- If a carrier refuses the shipment anyway, the order is flagged as a shipping issue and held back from fulfillment.
- US shipments worth $2,500 or more are stopped with a note, since Pickadoodl doesn't file EEI.
- Return labels for customers abroad declare the items as returned goods.
The details are in the shipping labels help.
A setup checklist
- List the products you actually ship abroad, and start with the best sellers.
- Find each one's HS code and country of origin; bulk edit them into Shopify.
- Set a store default country of origin for anything you make yourself.
- Write product titles or customs descriptions a customs officer would understand.
- Decide who signs your customs forms.
- Ship one test order to a friend abroad before a sale.