# Product Hunt Scraper — Launches, Makers & Leads (`scrapesage/product-hunt-scraper`) Actor

Scrape Product Hunt launches with full data: votes, comments, ranks, topics, website, socials, funding, reviews and makers. Optionally extract maker contact emails for lead generation. Scrape by date range, topic or URL, with monitoring mode for new launches. Export JSON, CSV, Excel.

- **URL**: https://apify.com/scrapesage/product-hunt-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Agents, Integrations
- **Stats:** 14 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 launch scrapeds

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

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Product Hunt Scraper — Launches, Makers & Leads (Emails, Socials & Funding)

> **Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Product Hunt or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. "Product Hunt" is referenced only to describe the publicly available website this Actor collects data from.

Extract **complete Product Hunt launch data** — votes, comments, daily/weekly/monthly ranks, topics, the full **product website, every social link, funding, employee size, reviews** and the **makers** behind each launch. Optionally turn every launch into a **ready-to-contact B2B lead** by crawling the product's own website for **contact emails, phone numbers and socials**.

No login, no API key, no browser — fast JSON extraction straight from Product Hunt's public pages. Scrape by **date range, topic or URL**, and switch on **monitoring mode** to capture only new launches.

### Why this Product Hunt scraper?

Most Product Hunt scrapers grab the name, tagline and a vote count, then stop. This actor reads Product Hunt's full embedded data and ships the **richest dataset in the category** — including the product website and maker contacts that make the data actually actionable for sales and research.

| Data | Typical scrapers | This actor |
|---|---|---|
| Name, tagline, votes, comments | ✅ | ✅ |
| Daily / weekly / monthly rank | partial | ✅ |
| Topics & categories | partial | ✅ |
| Product **website URL** | ❌ | ✅ |
| All socials (X, LinkedIn, GitHub, Instagram, Facebook, AngelList, Threads…) | ❌ | ✅ |
| Funding amount, employee size, "was in Y Combinator" | ❌ | ✅ |
| Followers, review count & rating | ❌ | ✅ |
| **Makers** (name, username, profile, avatar, badges) | ❌ | ✅ |
| Maker/company **contact emails + phone** (from the product website) | ❌ | ✅ opt-in |
| Lead score (0–100) per launch | ❌ | ✅ |
| **Monitoring mode** — only new launches | ❌ | ✅ |

### Use cases

