ImportYeti US Customs Records & Supplier Scraper
Pricing
$0.005 / importer report
ImportYeti US Customs Records & Supplier Scraper
Who a US company imports from: one flat row per bill of lading, with supplier, country, weight, container count, HS codes and the ocean carrier.
Pricing
$0.005 / importer report
Rating
0.0
(0)
Developer
ScrapeBench
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Share
Pain points
- US customs manifests are public, but they are published as a paginated web report rather than a dataset, so getting a company's shipments into a spreadsheet means scraping.
- The shipment table runs the supplier name and its country together in the same cell, so anything reading the cell as plain text produces 'Stadium Grow Lighting B VNetherlands'.
- Some rows link a town before the country, so taking the first location link on a row files a shipment from Vietnam under 'Xa Long An'.
- The bill-of-lading cell holds two numbers and two one-letter badges styled identically, so a naive selector returns the letter 'H' as a bill-of-lading number.
- ImportYeti rate-limits per IP and answers a spent one with HTTP 200 carrying an unrendered page shell — no error, no status, nothing in the body that says refused, and every check that reads the response passes.
- That shell parses to zero shipments, which on an import lookup reads as 'this company imports nothing' rather than 'we were throttled'.
- The public company page serves a fixed window of recent shipments and ignores page parameters entirely, so a scraper that thinks it is paging is refetching page one.
What we solve
- Rows are flat — one per bill of lading — so they load into a spreadsheet or a database table without unpacking a nested array.
- Supplier, country and town are read from their own links, so a country field always holds a country.
- House and master bill-of-lading numbers are separated by the badge the source puts next to each, not by position.
- The rate-limit shell is detected structurally and returns a free 'blocked' marker row, never zero shipments.
- A throttled run retries once from a fresh proxy address, because the limit is per IP and waiting does not clear it.
- The ocean carrier is on 38 of 50 shipments measured, and the 2 rows that carry a house-plus-master bill also carry a link into the carrier's own cargo tracking.
- Batched lookups are paced automatically, so a run over many importers does not throttle itself.
- Billing is per importer resolved, not per shipment row, so a company's whole shipment history costs one charge.
Summary
Name a US importer — 'nike', 'home depot', an ImportYeti slug or a full ImportYeti URL — and get its recent US customs bill-of-lading records as flat rows, one per shipment: date, house and master bill-of-lading numbers, the supplier and its country and town, gross weight, quantity, container count, the shipping lane, ImportYeti's estimated freight cost, and the ocean carrier with a link straight into that carrier's own cargo tracking. Every row also carries the HS/HTS codes that importer ships under. Look up several importers in one run, or filter to a single supplier country to see just the China or Vietnam side of a supply chain. Built for sourcing teams finding who a competitor buys from, importers checking a supplier's other customers, and B2B lead generation against real trade activity.
Who it's for
- Sourcing and procurement teams identifying a competitor's suppliers
- Importers checking which other US buyers a supplier already serves
- B2B lead generation against companies with real import activity
- Supply-chain and trade analysts tracking lanes, carriers and volumes
How to use
Set the input, run the actor, and collect results from the run's dataset (export to JSON/CSV/Excel, or pull via the Apify API). Example input:
{"company": "nike","maxResults": 50}
See Inputs below for every available field.
What you get
One row per record:
| Field | Description |
|---|---|
shipment_date | Date of the customs entry |
bill_of_lading | House bill-of-lading number, as badged by the source |
master_bill_of_lading | Master bill-of-lading number - only on house/master rows, 2 of 50 measured; null on regular rows |
bill_type | How the source badges the row - R (regular), IR (in-bond regular) or H/M (house plus master) |
carrier | The ocean carrier named on the shipment - present on 38 of 50 shipments measured |
carrier_tracking_url | Link into the carrier's own cargo-tracking page - only on house/master bill rows, 2 of 50 measured |
supplier_name | The exporting supplier on the manifest |
supplier_country | The supplier's country, read from the country link |
supplier_city | The supplier's town, on the minority of manifests that name one (1 of 50 measured) |
supplier_url | That supplier's own ImportYeti page |
weight | Gross weight as a number |
weight_unit | The unit that weight is stated in, e.g. kg |
quantity | Quantity shipped as a number |
quantity_unit | The packaging unit, e.g. ctn, pcs, pkg |
container_count | Number of containers on the shipment |
freight_route | The shipping lane, e.g. 'Asia US Pacific' |
estimated_freight_cost_usd | ImportYeti's own freight ESTIMATE in dollars, on 21 of 50 shipments measured - not a price anyone was charged |
company_name | The US importer as named on the manifest |
company_address | The importer's address as published |
company_hs_codes | HS/HTS codes this importer ships under (company-level, not per shipment) |
requested_company | What was asked for, echoed back |
source_url | The importer's ImportYeti page |
Sample:
{"source_url": "https://www.importyeti.com/company/nike","shipment_date": "04/27/2023","bill_of_lading": "HLCUSGN230386021","master_bill_of_lading": null,"bill_type": "R","carrier": "Hapag-Lloyd","carrier_tracking_url": null,"supplier_name": "Apl Logistics Vietnam Company Ltd","supplier_country": "Vietnam","supplier_city": "Xa Long An","supplier_url": "https://www.importyeti.com/supplier/apl-logistics-vietnam","weight": 27062.0,"weight_unit": "kg","quantity": 3699.0,"quantity_unit": "pcs","container_count": 4.0,"freight_route": "Asia US Pacific","estimated_freight_cost_usd": 5058.32,"company_name": "Nike","company_address": "1 Bowerman Dr, Beaverton, Or 97005, Us","company_hs_codes": ["6110.20.2069","6110.30.3053","8479.89.97"],"requested_company": "nike"}
Inputs
| Field | Required | Type | Default | Description |
|---|---|---|---|---|
company | no | string | "nike" | The US company whose imports you want, e.g. 'nike', 'home depot', 'lululemon usa inc'. A bare ImportYeti slug ('wal-mart') or a full ImportYeti company URL both work. Kept forever alongside 'Importers' because saved tasks and API callers send it. |
companies | no | array | [] | Look up several importers in ONE run instead of a run each. Combined with 'US importer' if you fill both, and duplicates are removed. 'Maximum results' applies PER importer, so adding one can never truncate the others. Runs are paced ~3s apart because ImportYeti rate-limits rapid requests. |
supplierCountry | no | string | — | Keep only shipments from suppliers in this country, e.g. 'Vietnam', 'China', 'Netherlands'. Matched against the country ImportYeti names on each shipment. Leave empty for every country. |
maxResults | no | integer | 50 | Cap on shipments returned PER importer. ImportYeti's public company page serves at most 50 recent shipments per company and has no page 2 — deeper history is behind its paid API — so any value above 50 returns those 50 and the run says so on a free row. |
proxyConfiguration | no | object | {"useApifyProxy": false} | Leave OFF. Measured 2026-09-08 from inside an Apify run: ImportYeti answered 200 on the container's own IP, on Apify datacenter proxy and on residential alike, so a proxy only adds latency. Turn one on if your runs start hitting ImportYeti's per-IP rate limit. |
Pricing (Pay Per Event)
You pay per result (company-report) — no charge for empty runs. Example: 1000 importer reports at $0.005/result ≈ $5.00.
One importer returns up to 50 recent shipments for a single charge, so a default one-company run costs $0.005. You are charged per importer resolved, not per shipment row. Apify platform usage (compute) is billed separately per your plan.
Use cases
- See which factories a named competitor has been importing from this year.
- Filter one importer's shipments to a single supplier country to size the China or Vietnam side of its supply chain.
- Pull a list of manufacturers already shipping to the US for a given brand, as sourcing leads.
- Check an importer's HS/HTS codes to understand what product categories it actually ships.
- Follow a specific container through the carrier's own tracking page from the bill-of-lading row.
Why this actor
- $0.005 per importer, whatever its shipment count — priced against this category's leader at $0.00699 per company (measured 2026-09-08).
- Billed per importer, not per row, so 50 shipments cost one charge rather than fifty.
- One flat row per bill of lading, ready for a spreadsheet without unpacking nested JSON.
- The ocean carrier, the shipping lane and the bill type (regular, in-bond or house/master) are on the row, not just the numbers.
- A named importer is resolved directly, rather than fuzzy-searched into a list of similarly-named companies.
- A rate-limit is reported as a free 'blocked' row and retried from a fresh address, instead of returning an empty result that reads as 'no imports'.
Limitations & updates
The public company page serves about 50 recent shipments per importer and offers no paging; deeper history requires ImportYeti's paid API. Product descriptions per shipment are rendered client-side and are not available from the page this Actor reads. Company email and phone are paywalled on the source and are deliberately not returned. HS/HTS codes are company-level; the shipment table does not state a code per row, so none is guessed. Estimated freight cost is ImportYeti's own estimate, not a price that was paid. ImportYeti rate-limits per IP, so very large batches are paced and may still return blocked markers for some importers. Field coverage measured on one importer's 50 shipments (2026-09-08): carrier 38/50, estimated freight cost 21/50, master bill of lading and carrier tracking link 2/50, supplier town 1/50. Supplier, country, date, weight, quantity, container count, lane and HS codes were 50/50.
FAQ
Why is this billed per importer instead of per row?
Because the alternative would have made it far more expensive than it looks. One page fetch answers one importer and returns up to 50 shipments, so an importer is what a run actually costs and what a buyer actually asks for. The category leader charges $0.00699 for one company record with its shipments nested inside it; billing our flat rows individually at a typical per-row rate would have made the identical question — one importer's 50 shipments — cost roughly fourteen times theirs for the same data. Measured 2026-09-08 before this Actor was published, which is why the pricing model is what it is.
Does it return the product description for each shipment?
No, and this is the clearest thing another tool in this category does that this one does not. ImportYeti's public company page renders the product description client-side: the server HTML contains a loading placeholder, not the text, so it cannot be read from the page this Actor parses. zen-studio/importyeti-scraper does return a product description on essentially every shipment (measured 1,095 of 1,097 on 2026-09-08) along with aggregate trade analytics such as top carriers and shipping lanes. If product-level detail or carrier-share analysis is what you need, that is the better tool. What you get here instead is flat per-shipment rows, the carrier and its tracking link, and a lower price per importer.
How far back does the shipment history go?
The public company page serves a window of recent shipments — 50 on every company measured — and it has no page two: ?page=2, ?offset=50 and ?shipment_page=2 all return the identical page, byte for byte. Deeper history sits behind ImportYeti's own paid API, which answers 401 without a subscription. When you ask for more than the page can give, the run returns everything available and adds one free row saying so. Filtering by supplier country, or looking up a supplier directly, surfaces different records.
What if the company name I have does not match?
ImportYeti keys company pages on the name as it appears on the customs manifest, which is often a legal entity ('Lululemon Usa Inc') rather than a brand. The Actor turns whatever you type into that URL form, so 'home depot', 'Home Depot' and 'home-depot' all resolve. When no page exists it returns a free 'no_results' row naming the exact slug it tried, so you can correct it — or paste the ImportYeti company URL directly, which always works.
Does it return the importer's email or phone number?
No. Those cells are behind ImportYeti's paywall and render as 'Unlock' or as masked digits like XXXXXXX453. Rather than ship a column of placeholder strings that look like data, the Actor drops them. If you need contact details for the companies you find here, pair this with a contact-details Actor against the company name and address.
Are these records legal to use, and do they contain personal data?
US customs manifest data is public trade information published about companies — importer, supplier, commodity codes, weights and container counts. This Actor returns exactly that. It collects no personal contact details and no individual's information; the paywalled contact fields on the source are deliberately not returned.
Why did my run come back with a 'blocked' row?
ImportYeti rate-limits per IP address, and it does it in the most confusing way available: it answers with HTTP 200 carrying a shell page — no error, no status code to check, nothing in the body saying refused. That shell parses to zero shipments, which on an import lookup would read as 'this company imports nothing'. This Actor detects it structurally, retries once from a fresh proxy address because a per-IP limit does not clear by waiting, and if it is still refused returns a free row saying so rather than a confident wrong answer.
Which actor to choose
Other Actors that pair with this one:
- Business Email & Phone Contact Details Scraper — You have supplier and importer names and now need contact details for outreach.
- Shopify Store Intel — The importers you are researching sell direct-to-consumer and you want the storefront side too.
Works with AI assistants (MCP)
Callable as an MCP tool, so Claude, Cursor, VS Code Copilot and other MCP clients can run it directly. Grab the config from the MCP tab on this page — Apify hosts the server and keeps that snippet current, and OAuth signs you in on first connect, so no API token goes in your config file.
Then just ask:
"Show me who Home Depot has been importing from recently, and which of those suppliers are in Vietnam."
The importer can be a name, an ImportYeti slug or a full ImportYeti company URL; names are matched as they appear on the customs manifest, so a legal entity often works where a brand does not. Charging is per importer, so asking about several companies in one run costs one charge each regardless of shipment count. Runs started this way bill exactly like any other run.