# ChemNet Scraper & API - Chemical Suppliers by CAS, E-mails (`rel8ble/chemnet-scraper`) Actor

ChemNet scraper and API for chemical suppliers by chemical name or CAS number. One result = one supplier: company, country, e-mail, phone, fax, website, address, manufacturer and Gold flags, plus CAS, EINECS, formula and hazard data. No login. $1.50 per 1,000, contact card included.

- **URL**: https://apify.com/rel8ble/chemnet-scraper.md
- **Developed by:** [Giovanni Rich](https://apify.com/rel8ble) (community)
- **Categories:** Lead generation, E-commerce, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 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/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

## ChemNet Scraper - Chemical Suppliers by Name or CAS, with E-mails & Phones

**ChemNet scraper** for chemical buyers, procurement teams, distributors, sourcing agents and B2B lead-gen teams: enter a chemical name such as `oxalic acid`, `sodium benzoate` or `titanium dioxide`, or a **CAS number** such as `144-62-7`, and get the suppliers ChemNet.com lists for it as clean JSON, CSV or Excel. Each row is one supplier with its **company name, country, address, e-mail, phone, fax and website**, Gold Supplier and manufacturer flags, and the **chemical property card** (CAS, EINECS, formula, molecular weight, melting / boiling / flash point, hazard codes). Use it as a **chemical supplier finder**, a **CAS number supplier lookup**, a **chemical manufacturer e-mail list** builder, or an unofficial **ChemNet API** from your own code, Make, Zapier or n8n.

It works over plain HTTP, with **no browser and no login**. 20 suppliers take about 4 seconds (3 requests).

### What you get

- **Supplier**: company name, ChemNet supplier ID, **country** (China, India, United States, Germany, United Kingdom ...), **address**, first **e-mail** plus all e-mails, **phone**, **fax**, **website**, Gold Supplier flag, manufacturer flag, offer page, full catalog page, enquiry form link and up to 5 other chemicals the supplier sells. Contact-person names are not collected.
- **Chemical card**: product name, **CAS number**, **EINECS / EC number**, molecular formula and weight, synonyms, melting point, boiling point, flash point, water solubility, hazard symbols, risk codes, safety phrases, structure image.
- **Context**: search term, region used, number of suppliers ChemNet lists for the chemical in that region, supplier list URL.

### Sample output

Real rows from a run with the default input (`oxalic acid`, 20 results):

| Supplier | Country | E-mail | Phone | Website | Gold | Manufacturer |
|---|---|---|---|---|---|---|
| Shijiazhuang Taihe Chemical Co.,Ltd. | China | taihechem@tom.com | +86-311-87047555,87046555, 013803374860 | taihechemical.com | yes | yes |
| Shenzhen Fast Chemical Co.,Ltd | China | info@fastchemical.cn | +86-755-8221 0593 | fastchemical.cn | yes | no |
| LINYI KEMELE CO., LTD. | China | sales@kmchem.com | +86-539-3330033 | kmchem.com | yes | no |
| Smart Chemicals Group Co. Ltd. | China | info@hebeismart.com | +86-21-33927743;33927342 | hebeismart.com | yes | no |
| Wenzhou Chemical Material Factory | China | sales@cnjxchem.com | +86-577-88799961 88795800 88799963 88799960 88799962 | cnjxchem.com | no | yes |

Fill rates on those 20 rows: company, country, address, e-mail, phone and the chemical card (CAS 144-62-7, EINECS 205-634-3, C2H2O4, hazard Xn) 100%; fax 95%; website 65%. Across 70 suppliers in other regions: e-mail 90%, phone 94%, fax 90%, website 70%.

### Why this one

- **The only ChemNet scraper on the Apify Store** (searches "chemnet", "chemical suppliers", "cas number" and "chemical", checked 1 November 2026).
- **$1.50 per 1,000 suppliers with the full contact card**, no start fee. The other chemical-supplier actors charge $2.00 per 1,000 supplier rows plus a start fee (crawloop Knowde), $2.10 per 1,000 suppliers (crawloop ECHEMI) or $10.00 per 1,000 (ChemicalBook scrapers); the PubChem actors ($1.50-$2.50) return compound data, not suppliers.
- **Search by CAS number** for an exact chemical, or by name across salts and grades.
- **Plain HTTP, no login**: the 20-row default run takes about 4 seconds.

### Use cases

- **Chemical sourcing**: find every company that sells a chemical, by name or CAS number, and send RFQs by e-mail.
- **Supplier qualification**: shortlist manufacturers and Gold Suppliers in a target country or region.
- **B2B lead generation**: build e-mail and phone lists of chemical producers, traders and distributors per product (`withEmailOnly`, `country`).
- **Competitor and market mapping**: see how many suppliers each region lists for a chemical (`regionSupplierCount`) and who they are.
- **Data enrichment**: add CAS, EINECS, formula, molecular weight and hazard codes to a product list.
- **AI agents**: an agent can call this actor with a chemical name or CAS number and read back supplier contacts (see the MCP note below).

### Example inputs for common jobs

Suppliers of a chemical (default):

```json
{ "searchTerms": ["oxalic acid"], "maxResultsPerSearch": 20 }
```

Exact chemical by CAS number, Indian suppliers with an e-mail only:

```json
{ "searchTerms": ["144-62-7", "532-32-1"], "maxResultsPerSearch": 100, "region": "India", "withEmailOnly": true }
```

Every German supplier of titanium dioxide:

```json
{ "searchTerms": ["titanium dioxide"], "maxResultsPerSearch": 0, "maxProductsPerSearch": 1, "region": "Europe", "country": "Germany" }
```

Gold Suppliers in China across several chemicals, one row per company:

```json
{ "searchTerms": ["sodium benzoate", "citric acid", "glyoxylic acid"], "maxResultsPerSearch": 50, "region": "China", "goldOnly": true, "uniqueSuppliers": true }
```

A ChemNet supplier list or search URL:

```json
{
  "searchTerms": [
    "https://www.chemnet.com/Global/Products/Oxalic-acid/Suppliers-0-0.html",
    "https://www.chemnet.com/Products/supplier.cgi?f=plist;terms=sodium%20benzoate"
  ],
  "maxResultsPerSearch": 0
}
```

### How to use

1. Open the actor and type one or more chemical names (English) or CAS numbers, or paste ChemNet URLs, into **Chemicals**.
2. Set **Max suppliers per search** (default 20; 0 = every supplier ChemNet lists).
3. Optionally pick a region and filters (e-mail, website, manufacturer, Gold Supplier, country), and how many matching chemicals to read per name search.
4. Click **Start**. Download the dataset as JSON, CSV, Excel or HTML, or read it through the API.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `searchTerms` | array | `["oxalic acid"]` | Chemical names, CAS numbers, ChemNet search URLs or supplier list URLs. |
| `maxResultsPerSearch` | integer | 20 | Supplier rows per chemical / URL. 0 = every supplier (10 per page). |
| `maxProductsPerSearch` | integer | 3 | A name search can match several ChemNet entries (e.g. "Oxalic acid", "Oxalic acid dihydrate"); suppliers are read from the first N, best match first. 1 = exact chemical only. |
| `region` | string | `Global` | `Global`, `China`, `Europe`, `India`, `Japan`, `South-Korea`, `United-States`, `Other-Regions`. |
| `uniqueSuppliers` | boolean | true | A company listed under several matching chemicals appears once per search. |
| `withEmailOnly` | boolean | false | Only suppliers with an e-mail. |
| `withWebsiteOnly` | boolean | false | Only suppliers with a website. |
| `manufacturersOnly` | boolean | false | Only companies that call themselves manufacturer / factory. |
| `goldOnly` | boolean | false | Only ChemNet Gold Suppliers. |
| `country` | string | - | Only suppliers from this country (e.g. `Germany`, `United Kingdom`). |
| `maxConcurrency` | integer | 5 | Parallel searches. |
| `maxRequestRetries` | integer | 8 | Retries per failed request, each on a new proxy session. |
| `proxyConfiguration` | object | Apify Proxy | Datacenter proxy works; switch to RESIDENTIAL only if the log shows repeated blocks. |

Inputs that are not chemical names, CAS numbers or ChemNet URLs are skipped and listed in the `RUN_SUMMARY` record; they are never charged. A search with no match is reported in the log and costs nothing.

### Output example

One real row (synonyms and lists shortened):

```json
{
  "searchTerm": "oxalic acid",
  "position": 1,
  "productName": "Oxalic acid",
  "casNumber": "144-62-7",
  "einecs": "205-634-3",
  "molecularFormula": "C2H2O4",
  "molecularWeight": 90.03548,
  "synonyms": ["Ethanedionic acid", "Oxalic acid anhydrous", "Refined Oxalic Acid"],
  "meltingPoint": "189-191℃",
  "boilingPoint": "365.1°C at 760 mmHg",
  "flashPoint": "188.8°C",
  "waterSolubility": "90 g/L (20℃)",
  "hazardSymbols": "Xn",
  "riskCodes": "R21/22",
  "safetyDescription": "S24/25",
  "structureImage": "https://images.chemnet.com/suppliers/chembase/191/1915.gif",
  "supplierName": "Shijiazhuang Taihe Chemical Co.,Ltd.",
  "supplierId": "16230",
  "supplierCountry": "China",
  "isManufacturer": true,
  "goldSupplier": true,
  "address": "Room 1901,Unit 5 FUTURE MALL BUILDING, No.58 Yucai Str.,Hebei,China",
  "email": "taihechem@tom.com",
  "emails": ["taihechem@tom.com", "yonghuah@263.net"],
  "phone": "+86-311-87047555,87046555, 013803374860",
  "fax": "+86-311-87047666",
  "website": "http://www.taihechemical.com",
  "supplierProductUrl": "https://www.chemnet.com/ChinaSuppliers/16230/Oxalic-acid--1217409.html",
  "supplierCatalogUrl": "https://www.chemnet.com/ChinaSuppliers/16230/Products-Catalog--1.html",
  "otherProducts": ["Formic acid", "Oxalic acid", "Anhydrous sodium sulfate", "Cyanuric acid"],
  "region": "Global",
  "regionSupplierCount": 340,
  "productSuppliersUrl": "https://www.chemnet.com/Global/Products/Oxalic-acid/Suppliers-0-0.html",
  "scrapedAt": "2026-10-31T17:56:58.981Z"
}
```

The dataset has three table views in the Apify console: **Supplier leads** (company and contacts), **Full contact card** (address, fax, offer page) and **Chemical data** (the property card). A `RUN_SUMMARY` record lists per-search counts, chemicals read, ignored inputs and stop reasons.

### Pricing

**$1.50 per 1,000 results** (pay per result), with the full contact card and chemical data included. Apify platform usage and proxies are included in that price. Filtered rows, duplicate suppliers and failed requests are never charged, and there is no start fee.

| Run | Results | Cost |
|---|---|---|
| Default input (`oxalic acid`, 20 rows) | 20 | $0.03 |
| Every supplier ChemNet lists for one chemical (global) | about 340 | about $0.51 |
| Gold Suppliers in China, 3 chemicals x 50 | up to 150 | up to $0.23 |
| 100 CAS numbers x 20 suppliers | 2,000 | $3.00 |

Apify's free plan ($5 of monthly credit) covers about 3,300 results.

### Integrations

Run it on an Apify schedule, through the Apify REST API, the JavaScript / Python clients, Make, Zapier, n8n, Google Sheets, or from AI agents via the Apify MCP server. Join runs on `supplierId` to build a supplier CRM, or on `casNumber` to map suppliers per chemical.

### FAQ

**Name or CAS number?**
A CAS number gives exactly one chemical. A name search can match several ChemNet entries (salts, grades, synonyms); the actor reads the best `maxProductsPerSearch` matches (default 3) and, with `uniqueSuppliers`, lists each company once.

**Why are the first rows all from China?**
ChemNet lists Chinese members first on the global list. Pick a `region` (India, Europe, United States ...) or set `country` to get suppliers from elsewhere.

**Are prices or MOQs included?**
No. ChemNet suppliers quote on request; this actor gives you who sells the chemical and how to contact them.

**Where do the e-mails come from?**
They are the business contacts each company publishes on its ChemNet supplier listing. Contact-person names are not collected.

**Is there an official ChemNet API?**
We found no public ChemNet API for supplier search; buyers use the website and its enquiry forms. This actor reads the same public supplier lists and returns them as JSON.

**How much does a typical job cost?**
All of a chemical's global suppliers (about 340 for oxalic acid) is about $0.51. A 2,000-row CAS list is $3.00.

**For AI agents (MCP):** input is a list of chemical names or CAS numbers plus an optional region and filters; output is one JSON row per supplier with country, e-mail, phone, website and the chemical card; typical cost is $0.03 for 20 rows; use it when you need suppliers or manufacturers of a specific chemical.

This actor is not affiliated with ChemNet. It reads public pages that ChemNet's robots.txt allows.

Need a custom scraper or a ready dataset? Hire me on Fiverr: https://www.fiverr.com/rel8ble

# Actor input Schema

## `searchTerms` (type: `array`):

Provide at least one. English chemical names ("oxalic acid", "sodium benzoate", "titanium dioxide"), CAS numbers ("144-62-7") or chemnet.com URLs: a search (https://www.chemnet.com/Products/supplier.cgi?f=plist;terms=...) or a supplier list (https://www.chemnet.com/Global/Products/Oxalic-acid/Suppliers-0-0.html). Default \["oxalic acid"] (demo).

## `maxResultsPerSearch` (type: `integer`):

Optional. Supplier rows saved per chemical / URL, integer >= 0. Default 20; 0 = every supplier ChemNet lists. You pay per row.

## `maxProductsPerSearch` (type: `integer`):

Optional, 1-20. A name search can match several ChemNet product entries (e.g. "Oxalic acid", "Oxalic acid dihydrate", "Glyoxalic acid"). Suppliers are read from the first N matches, best match first. Default 3; use 1 for the exact chemical only. A CAS number search usually matches exactly one.

## `region` (type: `string`):

Optional. Only suppliers in this region. Default Global (all regions).

## `uniqueSuppliers` (type: `boolean`):

Default true: a company listed under several matching chemicals appears once per search. false = one row per supplier and chemical.

## `withEmailOnly` (type: `boolean`):

Optional. Skip suppliers without a published e-mail. Default false.

## `withWebsiteOnly` (type: `boolean`):

Optional. Skip suppliers without a website. Default false.

## `manufacturersOnly` (type: `boolean`):

Optional. Keep only companies that list themselves as manufacturer / factory (few do, so expect fewer rows). Default false.

## `goldOnly` (type: `boolean`):

Optional. Keep only ChemNet Gold Suppliers (paid, active members). Default false.

## `country` (type: `string`):

Optional. Keep only suppliers from this country, e.g. "Germany", "United Kingdom", "China". Pair with the matching region for speed.

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

Optional, advanced. Parallel searches, 1-20. Default 5.

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

Optional, advanced. Retries per failed request (each on a new proxy session), 0-20. Default 8.

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

Optional, advanced. Default Apify Proxy (datacenter), which works for ChemNet. Switch to {"useApifyProxy": true, "apifyProxyGroups": \["RESIDENTIAL"]} only if the log shows repeated blocks.

## Actor input object example

```json
{
  "searchTerms": [
    "oxalic acid"
  ],
  "maxResultsPerSearch": 20,
  "maxProductsPerSearch": 3,
  "region": "Global",
  "uniqueSuppliers": true,
  "withEmailOnly": false,
  "withWebsiteOnly": false,
  "manufacturersOnly": false,
  "goldOnly": false,
  "maxConcurrency": 5,
  "maxRequestRetries": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per supplier: company, country, e-mail, phone, fax, website, address and the chemical property card.

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

Per-search counts, products read, ignored inputs and stop reasons.

# 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 = {
    "searchTerms": [
        "oxalic acid"
    ],
    "maxResultsPerSearch": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rel8ble/chemnet-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 = {
    "searchTerms": ["oxalic acid"],
    "maxResultsPerSearch": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("rel8ble/chemnet-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 '{
  "searchTerms": [
    "oxalic acid"
  ],
  "maxResultsPerSearch": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call rel8ble/chemnet-scraper --silent --output-dataset

```

## MCP server setup

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