- **Lead generation** — every launch is a freshly funded, in-market company. Capture the website, makers and **contact emails**, score them, and push straight into your CRM or outreach sequence.
- **Startup & market intelligence** — track new products by topic (AI, dev tools, SaaS, fintech) with votes, funding and YC signals to spot trends before they scale.
- **Competitor monitoring** — watch your category daily and get alerted the moment a competitor or adjacent tool launches.
- **Investor & deal sourcing** — surface newly launched, high-traction products with funding and team-size signals.
- **Recruiting** — find makers and fast-growing startups by topic, with profiles and links straight from each launch.
- **Content & newsletters** — power "best new products" digests with structured, ranked launch data.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Product Hunt Scraper**, set how far back to scrape (or a date range / topics), and click **Start**.
3. Watch launches stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "daysBack": 3,
    "topics": ["artificial-intelligence", "developer-tools"],
    "includeProductDetails": true,
    "enrichMakerEmails": true,
    "monitorMode": false,
    "maxItems": 0
}
```

- **daysBack** *(default 7)* — scrape the daily leaderboards for the last N days (including today). The simplest control.
- **dateFrom / dateTo** *(YYYY-MM-DD)* — scrape an explicit range of daily leaderboards; overrides `daysBack`.
- **topics** — also scrape Product Hunt topic pages by slug (`artificial-intelligence`, `saas`, `marketing`, …).
- **startUrls** — also scrape specific PH URLs: leaderboards, topic pages, or individual `/products/<slug>` / `/posts/<slug>` pages.
- **includeProductDetails** *(default true)* — open each launch's product page for website, full description, all socials, funding, employee size, reviews, categories and makers.
- **enrichMakerEmails** *(default false)* — crawl each product's own website (home + contact/about) for emails, phone and extra socials. PH never exposes emails — this is the only way to get them.
- **monitorMode** *(default false)* — output only launches not seen in previous runs (see Automate & schedule).
- **maxItems** *(default 0 = no limit)* — cap the number of launches, handy for quick test runs.
- **maxConcurrency** *(default 8)* — parallel page fetches.
- **proxyConfiguration** — proxy settings (Apify proxy by default).

### Output

One record per launch (`type: "launch"`):

```json
{
    "type": "launch",
    "postId": "1166716",
    "productId": "1131568",
    "name": "Firma.dev",
    "tagline": "E-signatures API for your app averaging ~3¢ per envelope",
    "description": "At €0.029 per envelope, Firma.dev runs ~99% cheaper than legacy e-sign tools…",
    "url": "https://www.producthunt.com/posts/firma-dev-2",
    "productUrl": "https://www.producthunt.com/products/firma-dev",
    "websiteUrl": "https://firma.dev",
    "votesCount": 352,
    "commentsCount": 43,
    "reviewsCount": 12,
    "reviewsRating": 5,
    "followersCount": 210,
    "dailyRank": 1,
    "weeklyRank": 14,
    "monthlyRank": 32,
    "featuredAt": "2026-06-12T00:01:00-07:00",
    "topics": [{ "id": "88", "slug": "api-1", "name": "API" }, { "id": "267", "slug": "developer-tools", "name": "Developer Tools" }],
    "categories": ["Developer Tools", "API"],
    "pricing": "freemium",
    "isFree": false,
    "fundingAmount": null,
    "employeeSize": "1-10",
    "wasInYCombinator": false,
    "makers": [
        { "name": "Chris Davis", "username": "chris_davis23", "profileUrl": "https://www.producthunt.com/@chris_davis23", "avatarUrl": "https://ph-avatars.imgix.net/…" }
    ],
    "socials": { "twitter": "https://x.com/firmadev", "github": "https://github.com/firma-dev" },
    "emails": ["hello@firma.dev"],
    "phones": [],
    "logoUrl": "https://ph-files.imgix.net/…",
    "thumbnailUrl": "https://ph-files.imgix.net/…",
    "screenshots": ["https://ph-files.imgix.net/…"],
    "leadScore": 78,
    "scrapedAt": "2026-06-13T12:00:00.000Z"
}
```

#### What to expect (field coverage)

Product Hunt is maker-entered data, so some fields are present only when the maker filled them in.

| Field group | Always present | Usually present | Present when published |
|---|---|---|---|
| Launch core (name, tagline, votes, comments, ranks, topics, timestamps) | ✅ | — | — |
| Product detail (website, description, socials, categories) | — | ✅ with `includeProductDetails` | — |
| Makers, reviews, followers | — | ✅ ~90% | — |
| Funding, employee size, YC flag | — | — | when the maker added them |
| `emails` / `phones` | — | — | with `enrichMakerEmails`, when the website lists them |

A blank field means the maker didn't publish it — not that scraping failed. Nothing is dropped, so you always get the richest dataset available.

### How much does it cost to scrape Product Hunt?

This Actor uses Apify's **pay-per-event** pricing: you are charged only for the results it delivers, with no monthly rental and no start fee. The events it can charge are:

- **Launch Scraped** - One Product Hunt launch with votes, comments, ranks, topics, website, socials, funding, reviews & makers.
- **Maker Email Enrichment** - One launch where website enrichment found at least one contact email (lead-gen add-on).

The current price of each event is shown on the **Pricing** tab of this page. Set a maximum total charge on the run if you want a hard cap on spend, and use the input limits to control how much the Actor fetches.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it daily to capture every new launch in your category for newsletters and lead pipelines.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

**Monitoring mode + Schedules** is the recommended combo: set `monitorMode: true` and a daily [Schedule](https://docs.apify.com/platform/schedules). The schedule starts each run; monitoring mode remembers which launches were already emitted and outputs **only the new ones** — so they never conflict, and every run delivers fresh data ready to push to your CRM.

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/product-hunt-scraper').call({
    daysBack: 1,
    includeProductDetails: true,
    enrichMakerEmails: true,
    monitorMode: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} new launches & leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new launch leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored topic gets a new launch.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find today's top AI launches on Product Hunt with their websites and maker contacts" and let it run the scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **B2B lead-generation & market-intelligence stack**:

- **[LinkedIn Jobs Scraper](https://apify.com/scrapesage/linkedin-jobs-scraper)** — job postings as hiring-intent signals from the companies you find.
- **[Facebook Ad Library Scraper](https://apify.com/scrapesage/facebook-ad-library-scraper)** — competitor ad intelligence on Meta & Instagram.
- **[Google Ads Transparency Scraper](https://apify.com/scrapesage/google-ads-transparency-scraper)** — who's advertising what on Google.
- **[Eventbrite Scraper](https://apify.com/scrapesage/eventbrite-scraper)** — events plus organizer leads (ticket prices, emails, socials).
- **[Sched Conference Scraper](https://apify.com/scrapesage/sched-conference-scraper)** — speakers, sessions and sponsors from conference sites.
- **[Whova Event Scraper](https://apify.com/scrapesage/whova-event-scraper)** — attendees, sessions, speakers and sponsors from Whova event apps.
- **[Swapcard Exhibitor Scraper](https://apify.com/scrapesage/swapcard-exhibitor-scraper)** — exhibitor lists, speakers and contacts from Swapcard-powered events.
- **[Bark Listing Scraper](https://apify.com/scrapesage/bark-listing-scraper)** — service-provider leads from Bark.
- **[Airbnb Scraper](https://apify.com/scrapesage/airbnb-scraper)** — listings, prices and availability.

### Tips

- **Daily lead pipeline**: set `daysBack: 1`, `enrichMakerEmails: true`, `monitorMode: true` and a daily [Schedule](https://docs.apify.com/platform/schedules) — you'll get only that day's new launches, complete with contact emails.
- **Topic focus**: add `topics` (e.g. `artificial-intelligence`, `saas`) to track specific categories instead of the whole leaderboard.
- **Cost control**: keep `enrichMakerEmails` off for pure discovery; turn it on only when you need contactable leads (it adds a few requests per product website).
- **Backfill**: use `dateFrom`/`dateTo` to pull months of historical launches in one run.

### FAQ

**How do I scrape Product Hunt without the API?** This actor reads Product Hunt's public pages directly — no API key, OAuth app or login needed. You get the same (and richer) data the website shows.

**Where do the emails come from?** Never from Product Hunt (it doesn't publish emails). With `enrichMakerEmails` on, the actor visits the product's own public website and extracts publicly listed contact emails — the same thing a human visitor would see.

**Can I export to Google Sheets, CSV or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I get only new launches?** Turn on `monitorMode` and create a daily [Schedule](https://docs.apify.com/platform/schedules). Each run outputs only launches not seen before.

**Does monitoring mode conflict with the Apify scheduler?** No. The scheduler simply starts runs on a cadence; monitoring mode remembers which launches were already emitted and filters them out. They work together.

**A field is null — why?** Some makers don't publish a website, funding or socials. Fields are blank only when the data doesn't exist, not because the scraper skipped them.

**Is scraping Product Hunt legal?** This actor collects publicly available data only. You're responsible for using the data in compliance with applicable laws (e.g. GDPR/CCPA for personal data) and Product Hunt's terms.

### Data & lawful use

This Actor reads business and professional listings that the professionals themselves published to be found: names, roles, firms, ratings and the contact details shown on the public listing. Because those details belong to identifiable people, treat the output as personal data. If you are in the EU or UK you are the data controller for what you do with it: have a lawful basis (usually legitimate interest for B2B prospecting or market research), keep any outreach relevant to the professional's line of work, honour opt-outs and deletion requests, and do not use the output for spam.

Under [Apify's Standard Actor Contract](https://docs.apify.com/legal/standard-actor-contract), which governs your use of this Actor, you are the controller of any personal data in your input and output and scrapesage acts only as your processor: that data is processed solely to run your job, written only to your own Apify storage, never used for any other purpose and never shared onward. If you need help with a data-subject request that involves this Actor's output, open an issue on the Issues tab.

### Disclaimer

**This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Product Hunt or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.**

"Product Hunt" and any related marks are the property of their respective owners and are used here only in a descriptive, nominative sense - to identify the publicly accessible website from which this Actor collects data. This Actor is not an official Product Hunt product, is not authorised or certified by Product Hunt, and does not distribute Product Hunt software. It collects only publicly available information; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the terms of the source website.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `daysBack` (type: `integer`):

Scrape the daily Product Hunt leaderboards for the last N days (including today). The simplest way to pull recent launches. Ignored if you set a Date range, Topics, or Start URLs.

## `dateFrom` (type: `string`):

Start of an explicit date range of daily leaderboards to scrape, e.g. `2026-06-01`. Overrides Days back.

## `dateTo` (type: `string`):

End of the date range (inclusive), e.g. `2026-06-13`. Defaults to today when only Date from is set.

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

Also scrape these Product Hunt topic pages. Use the topic slug from the URL, e.g. `artificial-intelligence`, `developer-tools`, `saas`, `marketing`.

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

Also scrape specific Product Hunt URLs: leaderboard pages (`/leaderboard/daily/2026/6/12/all`), topic pages (`/topics/ai`), or individual product/post pages (`/products/<slug>`, `/posts/<slug>`).

## `includeProductDetails` (type: `boolean`):

Open each launch's product page to add the product website, full description, all social links, funding, employee size, reviews, categories, badges and makers. Adds one request per launch. Strongly recommended.

## `enrichMakerEmails` (type: `boolean`):

Crawl each product's own website (home + contact/about, a few pages) for contact emails, phone numbers and extra social links. Product Hunt never exposes emails — this is the only way to turn a launch into a contactable B2B lead. Requires Include product details.

## `monitorMode` (type: `boolean`):

Only output launches that were NOT seen in previous runs of this Actor. Combine with Apify Schedules to capture only fresh launches each day. This does not conflict with the scheduler — the schedule starts the run, while monitoring mode filters out anything already emitted by earlier runs.

## `monitorStoreName` (type: `string`):

Named key-value store used to remember which launches were already emitted (for Monitoring mode). Use one name per monitored search so their histories stay separate.

## `maxItems` (type: `integer`):

Maximum number of launches to output (0 = no limit). Handy for quick, cheap test runs.

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

Maximum number of pages fetched in parallel.

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

Proxy settings. Product Hunt has no aggressive anti-bot, so the default Apify proxy is plenty.

## `urlsFromFile` (type: `string`):

Paste a list of URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Lets you import many Start URLs at once instead of typing each. Google Sheet/Drive share links are handled automatically.

## Actor input object example

```json
{
  "daysBack": 3,
  "includeProductDetails": true,
  "enrichMakerEmails": false,
  "monitorMode": false,
  "monitorStoreName": "product-hunt-monitor",
  "maxItems": 0,
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped launch records (type: 'launch') in the default dataset.

# 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 = {
    "daysBack": 3,
    "urlsFromFile": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/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 = {
    "daysBack": 3,
    "urlsFromFile": "",
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/product-hunt-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "daysBack": 3,
  "urlsFromFile": ""
}' |
apify call scrapesage/product-hunt-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapesage/product-hunt-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/9HVybSTLfxbaSTPIv/builds/Yz3SCFNYItNMc03zh/openapi.json
