# Thomasnet.com Scraper (/w EMAILS) (`memo23/thomasnet-scraper`) Actor

Unlock detailed, structured data on manufacturers and industrial companies from Thomasnet.com—company names, contacts, descriptions, categories, and more—perfect for B2B leads, market research, and sales prospecting, all delivered automatically and at scale.

- **URL**: https://apify.com/memo23/thomasnet-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 72 total users, 1 monthly users, 100.0% runs succeeded, 4 bookmarks
- **User rating**: 2.19 out of 5 stars

## Pricing

from $4.75 / 1,000 results

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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.com Companies Scraper

### Overview

This actor allows you to scrape detailed information about manufacturing and industrial companies from [Thomasnet.com](https://www.thomasnet.com/). You can use this tool to gather valuable data about companies, such as their name, contact information, description, website, and other metadata. This information is useful for building B2B leads, market research, or competitor analysis.

### Features

- Extract detailed information about companies, including name, phone, website, description, and more.
- Supports scraping multiple Thomasnet.com search result pages by specifying start URLs.
- Customize the scraping settings, such as maximum companies to scrape and request retries.
- Built-in proxy configuration for anonymous and reliable scraping.

### How to Use

1. **Set Up**: Ensure you have an Apify account and access to the Apify platform.
2. **Login** to your Thomasnet.com account
3. While you are on Thomasnet.com tab, Click on the extension and export the cookies. Cookies are used to authorize actor with Thomasnet.com site. Install any (or all) of the following chrome extensions to copy cookies:
    - <a href="https://chromewebstore.google.com/detail/copy-cookies/jcbpglbplpblnagieibnemmkiamekcdg" target="_blank" rel="noopener noreferrer nofollow ugc" previewlistener="true">Copy Cookies -> this ones is the easiest</a>
    - <a href="https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg" target="_blank" rel="noopener noreferrer nofollow ugc" previewlistener="true">EditThisCookie</a>
    - <a href="https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm" target="_blank" rel="noopener noreferrer nofollow ugc" previewlistener="true">Cookie-Editor</a>
5. **Paste** the cookies to this actor's Cookies input field, before pasting the cookies, make sure to remove everyting in the box.
6. **Specify** the Thomasnet.com search URL you want to scrape. Input your search URLs in the format `https://www.thomasnet.com/suppliers/discover/alabama/all-cities?searchterm=Machining%2C+Assembly+`. 
7. **Adjust** the scraper settings like `maxItems`, `maxConcurrency`, and `minConcurrency` to suit your requirements.
8. **Configure** proxy settings for better reliability and to avoid IP blocks.
9. **Run the Scraper**: Execute the scraper on the Apify platform. The output will be available in various formats like JSON, CSV, or Excel, depending on your preference.

### Input Configuration

Here's an example of how to set up the input for the Thomasnet.com Companies Scraper:

```json
{
    "startUrls": [
        "https://www.thomasnet.com/suppliers/discover/alabama/all-cities?searchterm=Machining%2C+Assembly+"
    ],
    "maxItems": 100,
    "maxConcurrency": 10,
    "minConcurrency": 1,
    "maxRequestRetries": 3,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
````

#### Input Fields Explanation

- **Start URLs** (`startUrls`): URLs of Thomasnet.com search result pages to scrape from.
- **Max Companies to Scrape per Crawl** (`maxItems`): Maximum number of companies that will be scraped in a single run. Default is `20`.
- **Max Concurrency** (`maxConcurrency`): Maximum number of pages that can be processed at the same time. Default is `100`.
- **Min Concurrency** (`minConcurrency`): Minimum number of pages that will be processed at the same time. Default is `1`.
- **Max Request Retries** (`maxRequestRetries`): Number of times the scraper will retry a failed request before giving up. Default is `20`.
- **Proxy Configuration** (`proxy`): Specifies proxy servers that will be used by the scraper to ensure anonymity and bypass rate limits. For more details, refer to the [Proxy configuration](https://apify.com/apify/web-scraper#proxy-configuration).

***

### Output Structure

The scraper produces a list of companies, with each company's information containing fields like:

```json
{
    "__typename": "Company",
    "news": null,
    "additionalInformation": null,
    "brands": null,
    "headingBrands": null,
    "whitepapers": null,
    "products": null,
    "families": [
        {
            "__typename": "CompanyFamily",
            "id": "157558",
            "name": "Assembly Services"
        },
        {
            "__typename": "CompanyFamily",
            "id": "152546",
            "name": "Fabrication Services"
        },
        {
            "__typename": "CompanyFamily",
            "id": "155411",
            "name": "Job Shop Services"
        },
        {
            "__typename": "CompanyFamily",
            "id": "151461",
            "name": "Machining"
        },
        {
            "__typename": "CompanyFamily",
            "id": "152403",
            "name": "Manufacturing Services"
        },
        {
            "__typename": "CompanyFamily",
            "id": "162578",
            "name": "Platforms"
        },
        {
            "__typename": "CompanyFamily",
            "id": "162428",
            "name": "Tooling"
        },
        {
            "__typename": "CompanyFamily",
            "id": "159981",
            "name": "Tools"
        },
        {
            "__typename": "CompanyFamily",
            "id": "153041",
            "name": "Totes"
        }
    ],
    "videos": null,
    "otherHeadings": null,
    "certificationTotals": null,
    "affiliatedMemberOf": null,
    "affiliationFeaturedMembers": null,
    "affiliationContactUrl": null,
    "affiliationCompanyLabel": null,
    "tgramsId": "30828201",
    "name": "Focus Fab, LLC",
    "logoUrl": null,
    "logoTitle": "Focus Fab, LLC Company Logo",
    "website": "http://focusfab.com/",
    "isClaimed": false,
    "xometryVerified": false,
    "isAdvertiser": false,
    "primaryPhone": "(888) 449-4877",
    "description": "Custom CNC machining, fabrication and assembly services. Materials handled include carbon steel and alloys, aluminum, copper, Delrin® and UHMW. Operator platforms, part nests, and tooling aids can be fabricated. Repairing, sandblast cleaning, frame straightening and repainting services are available.",
    "descriptionByCompany": null,
    "annualSales": "N/A",
    "numberEmployees": "10-49",
    "yearFounded": null,
    "otherActivities": null,
    "premiums": null,
    "address": {
        "__typename": "CompanyAddress",
        "address1": "5540 Parkwood Circle",
        "address2": null,
        "address3": null,
        "city": "Bessemer",
        "state": "AL",
        "stateName": "Alabama",
        "zip": "35022",
        "zip4": null,
        "country": "USA",
        "county": null,
        "latitude": 33.37,
        "longitude": -86.96
    },
    "tier": "NONE",
    "type": "C",
    "isMultiLocation": false,
    "mainLocationTgramsId": null,
    "mainLocationName": null,
    "locationTypes": [
        {
            "__typename": "CompanyLocationType",
            "id": 999,
            "name": "No Location Type Found"
        }
    ],
    "heading": null,
    "headings": [
        {
            "__typename": "CompanyHeading",
            "headingId": "1420207",
            "name": "Aluminum Fabrication",
            "familyName": "Fabrication Services",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "97001686",
            "name": "Assembly Services",
            "familyName": "Assembly Services",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "0",
            "name": "Company Profile Section",
            "familyName": null,
            "description": "Custom CNC machining, fabrication and assembly services. Materials handled include carbon steel and alloys, aluminum, copper, Delrin® and UHMW. Operator platforms, part nests, and tooling aids can be fabricated. Repairing, sandblast cleaning, frame straightening and repainting services are available.",
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "19741602",
            "name": "Copper Fabrication",
            "familyName": "Fabrication Services",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "27200203",
            "name": "Fabrication: Alloy",
            "familyName": "Fabrication Services",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "95990255",
            "name": "Fabrication: Carbon Steel",
            "familyName": "Fabrication Services",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "27092006",
            "name": "Fabricators",
            "familyName": "Fabrication Services",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "41626003",
            "name": "Job Shop Services",
            "familyName": "Job Shop Services",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "45340403",
            "name": "Machining",
            "familyName": "Machining",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "45328655",
            "name": "Machining: Aluminum",
            "familyName": "Machining",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "45330503",
            "name": "Machining: CNC",
            "familyName": "Machining",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "45330586",
            "name": "Machining: Copper",
            "familyName": "Machining",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "96000401",
            "name": "Machining: Steel",
            "familyName": "Machining",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "96000484",
            "name": "Manufacturing Services",
            "familyName": "Manufacturing Services",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "50550409",
            "name": "Metal Fabrication",
            "familyName": "Fabrication Services",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "50855006",
            "name": "Metalworking Services",
            "familyName": "Machining",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "50855006",
            "name": "Metalworking Services",
            "familyName": "Fabrication Services",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "53651204",
            "name": "Nests",
            "familyName": "Totes",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "61491601",
            "name": "Platforms",
            "familyName": "Platforms",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "61495503",
            "name": "Platforms: Custom",
            "familyName": "Platforms",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "79941605",
            "name": "Steel Fabrication",
            "familyName": "Fabrication Services",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "86013406",
            "name": "Tooling",
            "familyName": "Tooling",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "86028008",
            "name": "Tools",
            "familyName": "Tools",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "86169000",
            "name": "Tools: Custom",
            "familyName": "Tools",
            "description": null,
            "url": null
        },
        {
            "__typename": "CompanyHeading",
            "headingId": "86652138",
            "name": "Totes",
            "familyName": "Totes",
            "description": null,
            "url": null
        }
    ],
    "personnel": [
        {
            "__typename": "Personnel",
            "name": "David Lomasney",
            "title": "Owner"
        },
        {
            "__typename": "Personnel",
            "name": "Douglas McLeod",
            "title": "Owner"
        },
        {
            "__typename": "Personnel",
            "name": "David Lomasney",
            "title": "Owner"
        },
        {
            "__typename": "Personnel",
            "name": "Douglas McLeod",
            "title": "Owner"
        }
    ],
    "catalogType": null,
    "social": null,
    "isAffiliationPage": false,
    "companyAd": null,
    "ads": null,
    "item": {
        "__typename": "Company",
        "headingBrands": null,
        "headings": [
            {
                "__typename": "CompanyHeading",
                "headingId": "97001686",
                "naturalName": "Assembly Services"
            }
        ],
        "pdm_text": "Custom CNC <em>machining</em>, fabrication and <em>assembly</em> services. Materials handled include carbon steel and alloys, aluminum, copper, Delrin® and UHMW. Operator platforms, part nests, and tooling aids can be fabricated. Repairing, sandblast cleaning, frame straightening and repainting services are available.",
        "tgramsId": "30828201",
        "name": "Focus Fab, LLC",
        "xometryVerified": false,
        "isAdvertiser": false,
        "primaryPhone": "(888) 449-4877",
        "description": "Custom CNC machining, fabrication and assembly services. Materials handled include carbon steel and alloys, aluminum, copper, Delrin® and UHMW. Operator platforms, part nests, and tooling aids can be fabricated. Repairing, sandblast cleaning, frame straightening and repainting services are available.",
        "tier": "NONE",
        "type": "C",
        "mainLocationTgramsId": null,
        "mainLocationName": null,
        "otherActivities": null,
        "rank": "34.854347",
        "heading": null,
        "address": {
            "__typename": "CompanyAddress",
            "address1": "5540 Parkwood Circle",
            "address2": null,
            "address3": null,
            "city": "Bessemer",
            "state": "AL",
            "stateName": "Alabama",
            "zip": "35022",
            "zip4": null,
            "country": "USA",
            "county": null,
            "latitude": 33.37,
            "longitude": -86.96
        },
        "products": null,
        "catalogType": null,
        "videos": null,
        "annualSales": "N/A",
        "isMultiLocation": false,
        "logoUrl": null,
        "logoTitle": "Focus Fab, LLC Company Logo",
        "numberEmployees": "10-49",
        "yearFounded": null,
        "isClaimed": false,
        "website": "http://focusfab.com/"
    }
}
```

#### Output Fields Explanation

- **\_\_typename**: The GraphQL type of the object (usually "Company", "CompanyFamily", etc.).
- **news**: News related to the company (if available).
- **additionalInformation**: Any extra information about the company (if available).
- **brands**: Brands associated with the company.
- **headingBrands**: Brands related to specific company headings.
- **whitepapers**: Whitepapers published by the company.
- **products**: Products offered by the company.
- **families**: Array of service or product families the company belongs to. Each family has:
  - **id**: Unique identifier for the family.
  - **name**: Name of the family (e.g., "Assembly Services").
- **videos**: Videos related to the company.
- **otherHeadings**: Additional headings/categories for the company.
- **certificationTotals**: Certifications held by the company.
- **affiliatedMemberOf**: Organizations the company is affiliated with.
- **affiliationFeaturedMembers**: Featured members in the company’s affiliations.
- **affiliationContactUrl**: Contact URL for the affiliation.
- **affiliationCompanyLabel**: Label for the affiliated company.
- **tgramsId**: Unique Thomasnet company identifier.
- **name**: Company name.
- **logoUrl**: URL to the company’s logo image.
- **logoTitle**: Alt/title text for the company logo.
- **website**: Company website URL.
- **isClaimed**: Whether the company has claimed its Thomasnet profile.
- **xometryVerified**: Whether the company is verified by Xometry.
- **isAdvertiser**: Whether the company is an advertiser on Thomasnet.
- **primaryPhone**: Main phone number for the company.
- **description**: Company description and capabilities.
- **descriptionByCompany**: Description provided by the company itself.
- **annualSales**: Annual sales volume (if available).
- **numberEmployees**: Number of employees.
- **yearFounded**: Year the company was founded.
- **otherActivities**: Other activities or sectors the company is involved in.
- **premiums**: Premium features or listings for the company.
- **address**: Object containing address details:
  - **address1**: Street address.
  - **address2**: Additional address info.
  - **address3**: Additional address info.
  - **city**: City name.
  - **state**: State abbreviation.
  - **stateName**: Full state name.
  - **zip**: ZIP code.
  - **zip4**: ZIP+4 code.
  - **country**: Country.
  - **county**: County.
  - **latitude**: Latitude coordinate.
  - **longitude**: Longitude coordinate.
- **tier**: Thomasnet tier (e.g., NONE, REGISTERED, VERIFIED).
- **type**: Company type (e.g., "C" for company).
- **isMultiLocation**: Whether the company has multiple locations.
- **mainLocationTgramsId**: ID of the main location.
- **mainLocationName**: Name of the main location.
- **locationTypes**: Array of location types (e.g., "No Location Type Found").
- **heading**: Main heading/category for the company.
- **headings**: Array of headings/categories the company is listed under. Each heading has:
  - **headingId**: Unique identifier for the heading.
  - **name**: Name of the heading.
  - **familyName**: Family/category name.
  - **description**: Description of the heading.
  - **url**: URL for the heading.
- **personnel**: Array of key personnel at the company. Each person has:
  - **name**: Person’s name.
  - **title**: Person’s title/role.
- **catalogType**: Type of catalog (if any).
- **social**: Social media links or info.
- **isAffiliationPage**: Whether this is an affiliation page.
- **companyAd**: Company advertisement info.
- **ads**: Other advertisements.
- **item**: A nested object containing a summary or alternate representation of the company. This often duplicates key fields from the main company object, but may include additional or differently formatted data for convenience or internal use. Typical fields inside `item` include:
  - **\_\_typename**: The GraphQL type (usually "Company").
  - **headingBrands**: Brands related to specific company headings.
  - **headings**: Array of headings/categories, sometimes with a `naturalName` property.
  - **pdm\_text**: Company description with HTML formatting (e.g., `<em>` tags for emphasis).
  - **tgramsId**: Unique Thomasnet company identifier.
  - **name**: Company name.
  - **xometryVerified**: Whether the company is Xometry verified.
  - **isAdvertiser**: Whether the company is an advertiser.
  - **primaryPhone**: Main phone number.
  - **description**: Company description.
  - **tier**: Thomasnet tier.
  - **type**: Company type.
  - **mainLocationTgramsId**: ID of the main location.
  - **mainLocationName**: Name of the main location.
  - **otherActivities**: Other activities or sectors.
  - **rank**: Company ranking or score (if available).
  - **heading**: Main heading/category.
  - **address**: Address object (see above for address fields).
  - **products**: Products offered.
  - **catalogType**: Type of catalog.
  - **videos**: Videos related to the company.
  - **annualSales**: Annual sales volume.
  - **isMultiLocation**: Whether the company has multiple locations.
  - **logoUrl**: URL to the company’s logo.
  - **logoTitle**: Alt/title text for the logo.
  - **numberEmployees**: Number of employees.
  - **yearFounded**: Year the company was founded.
  - **isClaimed**: Whether the company has claimed its profile.
  - **website**: Company website URL.

***

### Explore More Scrapers

If you found this Apify Smartbuyglasses Scraper useful, be sure to check out our other powerful scrapers and actors at [memo23's Apify profile](https://apify.com/memo23). We offer a wide range of tools to enhance your web scraping and automation needs across various platforms and use cases.

### Support

- For issues or feature requests, please use the [Issues](https://console.apify.com/actors/a2HOBr55E3T4TZBcJ/issues) section of this actor.
- If you need customization or have questions, feel free to contact the author:
  - Author's website: <https://muhamed-didovic.github.io/>
  - Email: <muhamed.didovic@gmail.com>

### Additional Services

- Request customization or whole dataset: <muhamed.didovic@gmail.com>
- If you need anything else scraped, or this actor customized, email: <muhamed.didovic@gmail.com>
- For API services of this scraper (no Apify fee, just usage fee for the API), contact: <muhamed.didovic@gmail.com>
- Email: muhamed.didovic@gmail.com

# Actor input Schema

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

URLs to start with.

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

Maximum number of items/companies to scrape per crawl. The actor will stop scraping when it reaches this number.

## `maxConcurrency` (type: `integer`):

Maximum number of pages that can be processed at the same time.

## `minConcurrency` (type: `integer`):

Minimum number of pages that will be processed at the same time.

## `maxRequestRetries` (type: `integer`):

Number of times the crawler will retry a failed request before giving up.

## `enrichEmails` (type: `boolean`):

If enabled, the actor tries to find a contact email for each supplier by reading its own website's contact/about pages (e.g. sales@, info@). Adds contactEmail and contactWebsite columns plus a detailed emailEnrichment object. Best-effort, billed per contact email found; only charged when an email is returned, never for misses; works best for suppliers whose website is listed on ThomasNet. Adds some time per company.

## `cookies` (type: `array`):

<p>Cookie used to authorize actor with site. Install <a rel="noopener noreferrer nofollow" target="_blank" href="https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg" previewlistener="true">EditThisCookie</a> chrome extension. Login to your account. Click on the extension and export the cookies from the site. Insert the contents here</p>
## `proxy` (type: `object`):

Specifies proxy servers that will be used by the scraper in order to hide its origin.<br><br>For details, see <a href='https://apify.com/apify/web-scraper#proxy-configuration' target='_blank' rel='noopener'>Proxy configuration</a> in README.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.thomasnet.com/suppliers/search?cov=NA&heading=96000484&searchsource=suppliers&searchterm=manufa&what=Manufacturing+Services"
    }
  ],
  "maxItems": 10000,
  "maxConcurrency": 100,
  "minConcurrency": 1,
  "maxRequestRetries": 30,
  "enrichEmails": false,
  "cookies": [],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.thomasnet.com/suppliers/search?cov=NA&heading=96000484&searchsource=suppliers&searchterm=manufa&what=Manufacturing+Services"
        }
    ],
    "cookies": [],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/thomasnet-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 = {
    "startUrls": [{ "url": "https://www.thomasnet.com/suppliers/search?cov=NA&heading=96000484&searchsource=suppliers&searchterm=manufa&what=Manufacturing+Services" }],
    "cookies": [],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/thomasnet-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.thomasnet.com/suppliers/search?cov=NA&heading=96000484&searchsource=suppliers&searchterm=manufa&what=Manufacturing+Services"
    }
  ],
  "cookies": [],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/thomasnet-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/thomasnet-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Thomasnet.com Scraper (/w EMAILS)",
        "description": "Unlock detailed, structured data on manufacturers and industrial companies from Thomasnet.com—company names, contacts, descriptions, categories, and more—perfect for B2B leads, market research, and sales prospecting, all delivered automatically and at scale.",
        "version": "0.0",
        "x-build-id": "A0491gJIIH6UbFPeA"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~thomasnet-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-thomasnet-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~thomasnet-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-thomasnet-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~thomasnet-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-thomasnet-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls",
                    "cookies"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "URLs to start with.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Maximum number of items/companies to scrape per crawl!",
                        "type": "integer",
                        "description": "Maximum number of items/companies to scrape per crawl. The actor will stop scraping when it reaches this number.",
                        "default": 10000
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "type": "integer",
                        "description": "Maximum number of pages that can be processed at the same time.",
                        "default": 100
                    },
                    "minConcurrency": {
                        "title": "Min Concurrency",
                        "type": "integer",
                        "description": "Minimum number of pages that will be processed at the same time.",
                        "default": 1
                    },
                    "maxRequestRetries": {
                        "title": "Max Request Retries",
                        "type": "integer",
                        "description": "Number of times the crawler will retry a failed request before giving up.",
                        "default": 30
                    },
                    "enrichEmails": {
                        "title": "Enrich with contact emails (experimental, billed per email)",
                        "type": "boolean",
                        "description": "If enabled, the actor tries to find a contact email for each supplier by reading its own website's contact/about pages (e.g. sales@, info@). Adds contactEmail and contactWebsite columns plus a detailed emailEnrichment object. Best-effort, billed per contact email found; only charged when an email is returned, never for misses; works best for suppliers whose website is listed on ThomasNet. Adds some time per company.",
                        "default": false
                    },
                    "cookies": {
                        "title": "Cookies",
                        "type": "array",
                        "description": "<p>Cookie used to authorize actor with site. Install <a rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg\" previewlistener=\"true\">EditThisCookie</a> chrome extension. Login to your account. Click on the extension and export the cookies from the site. Insert the contents here</p>"
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Specifies proxy servers that will be used by the scraper in order to hide its origin.<br><br>For details, see <a href='https://apify.com/apify/web-scraper#proxy-configuration' target='_blank' rel='noopener'>Proxy configuration</a> in README.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
