# ThomasNet Suppliers Scraper (`khadinakbar/thomasnet-suppliers-scraper`) Actor

Scrape ThomasNet industrial suppliers by keyword, location, or URL. Returns name, phone, website, location, year founded, employees, certifications. MCP/API-ready.

- **URL**: https://apify.com/khadinakbar/thomasnet-suppliers-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Lead generation, Automation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 supplier scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Suppliers Scraper

Scrape **ThomasNet industrial suppliers** by keyword, location, category, or direct profile URL. Returns clean, structured JSON for every supplier: name, headline, phone, website, location, company type, claim/advertiser status, plus optional full-profile enrichment with description, year founded, employee count, annual sales, certifications, and product/service taxonomy.

ThomasNet (thomasnet.com) is the largest North-American industrial directory — **500,000+ verified manufacturers, distributors, and service providers** across 70,000 product categories. There is no public ThomasNet API, and the site is protected by **DataDome anti-bot**. Plain HTTP scrapers, datacenter proxies, and bare headless browsers get blocked. This actor uses **Camoufox (a Firefox anti-detect engine) + Apify Residential US proxy** to clear DataDome reliably.

### What you get

| Field | Description |
|-------|-------------|
| `supplierName` | Company name from the listing or profile |
| `supplierId` | Numeric ThomasNet ID (stable identifier extracted from the `/profile/{id}` URL) |
| `profileUrl` | Canonical ThomasNet profile URL |
| `headline` | One-line tagline / summary the supplier publishes |
| `companyType` | Manufacturer, distributor, service provider, custom mfr, etc. |
| `logoUrl` | Company logo image URL |
| `city` / `state` / `postalCode` / `country` | Parsed address parts |
| `fullAddress` | Raw address string as shown on the page |
| `phone` | Primary phone number (from a `tel:` link when present) |
| `website` | External company website (off-ThomasNet) |
| `description` *(enrich only)* | Long-form company description / "About" block |
| `yearFounded` *(enrich only)* | Year founded, parsed as a number |
| `employeeCount` *(enrich only)* | Employee count or band (e.g. `"50-99"`, `"100+"`) |
| `annualSales` *(enrich only)* | Annual revenue band (e.g. `"$10 to 50 Million"`) |
| `certifications` *(enrich only)* | Quality certifications list (ISO 9001, AS9100, ITAR, etc.) |
| `products` *(enrich only)* | Products / services / capabilities taxonomy |
| `isClaimed` | Whether the supplier has claimed/verified their profile |
| `isAdvertiser` | Sponsored / Premier / Featured supplier badge |
| `sourceUrl` | The listing URL the supplier was found on |
| `position` | Card position on its listing page (1-based index) |
| `enriched` | `true` if the profile page was visited for full data |
| `scrapedAt` | ISO 8601 timestamp |

### When to use

- **B2B lead generation** — find machine shops, fabricators, distributors, and contract manufacturers in any US state or city.
- **Procurement research** — build target lists by capability (CNC machining, sheet metal, injection molding) or certification (AS9100, ISO 13485).
- **Competitor intelligence** — pull every supplier in your category, with year founded and revenue band.
- **AI agents** — give Claude / ChatGPT / your MCP-connected agent a clean, paid-per-result ThomasNet tool. Returns structured JSON ready for downstream enrichment, scoring, or CRM import.

### When NOT to use

