Thomasnet Scraper | US Industrial Supplier Data
Pricing
from $2.20 / 1,000 results
Thomasnet Scraper | US Industrial Supplier Data
Extract US industrial suppliers, public phones, addresses, company profiles, and catalog data from Thomasnet. Search by keyword, category, or company URL and pay per delivered row plus a start fee.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
4
Total users
1
Monthly active users
a day ago
Last modified
Categories
Security
Limited permissionsShare
Thomasnet Scraper
Extract US industrial supplier profiles, public contact details, categories, and catalog rows from Thomasnet for export and analysis.
- Find suppliers by keyword, category, company URL, or company ID.
- Get public phones, addresses, websites, capabilities, and company size information where available.
- Explore category headings, company directory entries, product catalogs, and search suggestions.
- Export rows or use them with AI agents and the Apify API.
- Pay $3.00 per 1,000 delivered rows on the Free plan, plus a small start fee.
What does Thomasnet Scraper do?
Thomasnet Scraper turns public information from www.thomasnet.com into structured rows for supplier discovery, procurement shortlists, and industrial research. It covers the usa market. This is an unofficial Actor, not affiliated with Thomas Publishing or Thomasnet.
- Suppliers:
supplier_search,heading, andcompanyfind supplier lists or individual profiles. - Directory:
browseandtaxonomyreturn categories and headings;enumeratereturns company directory entries. - Products:
catalogsearches catalog rows. In supplier modes,includeProductsadds separate product rows and is off by default. Each added row is billed at the same rate and shares the input's row limit. - Reference information:
suggestreturns search suggestions;filterslists supplier filter references.
enrichDetails is on by default. It adds available profile information to the same supplier row, without creating a separately billed profile row.
What data can you extract from Thomasnet?
Rows carry rowType, recordType, and id to distinguish entities. Available fields depend on the mode and the source. source identifies Thomasnet, and scrapedAt records when the row was produced.
Supplier rows
| Field | Description | Example |
|---|---|---|
tgramsId | Thomasnet company identifier | 30989688 |
name | Supplier name | Example Manufacturing |
profileUrl | Company profile link | https://www.thomasnet.com/company/electro-plastics-30989688/profile |
website | Published supplier website | https://example.com |
primaryPhone | Published phone; optionally masked | +1 555 0100 |
phones | Public phone entries; not masked | [{"value":"+1 555 0100"}] |
address | Street, locality, region, postal code, and country | {"locality":"Cleveland","region":"OH"} |
geo | Published coordinates | {"lat":41.5,"lng":-81.7} |
annualSales | Source sales band | $1 - 4.9 Mil |
numberEmployees | Source employee band | 10-49 |
yearFounded | Published founding year | 1980 |
capabilities | Supplier capabilities | [] |
personnel | Published names and roles | [{"name":"Jane Doe","title":"Sales Manager"}] |
web | Website and published social links | {"website":"https://example.com","socials":[]} |
Product rows
| Field | Description | Example |
|---|---|---|
productId | Product identifier within its supplier | 123:product:456 |
supplierId | Parent company identifier | 123 |
supplierName | Parent supplier name | Example Manufacturing |
Product rows also include the product name and available supplier location information. Supplier rows do not embed a product list.
Catalog rows
| Field | Description | Example |
|---|---|---|
catalogId | Catalog row identifier | 12345 |
thomasUrl | Published catalog link | https://www.thomasnet.com/ |
partNumber | Published part number | EX-100 |
Catalog rows use rowType: "catalog_item" and can include company, imageUrl, and attributes.
Heading rows
| Field | Description | Example |
|---|---|---|
headingId | Supplier heading identifier | 45330503 |
name | Heading name | CNC Machining |
companyCount | Source's company count for the heading | 25 |
Category rows
| Field | Description | Example |
|---|---|---|
categoryId | Category identifier | 123 |
slug | Category text used for navigation | machinery |
categoryCount | Number of child categories reported | 12 |
Suggestion rows
| Field | Description | Example |
|---|---|---|
suggestType | Suggestion group | headings_family |
term | Requested text or returned popular search | valves |
Filter rows
| Field | Description | Example |
|---|---|---|
filterId | Supplier filter reference ID | 123 |
section | Group containing the reference | Locations Served |
How to scrape Thomasnet
- Open Thomasnet Scraper in Apify Console.
- Fill a target field, such as
query, and leavemodeonautofor supplier searches. - Set
maxResultsto3for a small first run. - Click Start and wait for completion.
- Open the dataset to inspect and download rows.
An empty JSON input {} starts an example search for cnc machining, limited to three rows. Normal event charges apply. With one target field, automatic selection chooses its matching mode. URL targets take priority over IDs, followed by category slugs and keywords; review INPUT_REPORT if you combine targets.
Supplier search
Use query or searchQueries. Public keyword searches return up to 25 suppliers per keyword. Optional zip and radius narrow geographic searches.
Heading
Use headingId, headingSlug, or a heading URL in startUrls. Public heading lists expose up to 50 suppliers. Prefer an ID when a slug cannot be resolved.
Company
Use companyUrl, detailUrls, or tgramsId. Company URLs must contain a company name and numeric ID. companySlug is an optional companion to the ID.
Browse
Use mode: "browse" and explicitly set query: "" for root categories. Otherwise, supply a returned category slug in query or headingSlug to go down one level. Omitting query entirely can retain the sample search text, so do not omit it for root browsing.
Enumerate
Select enumerate for company directory rows. Use query: "A" or comma-separated letters such as A,B to restrict the selection. The row limit still applies; this is not a promise to export the entire directory.
Catalog
Select catalog and enter product text in query. Catalog rows are returned even when includeProducts is off.
Taxonomy
Select taxonomy for category-tree rows. Use headingSlug to select a subtree. This mode can return no rows when category-tree data is unavailable; use browse for category navigation instead.
Suggest
Select suggest, supply query, and choose suggestType. POPULAR needs no query. Suggestions help choose search terms; they are not full supplier profiles.
Filters
Select filters to list filter references, optionally scoped by headingId. These references do not guarantee that filterIds restrict public supplier search results.
What to fill in
| Field | What to enter | Default |
|---|---|---|
mode | Automatic selection or one of the modes above | auto |
query | Keyword; category slug for browse; letters for enumerate | Empty-input example: cnc machining |
searchQueries | List of supplier or catalog keywords | Empty |
startUrls | Thomasnet search, heading, or company URLs | Empty |
companyUrl | One company profile URL | Empty |
detailUrls | List of company profile URLs | Empty |
tgramsId | Numeric company ID | Empty |
companySlug | Optional company URL slug | Empty |
headingId | Numeric heading ID | Empty |
headingSlug | Heading or category slug | Empty |
maxResults | Maximum rows per input, from 1 to 500 | 70; form example 3 |
market | Only usa | usa |
suggestType | Category, brand, product, CAD, company, location, autocomplete, or popular suggestions | HEADINGS_FAMILY |
zip | Search ZIP code | Empty |
radius | Radius in miles, as a string, with zip | Empty |
filterIds | Reference IDs; not reliable search restrictions | Empty |
maxPages | Catalog and enumerate page limit; 1 follows the requested row count | 1 |
enrichDetails | Add profile information to supplier lists | true |
includeProducts | Add supplier products as billed rows | false |
includeStreet | Include street and unit details | true |
redactPhones | Mask primaryPhone only, not phones | false |
useSeedPool | Prefer saved directory entries when available | false |
fields | Output field names; omit for the normal output | Empty |
location | Compatibility field; ignored, use zip and radius | Empty |
transactionType | Compatibility field; ignored | Empty |
Supplier search
{"query":"precision castings","maxResults":3}
Heading
{"headingId":"45330503","maxResults":3}
Company
{"companyUrl":"https://www.thomasnet.com/company/electro-plastics-30989688/profile","maxResults":1}
Browse
{"mode":"browse","query":"","maxResults":3}
Enumerate
{"mode":"enumerate","query":"A","maxResults":3}
Catalog
{"mode":"catalog","query":"valves","maxResults":3}
Taxonomy
{"mode":"taxonomy","maxResults":3}
Suggest
{"mode":"suggest","query":"valves","suggestType":"HEADINGS_FAMILY","maxResults":3}
Filters
{"mode":"filters","headingId":"45330503","maxResults":3}
maxItemsandlimitare aliases formaxResults.- Close field-name misspellings are corrected; other unknown fields are ignored with a note. Unrecognized optional filters can be ignored rather than stopping the run.
- Invalid targets, such as a company URL from another website, fail with
INVALID_INPUT: <field> — <how to fix>before rows are charged. A start event may still be charged. INPUT_REPORTin the default key-value store records how input was interpreted.INPUT_ECHOshows the normalized settings.
Output example
Illustrative supplier row with placeholder contact details, not a newly collected record:
{"rowType": "supplier","recordType": "supplier","id": "123456","supplierId": "123456","tgramsId": "123456","name": "Example Manufacturing","profileUrl": "https://www.thomasnet.com/company/example-manufacturing-123456/profile","website": "https://example.com","primaryPhone": "+1 555 0100","phones": [{"value": "+1 555 0100"}],"emails": [],"address": {"street": "123 Example Street", "locality": "Cleveland", "region": "OH", "postalCode": "44114", "country": "USA"},"person": {"name": "Jane Doe", "role": "Sales Manager"},"leadAbsences": {"emails": "本站无"},"source": "thomasnet.com"}
You can export the dataset as JSON, CSV, Excel, XML, RSS, or an HTML table. leadAbsences explains missing contact information: 本站无 means not available on the site. Published social URLs are kept; account names are not expanded into guessed links.
Why use this Thomasnet scraper?
- Pay for delivered rows. Row charges apply to dataset rows, not attempted pages; the start fee is separate.
- Keep source identifiers. Company and heading IDs support matching across runs.
- Combine inputs. Search several keywords or supply several profile URLs in one run.
- Inspect missing data. Missing contact values stay empty rather than being invented.
- Read failure information. Failed runs can write
ERROR_SUMMARY; completed runs writeRUN_SUMMARY. - No proxy setup. You do not need to set up proxies.
Rows already written remain in the dataset. Do not assume that an interrupted run delivers information that had not yet been written.
How much does it cost to scrape Thomasnet?
The Actor uses pay-per-event pricing. The start event is $0.005, charged once per GB of allocated memory, with a minimum of one event. At the default 512 MB, one start costs $0.005. Platform usage is included in these prices.
| Apify plan | Price per row | Price per 1,000 rows |
|---|---|---|
| Free | $0.003 | $3.00 |
| Starter | $0.003 | $3.00 |
| Scale | $0.0026 | $2.60 |
| Business | $0.0022 | $2.20 |
maxResultsapplies to each input. The default is 70; larger requests are collected in parts of up to 70, subject to source limits.- Supplier and optional product rows share the same input limit. Categories, headings, suggestions, and filter references are also billed rows.
- Free Apify plan runs stop at 200 rows in total, with a developer-set allowance of 10 runs of this Actor. Paid plans remove this run allowance, not prices or input limits.
- Set Maximum cost per run (
maxTotalChargeUsdin the API) to cap the whole run's charges. Collection stops when the available allowance is exhausted.
Example: three keywords delivering five rows each give 15 rows. On the Free plan at 512 MB, the cost is 15 × $0.003 + $0.005 = $0.050.
Use with AI agents and the API
Apify MCP server (Claude, ChatGPT, Cursor, VS Code)
Add the Actor to an MCP client that supports remote servers:
https://mcp.apify.com?tools=lentic_clockss/thomasnet-scraper
Sign in with Apify through OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset IDs; the agent then reads rows with get-dataset-items.
Clients without remote MCP support can use npx @apify/actors-mcp-server --tools lentic_clockss/thomasnet-scraper with APIFY_TOKEN set.
Example prompt: "Find three Thomasnet suppliers for precision castings. Return their names, profile URLs, and published websites."
Apify API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/thomasnet-scraper").call(run_input={"query": "precision castings", "maxResults": 3})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/thomasnet-scraper').call({query: 'precision castings', maxResults: 3});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Over HTTP, send the input as JSON to POST https://api.apify.com/v2/acts/lentic_clockss~thomasnet-scraper/runs with an Authorization: Bearer <YOUR_APIFY_TOKEN> header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
Integrations
Use the Integrations tab to connect results to Google Sheets, Make, Zapier, n8n, Slack, Airtable, or your own webhook. Use Apify Schedules for recurring runs.
FAQ
Is it legal to scrape Thomasnet?
This Actor collects publicly accessible data. You are responsible for complying with Thomasnet's terms and applicable data protection law. Personal data requires a lawful basis; public visibility alone is not permission for every use.
Why did my run end as ABORTED?
Check whether the run was manually or programmatically stopped, then inspect its status message and logs. This Actor does not automatically pause and resume a run. Do not treat ABORTED as a promise that results will arrive later.
How many results can I get?
Request 1–500 rows per input. Public keyword searches expose up to 25 suppliers per keyword, and heading lists up to 50. Catalog and company-directory modes support pagination, but all modes remain subject to available data, the cost cap, and Free-plan limits.
Why are some fields empty?
Thomasnet does not publish every field for every supplier. emails stays empty in the supported public records; personnel and social links are optional. Category and heading rows are not company contact records.
Does this contact suppliers or sign in?
No. The Actor does not log in or submit Contact Supplier, Claim, or registration forms. It is an unofficial data-collection tool, not a Thomasnet service.
Does phone redaction remove all phone data?
No. redactPhones: true masks only primaryPhone; phones remains readable. includeStreet: false removes street and unit details, including the combined full address.
Can I filter by city or transaction type?
location and transactionType are ignored compatibility fields. Use zip with radius for geographic keyword searches. Do not rely on filterIds to restrict public search results.
Why is a taxonomy run empty?
Category-tree data may be unavailable, or the selected subtree may have no matching entries. Try browse with query: "" for root categories, then follow a returned slug.
Limitations
- Only the
usamarket is supported. No private account data, submitted inquiries, or authenticated supplier information is collected. - A higher row limit does not extend the 25-supplier keyword or 50-supplier heading limits.
maxPagescontrols catalog and enumerate pagination, not every mode.- Taxonomy availability and the number of suggestions depend on available source data.
productCountcan be absent when a complete product list was not collected; absence does not mean zero products.- Requesting fewer
fieldsdoes not guarantee profile enrichment is disabled. SetenrichDetailsexplicitly when appropriate. - A stopped or timed-out run is not guaranteed to deliver unfinished results.
Related scrapers
More B2B supplier and wholesale marketplace scrapers from the same publisher:
- GlobalSources Scraper
- Kompass Scraper
- iPROS Scraper
- Xometry Scraper
- Europages Scraper
- IndiaMART Scraper
- MonotaRO Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Found a problem or need another field? Open an issue in the Issues tab of this Actor's page and include the run ID and the input you used.