Build customs data before the label, and hold the international orders that are missing it
Updated · By Ecomsellertool editorial team
To automate customs documents for international orders, keep the description, HS code, country of origin and weight on each product record, take value, currency and quantity from the order, and check every field before the label is bought. A rule picks the form and tests whether EEI must be filed in AES. Any order missing a field is held, and a person decides classification.
- US rules exempt EEI filing when goods under one Schedule B number, one exporter to one consignee on one conveyance, are worth $2,500 or less, unless a license or other listed case applies (checked October 30, 2026).
- Shipments to Canada are exempt from EEI unless licensed, stored there for third countries, or moving through Canada to another destination.
- USPS's International Mail Manual says all customs forms must be electronically generated and asks for at least the 6-digit HS code for each item.
- USPS lists First-Class Package International Service as prohibited for items over $400; Priority Mail International uses PS Form 2976-A at any value.
- Shopify asks for an HS code of at least 6 digits, a country or region of origin, a description, quantity, value and weight for each item on an international label.
The step map: who runs each step
Trigger: A new order with a destination outside the United States, from Shopify, Amazon Multi-Channel Fulfillment, a B2B order desk or a marketplace you fulfill yourself, before any label is bought or any order goes to the 3PL.
| Step | What happens | Who runs it |
|---|---|---|
| 1 | The workflow reads each line's customs fields from the product record (description, HS or Schedule B code, country of origin, net weight) and from the order (quantity, price paid, currency, destination, service). | Rule |
| 2 | Every field is checked against the field table. A missing, zero or placeholder value holds the order, with a note naming the SKU and the field. | Rule |
| 3 | The decision table runs: which form the carrier service needs, whether the parcel can go on that service at its value, and whether any Schedule B line is over $2,500 or needs a license, which means EEI in AES. | Rule |
| 4 | For a new SKU with no code yet, an AI model drafts a plain customs description and suggests candidate codes with its reasons, for a person to review. It never writes a code to the product record. | AI model |
| 5 | A person confirms the HS or Schedule B code and the country of origin, answers any license question with the team's export adviser, and saves the result on the product record. | Person |
| 6 | When EEI applies, a person or the freight forwarder files it and enters the ITN on the order. The label stays on hold until an ITN or the right exemption legend is recorded. | Person |
| 7 | Once every field passes, the label is bought with the customs data attached, or the order goes to the 3PL with it. A morning report lists held orders by age, SKUs still missing codes and orders that needed EEI. | Rule |
4 rule steps · 1 AI model step · 2 person steps. A rule follows fixed logic you approve; an AI model handles messy input and its output is checked by rules; a person makes the calls listed below.
What stays with a person
- The HS or Schedule B code and the country of origin for every new SKU
- Any item that may need an export license, or any destination or end user the team is unsure about
- EEI filings and the ITN entered on the order
- Held orders close to their ship-by date: ship on another service, wait for a code, or cancel
- Changes to the field table, the decision table and the declared value rules
Which tools can run it
- Shopify Shipping's customs fields on each product, with a Shopify Flow hold for orders whose products lack them, for a Shopify-only store
- Your label software's customs profiles, with Zapier, Make or n8n checking the fields and holding the order before the label
- Custom code on your accounts for several channels, a 3PL or Amazon MCF, the per-Schedule B EEI test and the ITN hold
Systems it connects
- Shopify products and orders
- Shopify Shipping or label software
- 3PL or Amazon Multi-Channel Fulfillment
- USPS, FedEx, UPS or DHL label APIs
- Census Bureau Schedule B search tool
- AESDirect, or your freight forwarder
- Slack or a helpdesk view for the customs queue
Build size: Medium
The checks are simple rules; the work is clean product data, holds in every channel before the label, and keeping classification with a person.
An order comes in from Toronto, another from Lyon, and a B2B reorder from a distributor in Monterrey. Each one needs customs data before the label prints: what the item is, its code, where it was made, what it is worth and what it weighs. When that data lives in someone's head, the label waits for them, or ships with "gift" as the description and a guessed code. This recipe moves the data onto the product record, checks it on every order and holds only the orders that are missing something. It is one page of our automation library, and it runs right after address validation.
Which customs fields does every international order need, and where does the workflow get them?
Build this table first. Each row is one field, where the workflow reads it, and what holds the label when it is missing. The field list comes from USPS's International Mail Manual section 123 and Shopify's customs documentation page (both checked October 30, 2026). Your carriers may ask for more on some routes.
| Customs field | Where the workflow gets it | What blocks the label if missing |
|---|---|---|
| Item description: what it is, what it is made of, what it is for | A customs description field on the product record, written once by a person (not the marketing title) | Blank, or a vague word such as "gift", "sample" or "parts" |
| HS code, at least 6 digits | The product record, set by a person; USPS requires at least the 6-digit HS code per item | Blank, fewer than 6 digits, or a code the model suggested that no person confirmed |
| Schedule B number (for EEI) | The product record, from the Census Bureau's Schedule B search tool | Blank when the EEI test says the line needs filing |
| Country of origin | The product record, from the supplier's documents | Blank on the product; a store-wide default only counts if a person confirmed it for that SKU |
| Quantity | The order line | Never missing; checked against what is packed |
| Declared value and currency | The price paid on the order line after discounts, in the order's currency | Zero on a sold item, or a value that does not match the order |
| Net weight per item | The variant's weight on the product record | Zero or blank |
| Gross package weight | The packing station or 3PL scale | Missing when the label is bought |
| Product identifier (EU parcels worth €150 or less) | SKU or barcode on the product record | Blank on an EU parcel in that value range |
| Sender and recipient name and address | The order, after address validation | Any field the address check held |
| Export license number | A person, only when the item needs one | Any item flagged as needing a license |
| AES ITN or exemption legend | The decision table below, then a person for the ITN | Any line that needs EEI and has no ITN yet |
Two choices make the table work. The customs description and the codes live on the product, so a person fixes a SKU once and every later order passes. And nothing in the table is ever guessed: a blank field holds the order, it is not filled with a default. Shopify's HS codes page lets you set a default country of origin for products without one (checked October 30, 2026). That is handy, but a default the team never checked is how a wrong origin reaches customs.
Which document or filing does each shipment need?
The second table runs after the fields pass. Rows run top to bottom and every row that matches applies. The EEI rules come from the Foreign Trade Regulations in the eCFR, which the Census Bureau's Foreign Trade Regulations page points to (checked October 30, 2026).
| # | Shipment situation | Document or filing needed | Source (checked October 30, 2026) |
|---|---|---|---|
| 1 | Any USPS international package with goods | An electronically generated customs form: PS Form 2976-B (Priority Mail Express International), 2976-A (Priority Mail International), or 2976 or 2976-A (First-Class Package International Service) | USPS IMM 123 |
| 2 | USPS First-Class Package International Service worth over $400 | Listed by USPS as prohibited on that service; the workflow switches to Priority Mail International or Priority Mail Express International | USPS IMM 123 |
| 3 | Courier shipment (FedEx, UPS, DHL) | A commercial invoice, sent electronically with the label where the carrier allows it, on paper where it asks | Shopify customs documentation; ITA commercial invoice |
| 4 | Parcel to the EU worth €150 or less, on Shopify labels | A product identifier for each item, on top of the usual fields | Shopify customs documentation |
| 5 | Any Schedule B number in the shipment worth over $2,500 (one exporter, one consignee, one conveyance), destination not Canada | EEI filed in AES; the ITN goes on the shipment | 15 CFR 30.37(a) |
| 6 | Every Schedule B line at $2,500 or less, and nothing in row 8 applies | No EEI; the exemption legend "NO EEI 30.37(a)" on the shipment (USPS writes it "NOEEI 30.37(a)") | 15 CFR 30.37(a); Census annotation guide; USPS IMM 524 |
| 7 | Ultimate destination is Canada | No EEI, unless row 8 applies, the goods are stored in Canada for a third country, or they move through Canada to another destination | 15 CFR 30.36 |
| 8 | The item needs a BIS, State Department (ITAR), DEA, NRC or other federal export license, is subject to the ITAR, is a rough diamond or a used self-propelled vehicle | EEI regardless of value; a person handles it, never the workflow | 15 CFR 30.2(a)(1)(iv) |
| 9 | Destination in Country Group E:1 or E:2 | Stop; a person checks the filing rule that 30.2 points to (15 CFR 758.1(b)(1)) before anything ships | 15 CFR 30.2 |
| 10 | Destination with its own import rules (for example Mexico, the UK, Saudi Arabia or the UAE) | Whatever the importing country asks; see our country guides | /global |
Rows 8 and 9 never resolve on their own. The workflow can spot a flagged SKU or a destination on a list, but deciding whether an item needs a license is the kind of question that belongs with a person and an adviser. The table's job there is to stop the label, not to answer.
When does a US shipment need EEI filed in AES?
Less often than most DTC brands fear, and more often than most B2B teams notice. Under 15 CFR 30.37(a) (eCFR text up to date as of October 28, 2026, checked October 30, 2026), EEI is not required when the goods under one Schedule B number, sent by one exporter to one consignee on a single conveyance, are worth $2,500 or less. The test runs per Schedule B number, regardless of the shipment's total. If one number is over $2,500, only that number is reported. Goods of domestic and foreign origin under the same number are counted separately.
For example, and purely as an illustration: a DTC parcel with a $180 jacket and a $40 hat clears the test easily. A B2B carton to a distributor in Mexico with 60 units of one SKU at $45 each is $2,700 under one Schedule B number, so it needs EEI even though nobody thinks of it as a big export. That is why the workflow tests every line, every time, rather than trusting the order total.
The exemptions stop where 15 CFR 30.2(a)(1)(iv) starts: shipments that need a federal export license, items subject to the ITAR, rough diamonds and used self-propelled vehicles need EEI regardless of value. The same section's note sends exports to Country Group E:1 or E:2 to a separate rule. 15 CFR 30.36 exempts shipments whose ultimate destination is Canada, except those cases, goods stored in Canada for third countries and goods moving through Canada (all checked October 30, 2026).
Timing matters too. 15 CFR 30.4 says the filing citation or exemption legend must reach the carrier no later than two hours before scheduled departure for air cargo, and one hour before a truck reaches the border. For mail, it must reach USPS no later than two hours before exportation (checked October 30, 2026). The Census Bureau's annotation guide shows the proof of filing as "AES" followed by the ITN, displayed on the loading document or prominently on the package (checked October 30, 2026). So the workflow treats a missing ITN as a hard stop before the label, not a note for later.
Where do the codes come from, and why does a person decide them?
The Census Bureau's Schedule B page publishes the 2026 Schedule B and a Schedule B search tool for classifying products, with obsolete-code updates during the year (checked October 30, 2026). USPS's IMM section 123 accepts an HS code, an HTS code or a Schedule B number on its customs forms, with at least the 6-digit HS code for each item. Shopify's HS codes page says countries add digits after the first six, and that the 6-digit global code is used when no country-specific code exists (both checked October 30, 2026).
Classification is where a model helps and where it must not decide. A model can read the product page, draft a plain customs description and suggest two or three candidate codes with its reasons, which turns a blank field into a short review. But the code sets the duty the customer pays, and on B2B lines it decides whether EEI applies. So the suggestion lands in the queue, a person or your broker picks the code, and only then is it saved. USPS's customs forms page says USPS will provide an HS code during processing for its own retail forms (checked October 30, 2026); a brand shipping at volume should still keep its own codes on the product record.
Codes change, so the morning report also lists SKUs whose code was set more than a year ago, for a person to re-check against the current Schedule B. That one line keeps a product record from quietly going stale.
What should hold an order, and who releases it?
Every hold names the order, the SKU and the field, so the person in the queue fixes the cause, not just the order. Fixes made to the product record release every other order held for the same SKU on the next run. Holds live where the label is bought: a fulfillment hold on Shopify, as in our Shopify-to-3PL recipe, and a hold in your own order system for marketplace and multi-channel fulfillment orders before they go to Amazon or the 3PL.
| Hold reason | Who releases it | What they do |
|---|---|---|
| Missing description, code or origin | Product owner or ops lead | Completes the product record; the order re-checks itself |
| Value over a service limit | The rule, unless the customer paid for that service | Switches the service, or a person contacts the customer |
| EEI needed | The person who files, or the forwarder | Files, enters the ITN, releases |
| License or restricted-destination flag | Ops lead with your export adviser | Decides whether and how it ships |
| Held past the ship-by date | Support lead | Waits, changes service, or cancels with the customer |
How does this fit with the recipes and guides around it?
It sits in a short chain. Address validation checks where the parcel goes; this recipe checks what is in it; shipping exception alerts watch for customs delays after it ships. Picking the carrier and service per order is order routing, and it runs better once customs fields are clean, because the value limits in the decision table are routing rules too.
Each destination adds its own import rules on top of the US side. Our country guides cover them: Canada for Remote Fulfillment and import accounts, the UK for the £135 parcel rules, Mexico for importers and the pedimento, and Saudi Arabia and the UAE for HS codes, origin and conformity. A custom build earns its cost when orders come from several channels and a 3PL, and it can run on Ecomsellertool Growth OS beside your other order flows.
Who builds customs data into the order flow?
Ecomsellertool builds workflow automation on your own store, shipping and 3PL accounts. We have built software on Amazon's seller APIs since 2017 and shipped 50+ tools for 100+ teams. For customs we write your field and decision tables with you, then connect the product record, checks, holds and queue; classification and filing stay with your team. Send a project brief or read how our workflow automation service works.
The closest work we have shipped:
- The next action on every item, without manual chasing. For EzBookPrep we built one system for book prep from purchase to listing, with inbound and outbound shipments through Amazon's shipment APIs and automated alerts for the next action on each book, replacing the follow-ups that had made the client the bottleneck.
- Carriers and routing rules in one layer. Ecom Global, a global listing and shipping platform, was built for 100M+ products, 20+ marketplaces and 13+ carriers, with carriers, warehouses and routing rules in one place.
Get your customs data built
Send us your channels, carriers and international order mix
Describe the workflow you want automated. We reply with a written plan: scope, timeline and a fixed price.
Frequently asked questions
When do I need to file EEI in AES for an ecommerce order?
When the goods under one Schedule B number, sent by one exporter to one consignee on one conveyance, are worth more than $2,500, or whenever the items need an export license or fall in one of the other listed cases, such as ITAR items, rough diamonds or used self-propelled vehicles. Shipments to Canada are exempt unless licensed or moving on to another country. Most single DTC parcels fall under the $2,500 exemption, but B2B orders often do not.
Is the $2,500 EEI threshold per shipment or per item?
Per Schedule B number in the shipment, not per shipment total. A parcel worth $4,000 split across two Schedule B numbers at $2,000 each needs no EEI if nothing else applies. A parcel with three units of one product at $900 each, $2,700 under one Schedule B number, does. Goods of domestic and foreign origin under the same number are counted separately.
Which USPS customs form do I need for an international package?
It depends on the service. USPS's International Mail Manual lists PS Form 2976-B for Priority Mail Express International, PS Form 2976-A for Priority Mail International at any value, and PS Form 2976 or 2976-A for First-Class Package International Service up to $400. Above $400, USPS lists First-Class Package International Service as prohibited. All customs forms must be generated electronically.
Can AI pick the HS code for my products?
It can suggest one, and a person should decide. A model can read the product page and propose candidate codes with reasons, which saves time on new SKUs. But a wrong code can mean the wrong duty, delays or penalties, and the code also decides whether EEI applies. Keep the final code on the product record, set by a person or your customs broker, and never let the workflow write it on its own.
What is the difference between an HS code and a Schedule B number?
The HS code is the international product classification, usually six digits. Countries add digits after the first six for their own use. Schedule B numbers are the US export codes the Census Bureau publishes, and they are what you report in AES. USPS accepts an HS code, an HTS code or a Schedule B number on its customs forms, with at least the 6-digit HS code for each item.
What should happen when an international order is missing customs data?
Hold it before the label is bought and tell a person which SKU and which field is missing. Do not send it with a guessed code or a blank origin. The person fixes the product record once, so every later order for that SKU passes. If the order is close to its ship-by date, the person decides whether to wait, change the service or contact the customer.
