# ImportYeti Scraper — US Customs Importer & Supplier Data (`khadinakbar/importyeti-scraper`) Actor

Search ImportYeti US Customs records for importer and supplier profiles: name, type, country, address, total shipments and latest shipment date, plus top suppliers or buyers, HS codes, port lanes and recent bills of lading. Filter by country, type and shipment count.

- **URL**: https://apify.com/khadinakbar/importyeti-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Lead generation, MCP servers, E-commerce
- **Features:** Limited permissions
- **Stats:** 144 total users, 21 monthly users, 99.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 profile scraped (importer or supplier)s

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

### What is ImportYeti Scraper?

ImportYeti Scraper turns company names, product keywords or ImportYeti profile URLs into clean rows of US importers and their overseas suppliers, drawn from public US Customs records. Each row has the company name, whether it is an importer or a supplier, country, address, total shipments on file, the most recent shipment date, trademarks and the profile link, plus the profile rollups: top suppliers or buyers, top HS codes, top port lanes, product tags and the most recent bills of lading. Sourcing teams, supply-chain analysts, sales prospectors and AI agents use it to find who imports a product, check a supplier's activity, and build trade lead lists, with no ImportYeti account.

### Why sourcing teams use it for supplier research

- **Importers and suppliers in one search.** `companyType` tells you whether a row is a US importer or a foreign supplier.
- **Activity at a glance.** `totalShipments` and `mostRecentShipment` show how active each company is right now.
- **Search by company or product.** Use a brand like `Patagonia` or a product like `lithium battery`.
- **Supplier and buyer rollups.** `topSuppliers`, `topBuyers`, `topHsCodes`, `topPortLanes` and `recentShipments` come with each profile, under the same per-profile event.
- **Built-in filters.** Narrow by country, importer or supplier, and a minimum shipment count.
- **Pay per profile.** One charge per company profile saved.

### How to use it

**Find a brand's importer and supplier profiles:**

```json
{
  "searchQueries": ["Patagonia"],
  "maxResultsPerQuery": 10,
  "typeFilter": "both"
}
```

**Active Vietnamese suppliers for a product:**

```json
{
  "searchQueries": ["furniture"],
  "maxResultsPerQuery": 50,
  "typeFilter": "supplier",
  "countryCode": "VN",
  "minShipments": 100
}
```

| Input | What it controls |
|---|---|
| `searchQueries` | Company names or product keywords |
| `startUrls` | ImportYeti profile URLs, such as `https://www.importyeti.com/company/patagonia` |
| `maxResultsPerQuery` | Profiles per search, from 1 to 500 (default 10) |
| `typeFilter` | `both`, `company` (US importers) or `supplier` (foreign suppliers) |
| `countryCode` | Two-letter country code, such as `US`, `CN` or `VN` |
| `minShipments` | Keep only companies with at least this many shipments |
| `enrichProfile` | Add profile rollups (suppliers/buyers, HS codes, ports, tags, bills of lading). Default `true` |
| `maxShipmentsPerProfile` | Recent bills of lading per profile, 0 to 50 (default 10) |
| `proxyConfiguration` | Apify Proxy settings; Residential US by default |

Add at least one search query or profile URL. Want the company's website and contacts next? Continue with **Bulk Website Contact Extractor** linked below.

### Output: ImportYeti company data you receive

A real row from a `Patagonia` search:

```json
{
  "companyName": "Patagonia Foods",
  "companyType": "importer",
  "country": "United States",
  "countryCode": "US",
  "address": "6090 White Oak Ln, San Luis Obispo, Ca 93401, Us",
  "totalShipments": 1804,
  "mostRecentShipment": "2026-09-25",
  "otherAddressesCount": 18,
  "otherNamesCount": 9,
  "trademarks": [],
  "profileUrl": "https://www.importyeti.com/company/patagonia-foods",
  "slug": "patagonia-foods",
  "sourceQuery": "Patagonia",
  "rank": 4,
  "scrapedAt": "2026-10-01T02:56:30.058Z"
}
```

With `enrichProfile` on, the same row also carries the profile rollups. A trimmed real example from the `Patagonia` importer profile:

