# Product Hunt Scraper (with Email Enrichment) (`khadinakbar/producthunt-scraper-pro`) Actor

Extract product names, upvotes, makers, taglines, and website URLs from ProductHunt MCP-ready. $2.00/1K.

- **URL**: https://apify.com/khadinakbar/producthunt-scraper-pro.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Lead generation, MCP servers, Open source
- **Stats:** 46 total users, 12 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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

## ProductHunt Scraper Pro — Extract Listings with Email & LinkedIn Enrichment

Extract structured data from ProductHunt — product names, upvote counts, makers, taglines, website URLs, topics, and more. Optionally crawl each product's website to find **email addresses, LinkedIn company pages, Twitter handles, Facebook pages, and phone numbers** — all in a single actor run.

Supports four scraping modes: **daily/weekly/monthly/yearly leaderboard**, **keyword search**, **topic/category browsing**, and **direct URL scraping**.

---

### What This Actor Extracts

#### From ProductHunt (always)

| Field | Type | Description |
|---|---|---|
| `product_name` | string | Official product name |
| `tagline` | string | One-line product description |
| `description` | string | Full product description |
| `upvote_count` | integer | Total upvotes received |
| `comment_count` | integer | Number of comments |
| `daily_rank` | integer | Leaderboard position (#1 = most upvoted) |
| `launch_date` | string | Date featured on PH (YYYY-MM-DD) |
| `product_hunt_url` | string | Full PH product page URL |
| `website_url` | string | Product's own website |
| `topics` | array | Category tags (e.g. "AI", "Productivity") |
| `thumbnail_url` | string | Product logo/image URL |
| `makers` | array | Founders with name, username, Twitter, PH profile |
| `featured` | boolean | Whether PH editorially featured this product |

#### From Product Websites (when `enrichContacts: true`)

| Field | Type | Description |
|---|---|---|
| `emails` | array | Email addresses found on the site |
| `linkedin_url` | string | LinkedIn company page |
| `twitter_url` | string | Twitter/X profile |
| `facebook_url` | string | Facebook page |
| `phone_numbers` | array | Phone numbers (tel: links) |

---

### Scraping Modes

#### 1. Leaderboard (default)

Scrape ProductHunt's ranked lists for any time period.

```json
{
    "mode": "leaderboard",
    "leaderboardPeriod": "daily",
    "maxResults": 50
}
````

Supported periods: `daily`, `weekly`, `monthly`, `yearly`.

#### 2. Keyword Search

Find products matching a keyword or niche.

```json
{
    "mode": "search",
    "searchQuery": "AI writing tools",
    "maxResults": 100
}
```

#### 3. Topic / Category

Scrape all products under a ProductHunt topic.

```json
{
    "mode": "topic",
    "topic": "artificial-intelligence",
    "maxResults": 200
}
```

Popular topic slugs: `artificial-intelligence`, `developer-tools`, `marketing`, `productivity`, `saas`, `chrome-extensions`, `no-code`, `design-tools`.

#### 4. Direct URLs

Scrape specific ProductHunt pages.

```json
{
    "mode": "urls",
    "startUrls": [
        { "url": "https://www.producthunt.com/posts/notion-ai" },
        { "url": "https://www.producthunt.com/leaderboard/daily/2026/3/28" }
    ]
}
```

***

### Contact Enrichment Example

Get emails and social links for every product in today's top 50:

```json
{
    "mode": "leaderboard",
    "leaderboardPeriod": "daily",
    "maxResults": 50,
    "enrichContacts": true
}
```

**Output:** Two record types in the same dataset, joined on `product_hunt_url`:

- `record_type: "product"` — full PH data for each product
- `record_type: "contact_enrichment"` — emails, LinkedIn, Twitter from their website

***

### How It Works

ProductHunt is built on Next.js with Apollo GraphQL. Instead of fragile CSS selector parsing (which breaks every time PH updates their frontend), this actor extracts data directly from the **Apollo client cache** embedded in `window.__NEXT_DATA__`. This normalized JSON cache contains all product data in a structured format, making extraction reliable regardless of UI changes.

For contact enrichment, a separate CheerioCrawler visits each product's website and:

- Scans `mailto:` links for email addresses
- Runs a regex scan of the page text for additional email patterns
- Decodes platform redirect wrappers (`/redirect?url=https://linkedin.com/...`) before filtering social links — a key detail many scrapers miss
- Extracts LinkedIn, Twitter/X, Facebook, and tel: phone links

***

### Pricing

This actor uses **PAY\_PER\_EVENT** pricing — you pay only for what you actually use:

- **`result-found`** — charged per product record extracted from ProductHunt
- **`result-enriched`** — charged per website enrichment record (email/LinkedIn/Twitter)

You can set a budget cap in the Apify console to control total spend per run.

***

### Output Format

Results are stored in the default Apify dataset. Filter and join records by `record_type`:

```javascript
// Product records
const products = results.filter(r => r.record_type === 'product');

// Enrichment records
const contacts = results.filter(r => r.record_type === 'contact_enrichment');

// Join them
const enriched = products.map(p => ({
    ...p,
    ...contacts.find(c => c.product_hunt_url === p.product_hunt_url),
}));
```

***

### Typical Use Cases

**Lead generation for B2B sales** — Find newly launched SaaS products and contact their founders before they hit scale.

**Market research** — Track which categories are growing on ProductHunt week over week.

**Competitor monitoring** — Get notified when a competitor launches or when products in your category surge in upvotes.

**Investor sourcing** — Identify high-upvote early-stage products with their maker contact info.

**Content creation** — Build "Top ProductHunt launches this week" roundups automatically.

**AI agent pipelines** — Feed ProductHunt data into Claude, ChatGPT, or any LLM agent via the Apify MCP server.

***

### FAQ

**Does this require a ProductHunt API key?**
No. This actor scrapes the public ProductHunt website. No API key or account is needed.

**How fresh is the data?**
Data is scraped in real time when you run the actor. Daily leaderboard data reflects the current day's standings at the time of the run.

**How accurate is the contact enrichment?**
Email accuracy depends on how openly each product's website publishes contact info. Most SaaS products publish at least one email. Social links (LinkedIn, Twitter) are found on ~70-80% of product websites.

**Can I scrape historical leaderboards?**
Yes — ProductHunt keeps historical leaderboard pages. Use mode `urls` and provide the historical leaderboard URL (e.g. `https://www.producthunt.com/leaderboard/daily/2025/12/25`).

**What's the maximum results I can get per run?**
The `maxResults` cap is 5,000. For larger datasets, run the actor multiple times with different date ranges or topics.

***

### Integration with AI Agents (MCP)

This actor is fully compatible with the **Apify MCP server** (`mcp.apify.com`). When connected to Claude, ChatGPT, or Cursor via MCP, AI agents can call this actor directly using natural language:

> "Find today's top 20 AI tools on ProductHunt and get their founders' emails"

The agent will set `mode: "leaderboard"`, `leaderboardPeriod: "daily"`, `maxResults: 20`, `enrichContacts: true` and return a complete dataset.

***

### Support

Found a bug or have a feature request? Leave a review or open an issue on the actor's GitHub page. Pull requests welcome.

**Built by:** USERNAME/producthunt-scraper-pro

# Actor input Schema

## `mode` (type: `string`):

How to find products. Use 'leaderboard' for top-ranked products by time period. Use 'search' when the user provides a keyword. Use 'topic' for a ProductHunt topic slug. Use 'urls' for specific ProductHunt URLs.

## `leaderboardPeriod` (type: `string`):

Only used when mode='leaderboard'. Choose 'daily', 'weekly', 'monthly', or 'yearly'.

## `searchQuery` (type: `string`):

Used when mode='search'. Enter a keyword or niche to search ProductHunt (e.g. 'AI writing tools', 'developer tools').

## `topic` (type: `string`):

Used when mode='topic'. The ProductHunt topic URL slug (e.g. 'artificial-intelligence', 'developer-tools', 'productivity').

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

Used when mode='urls'. List of specific ProductHunt URLs to scrape.

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

Maximum number of products to return. Default is 100.

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

Number of pages to scrape simultaneously. Default is 5.

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

When enabled, discovers emails for each product's website using a 3-layer waterfall: Hunter.io API → Snov.io API → page scraping fallback. Default is true.

## `startDate` (type: `string`):

For leaderboard daily mode: query a specific date. Leave blank for today. Use with endDate to scrape a date range in one run (e.g. startDate=2026-03-01, endDate=2026-03-07 → full week).

## `endDate` (type: `string`):

Optional end date for multi-day scraping in one run. Only used in daily leaderboard mode. Example: startDate=2026-03-01, endDate=2026-03-07 returns all products launched across that 7-day window.

## `lookbackDays` (type: `integer`):

Alternative to startDate: scrape the last N days from today. E.g. lookbackDays=7 pulls the last week. Ignored when startDate is provided.

## `outputMode` (type: `string`):

Controls what gets returned. 'full' = all fields (default). 'lean' = minimal fields optimized for LLM/AI agent context windows (name, tagline, website, upvotes, rank, emails, topics). 'leads' = full fields but only products where at least 1 email was found — perfect for outreach lists.

## `hunterApiKey` (type: `string`):

Hunter.io is the industry-standard email enrichment API with ~65-80% hit rate on SaaS/startup domains. Get a free key at https://hunter.io (25 domain searches/month free). Without this key, the actor falls back to basic page scraping which has much lower success on modern JS-rendered sites.

## `snovClientId` (type: `string`):

Snov.io client ID for email enrichment — used as fallback if Hunter.io finds nothing. Get credentials at https://snov.io → Settings → API (50 searches/month free).

## `snovClientSecret` (type: `string`):

Snov.io client secret. Required alongside snovClientId.

## Actor input object example

```json
{
  "mode": "leaderboard",
  "leaderboardPeriod": "daily",
  "startUrls": [
    {
      "url": "https://www.producthunt.com/"
    }
  ],
  "maxResults": 100,
  "maxConcurrency": 5,
  "enrichEmails": true,
  "lookbackDays": 1,
  "outputMode": "full"
}
```

# Actor output Schema

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

All scraped ProductHunt products. Each item contains product\_name, tagline, upvote\_count, rank, website\_url, emails, makers, topics, and more.

# 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.producthunt.com/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/producthunt-scraper-pro").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.producthunt.com/" }] }

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/producthunt-scraper-pro").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.producthunt.com/"
    }
  ]
}' |
apify call khadinakbar/producthunt-scraper-pro --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Product Hunt Scraper (with Email Enrichment)",
        "description": "Extract product names, upvotes, makers, taglines, and website URLs from ProductHunt MCP-ready. $2.00/1K.",
        "version": "1.1",
        "x-build-id": "67A3mfTDDethmQBbu"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~producthunt-scraper-pro/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-producthunt-scraper-pro",
                "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~producthunt-scraper-pro/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-producthunt-scraper-pro",
                "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~producthunt-scraper-pro/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-producthunt-scraper-pro",
                "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": {
                    "mode": {
                        "title": "Scraping Mode",
                        "enum": [
                            "leaderboard",
                            "search",
                            "topic",
                            "urls"
                        ],
                        "type": "string",
                        "description": "How to find products. Use 'leaderboard' for top-ranked products by time period. Use 'search' when the user provides a keyword. Use 'topic' for a ProductHunt topic slug. Use 'urls' for specific ProductHunt URLs.",
                        "default": "leaderboard"
                    },
                    "leaderboardPeriod": {
                        "title": "Leaderboard Period",
                        "enum": [
                            "daily",
                            "weekly",
                            "monthly",
                            "yearly"
                        ],
                        "type": "string",
                        "description": "Only used when mode='leaderboard'. Choose 'daily', 'weekly', 'monthly', or 'yearly'.",
                        "default": "daily"
                    },
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Used when mode='search'. Enter a keyword or niche to search ProductHunt (e.g. 'AI writing tools', 'developer tools')."
                    },
                    "topic": {
                        "title": "Topic Slug",
                        "type": "string",
                        "description": "Used when mode='topic'. The ProductHunt topic URL slug (e.g. 'artificial-intelligence', 'developer-tools', 'productivity')."
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Used when mode='urls'. List of specific ProductHunt URLs to scrape.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Maximum number of products to return. Default is 100.",
                        "default": 100
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of pages to scrape simultaneously. Default is 5.",
                        "default": 5
                    },
                    "enrichEmails": {
                        "title": "Find Email Addresses",
                        "type": "boolean",
                        "description": "When enabled, discovers emails for each product's website using a 3-layer waterfall: Hunter.io API → Snov.io API → page scraping fallback. Default is true.",
                        "default": true
                    },
                    "startDate": {
                        "title": "Start Date (YYYY-MM-DD)",
                        "type": "string",
                        "description": "For leaderboard daily mode: query a specific date. Leave blank for today. Use with endDate to scrape a date range in one run (e.g. startDate=2026-03-01, endDate=2026-03-07 → full week)."
                    },
                    "endDate": {
                        "title": "End Date (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Optional end date for multi-day scraping in one run. Only used in daily leaderboard mode. Example: startDate=2026-03-01, endDate=2026-03-07 returns all products launched across that 7-day window."
                    },
                    "lookbackDays": {
                        "title": "Lookback Days",
                        "minimum": 1,
                        "maximum": 365,
                        "type": "integer",
                        "description": "Alternative to startDate: scrape the last N days from today. E.g. lookbackDays=7 pulls the last week. Ignored when startDate is provided.",
                        "default": 1
                    },
                    "outputMode": {
                        "title": "Output Mode",
                        "enum": [
                            "full",
                            "lean",
                            "leads"
                        ],
                        "type": "string",
                        "description": "Controls what gets returned. 'full' = all fields (default). 'lean' = minimal fields optimized for LLM/AI agent context windows (name, tagline, website, upvotes, rank, emails, topics). 'leads' = full fields but only products where at least 1 email was found — perfect for outreach lists.",
                        "default": "full"
                    },
                    "hunterApiKey": {
                        "title": "Hunter.io API Key (recommended)",
                        "type": "string",
                        "description": "Hunter.io is the industry-standard email enrichment API with ~65-80% hit rate on SaaS/startup domains. Get a free key at https://hunter.io (25 domain searches/month free). Without this key, the actor falls back to basic page scraping which has much lower success on modern JS-rendered sites."
                    },
                    "snovClientId": {
                        "title": "Snov.io Client ID (optional fallback)",
                        "type": "string",
                        "description": "Snov.io client ID for email enrichment — used as fallback if Hunter.io finds nothing. Get credentials at https://snov.io → Settings → API (50 searches/month free)."
                    },
                    "snovClientSecret": {
                        "title": "Snov.io Client Secret (optional fallback)",
                        "type": "string",
                        "description": "Snov.io client secret. Required alongside snovClientId."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
