# Thomasnet Supplier Scraper: US and Canada Industrial Suppliers (`themineworks/thomasnet-supplier-scraper`) Actor

Search Thomasnet by keyword, category, state or ZIP, or paste profile links: one row per US or Canadian supplier with company type, annual sales and employee range, year founded, ISO and other certifications, address, phone, website, categories and personnel. No login.

- **URL**: https://apify.com/themineworks/thomasnet-supplier-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Lead generation, E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.69 / 1,000 suppliers

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

## Thomasnet Supplier Scraper: US and Canada Industrial Suppliers

[![1,500 Thomasnet valve suppliers with sales range, employees and certifications in 103 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/thomasnet-supplier-scraper-hero.png)](https://console.apify.com/actors/NRpNfX95sTEkQiE0V/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

From **The Mine Works**, makers of [Made-in-China Scraper](https://apify.com/themineworks/made-in-china-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), with over 245,000 runs across 280+ public actors.

Updated 27 Oct 2026: first release. Keywords, categories by name, ID or link, supplier profile links and IDs; state, company type, certification and ZIP radius filters; deep search past Thomasnet's first 25 results; one flat row per supplier with company type, annual sales and employee range, year founded, certifications, address, phone, website, categories, industries, materials and personnel. Bookmark this Actor on its Store page so it is one click away next time.

### Why choose this actor?

- **The qualification fields in columns.** Every row has `company_type` (Manufacturer, Custom Manufacturer, Distributor, Service Company and the rest), `annual_sales_range` such as `$5 - 9.9 Mil`, `employee_range` such as `50-99`, `year_founded`, and the certifications as a list (`ISO 9001:2015`, `AS9100D`, `ITAR Registered`, `Woman Owned`) plus each one's scope and audit date. In our test runs phone was filled on 99% of 2,219 rows, website on 97%, sales range on 93% and employee range on 95%.
- **Past the first 25.** Thomasnet shows 25 ranked results per search to a visitor who is not signed in. This actor reads every supplier listed in the matching categories, and its deep search runs the keyword again in every state and around the ZIP code of each supplier it finds, so smaller local suppliers with free listings come back too. "valves" gave 1,500 suppliers in one run; the category lists alone hold 221.
- **Pay per supplier, nothing for errors.** Links that are not Thomasnet links, unknown supplier IDs, duplicates found by two searches, suppliers your filters leave out and the summary row are never charged. No Thomasnet account, cookies or API key.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/NRpNfX95sTEkQiE0V/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Part of The Mine Works Company and business data family:** [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [EU VAT Checker (VIES)](https://apify.com/themineworks/eu-vat-vies-validator?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Tech Stack Detector](https://apify.com/themineworks/tech-stack-detector?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

Guide and FAQs: [Thomasnet Supplier Scraper on themineworks.com](https://themineworks.com/actors/thomasnet-supplier-scraper/).

### Try it in one minute

Paste this into the input (JSON view) and press Start. It returns 25 CNC machining suppliers from across the USA and Canada in Thomasnet's own ranked order. It took 15 seconds in our test run:

```json
{
  "searchQueries": ["cnc machining"],
  "maxItems": 25
}
```

Put several keywords on separate lines to run several searches at once, add `regions` such as `Texas` or `Ontario` to narrow them, or paste supplier profile links into `profileUrls`. A supplier that two of your searches find is delivered once.

Apify's free plan includes $5 of credit every month, which covers about 1,100 suppliers at this actor's price.

#### Copy to your AI assistant

```text
themineworks/thomasnet-supplier-scraper on Apify. Returns one row per US or Canadian industrial supplier from Thomasnet with company type (manufacturer, distributor, service company), annual sales range, employee range, year founded, certifications (ISO and others, with scope and date), address, phone, website, product and service categories, industries served, materials, personnel with titles and the Thomasnet profile link, with no login. Call ApifyClient("TOKEN").actor("themineworks/thomasnet-supplier-scraper").call(run_input={"searchQueries": ["cnc machining"], "regions": ["Ohio"], "maxItems": 200}), then client.dataset(run["defaultDatasetId"]).list_items().items. Inputs: searchQueries (keywords or Thomasnet search links), categories (category names, IDs such as 45330503, or links such as https://www.thomasnet.com/suppliers/usa/cnc-machining-45330503), profileUrls (profile links such as https://www.thomasnet.com/company/magnatrol-valve-corp-567647/profile, or supplier IDs such as 567647; 10 per call, for one record at a time). Optional: regions (state or province names or codes; Texas reads both Thomasnet halves NT and GT), locatedInRegionsOnly (default true), companyTypes (Manufacturer, Custom Manufacturer, Distributor, Service Company, Manufacturers' Rep, Finishing Service Company, Turnkey Systems Integrator, Remanufacturer), certifications (words matched on certification names, e.g. ISO 9001, AS9100), zipCode with radiusMiles (default 50), maxItems (default 100, 1 to 10000, per keyword or category), maxCategoriesPerKeyword (default 3), includeTextSearch (default true), deepSearch (default true), readFullCategoryLists (default true). Supplier rows have no _type field and carry supplier_id, company_name, company_type, company_type_code, other_activities, activities, is_manufacturer, is_distributor, is_service_company, phone, website, street_address, city, state, state_name, zip, country, county, location, latitude, longitude, annual_sales_range, employee_range, year_founded, certifications (title, type, group, scope, date, is_active), certification_titles, iso_certifications, categories, industries_served, materials, production_scale, brands, description, description_by_company, personnel (name, title), social_links (platform, url), thomas_tier, is_thomas_verified, is_thomas_registered, is_claimed, is_xometry_partner, is_advertiser, is_top_responder, is_multi_location, main_location_id, main_location_name, logo_url, thomasnet_url, distance_miles, matched_category, matched_category_id, found_by (category_list, keyword_search or profile), search_keyword, search_category, search_category_id, search_category_url, region_code, region_name, search_zip, results_in_list, position, scraped_at. Each run also writes one row with _type "summary", one with _type "info" when suppliers were delivered, and a row with _type "error" for each input that could not be read; none of these is charged. Full spec: GET https://api.apify.com/v2/acts/themineworks~thomasnet-supplier-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
```

### Key features

- **Keyword, category or profile.** Type keywords the way you would in the Thomasnet search box; each one is matched to Thomasnet's own categories (for "cnc machining": CNC Machining, Aircraft and Aerospace CNC Machining, Medical CNC Machining) and every supplier in those lists is read, 100 per call. Or give a category by name, ID or link, or a supplier profile link or ID.
- **Ranked results first.** Each keyword starts with Thomasnet's own ranked search, then adds the category lists, so a small `maxItems` returns the suppliers Thomasnet itself puts on top.
- **Deep search.** When the category lists run out before `maxItems`, the keyword is searched again in each of Thomasnet's 71 regions and then around the ZIP code of every supplier found, 25 miles at a time. It stops at `maxItems` or as soon as new searches stop turning up new suppliers.
- **State, ZIP and radius.** `regions` takes state and province names or codes; Thomasnet splits California, Massachusetts, New Jersey, New York, Ohio, Pennsylvania and Texas in two, and the state name reads both halves. With `locatedInRegionsOnly` (on by default) only suppliers whose own address is in those states are kept. `zipCode` and `radiusMiles` return suppliers near a plant or a customer, with `distance_miles` on each row.
- **Filters that cost nothing.** `companyTypes` and `certifications` drop suppliers before they reach your dataset, and dropped suppliers are not charged.
- **Stops cleanly.** Six failed or blocked requests in a row end the run; the run stops before its time limit and keeps every row it read. The summary row says what was read, what was skipped and why.

### How to use it

#### Basic: suppliers for one product or service

```json
{
  "searchQueries": ["hydraulic cylinders"],
  "maxItems": 500
}
```

Thomasnet's ranked results, then every supplier in the matching categories, then deep search until 500. Sort by `annual_sales_range` or `employee_range` to size them, or filter `is_manufacturer` to drop resellers.

#### Sourcing shortlist: certified manufacturers in two states

```json
{
  "searchQueries": ["injection molding"],
  "regions": ["Texas", "Ohio"],
  "companyTypes": ["Manufacturer", "Custom Manufacturer"],
  "certifications": ["ISO 9001"],
  "maxItems": 150
}
```

In our test run this returned 92 suppliers, every one located in Texas or Ohio, a manufacturer by type or activity, and holding an ISO 9001 certification. 294 suppliers that did not pass the filters were left out and not charged.

#### Near your plant: suppliers within a radius of a ZIP code

```json
{
  "searchQueries": ["sheet metal fabrication"],
  "zipCode": "44101",
  "radiusMiles": 30,
  "maxItems": 150
}
```

150 suppliers within 30 miles of Cleveland in our test run, each with `distance_miles`. Canadian postal codes work too (`M5V 2T6`).

#### Whole categories, by name, ID or link

```json
{
  "categories": [
    "Hydraulic Cylinders",
    "https://www.thomasnet.com/suppliers/northern-ohio/cnc-machining-45330503"
  ],
  "maxItems": 1000
}
```

A category link with a state in it reads that area only. `results_in_list` on each row says how many suppliers Thomasnet has in the list that was read.

#### One supplier at a time from Clay, n8n or an AI agent

```json
{
  "profileUrls": ["https://www.thomasnet.com/company/metro-hydraulic-1082640/profile", "567647"]
}
```

One row per profile, in the order given, about 3 seconds for a single record. A batch of 13 profiles took 4 seconds in our test.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `searchQueries` | array of strings | empty | Keywords, one search each, for example `cnc machining`. Thomasnet search links work here too. |
| `categories` | array of strings | empty | Category names, IDs or links; every supplier in the list is read. |
| `profileUrls` | array of strings | empty | Supplier profile links or supplier IDs. |
| `regions` | array of strings | all of USA and Canada | States and provinces by name or code (`Texas`, `TX`, `Ontario`), or a Thomasnet half such as `Texas - North`. |
| `locatedInRegionsOnly` | boolean | `true` | Keep only suppliers whose own address is in those regions. |
| `companyTypes` | array | every type | Manufacturer, Custom Manufacturer, Distributor, Service Company, Manufacturers' Rep, Finishing Service Company, Turnkey Systems Integrator, Remanufacturer. |
| `certifications` | array of strings | none | Keep suppliers holding at least one of these, matched on the certification name. |
| `zipCode` | string | none | US ZIP or Canadian postal code; searches return suppliers within `radiusMiles`. |
| `radiusMiles` | integer | `50` | Radius around `zipCode`, 1 to 500 miles. |
| `maxItems` | integer | `100` | Most suppliers per keyword or category, 1 to 10,000. Profiles are not limited by it. |
| `maxCategoriesPerKeyword` | integer | `3` | How many matching categories each keyword reads in full, 0 to 10. |
| `includeTextSearch` | boolean | `true` | Start each keyword with Thomasnet's ranked results. |
| `deepSearch` | boolean | `true` | Search again by region and around supplier ZIP codes when the lists run out. |
| `readFullCategoryLists` | boolean | `true` | Read category lists past the first page (see FAQ). |

Give `searchQueries`, `categories`, `profileUrls` or any mix. Up to 100 searches and 5,000 profiles per run.

### What data do you get?

One row per supplier. Supplier rows have no `_type` field; the summary, info and error rows do, so a filter on `_type` separates them.

| Field | What it is |
|---|---|
| `supplier_id` | Thomasnet supplier ID (tgramsId), e.g. `567647` |
| `company_name`, `thomasnet_url` | Company name and its Thomasnet profile link |
| `company_type`, `company_type_code` | Main type, e.g. Manufacturer (`M`), Distributor (`D`) |
| `other_activities`, `activities` | Other types it also lists; main type plus the others |
| `is_manufacturer`, `is_distributor`, `is_service_company` | True when the main type or any activity says so |
| `phone`, `website` | Primary phone and company website |
| `street_address`, `city`, `state`, `state_name`, `zip`, `country`, `county`, `location` | Address as Thomasnet lists it |
| `latitude`, `longitude` | Coordinates of the address |
| `annual_sales_range`, `employee_range`, `year_founded` | Size bands and founding year |
| `certifications` | Each certification with `title`, `type` (QUALITY, REGISTRATION, DIVERSITY), `group`, `scope`, `date`, `is_active` |
| `certification_titles`, `iso_certifications` | Titles only; ISO and IATF titles only |
| `categories` | Product and service categories the supplier is listed under |
| `industries_served`, `materials`, `production_scale`, `brands` | Capabilities the supplier lists |
| `description`, `description_by_company` | Thomasnet's description and the company's own |
| `personnel`, `social_links` | Named staff with job titles; social profiles |
| `thomas_tier`, `is_thomas_verified`, `is_thomas_registered` | Thomas Verified or Registered badge |
| `is_claimed`, `is_xometry_partner`, `is_advertiser`, `is_top_responder` | Profile flags |
| `is_multi_location`, `main_location_id`, `main_location_name` | Branch and head office links |
| `logo_url` | Company logo |
| `distance_miles` | Distance from your `zipCode` |
| `matched_category`, `matched_category_id` | Category the supplier was found in |
| `found_by` | `category_list`, `keyword_search` or `profile` |
| `search_keyword`, `search_category`, `search_category_id`, `search_category_url` | The search that found it |
| `region_code`, `region_name`, `search_zip` | Area or ZIP that was searched |
| `results_in_list`, `position` | Size of that Thomasnet list and the supplier's place in this search |
| `scraped_at` | When the row was read |

#### Stable fields for automations

These were present in every supplier row of our test runs (2,219 rows from 3 keyword runs), and their names will not change:

| Field | What it is |
|---|---|
| `supplier_id` | The key to store and join on |
| `company_name` | Company name |
| `thomasnet_url` | Profile link |
| `city`, `state`, `zip`, `country` | Location |
| `latitude`, `longitude` | Coordinates |
| `categories` | Categories listed |
| `thomas_tier` | Badge tier |
| `found_by`, `search_keyword`, `position` | How it was found |

Optional, present only when Thomasnet shows a value: `phone` (99% of test rows), `website` (97%), `employee_range` (95%), `annual_sales_range` (93%), `year_founded` (83%), `industries_served` (69%), `materials` (66%), `personnel` (53%), `certifications` (51%), `iso_certifications` (33%), `brands` and `social_links`. Suppliers with a free listing (`thomas_tier` NONE, 57% of the test rows) fill fewer of these than Thomas Verified ones.

#### Output examples

A Thomas Verified custom manufacturer from a category list (lists shortened):

```json
{
  "supplier_id": "10020412",
  "company_name": "Jamak",
  "company_type": "Custom Manufacturer",
  "other_activities": ["Manufacturer", "Service Company"],
  "is_manufacturer": true,
  "is_distributor": false,
  "phone": "(888) 389-5955",
  "website": "https://www.jamak.com/",
  "street_address": "1401 N. Bowie Dr",
  "city": "Weatherford",
  "state": "TX",
  "zip": "76086",
  "country": "USA",
  "annual_sales_range": "$50 - 99.9 Mil",
  "employee_range": "200-499",
  "year_founded": 1971,
  "certification_titles": ["ISO 14001:2015", "ISO 14644-1:2015", "ISO 9001:2015", "Made in the USA", "RoHS Compliant"],
  "iso_certifications": ["ISO 14001:2015", "ISO 14644-1:2015", "ISO 9001:2015"],
  "categories": ["Aerospace Molded Plastics & Rubber", "Compounding Services", "Contract Manufacturing"],
  "industries_served": ["Aerospace", "Automotive", "Medical and Dental"],
  "personnel": [{ "name": "Dan Thompson", "title": "President" }, { "name": "David Wilson", "title": "Sales Director" }],
  "thomas_tier": "VERIFIED",
  "thomasnet_url": "https://www.thomasnet.com/company/jamak-10020412/profile",
  "matched_category": "Aerospace Injection Molding Services",
  "found_by": "category_list",
  "search_keyword": "injection molding",
  "region_code": "NT",
  "region_name": "Texas - North",
  "results_in_list": 9,
  "position": 40
}
```

A distributor with a free listing, found by deep search around a Wisconsin ZIP code:

```json
{
  "supplier_id": "452827",
  "company_name": "CMA/Flodyne/Hydradyne, Inc.",
  "company_type": "Distributor",
  "other_activities": ["Custom Manufacturer", "Service Company"],
  "phone": "(630) 563-3600",
  "website": "http://www.cmafh.com/",
  "street_address": "3265 Gateway Rd., Suite 300",
  "city": "Brookfield",
  "state": "WI",
  "zip": "53045",
  "annual_sales_range": "$5 - 9.9 Mil",
  "employee_range": "50-99",
  "year_founded": 1974,
  "categories": ["Valves"],
  "brands": ["Balluff", "Beijer", "Casappa", "Clippard"],
  "thomas_tier": "NONE",
  "thomasnet_url": "https://www.thomasnet.com/company/cma-flodyne-hydradyne-inc-452827/profile",
  "found_by": "keyword_search",
  "search_keyword": "valves",
  "search_zip": "53051",
  "position": 857
}
```

The summary row (shortened):

```json
{
  "_type": "summary",
  "searches_requested": 1,
  "suppliers_read": 5676,
  "duplicates_skipped": 4176,
  "suppliers_delivered": 1500,
  "charged_for": 1500,
  "api_calls_lists": 5,
  "api_calls_keyword_search": 72,
  "api_calls_deep_search": 174,
  "http_blocked": 0,
  "run_seconds": 102
}
```

### Pricing

Pay per event: you pay for the suppliers you receive, plus a flat $0.002 per run, whatever memory you choose. Category lists, deep search, certifications, personnel and the filters cost nothing extra.

| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
| `supplier-scraped` | Once per supplier row stored in your dataset | $4.49 per 1,000 | $3.79 per 1,000 | $3.19 per 1,000 | $2.69 per 1,000 |
| `run-start` | Once per run, after the first supplier row is stored | $0.002 | $0.002 | $0.002 | $0.002 |

The price of one supplier is the price per 1,000 divided by 1,000.

Never charged:

- inputs that are not keywords, categories or Thomasnet links, unknown regions and company types (each gets an error row);
- supplier IDs Thomasnet does not have, and category names it does not know;
- a supplier that a second search of the same run finds again;
- suppliers your `regions`, `companyTypes`, `certifications` or `radiusMiles` leave out;
- suppliers past your `maxItems`;
- the summary, info and error rows;
- a run that delivers no supplier: the start fee is charged only after the first supplier row is stored;
- anything past your "Max cost per run". The actor checks the budget before each batch of rows and stops while the total is still below your limit, so the run ends SUCCEEDED with a partial result and a status message saying so.

### Run it on a schedule

1. Open the actor in Apify Console, set your input and click **Save as a new task**.
2. In the task, open **Schedules**, click **Add schedule** and pick how often (every month, every Monday at 08:00 and so on).
3. Compare runs on `supplier_id` to see suppliers new to your category or region, and on `certification_titles` to see new certifications.
4. Optional: add an integration (Google Sheets, Slack, a webhook) so each run lands where your team works.

### FAQ

#### What does this actor read?

The same data Thomasnet's own search and category pages show to a visitor, read from the data service those pages call. For each keyword it reads Thomasnet's ranked results, the supplier lists of the best matching categories, and with deep search on, the same keyword by region and around supplier ZIP codes. Nothing is rendered in a browser.

#### How many suppliers can I get for a keyword?

Up to `maxItems` (10,000 at most) per keyword. A category list holds the suppliers that list themselves in that category, which are mostly Thomas Verified ones: 489 for CNC Machining, 239 for Valves. Deep search adds the smaller suppliers with free listings that Thomasnet's ranked search finds: "valves" reached 1,500 in 103 seconds in our test, and stops by itself when new searches stop finding new suppliers.

#### Why do some rows have no sales range, employees or certifications?

Thomasnet shows them only when the supplier has given them. Thomas Verified suppliers fill most fields; a free listing may have a name, address, phone and categories only. Empty fields are left out of the row rather than sent as blanks.

#### What do `readFullCategoryLists` and `includeTextSearch` change?

On the website, a category page asks visitors to sign in from its second page, and the ranked search shows 25 results per search. With `readFullCategoryLists` on (the default) the actor reads every page of each category list from the data service the pages use, 100 suppliers per call; off, it reads the first 25 of each category and region only, as a visitor sees without signing in. `includeTextSearch` adds Thomasnet's ranked results for the keyword at the start. The actor never logs in and reads only what that data service returns without an account.

#### How does the region filter work?

Thomasnet files suppliers by the areas they serve. `regions` asks Thomasnet for the suppliers serving those areas, and `locatedInRegionsOnly` (on by default) then keeps only those whose own address is in the chosen states or provinces. Turn it off to also get suppliers from elsewhere that serve your region.

#### How long does a run take?

About 15 seconds for 25 suppliers, 90 seconds for 700 suppliers from two keywords, and 100 seconds for 1,500 with deep search, in our test runs. A profile run takes about 3 seconds, plus well under a second for each extra profile.

#### Do I need a Thomasnet account, cookies or a proxy?

No. The actor reads public data over Apify Proxy, which is included. Nothing to set up.

#### Can I use it from Claude, ChatGPT or Cursor (MCP)?

Yes, through Apify's MCP server. Connector URL: https://mcp.apify.com/?tools=themineworks/thomasnet-supplier-scraper

- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http thomasnet-supplier-scraper "https://mcp.apify.com/?tools=themineworks/thomasnet-supplier-scraper"`

#### Which formats can I download?

JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or through the API. The dataset has four ready views: Suppliers, Contacts and address, Qualification, and Categories and capabilities. In CSV and Excel, lists such as `certifications` and `personnel` are flattened into columns such as `certifications/0/title` and `personnel/0/name`.

#### Is it legal to scrape Thomasnet?

The actor reads only business directory data that Thomasnet shows to any visitor without logging in: company names, addresses, phone numbers, websites and the capabilities suppliers publish to be found by buyers. It does not log in or solve CAPTCHAs, and reads only what Thomasnet's data service returns without an account. You are responsible for how you use the data, including Thomasnet's terms, data protection law such as GDPR and CCPA, and the rules on contacting businesses in your country. This is general information, not legal advice.

### Integrations

- **Google Sheets**: send each run's suppliers to a sheet with Apify's Google Sheets integration; one row per supplier fits a sheet as is.
- **Clay, Make, Zapier and n8n**: call the actor once per record with a profile link, or start a search and read its dataset, for example "new ISO 9001 machine shops in Ohio every month to the CRM".
- **Webhooks**: have Apify call your URL when a run succeeds, then fetch the dataset.
- **API and SDKs**: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
- **MCP clients**: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

### More from The Mine Works

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [EU VAT Checker (VIES)](https://apify.com/themineworks/eu-vat-vies-validator?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Tech Stack Detector](https://apify.com/themineworks/tech-stack-detector?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Bundesanzeiger Scraper](https://apify.com/themineworks/germany-bundesanzeiger-monitor?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Domain to LinkedIn URL Resolver](https://apify.com/themineworks/domain-to-linkedin-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [World Bank Trade Scraper](https://apify.com/themineworks/global-trade-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [US Import Records](https://apify.com/themineworks/us-import-supplier-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Y Combinator Scraper](https://apify.com/themineworks/y-combinator-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Norway Company Register](https://apify.com/themineworks/norway-brreg-entity-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Support

Found a keyword that returns fewer suppliers than Thomasnet shows, or a field that comes back empty when the profile has it? Open an issue in the Issues tab with the input and the run ID, and we will look at it. For a field you need or a new source, email dmineworks@gmail.com.

*Search Thomasnet by keyword, category, state or ZIP code and get every supplier back as one row, with company type, sales and employee range, year founded, certifications, address, phone, website and categories, no login.*

# Actor input Schema

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

Products or services, one per line, as you would type them in the Thomasnet search box. Example: cnc machining, ball valves, injection molding. Each keyword reads Thomasnet's ranked results and the supplier lists of its best matching categories. A Thomasnet search link works here too. Up to 100 searches per run.

## `categories` (type: `array`):

Thomasnet product or service categories, by name (Hydraulic Cylinders), ID (21650809) or link (https://www.thomasnet.com/suppliers/usa/hydraulic-cylinders-21650809). Every supplier in the category list is read, 100 per call. A link with a state in it (https://www.thomasnet.com/suppliers/northern-ohio/cnc-machining-45330503) reads that area only.

## `profileUrls` (type: `array`):

Thomasnet supplier profile links, for example https://www.thomasnet.com/company/magnatrol-valve-corp-567647/profile, or the supplier ID alone (567647). Each one returns that supplier's row, 10 per call. Built for one record at a time from Clay, n8n or an AI agent.

## `regions` (type: `array`):

Narrow keywords and categories to US states and Canadian provinces, by name or code: Texas, TX, Ohio, Ontario, ON. Thomasnet splits seven states in two (California, Massachusetts, New Jersey, New York, Ohio, Pennsylvania, Texas); the state name reads both halves, a half reads one (Texas - North, northern-ohio). Empty: all of the USA and Canada.

## `locatedInRegionsOnly` (type: `boolean`):

On: keep only suppliers whose own address is in the states you chose. Off: also keep suppliers from elsewhere that Thomasnet lists as serving those regions. Has no effect without regions.

## `companyTypes` (type: `array`):

Keep only these company types. A supplier matches when its main type or one of its other activities is in the list. Empty: every type.

## `certifications` (type: `array`):

Keep only suppliers that hold at least one of these certifications, matched on the certification name: ISO 9001, AS9100, ISO 13485, IATF 16949, ITAR, Woman Owned, Veteran Owned. Empty: no certification filter.

## `zipCode` (type: `string`):

A US ZIP code (44101) or Canadian postal code (M5V 2T6). Searches then return suppliers within the radius below, with distance_miles on each row. Used instead of regions.

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

How far from the ZIP code to search, 1 to 500 miles. Only used with a ZIP code.

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

The most suppliers to return for each keyword or category, 1 to 10,000. Profile links are not limited by this. Example: 500.

## `maxCategoriesPerKeyword` (type: `integer`):

How many of the best matching Thomasnet categories each keyword reads in full, 0 to 10. For cnc machining, 3 reads CNC Machining, Aircraft and Aerospace CNC Machining and Medical CNC Machining. 0 reads only the ranked keyword results.

## `includeTextSearch` (type: `boolean`):

On: each keyword first returns Thomasnet's own ranked search results (the first 25 per region, the most Thomasnet shows without a login), then the category lists. These results also hold smaller suppliers with free listings. Off: category lists only.

## `deepSearch` (type: `boolean`):

On: when a keyword's category lists run out before Max suppliers, the keyword is searched again in every region and then around the ZIP code of each supplier found (25 miles), to reach smaller local suppliers, free listings included. It stops at Max suppliers or when new searches stop finding new suppliers. With a ZIP code it searches around suppliers inside the radius only. Every supplier is delivered and charged once.

## `readFullCategoryLists` (type: `boolean`):

On: every supplier in each category list is read, 100 per call, through the data API that Thomasnet's own pages use. On the website itself, pages after the first ask visitors to sign in. Off: only the first 25 of each category and region, as a visitor sees without signing in.

## Actor input object example

```json
{
  "searchQueries": [
    "cnc machining"
  ],
  "locatedInRegionsOnly": true,
  "radiusMiles": 50,
  "maxItems": 25,
  "maxCategoriesPerKeyword": 3,
  "includeTextSearch": true,
  "deepSearch": true,
  "readFullCategoryLists": true
}
```

# Actor output Schema

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

No description

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

No description

# 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": [
        "cnc machining"
    ],
    "maxItems": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/thomasnet-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": ["cnc machining"],
    "maxItems": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/thomasnet-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": [
    "cnc machining"
  ],
  "maxItems": 25
}' |
apify call themineworks/thomasnet-supplier-scraper --silent --output-dataset

```

## MCP server setup

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