```json
{
  "shipments12m": 566,
  "firstShipmentDate": "2015-01-26",
  "topSuppliers": [
    {
      "name": "Hirdaramani International Export",
      "country": "Sri Lanka",
      "countryCode": "LK",
      "shipments": 468,
      "shipments12m": 65,
      "profileUrl": "https://www.importyeti.com/supplier/hirdaramani-international-export"
    },
    {
      "name": "Youngone Nam Dinh",
      "country": "Vietnam",
      "countryCode": "VN",
      "shipments": 298,
      "shipments12m": 31,
      "profileUrl": "https://www.importyeti.com/supplier/youngone-nam-dinh"
    }
  ],
  "topHsCodes": [
    {
      "hsCode": "61",
      "description": "Apparel - knitted",
      "shipments": 1908
    },
    {
      "hsCode": "62",
      "description": "Apparel - not kintted",
      "shipments": 1182
    }
  ],
  "topPortLanes": [
    {
      "exitPort": "Vung Tau",
      "exitPortCountry": "Vietnam",
      "entryPort": "Oakland, Ca",
      "entryPortCountry": "United States of America",
      "shipments": 537
    }
  ],
  "tags": [
    "woven",
    "womens",
    "ca",
    "hoody"
  ],
  "recentShipments": [
    {
      "date": "2026-10-08",
      "billOfLading": "EXLTSE00038271",
      "masterBillOfLading": "ONEYCMBG16772300",
      "partnerName": "Mas Capital Pvt Ltd",
      "partnerCountry": "Vietnam",
      "weightKg": 8500,
      "containers": 1,
      "description": "Cap Cool Daily Shirt Great Waves Capcool Daily Shirt Shirt Mountain Movement Cap Cool Sun Hoody"
    }
  ],
  "enrichmentStatus": "enriched"
}
```

| Field | What it contains |
|---|---|
| `companyName`, `companyType` | The company and whether it is a US `importer` or a foreign `supplier` |
| `country`, `countryCode`, `address` | Where the company is registered in the customs records |
| `totalShipments`, `mostRecentShipment` | Shipments on file and the latest shipment date |
| `otherAddressesCount`, `otherNamesCount` | How many other addresses and name spellings the records list |
| `trademarks` | Trademarks linked to the company, when listed |
| `profileUrl`, `slug` | The ImportYeti profile and its stable ID |
| `sourceQuery`, `rank`, `scrapedAt` | Which search found it, its position, and collection time |
| `shipments12m`, `firstShipmentDate` | Shipments in the last 12 months and the first shipment on file |
| `topSuppliers` / `topBuyers` | Up to 10 trading partners with shipments between the two companies |
| `topHsCodes`, `topPortLanes`, `tags` | Top HS chapters, exit-to-entry port lanes and product tags |
| `recentShipments` | Latest bills of lading: date, bill numbers, partner, weight, containers, cargo description |
| `enrichmentStatus` | `enriched`, `not_requested`, or `unavailable` when the profile page had no rollups |

`OUTPUT` in the default key-value store reports the run `outcome` and the number of profiles saved.

### Example workflow: vetting suppliers for a new product line

A home-goods brand wants a second furniture supplier. They search `furniture` with `typeFilter` set to `supplier`, `countryCode` set to `VN` and `minShipments` at 100. They sort by `totalShipments` and keep suppliers whose `mostRecentShipment` falls in the last 60 days. Then they read each supplier's `topBuyers` and `recentShipments` to see who they already ship to before reaching out.

### Pricing

This Actor uses **Pay per event** plus **Apify platform usage**. You pay one event per company profile saved, plus a start event and the platform usage of the run. The live Pricing tab on this page shows the current price.

- 5 searches × 10 profiles = 50 profile events + platform usage.
- `maxResultsPerQuery` caps each search, so it doubles as a cost ceiling.
- Filters are applied before saving, so you pay only for profiles that match.
- Profile rollups are included in the same profile event; turning `enrichProfile` off only makes runs faster and lighter.

### Trade research with AI agents (MCP)

