# Product Hunt Scraper — Launches, Leaderboards & Topics (`sian.agency/product-hunt-scraper`) Actor

Product Hunt scraper for new-product launches: daily/weekly/monthly leaderboards, topic feeds & full product profiles. Score, rank, comments, reviews, followers, website, social links, makers, topics & screenshots — clean JSON/CSV. Fast overview or full detail. No account or API key needed.

- **URL**: https://apify.com/sian.agency/product-hunt-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** E-commerce, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.88 / 1,000 overview launch extracteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Product Hunt Scraper — Launches, Leaderboards & Topics 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Taobao & Tmall Product Scraper](https://img.shields.io/badge/Store-Taobao%20%26%20Tmall%20Product%20Scraper-FF4F00)](https://apify.com/sian.agency/taobao-tmall-product-scraper?fpr=sian) [![Instagram AI Transcript Extractor](https://img.shields.io/badge/Store-Instagram%20AI%20Transcript-E4405F)](https://apify.com/sian.agency/instagram-ai-transcript-extractor?fpr=sian) [![TikTok AI Transcript Extractor](https://img.shields.io/badge/Store-TikTok%20AI%20Transcript-25F4EE)](https://apify.com/sian.agency/best-tiktok-ai-transcript-extractor?fpr=sian)

#### 🎉 Turn every Product Hunt launch into a clean, structured dataset — leaderboards, topics & full product profiles in seconds
##### Built for founders, growth marketers, VCs and researchers who track new products at scale

---

### 📋 Overview

**Tracking new product launches by hand is slow** — the Product Hunt Scraper pulls ranked launches, topic feeds and full product profiles into one clean dataset, ready for JSON, CSV or Excel.

**Why thousands of professionals choose us:**
- ✅ **Two modes, one tool**: a fast **Overview** for ranked feeds, or a full **Detail** profile per product
- ⚡ **Fast & reliable**: a daily leaderboard of ~24 launches lands in seconds
- 🎯 **35+ clean fields**: score, rank, comments, reviews, followers, website, social links, makers, topics, screenshots
- 💰 **Pay-per-result**: a generous free tier and you only pay for records you actually get
- 💎 **Date-walk crawling**: pull a whole range of days in one run to build a historical launch dataset
- ✨ **No account or API key** required — paste a date, topic or product and run

---

### ✨ Features

- 🏆 **Leaderboard mode**: scrape the daily, weekly or monthly ranked board of top launches
- 📆 **Date-walk**: crawl N consecutive days back in a single run for a historical view
- 🏷️ **Topic mode**: pull every featured product in a topic feed (e.g. artificial-intelligence, developer-tools)
- 🔗 **URL mode**: paste any leaderboard or topic URL and scrape it directly
- 🔍 **Detail mode**: full product profile — reviews rating & count, followers, website, Twitter/LinkedIn/GitHub, makers, launch number, screenshots
- 📊 **Rich ranking data**: daily, weekly and monthly rank plus launch-day score and comment counts
- 🌍 **Clean exports**: JSON, CSV and Excel straight from the Apify dataset
- 🎚️ **Tier-aware limits**: free runs are capped, paid runs are unlimited

---

### 🎬 Quick Start

Pick a mode, paste a date / topic / product, and run. Results stream into the dataset and you can export them in one click.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~product-hunt-scraper/runs?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"scrapeMode": "overview", "searchMode": "byLeaderboard", "window": "daily", "maxResults": 50}'
````

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose a mode

Pick **Overview** for ranked leaderboards / topics, or **Detail** for full product profiles.

#### Step 2: Tell it what to fetch

Set a leaderboard window + date, list one or more topics, paste URLs, or list product slugs.

#### Step 3: Run and export

Start the run and download your results as JSON, CSV or Excel.

**That's it! In under a minute, you'll have:**

- A ranked list of fresh product launches
- Scores, ranks, comments and topics for each
- Clean, structured data ready for your spreadsheet or pipeline

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| scrapeMode | string | No | `overview` (fast & cheap) or `detail` (full profile) |
| searchMode | string | No | `byLeaderboard`, `byTopic`, `byUrl`, or `byProduct` (detail) |
| window | string | No | `daily`, `weekly` or `monthly` (leaderboard mode) |
| date | string | No | Anchor date `YYYY-M-D` for the leaderboard (defaults to today) |
| days | integer | No | Walk N consecutive days back (daily window) |
| topics | array | No | Topic slugs, e.g. `artificial-intelligence` |
| urls | array | No | Leaderboard / topic URLs to scrape |
| products | array | No | Product slugs or URLs (detail mode) |
| maxResults | integer | No | Cap the run size (FREE: 25, PAID: unlimited) |

