# ImportYeti Scraper - US Customs Import & Supplier Data (`crawloop/importyeti-scraper`) Actor

Scrape ImportYeti US customs records: importers, suppliers, HS/HTS codes, trading partners, shipping lanes, and bills of lading. Search or enrich profiles for sourcing, compliance, and B2B leads.

- **URL**: https://apify.com/crawloop/importyeti-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** Lead generation, E-commerce, AI
- **Features:** Limited permissions
- **Stats:** 3 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.49 / 1,000 enriched importer/supplier profiles

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

## ImportYeti Scraper — US Customs Import & Supplier Data

> **Disclaimer:** Unofficial tool — not affiliated with, sponsored by, or endorsed by ImportYeti or its affiliates. Data is read from publicly accessible pages only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

> **Contact-data controls:** Phone/WhatsApp/fax and email fields are omitted from the dataset by default. Enable `includePhones` and/or `includeEmails` only for contacts already published on public pages and only when you have a lawful basis. Any contact-field examples below assume that explicit opt-in; otherwise those fields are absent.

Unofficial ImportYeti dataset extractor for Apify. Not affiliated with ImportYeti.

Pull **US sea-import bills of lading intelligence**: importers, foreign suppliers, HS/HTS codes, trading partners, shipping lanes, carriers, and recent shipments — into clean JSON/CSV for sourcing, compliance, and B2B prospecting.