Connect this Actor to an AI agent through [Apify MCP](https://mcp.apify.com) and ask in plain language:

> Find active Chinese suppliers of lithium batteries with more than 500 shipments, and list each one's latest shipment date.

Agent checklist:

1. Put company names or products in `searchQueries`, or profile links in `startUrls`.
2. Use `typeFilter`, `countryCode` and `minShipments` to match the question.
3. Read rows with `get-dataset-items`; rank by `totalShipments` or `mostRecentShipment`.
4. Read `OUTPUT.outcome` to confirm the outcome before answering.

### API example

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~importyeti-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["lithium battery"], "typeFilter": "supplier", "countryCode": "CN", "minShipments": 500}'
```

### Related B2B tools from the same developer

| Your next step | Use | Why |
|---|---|---|
| When you then want a company's emails and phones | [Bulk Website Contact Extractor](https://apify.com/khadinakbar/bulk-website-contact-extractor) | Contacts from company websites |
| When you want the company's LinkedIn page | [LinkedIn Company Finder from Website](https://apify.com/khadinakbar/linkedin-company-finder-from-website) | Website to LinkedIn company page |
| When you source US industrial suppliers | [ThomasNet Suppliers Scraper](https://apify.com/khadinakbar/thomasnet-suppliers-scraper) | Suppliers with certifications and products |
| When you source from Alibaba | [Alibaba Listings Scraper](https://apify.com/khadinakbar/alibaba-listings-scraper) | B2B listings with MOQ and supplier details |

### Best results

| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| Looking for a brand's suppliers | Search the brand and set `typeFilter: "both"` | The brand's importer profile and related suppliers |
| Many small or inactive matches | Raise `minShipments` | Active companies only |
| A sourcing country in mind | Set `countryCode` | Suppliers from that country |
| Known profiles to refresh | Paste them into `startUrls` | Current shipment counts and dates |

### Builder's note

I found that most people use ImportYeti to answer two questions: who imports this, and is this supplier still active. So each row puts `companyType`, `totalShipments` and `mostRecentShipment` side by side. I learned that the same name often exists as both an importer and a supplier, so the Actor keeps them as separate rows and labels each one.

### FAQ

#### Where does the data come from?

From ImportYeti's public profiles, which are built on US Customs bill of lading records.

#### Do I need an ImportYeti account?

No. The Actor reads public ImportYeti data and needs no login.

#### What is the difference between company and supplier?

`company` rows are US importers. `supplier` rows are overseas companies that ship to US importers.

#### Can I search by product instead of company name?

Yes. Product keywords such as `phone case` or `solar panel` return the companies whose records match.

#### How fresh is the data?

`mostRecentShipment` shows the latest shipment date in the records at collection time, and `scrapedAt` shows when the row was collected.

### Responsible use

This Actor collects publicly available trade data about companies. Use it for sourcing and market research and follow ImportYeti's terms. Read Apify's guide on [whether web scraping is legal](https://blog.apify.com/is-web-scraping-legal/) for more context. ImportYeti is a trademark of its owner. This independent Actor is not affiliated with, associated with, or endorsed by ImportYeti. For questions or bugs, open a ticket in the Issues tab.

# Changelog

This Actor's version history is a separate document: https://apify.com/khadinakbar/importyeti-scraper/changelog.md

# Actor input Schema

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

Free-text company names or product keywords (e.g., 'Patagonia', 'YETI Coolers', 'phone case', 'lithium battery'). Each query is sent to the ImportYeti search API and paginated up to maxResultsPerQuery records. Leave empty if you only have direct profile URLs.

## `startUrls` (type: `array`):

Direct ImportYeti profile URLs (https://www.importyeti.com/company/{slug} or https://www.importyeti.com/supplier/{slug}). Each URL is resolved to a single matching record via the search API. NOT a search-results URL — use the canonical profile URL.

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

Maximum profiles to return per searchQueries entry. The API returns 10 results per page; the actor paginates internally until this cap is hit or no more pages are available. Bounded 1–500. Default 10. Each pushed profile is billed at the per-profile event price.

## `countryCode` (type: `string`):

Optional ISO-3166-1 alpha-2 country code (e.g., 'US', 'CN', 'VN') to restrict results to that country. Applied after fetching — filters out profiles registered in other countries. Leave empty for no country filter.

## `typeFilter` (type: `string`):

Restrict results to US importers ('company') only, foreign suppliers ('supplier') only, or return both ('both'). Default 'both'.

## `minShipments` (type: `integer`):

Drop records with fewer than this number of total bills-of-lading on file. Use to filter out inactive or tiny companies. Default 0 (no filter).

## `enrichProfile` (type: `boolean`):

When on (default), each saved profile also gets its ImportYeti rollups: top suppliers or buyers, top HS codes, top port lanes, tags and recent bills of lading. Adds one profile-page request per row; billed under the same profile-scraped event. Turn off for faster, card-only rows.

## `maxShipmentsPerProfile` (type: `integer`):

How many of the most recent bills of lading to include in recentShipments when enrichProfile is on, for example 10. Range 0 to 50 (the profile page lists up to 50). Default 10. Not a cap on profiles; use maxResultsPerQuery for that.

## `proxyConfiguration` (type: `object`):

Proxy used to hit the ImportYeti API. Defaults to Apify residential US — the cleanest IP reputation. The API is rate-limited per IP, so rotating residential IPs maximizes throughput on long runs.

## Actor input object example

```json
{
  "searchQueries": [
    "Patagonia"
  ],
  "startUrls": [
    {
      "url": "https://www.importyeti.com/company/patagonia"
    }
  ],
  "maxResultsPerQuery": 10,
  "typeFilter": "both",
  "minShipments": 0,
  "enrichProfile": true,
  "maxShipmentsPerProfile": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Array of importer/supplier records with shipment counts, country, address, and trademarks. One row per profile.

# 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": [
        "Patagonia"
    ],
    "startUrls": [
        {
            "url": "https://www.importyeti.com/company/patagonia"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/importyeti-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": ["Patagonia"],
    "startUrls": [{ "url": "https://www.importyeti.com/company/patagonia" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/importyeti-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": [
    "Patagonia"
  ],
  "startUrls": [
    {
      "url": "https://www.importyeti.com/company/patagonia"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call khadinakbar/importyeti-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,khadinakbar/importyeti-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/LdxFVnIbSOX7MCEP3/builds/01t04syferwswcHJk/openapi.json
