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.
Verification
Not yet in the weekly verification report.
Output fields
Authoritative field set from the dataset schema.
| Field | Type |
|---|---|
shipment_date | string|null |
company_name | string|null |
supplier_name | string|null |
supplier_country | string|null |
supplier_city | string|null |
bill_of_lading | string|null |
master_bill_of_lading | string|null |
carrier | string|null |
weight | number|null |
weight_unit | string|null |
quantity | number|null |
quantity_unit | string|null |
container_count | number|null |
freight_route | string|null |
estimated_freight_cost_usd | number|null |
company_hs_codes | array|null |
supplier_url | string|null |
company_address | string|null |
requested_company | string|null |
source_url | string|null |
notice | string|null |
Sample row
{
"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,
"weight_unit": "kg",
"quantity": 3699,
"quantity_unit": "pcs",
"container_count": 4,
"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 | Type | Req | Default | Description |
|---|---|---|---|---|
company | string | no | "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 | array | no | [] | 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 | string | no | — | 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 | integer | no | 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 | object | no | {"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 result (company-report) — no charge for empty runs.
Example: 1000 importer reports at $0.005/result ≈ $5.00.
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.
Guides & use cases
Related actors