**Example — daily leaderboard:**

```json
{
  "scrapeMode": "overview",
  "searchMode": "byLeaderboard",
  "window": "daily",
  "date": "2026-6-23",
  "days": 7,
  "maxResults": 100
}
```

**Example — full product profiles:**

```json
{
  "scrapeMode": "detail",
  "searchMode": "byProduct",
  "products": ["lovable", "https://www.producthunt.com/products/n8n-io"]
}
```

***

### 📤 Output

Results are saved to the Apify dataset with **35+ fields** including:

| Field | Type | Description |
|-------|------|-------------|
| productName | string | Name of the product / launch |
| tagline | string | One-line pitch |
| value / launch\_day\_score | number | Launch-day score (the public upvote proxy) |
| daily\_rank / weekly\_rank / monthly\_rank | number | Leaderboard ranks |
| comments\_count | number | Number of comments |
| reviews\_rating | number | Average review rating (0–5) |
| reviews\_count | number | Total reviews |
| followers\_count | number | Product followers |
| website\_url | string | The product's website |
| twitter\_url / linkedin\_url / github\_url | string | Social and code links |
| makers | array | Maker handles credited on the launch |
| topics | array | Topic / category tags |
| images | array | Logo, thumbnail and screenshot URLs |
| url | string | Canonical Product Hunt URL |

**Example:**

```json
{
  "productName": "Lovable",
  "tagline": "The world's first AI Fullstack Engineer",
  "reviews_rating": 4.69,
  "reviews_count": 191,
  "followers_count": 43211,
  "website_url": "https://lovable.dev/",
  "twitter_url": "https://twitter.com/lovable",
  "linkedin_url": "https://www.linkedin.com/company/lovable-dev",
  "launch_number": 10,
  "topics": ["Android", "Design Tools", "Development"],
  "makers": ["antonosika"],
  "url": "https://www.producthunt.com/products/lovable"
}
```

***

### 💼 Use Cases & Examples

#### 1. New-product discovery

**Founders and product teams who want to see what launched today.**

**Input:** A daily leaderboard window
**Output:** A ranked list of fresh launches with scores and taglines
**Use:** Spot rising tools and trends before they go mainstream

#### 2. Competitor & launch tracking

**Growth marketers monitoring a category.**

**Input:** A topic feed (e.g. `developer-tools`)
**Output:** Every featured product in that topic
**Use:** Build a watchlist of competitors and adjacent products

#### 3. Lead generation for makers

**Agencies prospecting newly launched startups.**

**Input:** Product profiles in detail mode
**Output:** Website, social links and maker handles per product
**Use:** Build a contact list of founders right after launch

#### 4. Market & trend research

**Analysts and VCs sizing a space.**

**Input:** A weekly or monthly leaderboard date-walk
**Output:** A historical dataset of top launches over time
**Use:** Quantify launch volume, scores and topic momentum

#### 5. Building a product-launch data feed

**Builders powering a newsletter or dashboard.**

**Input:** A scheduled daily leaderboard run
**Output:** A fresh, structured feed of new launches every day
**Use:** Automate a "today on Product Hunt" digest

#### 6. SaaS & startup datasets

**Researchers compiling a startup index.**

**Input:** Topic + leaderboard scrapes across many days
**Output:** A deduplicated dataset of products with scores and links
**Use:** Train models or enrich a CRM with launch data

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/product-hunt-scraper').call({
  scrapeMode: 'overview',
  searchMode: 'byLeaderboard',
  window: 'daily',
  maxResults: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/product-hunt-scraper').call(
    run_input={
        'scrapeMode': 'detail',
        'searchMode': 'byProduct',
        'products': ['lovable', 'n8n-io'],
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~product-hunt-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"scrapeMode": "overview", "searchMode": "byTopic", "topics": ["artificial-intelligence"]}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: Schedule (e.g. daily) or HTTP request
2. **HTTP Request**: Call the actor API
3. **Process**: Handle the JSON results
4. **Action**: Save to a sheet, notify a channel, or enrich a CRM

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 records** per run — full feature access, same quality
- No credit card required
- Perfect for testing and small projects

#### PAID Tier (Production Ready)

- **Unlimited** records per run
- Date-walk a full range of leaderboard days in one go
- Pay-per-result: only charged for records you actually extract

