# ImportYeti Scraper - Find Any Company's Suppliers (`webdata_labs/importyeti-supplier-scraper`) Actor

\[$4.50 / 1K profiles] Search US customs bill-of-lading records and get any importer's overseas suppliers, HS codes and port-to-port shipping lanes. No start fee.

- **URL**: https://apify.com/webdata\_labs/importyeti-supplier-scraper.md
- **Developed by:** [WebData Labs](https://apify.com/webdata_labs) (community)
- **Categories:** E-commerce, Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 company profiles

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## ImportYeti Scraper - Find Any Company's Suppliers

**Type in a brand and get the overseas factories that actually ship to it, from public US customs records.**

Every ocean container entering the United States generates a bill of lading, and those records are public. That means the supplier list of almost any US importer is knowable: who makes their product, in which country, on which shipping lane, under which HS code. The problem is that this data is spread across millions of filings, and the tools that index it either charge enterprise subscriptions or hand you a scraped row with no shipment context. This Actor takes a company name and returns its suppliers, its product categories and its trade lanes as clean rows you can sort, filter and enrich.

### ✅ What you get / ❌ what this isn't

| ✅ What you get | ❌ What this isn't |
|---|---|
| The overseas suppliers behind a named importer, with address and country | Not a generic company directory |
| One charge per company profile, however many suppliers it has | Not per-row billing that punishes you for researching a big importer |
| HS codes with shipment counts, weight and TEU | Not just a name and a URL |
| Port-to-port lanes with an estimated freight spend | Not a list with no shipment context |
| Search by brand, product or supplier name | Not URL-only input |
| Supplier profiles that work the same way, so you can go both directions | Not importer-only |
| No actor start fee | Not a per-run fee charged before any row exists |
| An honest cap and a stated source of record | Not a claim to cover trade the source never sees |

### 🔎 Why use this Actor

- **Billed per profile, not per row.** One profile opens once and yields its whole supplier list, HS-code breakdown and lane table. A company with 150 suppliers costs exactly the same as one with three, which is the opposite of how per-row pricing behaves.
- **Both directions.** A `/company/` profile gives you an importer's suppliers. A `/supplier/` profile gives you a factory's customers. Both parse through the same path, so you can walk a supply chain in either direction.
- **Shipment context on every row.** Supplier rows carry 12-month shipment counts, HS-code rows carry shipments, weight and TEU, lane rows carry an estimated freight spend. That is what separates a sourcing shortlist from a list of names.
- **Search that takes a product, not just a company.** Terms like `lithium battery` return the importers moving that product, which is how you find competitors you had not heard of.
- **Dates you can sort.** The source serves `DD/MM/YYYY`; every date is normalized to ISO so `mostRecentShipment` sorts correctly.
- **Deduplicated.** The underlying page repeats the same supplier across several rendering fragments. Rows are deduplicated per profile before they reach you.

### 👥 Who it's for

Sourcing and procurement teams, competitive intelligence analysts, trade finance and logistics sales, and anyone who needs to know who really makes a product.

- Find the factories behind a competitor's product line.
- Build a vetted supplier shortlist in a country you are moving production to.
- Find importers moving a specific HS code, as a lead list for freight or trade services.
- Check how concentrated a company's supply chain is before relying on it.
- Walk from a factory to its other customers to see who else it serves.

### Example tasks

Ready-made runs you can open and start without configuring anything:

- [Find a brand's suppliers](https://apify.com/webdata_labs/importyeti-supplier-scraper/examples/find-a-brands-suppliers)
- [Importers of a product category](https://apify.com/webdata_labs/importyeti-supplier-scraper/examples/importers-of-a-product-category)
- [Supplier shortlist by country](https://apify.com/webdata_labs/importyeti-supplier-scraper/examples/supplier-shortlist-by-country)

### ⚙️ How to find a company's suppliers

1. Put one or more names into **Companies or products to look up**. A brand (`Nike`), an importer, a supplier, or a product (`lithium battery`) all work.
2. Set **Profiles to open per term**. Each profile opened returns that company's full supplier list, HS codes and lanes. Set it to `0` to return search results only, which is much faster and cheaper.
3. Leave the three **Include** switches on unless you want a narrower dataset.
4. Click **Start**. Rows stream in per profile, so you can watch results arrive and export any time from the **Storage** tab as JSON, CSV or Excel.

#### Go the other way

Paste a `/supplier/...` URL into **Direct profile URLs** and you get that factory's own profile instead, letting you see which other importers it ships to.

### 📥 Input

```json
{
  "searchQueries": ["Nike"],
  "companyUrls": [],
  "maxResultsPerQuery": 10,
  "maxCompaniesPerQuery": 2,
  "includeSuppliers": true,
  "includeHsCodes": true,
  "includeTradeLanes": true
}
```

- `searchQueries` - brand, importer, supplier or product names. Required unless you supply `companyUrls`.
- `companyUrls` - ImportYeti company or supplier profile links you already have. A bare slug such as `nike-usa` also works. These skip search.
- `maxResultsPerQuery` - matching companies and suppliers per term. Default `20`, they arrive 10 per page.
- `maxCompaniesPerQuery` - how many top results to open for their full profile. Default `5`. Set `0` for search results only.
- `includeSuppliers`, `includeHsCodes`, `includeTradeLanes` - which row types to return. All default `true`.
- `maxSuppliersPerCompany` - caps supplier rows per profile. Default `100`. Advanced.

### 📤 Output

| companyName | supplierName | supplierCountry | shipments12m |
|---|---|---|---|
| Nike Usa | Apl Logistics Vietnam | Vietnam | 0 |
| Nike Usa | Worldon Vietnam | Vietnam | 0 |
| Nike Usa | Damco India | Jordan | 0 |

Rows are typed by `itemType`, and the Output tab has a tab per type. `supplier` rows carry the supplier's filed address, region, country code and its own profile URL. `company` rows carry `totalShipments`, `shipments12m`, `shipmentsYoyPercent`, the counts of suppliers, HS codes and lanes found, and the distinct supplier countries. `hs-code` rows carry the code, its description, shipments, share of the company's total, weight and TEU. `trade-lane` rows carry loading port, unloading port and region, shipments, TEU and `estimatedShippingCostUsd`. `search-result` rows carry the match's address, lifetime shipments and ISO `mostRecentShipment`.

### 💵 How much does it cost?

You are charged **per profile opened**, not per row, plus a small amount per search result. Opening one company profile typically returns around 90 rows across suppliers, HS codes and lanes, and costs the same whether that company has three suppliers or 150. There is **no actor start fee**, so a run that finds nothing costs you nothing. A measured run opening 30 profiles returned 2,797 rows in 29 seconds.

Set **Profiles to open per term** to `0` when you only want to see which companies match a term; search results are priced far below profiles.

### 🔁 Run it on the Apify platform

Schedule it to re-check a supplier list monthly, or call it from the API and drop the rows straight into your warehouse. Results export as JSON, CSV, Excel or XML, and the dataset can be pushed onward through webhooks or the Make, Zapier and n8n integrations, so a new supplier appearing on a competitor's profile can land in Slack or a CRM on its own.

### ⚠️ Limits and caveats

- **US seaborne imports only.** The source is US customs bill-of-lading data. Air freight, road and rail freight, and trade that never enters the United States do not appear. A company with no US ocean imports legitimately returns nothing.
- **Names are as filed, not as branded.** Customs filings are typed by freight forwarders, so the same company appears as several spellings and addresses. `otherNamesCount` and `otherAddressesCount` on search rows tell you when that is happening, and it is worth checking more than one match for a large brand.
- **Freight forwarders show up as suppliers.** A consolidator that moved the container is filed the same way the factory is, so names like "Apl Logistics" appear alongside real manufacturers. Treat the supplier list as the shipping record it is, not a vetted factory list.
- **`estimatedShippingCostUsd` is the source's estimate**, not a filed number.
- **The source meters requests per IP.** The Actor rotates its own exit addresses to stay inside that budget, which is why very large runs pace themselves rather than failing.
- **Shipment counters can read 0** on a supplier that has not shipped in the last 12 months while still having a long history. Use the profile's `totalShipments` for the lifetime figure.

### 🧩 Related Actors

- **[1688 Product Scraper](https://apify.com/webdata_labs/1688-scraper)** - once you know which Chinese factory supplies a product, price the product itself.
- **[IndiaMART Export Supplier Scraper](https://apify.com/webdata_labs/indiamart-export-supplier-scraper)** - the same sourcing question on the Indian supplier base, with GST and export credentials.
- **[Google Maps Business Scraper](https://apify.com/webdata_labs/google-maps-business-scraper-api)** - turn a supplier's filed address into contact details.
- **[Website Email Scraper](https://apify.com/webdata_labs/website-contact-extractor)** - find a way to contact a supplier once you have its name and country.

### ❓ FAQ

**Where does this data come from?**
Public US customs bill-of-lading records, as indexed by ImportYeti. No login or API key is needed.

**Am I charged per supplier row?**
No. You are charged once per profile opened, and every supplier, HS-code and lane row that profile produces is included.

**Can I find a factory's customers instead of a company's suppliers?**
Yes. Paste a `/supplier/...` profile URL into `companyUrls`, or search the supplier's name directly.

**Why does a huge company show only a few hundred shipments in 12 months?**
Filings are attributed to the exact name and address on the bill of lading, and large groups file under many entities. Search the brand and check the several matches, using `otherNamesCount` as the hint.

**Does it cover imports into countries other than the US?**
No. This is US import data, and the Actor does not pretend otherwise.

### 🛠️ Support

Something wrong or missing? Open an Actor issue with the run URL, the input you used and what you expected. That is the fastest route to a fix.

### ⭐ Rate this Actor

If this saved you time, please leave a rating on the **Reviews** tab. Review count is the main trust signal buyers have on the Store, and reviews decide which Actors get improved next. If something is broken, please open an issue first so it can be fixed.

# Actor input Schema

## `searchQueries` (type: `array`):

Brand, importer, supplier or product names to search US customs records for, for example "Nike" or "lithium battery". Each term is searched separately.

## `companyUrls` (type: `array`):

Optional ImportYeti company or supplier profile links you already have, for example https://www.importyeti.com/company/nike-usa. A bare slug such as nike-usa also works. These skip search.

## `maxResultsPerQuery` (type: `integer`):

How many matching companies and suppliers to return for each search term. Results come 10 per page.

## `maxCompaniesPerQuery` (type: `integer`):

How many of the top search results to open for their full supplier list, HS codes and shipping lanes. Set to 0 to return search results only, which is much faster and cheaper.

## `includeSuppliers` (type: `boolean`):

Return one row per overseas supplier shipping to each profiled company, with name, address and country.

## `maxSuppliersPerCompany` (type: `integer`):

Caps how many supplier rows each profile contributes. Large importers list around 50.

## `includeHsCodes` (type: `boolean`):

Return one row per HS product code each profiled company imports under, with shipment counts, weight and TEU.

## `includeTradeLanes` (type: `boolean`):

Return one row per port-to-port lane each profiled company ships on, with volumes and an estimated freight spend.

## Actor input object example

```json
{
  "searchQueries": [
    "Nike"
  ],
  "companyUrls": [],
  "maxResultsPerQuery": 10,
  "maxCompaniesPerQuery": 2,
  "includeSuppliers": true,
  "maxSuppliersPerCompany": 100,
  "includeHsCodes": true,
  "includeTradeLanes": true
}
```

# Actor output Schema

## `suppliers` (type: `string`):

One row per overseas supplier shipping to a profiled importer.

## `companies` (type: `string`):

Profiled importers with shipment totals.

## `searchResults` (type: `string`):

Companies and suppliers matching each term.

## `hsCodes` (type: `string`):

Product categories each importer ships under.

## `tradeLanes` (type: `string`):

Port-to-port lanes with estimated freight spend.

## `summary` (type: `string`):

Counts, proxy sessions used and any per-source errors.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "Nike"
    ],
    "maxResultsPerQuery": 10,
    "maxCompaniesPerQuery": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdata_labs/importyeti-supplier-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["Nike"],
    "maxResultsPerQuery": 10,
    "maxCompaniesPerQuery": 2,
}

# Run the Actor and wait for it to finish
run = client.actor("webdata_labs/importyeti-supplier-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "Nike"
  ],
  "maxResultsPerQuery": 10,
  "maxCompaniesPerQuery": 2
}' |
apify call webdata_labs/importyeti-supplier-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,webdata_labs/importyeti-supplier-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/hNKSdh5XghvLCblyh/builds/hwebNaGsZzNzwVq0h/openapi.json