- You need supplier **emails** — ThomasNet hides email behind an internal RFQ form; phone and website are reliably populated, email is not.
- You need a **full crawl of all 500K suppliers in one run** — use targeted listing URLs (by city, state, category) and run in batches. ThomasNet anti-bot will throttle massive single runs.
- You need data from sites other than ThomasNet — see the matching actor in [Khadin's Apify portfolio](https://apify.com/khadinakbar).

### Input

Three input modes, freely mixable in a single run:

#### 1. Keyword search

```json
{
  "searchQueries": ["cnc machining", "sheet metal fabrication"],
  "maxResults": 50,
  "maxPagesPerQuery": 5
}
````

Each keyword is searched on ThomasNet's North-America directory and paginated up to `maxPagesPerQuery`.

#### 2. Listing URLs (location / category)

```json
{
  "startUrls": [
    "https://www.thomasnet.com/suppliers/usa/california/los-angeles",
    "https://www.thomasnet.com/products-suppliers/cnc-machining/",
    "https://www.thomasnet.com/suppliers/usa/texas/houston"
  ],
  "maxResults": 100,
  "maxPagesPerQuery": 10
}
```

Paginates each listing URL until either `maxResults` or `maxPagesPerQuery` is hit.

#### 3. Direct profile URLs

```json
{
  "startUrls": [
    "https://www.thomasnet.com/profile/12345678/acme-machining.html"
  ],
  "enrichDetails": true
}
```

Auto-detected from the URL pattern. Always scraped as enriched (full profile).

#### Detail enrichment toggle

`"enrichDetails": true` follows every listing card to its profile page to add description, year founded, employee count, annual sales, certifications, and products. Costs an extra `$0.003` per enriched supplier.

### Pricing — Pay-Per-Event

| Event | Price | When charged |
|-------|-------|--------------|
| `apify-actor-start` | `$0.00005` | Once per run, scaled by allocated RAM |
| `supplier-scraped` | **`$0.005`** | Each supplier returned (basic card) |
| `supplier-detail-enriched` | `$0.003` | Each supplier whose profile page is also scraped (`enrichDetails: true`) |

**Typical run costs**:

| Scenario | Cost |
|---|---|
| 20 suppliers, basic | ~ $0.10 |
| 50 suppliers, basic | ~ $0.25 |
| 100 suppliers, basic | ~ $0.50 |
| 100 suppliers, fully enriched | ~ $0.80 |
| 500 suppliers, fully enriched | ~ $4.00 |

Pay-Per-Usage (compute + proxy passthrough) is also enabled — heavy users can opt for usage-based billing instead of per-event.

### How it works

- **Browser**: [Camoufox](https://github.com/daijro/camoufox) (Firefox anti-detect). Plain headless Chromium + stealth gets soft-blocked on ~50% of DataDome navs; Camoufox clears reliably.
- **Proxy**: Apify Residential US primary, DataImpulse residential US as tier-2 fallback if Apify Residential keeps getting blocked. Datacenter IPs are rejected — residential is mandatory for ThomasNet.
- **Warmup**: Every session first visits `thomasnet.com` homepage to earn a `datadome` session cookie before hitting the target URL. This is the standard DataDome-bypass pattern.
- **Resilience**: 5 retry attempts per page, each with a fresh Camoufox session. Within a session, warmup itself retries with page reload. Confident "no results" pages are recognized as a graceful empty (not a block).
- **Cost safety**: a triple-guard charge counter physically blocks `Actor.charge()` past `maxResults`. Runs where DataDome blocks every session exit SUCCEEDED with an empty dataset and a terminal warning message — you are not billed for suppliers when blocked (only the `$0.00005` start fee).

#### Reliability

Based on brutal cloud testing (24+ runs across keyword searches, listing URLs, direct profile URLs, and edge cases), typical success rate is **~87%**. On the remaining ~13% of runs, DataDome blocks every one of the 5 residential-proxy sessions in a row — this is IP-reputation pool variance, not a scraper defect (successful sessions clear DataDome within seconds). In those cases the run exits with `Done. 0 suppliers scraped` and a `DataDome blocked all N navigation attempts` status message. Recommended pattern: retry the run once; the second attempt almost always succeeds because it pulls a fresh proxy IP.

Direct profile URLs (`/company/{slug}-{id}/profile`) and edge-case inputs (empty / non-ThomasNet URL) have near-100% success. The variance is on the keyword search flow.

### MCP-ready

Exposed in Apify's MCP server as `apify--thomasnet-suppliers-scraper`. Tool description, input descriptions, and output keys are written for AI-agent consumption: every field has a stable semantic key, every input has a working prefill, and the run prints a cost cap upfront so an agent can budget the call.

```bash
## Claude Desktop / ChatGPT MCP:
## Add https://mcp.apify.com?tools=khadinakbar/thomasnet-suppliers-scraper

## Direct API call:
apify call khadinakbar/thomasnet-suppliers-scraper --input='{
  "searchQueries": ["cnc machining"],
  "maxResults": 20
}'
```

### Output

Suppliers are pushed to the run's default dataset (one JSON record per supplier). An end-of-run summary lands in key-value store `OUTPUT` with counts, navigation success/block stats, the proxy tier used, and the billed cost in USD.

### Legal & ethical use

This actor scrapes **publicly accessible** company directory information from ThomasNet. You are responsible for using the data in compliance with ThomasNet's Terms of Service and applicable laws. Do not use this actor or its output for spam, fraud, harassment, or any unlawful purpose. The actor respects rate limits and does not attempt to access login-protected or paywalled content.

### Maintenance

Built and maintained by [@khadinakbar](https://apify.com/khadinakbar). Issues, feature requests, and broken-selector reports go to the actor's Issues tab on Apify.

### Companion actors

Pair with:

- [B2B Lead Finder & Enrichment](https://apify.com/khadinakbar/b2b-lead-finder-enrichment) — turn ThomasNet supplier websites into enriched contacts (emails, phones, socials).
- [Bulk Website Contact Extractor](https://apify.com/khadinakbar/bulk-website-contact-extractor) — bulk-scan the `website` field for emails + phones across the whole dataset.
- [Email Address Validator](https://apify.com/khadinakbar/email-address-validator) — validate any emails you derive before outreach.

# Actor input Schema

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

Free-text searches run on ThomasNet's nsearch (e.g. 'cnc machining', 'sheet metal fabrication', 'plastic injection molding'). Each keyword is searched separately across the entire North America directory and paginated up to maxPagesPerQuery. Use this for product/service-led supplier discovery. NOT a URL — to scrape a specific category, state, or city page use startUrls instead.

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

Direct ThomasNet URLs. Supported: (1) nsearch results URLs — e.g. https://www.thomasnet.com/nsearch.html?cov=NA\&searchterm=cnc%20machining (paginated like a search); (2) supplier profile URLs — e.g. https://www.thomasnet.com/company/fruehauf-manufacturing-30088334/profile (scraped as one enriched supplier). NOT supported: /products-suppliers/ or /suppliers/usa/{state} directory URLs (these are subcategory hubs, not supplier listings — use searchQueries with a keyword instead).

## `maxResults` (type: `integer`):

Hard cap on the total number of suppliers scraped and billed across all queries and URLs. The run stops once this is reached. Defaults to 20; max 5000. Primary cost control — at $0.005/supplier basic, 20 suppliers is about $0.10. With enrichDetails on, double the cost estimate.

## `maxPagesPerQuery` (type: `integer`):

How many listing pages (about 20-30 suppliers each) to paginate through for each keyword or listing URL before moving on. Defaults to 5; max 50. Lower it to sample top results; raise it for deep coverage. Bounded again by maxResults.

## `enrichDetails` (type: `boolean`):

When true, every listing supplier is followed to its own ThomasNet profile to add full description, employee count, year founded, annual sales, certifications, products taxonomy, and additional contact details. Slower and costs an extra $0.003 per enriched supplier on top of the base $0.005. Leave false for fast listing-level data (name, phone, website, location, headline) only.

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

Proxy used for all requests. ThomasNet uses DataDome and blocks every datacenter IP — by default this actor uses Apify Residential pinned to the US for highest success rate. Override only if you have your own residential proxy; datacenter proxies will be blocked.

## Actor input object example

```json
{
  "searchQueries": [
    "cnc machining",
    "sheet metal fabrication"
  ],
  "startUrls": [
    "https://www.thomasnet.com/nsearch.html?cov=NA&searchterm=cnc%20machining",
    "https://www.thomasnet.com/company/fruehauf-manufacturing-30088334/profile"
  ],
  "maxResults": 20,
  "maxPagesPerQuery": 5,
  "enrichDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `dataset` (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"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/thomasnet-suppliers-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["cnc machining"],
    "maxResults": 20,
}

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ThomasNet Suppliers Scraper",
        "description": "Scrape ThomasNet industrial suppliers by keyword, location, or URL. Returns name, phone, website, location, year founded, employees, certifications. MCP/API-ready.",
        "version": "1.1",
        "x-build-id": "NIJvEcN8gZhyAM4TK"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~thomasnet-suppliers-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-thomasnet-suppliers-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/khadinakbar~thomasnet-suppliers-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-thomasnet-suppliers-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/khadinakbar~thomasnet-suppliers-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-thomasnet-suppliers-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",
                "properties": {
                    "searchQueries": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "Free-text searches run on ThomasNet's nsearch (e.g. 'cnc machining', 'sheet metal fabrication', 'plastic injection molding'). Each keyword is searched separately across the entire North America directory and paginated up to maxPagesPerQuery. Use this for product/service-led supplier discovery. NOT a URL — to scrape a specific category, state, or city page use startUrls instead.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "ThomasNet nsearch or profile URLs",
                        "type": "array",
                        "description": "Direct ThomasNet URLs. Supported: (1) nsearch results URLs — e.g. https://www.thomasnet.com/nsearch.html?cov=NA&searchterm=cnc%20machining (paginated like a search); (2) supplier profile URLs — e.g. https://www.thomasnet.com/company/fruehauf-manufacturing-30088334/profile (scraped as one enriched supplier). NOT supported: /products-suppliers/ or /suppliers/usa/{state} directory URLs (these are subcategory hubs, not supplier listings — use searchQueries with a keyword instead).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max suppliers",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Hard cap on the total number of suppliers scraped and billed across all queries and URLs. The run stops once this is reached. Defaults to 20; max 5000. Primary cost control — at $0.005/supplier basic, 20 suppliers is about $0.10. With enrichDetails on, double the cost estimate.",
                        "default": 20
                    },
                    "maxPagesPerQuery": {
                        "title": "Max pages per query",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "How many listing pages (about 20-30 suppliers each) to paginate through for each keyword or listing URL before moving on. Defaults to 5; max 50. Lower it to sample top results; raise it for deep coverage. Bounded again by maxResults.",
                        "default": 5
                    },
                    "enrichDetails": {
                        "title": "Scrape full supplier profiles",
                        "type": "boolean",
                        "description": "When true, every listing supplier is followed to its own ThomasNet profile to add full description, employee count, year founded, annual sales, certifications, products taxonomy, and additional contact details. Slower and costs an extra $0.003 per enriched supplier on top of the base $0.005. Leave false for fast listing-level data (name, phone, website, location, headline) only.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy used for all requests. ThomasNet uses DataDome and blocks every datacenter IP — by default this actor uses Apify Residential pinned to the US for highest success rate. Override only if you have your own residential proxy; datacenter proxies will be blocked.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