💰 **Transparent pay-per-result pricing** — a cheap, high-volume overview event and a richer detail event, so you only pay for the depth you need.

🔗 [View current pricing](https://apify.com/sian.agency/product-hunt-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: How many records can I extract?**
A: FREE tier: 25 per run. PAID tier: unlimited.

**Q: What's the difference between Overview and Detail?**
A: Overview returns ranked launches from a leaderboard or topic (score, rank, comments, topics). Detail fetches a full profile per product (reviews, followers, website, social links, makers, screenshots).

**Q: Can I scrape a specific day's leaderboard?**
A: Yes — set a date and window, and optionally walk several days back in one run.

**Q: What output formats are available?**
A: JSON, CSV and Excel — export directly from the Apify dataset.

**Q: Do I need an account or API key for the source site?**
A: No — just run the actor.

**Q: Is this legal?**
A: Yes — it only extracts publicly available data. See the legal section below.

***

### 🐛 Troubleshooting

**No records returned**

- Check the date is valid and not in the future
- For topic mode, confirm the slug matches the topic URL's last path segment

**Detail mode returns fewer rows than products requested**

- A product slug may be misspelled or the product may have been removed — check the slug

**Want more than 25 records**

- Upgrade to the PAID tier for unlimited records per run

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

> **Trademark notice:** *Product Hunt* is a trademark of Product Hunt, Inc. This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Product Hunt, Inc. All product and company names are the property of their respective owners.

***

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `scrapeMode` (type: `string`):

⚡ **OVERVIEW** — fast & cheap. Pulls ranked product launches straight from a leaderboard or topic feed (title, tagline, launch score, rank, comments, topics, thumbnail).

🔍 **DETAIL** — full product profile per launch (reviews rating & count, followers, website, Twitter/LinkedIn/GitHub, makers, launch number, screenshots). Priced higher per result.

**TIP:** Start with Overview — switch to Detail only when you need the extra fields.

## `searchMode` (type: `string`):

🧭 How to tell the scraper what to fetch:

- **By leaderboard** — a ranked daily / weekly / monthly board (set the window + date below).
- **By topic** — one or more topic slugs (e.g. "artificial-intelligence").
- **By URL** — paste leaderboard or topic URLs from producthunt.com.
- **By product** — Detail mode only: product slugs or URLs to fetch full profiles.

## `window` (type: `string`):

📅 Which ranked board to pull when **Search by = By leaderboard**.

- **Daily** — one day's ranked launches (combine with **Days back** to walk a range).
- **Weekly** / **Monthly** — the aggregated top launches for that period.

## `date` (type: `string`):

📆 Optional anchor date for the leaderboard, e.g. "2026-6-23". Leave empty for today. Month/day need no zero-padding.

## `days` (type: `integer`):

🔁 Walk this many consecutive days back from the date above (Daily window only). Each day is a fixed ranked board of ~24 launches — a clean way to crawl a date range.

## `topics` (type: `array`):

🏷️ Topic slugs to scrape when **Search by = By topic**, e.g. "artificial-intelligence", "developer-tools".

**TIP:** The slug is the last path segment of a topic URL: producthunt.com/topics/**artificial-intelligence**.

**BULK EDIT:** Click "Bulk edit" to paste many slugs, one per line.

## `urls` (type: `array`):

🔗 producthunt.com leaderboard or topic URLs to scrape. Used when **Search by = By URL**.

**TIP:** Open any leaderboard or topic page on Product Hunt and copy the URL from the address bar.

**BULK EDIT:** Click "Bulk edit" to paste many URLs, one per line.

## `products` (type: `array`):

🆔 **Detail mode only.** Product slugs (e.g. "lovable") or full product URLs (e.g. https://www.producthunt.com/products/lovable) to fetch full profiles.

**BULK EDIT:** Click "Bulk edit" to paste many, one per line.

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

🔢 Maximum records to extract this run.

- **FREE tier:** capped at 25 records per run.
- **PAID tier:** unlimited — set as high as you need.

## Actor input object example

```json
{
  "scrapeMode": "overview",
  "searchMode": "byLeaderboard",
  "window": "daily",
  "date": "2026-6-23",
  "days": 1,
  "topics": [
    "artificial-intelligence",
    "developer-tools"
  ],
  "urls": [
    "https://www.producthunt.com/leaderboard/daily/2026/6/23"
  ],
  "products": [
    "lovable",
    "https://www.producthunt.com/products/n8n-io"
  ],
  "maxResults": 100
}
```

# Actor output Schema

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

Scraped Product Hunt launches (JSON/CSV/Excel).

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/product-hunt-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/product-hunt-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 '{}' |
apify call sian.agency/product-hunt-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Product Hunt Scraper — Launches, Leaderboards & Topics",
        "description": "Product Hunt scraper for new-product launches: daily/weekly/monthly leaderboards, topic feeds & full product profiles. Score, rank, comments, reviews, followers, website, social links, makers, topics & screenshots — clean JSON/CSV. Fast overview or full detail. No account or API key needed.",
        "version": "1.0",
        "x-build-id": "PVEfSZ8VQXWy1DGWo"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~product-hunt-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-product-hunt-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/sian.agency~product-hunt-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-product-hunt-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/sian.agency~product-hunt-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-product-hunt-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": {
                    "scrapeMode": {
                        "title": "⚡ Scrape mode",
                        "enum": [
                            "overview",
                            "detail"
                        ],
                        "type": "string",
                        "description": "⚡ **OVERVIEW** — fast & cheap. Pulls ranked product launches straight from a leaderboard or topic feed (title, tagline, launch score, rank, comments, topics, thumbnail).\n\n🔍 **DETAIL** — full product profile per launch (reviews rating & count, followers, website, Twitter/LinkedIn/GitHub, makers, launch number, screenshots). Priced higher per result.\n\n**TIP:** Start with Overview — switch to Detail only when you need the extra fields.",
                        "default": "overview"
                    },
                    "searchMode": {
                        "title": "🧭 Search by",
                        "enum": [
                            "byLeaderboard",
                            "byTopic",
                            "byUrl",
                            "byProduct"
                        ],
                        "type": "string",
                        "description": "🧭 How to tell the scraper what to fetch:\n\n- **By leaderboard** — a ranked daily / weekly / monthly board (set the window + date below).\n- **By topic** — one or more topic slugs (e.g. \"artificial-intelligence\").\n- **By URL** — paste leaderboard or topic URLs from producthunt.com.\n- **By product** — Detail mode only: product slugs or URLs to fetch full profiles.",
                        "default": "byLeaderboard"
                    },
                    "window": {
                        "title": "📅 Leaderboard window",
                        "enum": [
                            "daily",
                            "weekly",
                            "monthly"
                        ],
                        "type": "string",
                        "description": "📅 Which ranked board to pull when **Search by = By leaderboard**.\n\n- **Daily** — one day's ranked launches (combine with **Days back** to walk a range).\n- **Weekly** / **Monthly** — the aggregated top launches for that period.",
                        "default": "daily"
                    },
                    "date": {
                        "title": "📆 Date (YYYY-M-D)",
                        "type": "string",
                        "description": "📆 Optional anchor date for the leaderboard, e.g. \"2026-6-23\". Leave empty for today. Month/day need no zero-padding."
                    },
                    "days": {
                        "title": "🔁 Days back (daily only)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "🔁 Walk this many consecutive days back from the date above (Daily window only). Each day is a fixed ranked board of ~24 launches — a clean way to crawl a date range.",
                        "default": 1
                    },
                    "topics": {
                        "title": "🏷️ Topics",
                        "type": "array",
                        "description": "🏷️ Topic slugs to scrape when **Search by = By topic**, e.g. \"artificial-intelligence\", \"developer-tools\".\n\n**TIP:** The slug is the last path segment of a topic URL: producthunt.com/topics/**artificial-intelligence**.\n\n**BULK EDIT:** Click \"Bulk edit\" to paste many slugs, one per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "urls": {
                        "title": "🔗 Leaderboard / topic URLs",
                        "type": "array",
                        "description": "🔗 producthunt.com leaderboard or topic URLs to scrape. Used when **Search by = By URL**.\n\n**TIP:** Open any leaderboard or topic page on Product Hunt and copy the URL from the address bar.\n\n**BULK EDIT:** Click \"Bulk edit\" to paste many URLs, one per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "products": {
                        "title": "🆔 Product slugs or URLs",
                        "type": "array",
                        "description": "🆔 **Detail mode only.** Product slugs (e.g. \"lovable\") or full product URLs (e.g. https://www.producthunt.com/products/lovable) to fetch full profiles.\n\n**BULK EDIT:** Click \"Bulk edit\" to paste many, one per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "🔢 Max results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "🔢 Maximum records to extract this run.\n\n- **FREE tier:** capped at 25 records per run.\n- **PAID tier:** unlimited — set as high as you need.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
