# Thomasnet Suppliers Scraper API (`dami_studio/thomasnet-suppliers-scraper`) Actor

Search Thomasnet's US industrial supplier directory by product and location. Returns company name, description, city and state, phone, website, year founded, employees, annual sales, ISO/AS9100 certifications, category and profile URL. $0.85 per 1,000 suppliers, the lowest on Apify.

- **URL**: https://apify.com/dami\_studio/thomasnet-suppliers-scraper.md
- **Developed by:** [Dami's Studio](https://apify.com/dami_studio) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 supplier returneds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Thomasnet Suppliers Scraper API

Search [Thomasnet](https://www.thomasnet.com/) — the US industrial supplier directory — by product
or service and get back a clean table of supplier companies. Type what you need the way you would
type it into Thomasnet's own search box ("valves", "cnc machining", "steel fabrication") and
optionally narrow it to a state, a city or a ZIP code.

**$0.85 per 1,000 suppliers** ($0.00085 each), plus $0.001 each time a run starts — the lowest
per-supplier price of any Thomasnet scraper on the Apify Store with an active user base; the only
other one, `zen-studio/thomasnet-suppliers-scraper` (47 monthly users), is $3.49 per 1,000 even on
its cheapest volume tier.

### What you get

One row per supplier company:

| Field | Example |
| --- | --- |
| `companyName` | `Plast-O-Matic Valves, Inc.` |
| `description` | Thomasnet's supplier blurb — what they make, materials, industries served |
| `companyType` | `Manufacturer`, `Distributor`, `Custom Manufacturer`, `Service Company`, … |
| `city` / `state` / `stateName` / `zip` | `Cedar Grove` / `NJ` / `New Jersey` / `07009` |
| `streetAddress`, `latitude`, `longitude` | `1384 Pompton Ave.`, `40.857`, `-74.229` |
| `phone` | `(877) 303-4730` |
| `website` | `https://plastomatic.com/` |
| `yearFounded` | `1967` |
| `numberEmployees` | `50-99` |
| `annualSales` | `$10 - 24.9 Mil` |
| `certificationTitles` | `["ISO 9001:2015", "Woman Owned", "Made in the USA"]` |
| `certifications` | the same list with type, group, audit scope and certificate date |
| `category` / `categoryId` | `Valves` / `90052002` |
| `profileUrl` | `https://www.thomasnet.com/company/plast-o-matic-valves-inc-566251/profile` |
| `thomasVerified`, `xometryVerified`, `isClaimed` | `true` / `false` / `true` |
| `distanceMiles` | `14.7` — only when you search by ZIP code |

### Input

```json
{
  "search": "cnc machining",
  "location": "77002",
  "radiusMiles": 75,
  "maxItems": 100,
  "maxCategories": 3,
  "includeCertifications": true
}
```

- **search** — the product or service. Broad beats narrow: "valves" returns far more than
  "3-inch bronze gate valves".
- **location** — a US state (`Texas`), a city with its state (`Houston, TX`), or a 5-digit ZIP
  (`77002`). Canadian provinces and cities work too (`Ontario`, `Toronto`). Optional; leave it out
  to search all of North America.
- **radiusMiles** — only used with a ZIP code. Default 50.
- **maxCategories** — Thomasnet files suppliers under categories. Your term is matched to the
  closest ones and each is paged in turn. Default 3. Set it to 1 if you want results to stay
  tightly on-topic; raise it to fill a large `maxItems` from related categories.

### What it actually returned

Real runs, August 2026:

| Input | Rows | Wall time | What you pay |
| --- | --- | --- | --- |
| `valves`, 5 rows | 5 | 4 s | $0.0053 |
| `cnc machining` near ZIP 77002, 75 mi | 20 | 3 s | $0.0180 |
| `valves` in Ohio | 23 | 6 s | $0.0206 |
| `steel fabrication`, 250 rows | 250 | 11 s | $0.2135 |

(The "what you pay" column is the $0.001 start fee plus $0.00085 per supplier returned.)

Field coverage on the 250-row steel fabrication run: company name, description, phone, website,
city, state and profile URL on 250/250; year founded on 214/250; employee count on 218/250;
annual sales on 217/250; at least one certification on 166/250.

Three suppliers from that run, verbatim:

- **Selco Manufacturing Corp.** — West Caldwell, NJ — Custom Manufacturer — founded 1970 —
  AISC, ISO 9001:2015, Made in the USA
- **Andersen Industries, Inc.** — Adelanto, CA — Custom Manufacturer — founded 1966 — 10-49 employees
- **States Engineering Inc.** — Fort Wayne, IN — Custom Manufacturer — founded 1946 —
  https://www.statesengineeringinc.com/

### How the location filter behaves

Thomasnet has no "city" search field. It has two geo controls and this actor uses both:

- A **ZIP code** uses Thomasnet's own radius filter. Results are genuinely inside the radius and
  each row carries `distanceMiles`.
- A **state or city** narrows to Thomasnet's regional index first. That index means "serves this
  region", not "is located here", so the actor then drops any supplier whose address is outside
  the state (and outside the city, if you named one). Dropped rows are never charged. The run's
  status message tells you how many were dropped.

### What this does not do

- **North America only.** That is Thomasnet's coverage, not a limitation of this actor. It is
  overwhelmingly US: a 400-row steel fabrication sample came back 391 USA, 9 Canada.
- **No email addresses.** Thomasnet does not publish supplier email addresses, so no row has one.
  You get the phone number and the website; enrich from there.
- **No product catalogs, no CAD files, no RFQ submission.** Company-level data only.
- **Free-text terms with no matching category cap out at 25 rows.** Thomasnet lets anonymous
  callers read 25 rows of a free-text search and no more. Terms that match a category (almost all
  real product terms do) page freely into the hundreds. If you asked for 200 rows of an obscure
  phrase and got 25, that is why — try a broader term.
- **Row counts are what Thomasnet lists, not what you asked for.** A category holds what it holds.
  "Plastic Injection Molding Services" within 50 miles of downtown Houston is 3 companies. Setting
  `maxItems` to 500 does not invent more.

### Pricing

| Event | Price |
| --- | --- |
| Actor start | $0.001 |
| Supplier returned | $0.00085 |

So 1,000 suppliers costs $0.851 all-in. Sample rows, diagnostic rows, suppliers dropped by the
location filter and runs that return nothing are **not** charged.

### FAQ

**Is there a Thomasnet API?**
Thomasnet does not sell a public data API. This actor is the practical substitute: you send a
search term and a location, you get structured JSON, CSV, Excel or an HTTP endpoint you can poll.

**Can I scrape Thomasnet without coding?**
Yes. Fill in the two fields in the Apify console, press Start, download the results as CSV or
Excel. No code required.

**How do I find suppliers near me on Thomasnet?**
Put your 5-digit ZIP code in the `location` field and set `radiusMiles`. Every row comes back with
`distanceMiles` so you can sort by proximity.

**Can I filter Thomasnet suppliers by ISO 9001 certification?**
Every row carries `certificationTitles`. Run the search, then filter the dataset for rows whose
certification list contains "ISO 9001". The `certifications` array also gives you the audit scope
and the certificate date.

**How do I get a list of manufacturers in a specific state?**
Set `search` to the product and `location` to the state name, for example `search: "valves"`,
`location: "Ohio"`. The actor keeps only suppliers whose address is in that state.

**Does this return supplier email addresses?**
No. Thomasnet does not publish them. You get phone and website.

**What is the cheapest Thomasnet scraper?**
This one, at $0.85 per 1,000 suppliers. The only other Thomasnet actor on the Apify Store with an
active user base, `zen-studio/thomasnet-suppliers-scraper` (47 monthly users), is $3.49 per 1,000.

**How many suppliers can I pull in one run?**
The cap is 5,000 rows per run. In practice a single product category holds a few hundred
suppliers; raise `maxCategories` to pull related categories into the same run.

**Is scraping Thomasnet legal?**
This actor reads the same public supplier listings any visitor sees, and returns no personal data
beyond the business contact details Thomasnet publishes. You are responsible for how you use the
output — check Thomasnet's terms and your local rules before commercial use.

# Actor input Schema

## `search` (type: `string`):

What the supplier makes or does, the way you would type it into Thomasnet's own search box: "valves", "cnc machining", "injection molding", "steel fabrication". Broad terms return more suppliers than very specific ones.

## `location` (type: `string`):

US state ("Texas"), a city with its state ("Houston, TX"), or a 5-digit ZIP code ("77002"). A ZIP uses Thomasnet's radius filter and fills in distanceMiles; a state or city narrows to the Thomas region and then keeps only suppliers whose address is actually there. Leave empty to search the whole USA.

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

Hard cap on rows returned (1-5000). You are charged per supplier returned; rows dropped by the location filter and diagnostic rows are free.

## `radiusMiles` (type: `integer`):

Search radius around a ZIP code. Ignored unless "Location" is a 5-digit ZIP.

## `maxCategories` (type: `integer`):

Thomasnet files suppliers under categories. Your search term is matched to the closest ones and each is paged in turn. 1 keeps results tightly on-topic; raise it to fill a large maxItems from related categories.

## `includeCertifications` (type: `boolean`):

Return each supplier's quality, diversity and compliance certifications (ISO 9001, AS9100, ITAR, Woman Owned, and so on). Turning this off makes each page slightly smaller.

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

Optional. The actor already uses its own egress; leave this alone unless you need to exit from a specific network.

## Actor input object example

```json
{
  "search": "valves",
  "maxItems": 100,
  "radiusMiles": 50,
  "maxCategories": 3,
  "includeCertifications": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "search": "valves",
    "location": "",
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("dami_studio/thomasnet-suppliers-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 = {
    "search": "valves",
    "location": "",
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("dami_studio/thomasnet-suppliers-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 '{
  "search": "valves",
  "location": "",
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call dami_studio/thomasnet-suppliers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/thomasnet-suppliers-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/3ObPPuoAdA4YEI6sp/builds/myiWRW3gnxznhpj6n/openapi.json