| Actor | Role |
| :--- | :--- |
| ImportYeti Scraper ◄── you are here | US customs importer & supplier profiles |
| [Europages Scraper](https://apify.com/crawloop/europages-scraper) | EU B2B company contacts after you find a supplier |
| [WLW Scraper](https://apify.com/crawloop/wlw-scraper) | DACH B2B directory enrichment |

### When to use

- Find **who supplies** a US brand or retailer from public customs records
- Build **supplier / importer lead lists** by keyword, brand, or product class
- Map **HS/HTS codes**, origin countries, ports, and carriers for a target account
- Screen trade partners with **UFLPA** flags and shipment recency
- Cheap **search-only discovery**, then enrich only the profiles you need

### When not to use

### Key features

- **Modes** — `search` (public search API), `enrich` (full profile + nested BOLs), or `hs` (one HS/HTS explorer page: duty rate, suppliers, recent BOLs)
- **Companies and suppliers** — US consignees and foreign shippers
- **90+ normalized fields** on enriched profiles (partners, HS/HTS, lanes, carriers, TEU, spend)
- **Recent bills of lading** nested on profiles; optional flat `shipment` rows
- **Cloudflare-aware HTTP** via `curl_cffi` Chrome impersonation + Apify residential proxies
- **MCP-ready** for AI assistants via Apify MCP

### Input

| Field | Type | Description |
| :--- | :--- | :--- |
| `searchQueries` | string\[] | Company / supplier / product keywords |
| `startUrls` | request list | `/company/{slug}` or `/supplier/{slug}` URLs |
| `mode` | enum | `enrich` (default), `search`, or `hs` |
| `hsCodes` | string\[] | HS mode only. Code (`392490`, `3924.90`), slug, or `/hs-codes/` URL. One row per page |
| `hsCountry` | string | Optional country slug for HS mode |
| `entityType` | enum | `any`, `company`, or `supplier` |
| `minShipments` | integer | Drop low-volume entities |
| `maxItems` | integer | Cap on search hits or enriched profiles |
| `includeShipments` | boolean | Nest recent BOLs on profiles (default true) |
| `emitShipmentRows` | boolean | Also push flat `shipment` dataset items |
| `concurrency` | integer | Parallel profile fetches (enrich mode) |
| `proxyConfiguration` | object | Prefer Residential proxies |

```json
{
  "searchQueries": ["Patagonia"],
  "mode": "enrich",
  "entityType": "company",
  "maxItems": 10,
  "includeShipments": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

### Output

Enriched **profile** example (truncated):

```json
{
  "recordType": "profile",
  "entityType": "company",
  "name": "Patagonia",
  "slug": "patagonia",
  "id": "company/patagonia",
  "url": "https://www.importyeti.com/company/patagonia",
  "address": "Ventura, Ca 93001, Us",
  "countryCode": "US",
  "totalShipments": 3047,
  "shipments12m": 178,
  "mostRecentShipment": "08/09/2026",
  "avgTeuPerMonth": 36.86,
  "uflpa": false,
  "tradingPartners": [
    {
      "name": "Hirdaramani International Export",
      "type": "supplier",
      "country": "Sri Lanka",
      "shipments": 419
    }
  ],
  "hsCodes": [{ "code": "61", "description": "Apparel - knitted", "shipments": 1604 }],
  "htsCodes": [{ "code": "6110.30.3053", "shipments": 129 }],
  "recentShipments": [
    {
      "arrivalDate": "2026-08-09T00:00:01.000Z",
      "billOfLading": "EXDO6840348955",
      "counterpartyName": "Sheico Thailand Co Ltd"
    }
  ],
  "scrapedAt": "2026-08-11T10:00:00Z"
}
```

| Field | Description |
| :--- | :--- |
| `recordType` | `search_result`, `profile`, or `shipment` |
| `entityType` | `company` or `supplier` |
| `totalShipments` / `shipments12m` | Volume metrics |
| `tradingPartners` | Top suppliers or customers |
| `hsCodes` / `htsCodes` | Product classification rollups |
| `shippingLanes` / `carriers` | Ports and SCAC codes |
| `shipmentsTimeSeries` | Monthly shipments / weight / TEU |
| `recentShipments` | Public recent BOL table |
| `uflpa` | Forced-labor related flag when present |

### Use cases

| Job | How |
| :--- | :--- |
| Amazon / ecom supplier discovery | Search a brand → enrich → export `tradingPartners` |
| Freight / 3PL prospecting | Filter high `totalShipments` importers by lane or carrier |
| Competitive supply-chain map | Enrich competitor profiles; compare HS chapters and origins |
| Trade compliance screening | Check `uflpa`, origins, and HTS before onboarding a vendor |
| OSINT / research | Keyword search + profile URLs for structured customs evidence |

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/importyeti-scraper').call({
  searchQueries: ['Patagonia'],
  mode: 'enrich',
  maxItems: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("crawloop/importyeti-scraper").call(
    run_input={
        "searchQueries": ["Patagonia"],
        "mode": "enrich",
        "maxItems": 5,
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/crawloop~importyeti-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["Patagonia"],"mode":"enrich","maxItems":5}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp).
Connect your Apify account, then call this Actor by its Store ID / name.

Example prompts:

- "Run ImportYeti Scraper for Patagonia in enrich mode and return the top suppliers as JSON"
- "Search ImportYeti for lithium battery importers, max 20 companies, search-only mode"
- "Enrich these ImportYeti company URLs and then find matching EU contacts with Europages Scraper"

### Suite next step

After you identify foreign factories or US importers, enrich European company contacts with [Europages Scraper](https://apify.com/crawloop/europages-scraper) or DACH listings with [WLW Scraper](https://apify.com/crawloop/wlw-scraper).

### FAQ

**What coverage does ImportYeti have?**\
Public US **sea** import bills of lading (not air/land). History generally starts around 2015.

**Do I need an ImportYeti login?**\
No for public search and profile pages this Actor targets. Power Query / full CSV exports / official paid API are out of scope.

**Search vs enrich?**\
`search` is cheap discovery (name, address, shipment counts). `enrich` opens each profile for partners, HS/HTS, lanes, carriers, and recent BOLs.

**Why residential proxies?**\
ImportYeti sits behind Cloudflare and applies per-IP view limits. Residential US proxies keep enrich runs stable.

### Related Actors

- [Europages Scraper](https://apify.com/crawloop/europages-scraper)
- [WLW Scraper](https://apify.com/crawloop/wlw-scraper)
- [ENF Solar Scraper](https://apify.com/crawloop/enf-solar-scraper)

# Actor input Schema

## `includePhones` (type: `boolean`):

Off by default. Include phone, mobile, WhatsApp, or fax fields already published on public pages only when you have a lawful basis.

## `includeEmails` (type: `boolean`):

Off by default. Include email fields already published on public pages only when you have a lawful basis.

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

Company names, supplier names, brands, or product keywords to search on ImportYeti (e.g. Patagonia, lithium battery).

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

Direct ImportYeti /company/{slug} or /supplier/{slug} profile URLs (or bare slugs). Skips search discovery for these targets.

## `mode` (type: `string`):

search = cheap discovery rows. enrich = full profile (default). hs = one ImportYeti HS/HTS explorer page per code, with duty rates, suppliers, and recent bills of lading.

## `hsCodes` (type: `array`):

Used when mode is hs. A code (392490 or 3924.90), a slug, or an /hs-codes/ URL. One dataset row per code page.

## `hsCountry` (type: `string`):

Optional country slug for HS mode (for example malawi). Appended to the code page URL.

## `entityType` (type: `string`):

Filter to US importers (company), foreign suppliers, or both.

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

Drop entities with fewer lifetime sea shipments than this value.

## `maxItems` (type: `integer`):

Hard cap on search rows (search mode) or enriched profiles (enrich mode). Shipment rows from emitShipmentRows do not count toward this cap. 0 = unlimited.

## `maxPagesPerQuery` (type: `integer`):

ImportYeti returns 10 hits per search page. Caps pagination per query.

## `includeShipments` (type: `boolean`):

When enriching, nest the public recent bills of lading (~50) inside each profile record.

## `emitShipmentRows` (type: `boolean`):

When true (enrich mode), push each recent bill of lading as a separate dataset item (recordType=shipment) in addition to the profile.

## `concurrency` (type: `integer`):

Parallel profile fetches in enrich mode. Lower if you hit rate limits.

## `mostRecentShipment` (type: `string`):

Optional hint filter. ImportYeti search API does not apply this server-side; kept for UI parity with the site filters.

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

Apify proxy settings. Residential US recommended — ImportYeti uses Cloudflare and IP page-view limits.

## Actor input object example

```json
{
  "includePhones": false,
  "includeEmails": false,
  "searchQueries": [
    "Patagonia"
  ],
  "startUrls": [],
  "mode": "enrich",
  "hsCodes": [],
  "hsCountry": "",
  "entityType": "any",
  "minShipments": 0,
  "maxItems": 50,
  "maxPagesPerQuery": 20,
  "includeShipments": true,
  "emitShipmentRows": false,
  "concurrency": 4,
  "mostRecentShipment": "any",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Default dataset items (profiles, search results, and optional shipment rows).

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/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 = {}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/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 '{}' |
apify call crawloop/importyeti-scraper --silent --output-dataset

```

## MCP server setup

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