# ProductHunt Scraper | $0.9/1K | Real-Time Product Data (`apivault_labs/producthunt-scraper`) Actor

Scrape ProductHunt: specific URLs, daily leaderboard, keyword search, maker portfolio, topic top products. Returns upvotes, reviews, makers, hunter, gallery, badges, ranking, tech stack signals, sentiment score, upvote velocity, competitor analysis. $0.0009/result.

- **URL**: https://apify.com/apivault\_labs/producthunt-scraper.md
- **Developed by:** [Apivault Labs](https://apify.com/apivault_labs) (community)
- **Categories:** Social media, Marketing, Business
- **Stats:** 7 total users, 3 monthly users, 86.5% runs succeeded, 2 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 | Leaderboard, Search, Makers & Ranking

> ### ⚡ Use this Actor in n8n — no code
>
> Building no-code workflows in **[n8n](https://n8n.io)**? Install our official community node and drop this Actor straight onto your canvas:
>
> **📦 [`n8n-nodes-apivault-producthunt`](https://www.npmjs.com/package/n8n-nodes-apivault-producthunt)**
>
> **Setup (30 seconds):** in n8n go to **Settings → Community Nodes → Install**, paste `n8n-nodes-apivault-producthunt` and confirm → add the new node to your workflow → paste your **Apify API token** → fill in the input and run.

Scrape ProductHunt products via the **direct GraphQL API**. Three modes: specific product URLs, daily leaderboard, keyword search.

### 🚀 Three modes

#### 1. Product URLs

Scrape specific product pages:

```json
{
  "mode": "urls",
  "productUrls": [
    "https://www.producthunt.com/posts/chatgpt",
    "https://www.producthunt.com/posts/notion"
  ]
}
```

#### 2. Daily Leaderboard ⭐

Get top products for any date:

```json
{
  "mode": "leaderboard",
  "date": "2026-05-22",
  "limit": 50
}
```

Leave `date` empty for today's leaderboard.

#### 3. Keyword Search ⭐

Find products by keyword:

```json
{
  "mode": "search",
  "searchQuery": "AI writing tool",
  "limit": 20
}
```

### 📦 Output fields (30+)

| Field | Description |
|---|---|
| `productName` | Product title |
| `tagline` | Short description |
| `description` | Full description |
| `website` | Product website URL |
| `upvotes` | Upvote count |
| `commentsCount` | Comment count |
| `reviewsCount` | Review count |
| `rating` | Average rating (0-5) |
| `followers` | Follower count |
| `topics[]` | Category list (structured) |
| `topicsStr` | Categories as comma string |
| `makers[]` | `{name, username, headline, profileImage}` per maker |
| `makersStr` | Makers as comma string |
| `hunter` | `{name, username}` — who posted it |
| `image` | Thumbnail URL |
| `gallery[]` | Screenshot/media URLs |
| `pricing` | Free / Paid / Freemium / Subscription |
| `badges[]` | PH badges (Product of the Day, etc.) |
| `isFeatured` | Was it featured? |
| `featuredAt` | Featured timestamp |
| `launchDate` | Launch date (YYYY-MM-DD) |
| `dailyRank` | Rank on launch day |
| `weeklyRank` | Rank for the week |
| `popularityScore` | 0-100 composite score |
| `productId` | PH internal ID |
| `slug` | URL slug |
| `dataSource` | "graphql" or "rendered" |

### 📖 Sample output

```json
{
  "success": true,
  "productName": "ChatGPT",
  "tagline": "An AI-powered chatbot by OpenAI",
  "website": "https://chat.openai.com",
  "upvotes": 5234,
  "commentsCount": 312,
  "reviewsCount": 189,
  "rating": 4.8,
  "followers": 12400,
  "topics": ["Artificial Intelligence", "Productivity", "Chatbots"],
  "topicsStr": "Artificial Intelligence, Productivity, Chatbots",
  "makers": [
    {"name": "Sam Altman", "username": "sama", "headline": "CEO at OpenAI", "profileImage": "..."}
  ],
  "makersStr": "Sam Altman",
  "hunter": {"name": "Greg Brockman", "username": "gdb"},
  "image": "https://ph-files.imgix.net/...",
  "gallery": ["https://...", "https://..."],
  "pricing": "Free",
  "badges": ["Product of the Day", "Product of the Week"],
  "isFeatured": true,
  "featuredAt": "2022-11-30T00:00:00Z",
  "launchDate": "2022-11-30",
  "dailyRank": 1,
  "weeklyRank": 1,
  "popularityScore": 97,
  "productId": "12345",
  "slug": "chatgpt",
  "dataSource": "graphql"
}
```

### 💼 Use cases

- **Startup research** — track what's launching in your niche
- **Competitor monitoring** — watch competitor launches and upvote velocity
- **Daily digest** — pull today's top 50 products automatically
- **Maker research** — find prolific makers and their products
- **Trend analysis** — search by keyword to see what's popular
- **Investment research** — track traction signals (upvotes, reviews, badges)

### 💰 Pricing

**$0.9 per 1000 products** ($0.0009 per result) — pay-per-event.

### 🔧 How it works

1. **GraphQL API** (primary) — direct queries to ProductHunt's public GraphQL endpoint. Fast, structured, returns all fields including ranking and gallery.
2. **Rendering fallback** — for any URL that GraphQL can't resolve.

### 🔗 Related Actors

- [YC Companies Scraper](https://apify.com/apivault_labs/yc-companies-scraper) — Y Combinator startups
- [Crunchbase Scraper](https://apify.com/apivault_labs/crunchbase-scraper) — startup funding data
- [LinkedIn Profile Scraper](https://apify.com/apivault_labs/linkedin-profile-scraper) — founder profiles

# Actor input Schema

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

What to scrape.

## `productUrls` (type: `array`):

List of ProductHunt product URLs. Used when mode = 'urls'.

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

Date for leaderboard mode in YYYY-MM-DD format. Leave empty for today.

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

Keyword to search for. Used when mode = 'search'.

## `makerUsername` (type: `string`):

ProductHunt username to fetch all products for. Used when mode = 'maker'. Example: 'rrhoover' (Ryan Hoover, PH founder).

## `topicSlug` (type: `string`):

ProductHunt topic slug. Used when mode = 'topic'. Examples: 'artificial-intelligence', 'developer-tools', 'productivity', 'design-tools', 'marketing', 'no-code'.

## `topicOrder` (type: `string`):

How to sort products in topic mode.

## `limit` (type: `integer`):

Max products to return.

## `includeCompetitorAnalysis` (type: `boolean`):

Add an extra summary record comparing all scraped products: avg upvotes, top by rating, fastest growing, common tech stack, pricing distribution.

## `phClientId` (type: `string`):

Optional: ProductHunt API client\_id. Unlocks leaderboard, search, maker, topic modes and adds 30+ fields. Get free at https://www.producthunt.com/v2/oauth/applications

## `phClientSecret` (type: `string`):

Optional: ProductHunt API client\_secret. Required together with phClientId.

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

Parallel requests for URL mode.

## `timeout` (type: `integer`):

Max wait time per product page.

## Actor input object example

```json
{
  "mode": "urls",
  "productUrls": [
    "https://www.producthunt.com/posts/chatgpt",
    "https://www.producthunt.com/posts/notion"
  ],
  "date": "",
  "searchQuery": "",
  "makerUsername": "",
  "topicSlug": "",
  "topicOrder": "VOTES",
  "limit": 50,
  "includeCompetitorAnalysis": false,
  "phClientId": "",
  "phClientSecret": "",
  "maxConcurrency": 3,
  "timeout": 120
}
```

# 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 = {
    "productUrls": [
        "https://www.producthunt.com/posts/chatgpt",
        "https://www.producthunt.com/posts/notion"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("apivault_labs/producthunt-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 = { "productUrls": [
        "https://www.producthunt.com/posts/chatgpt",
        "https://www.producthunt.com/posts/notion",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("apivault_labs/producthunt-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 '{
  "productUrls": [
    "https://www.producthunt.com/posts/chatgpt",
    "https://www.producthunt.com/posts/notion"
  ]
}' |
apify call apivault_labs/producthunt-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/jUWLvgRimoRidnJCK/builds/ozBBoocf4bP4e83Va/openapi.json
