# Product Hunt Scraper 🚀 (launches, votes, no API key) (`tagadanar/producthunt-scraper`) Actor

Every Product Hunt launch for any date, with rank, votes, launch-day votes, comments, topics and tagline, and optionally the product website plus the makers behind it. The official Product Hunt API wants an OAuth token and a rate-limit budget; this wants a date. Empty pages are caught, not shipped.

- **URL**: https://apify.com/tagadanar/producthunt-scraper.md
- **Developed by:** [Tagada Data](https://apify.com/tagadanar) (community)
- **Categories:** News, Lead generation, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.05 / 1,000 launches

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

## Product Hunt Scraper 🚀 (launches, votes, no API key)

Get every Product Hunt launch for any day, week or month you ask for, ranked
exactly the way Product Hunt ranks it, with the vote count, the comment count,
the topics and the tagline. Ask for one day or for three years of days.

Turn on product details and each row also carries the product's own website URL,
the full description, the makers with their Product Hunt usernames, the
categories, follower and review counts and the social links. That is the row you
need to actually contact a founder the week they launch.

Product Hunt does publish an official API, and it is free, but you have to
register an application, carry an OAuth token on every request and stay inside
6,250 complexity points per fifteen minutes. This actor asks you for a date.

### Why this one, and not the cheaper one

The thing to compare here is not price, it is whether the run comes back with
data. Product Hunt answers a request it does not like with **HTTP 200 and an
empty 7 kB page shell**: no error, no captcha, no 403, just a valid-looking
response with nothing in it. A scraper that trusts the status code ships that as
a successful run with an empty dataset.

The Store publishes every actor's run statistics, so you can see how that plays
out. Failure rates below are that public figure for the last 30 days, read on
17 August 2026, counting runs that failed outright plus runs that timed out.

| Scraper | Failed or timed out (30 days) | Price on its Store page |
| --- | --- | --- |
| **This actor** | fails loudly instead of returning an empty dataset | one flat price per launch, details optional, platform usage included |
| `maximedupre/product-hunt-scraper` | 406 of 1,265 runs, **32%** | $0.90 per 1,000 launches, plus $1.80 per 1,000 email enrichments |
| `fatihtahta/product-hunt-scraper-fast-reliable-4-1k` | 94 of 291 runs, **32%** | $0.75 per 1,000 results, plus per-maker and per-email add-ons |
| `parseforge/producthunt-scraper` | 70 of 162 runs, **43%** | $0.005 per run, plus $31.99 per 1,000 results |
| `memo23/producthunt-scraper` | 4 of 154 runs, 3% | $0.01 per run, plus $0.80 per 1,000 results |

This actor treats a 200 with no data payload as a block, rotates the exit and
retries. If every attempt comes back empty it fails the run rather than handing
you an empty dataset and calling it a success. A genuinely empty day, like a
date in the future, still comes back as a clean successful run with zero
launches, so quiet days and broken pages stay distinguishable.

### What you get

One row per launch.

| Field | What it is |
| --- | --- |
| `name`, `tagline` | Product name and its one-line pitch |
| `votes` | The upvote total Product Hunt shows today |
| `launchDayVotes` | Votes earned during the launch day itself |
| `comments` | Comment count |
| `dailyRank`, `weeklyRank`, `monthlyRank` | Where it placed on each leaderboard |
| `launchDate`, `featuredAt` | When it went live |
| `topics`, `topicSlugs` | Product Hunt topics, as names and as slugs |
| `url`, `productUrl` | Launch page and product page |
| `thumbnailUrl` | Product thumbnail |
| `postId`, `productId`, `productSlug` | Stable ids for joining runs together |

With **Add website, makers and company details** turned on, each row also gets:

| Field | What it is |
| --- | --- |
| `websiteUrl`, `websiteDomain` | The product's own site |
| `description` | The full product description |
| `makers`, `makerUsernames`, `makerHeadlines` | Who built it, with their PH handles |
| `categories`, `categorySlugs` | Product Hunt categories |
| `followersCount`, `launchesCount` | Audience size and how many times they have launched |
| `reviewsCount`, `reviewsRating` | Review volume and average rating |
| `twitterUrl`, `linkedinUrl`, `githubUrl`, `iosUrl`, `androidUrl` | Where else the product lives |
| `wasInYCombinator`, `employeeSize`, `fundingAmount` | Company facts, where Product Hunt has them |
| `isNoLongerOnline` | Product Hunt has marked the product dead |

Fields are `null` when Product Hunt genuinely does not have the data. Nothing is
guessed or filled in.

### Who uses this

**Founders and product marketers** watching a category. Pull the daily
leaderboard for your topics every morning and you know what shipped, how it did,
and who is now competing for the same attention.

**VC and scout teams** sourcing early. A launch with 400 votes on day one is a
signal, and `makerUsernames` plus `websiteUrl` is enough to find the team before
anyone writes about them.

**Sales and lead generation.** Every launch is a company that just spent a week
preparing to be visible and is in a buying mood for the tools around it. Product
details give you the domain, the makers, the category and the size of the
audience they pulled.

**Market researchers and analysts.** Pull months of leaderboards and you have a
clean panel: which categories are growing, what vote totals it now takes to win a
day, how launch-day votes compare to lifetime votes.

**Anyone rebuilding a "top products of 2026" page.** Monthly leaderboards give
you the ranked winners without hand-copying them.

### Input examples

Yesterday's leaderboard, which is what you get if you set nothing at all:

```json
{
  "leaderboard": "daily",
  "maxResults": 20
}
```

Every launch in August 2026, with the maker and website data:

```json
{
  "leaderboard": "daily",
  "dateFrom": "2026-08-01",
  "dateTo": "2026-08-31",
  "maxResults": 600,
  "includeProductDetails": true
}
```

The top launches of each month in the first half of the year:

```json
{
  "leaderboard": "monthly",
  "dateFrom": "2026-01-01",
  "dateTo": "2026-06-30",
  "maxResults": 120
}
```

Specific pages you already have open:

```json
{
  "startUrls": [
    "https://www.producthunt.com/leaderboard/daily/2026/8/16",
    "https://www.producthunt.com/leaderboard/weekly/2026/33",
    "https://www.producthunt.com/products/notion"
  ],
  "maxResults": 50
}
```

A product URL returns that product's own record: website, description, makers,
categories, followers and reviews.

### FAQ

**Do I need a Product Hunt API key or developer token?**
No. The official API v2 needs an OAuth token and applies its own rate limits.
This actor reads the public site instead, so there is nothing to register and
nothing to paste.

**How many launches does one day give me?**
Product Hunt publishes the top 20 of each leaderboard period. A quiet day has
fewer (7 on 2026-08-16), a busy day is capped at 20. Ask for more days rather
than more pages: a 30-day range gives you up to 600 launches.

**How far back can I go?**
Product Hunt keeps every past leaderboard, so you can pull any date it has
published. Weekly and monthly leaderboards work the same way.

**Why is `votes` different from what I saw yesterday?**
`votes` is the live total, which keeps moving after launch day. `launchDayVotes`
is frozen at what the product earned on its launch day, so that is the one to use
when you are comparing launches to each other.

**Can I get the comments themselves?**
Not yet. This actor returns the comment count. Say so in the Issues tab if you
need comment text and it will get prioritised.

**Why do some rows have no website or makers?**
Those fields only come from the product page, so they need **Add website, makers
and company details** turned on. When it is on and a field is still empty,
Product Hunt does not have it for that product. You are only charged for the
product details that actually came back.

**What happens if I ask for a date with no launches?**
You get an empty dataset and a successful run, with the reason in the log. A
future date or a date before the product existed is not an error.

**Is this against Product Hunt's terms?**
It reads public pages that anyone can open in a browser, at a polite rate, with
no login and no account. Check your own obligations before you use the data
commercially, especially for outreach.

### Related actors

- **Wellfound Startup Jobs Scraper** for who those startups are hiring, with
  salary and equity.
- **Threads Scraper** for what people are saying about a launch.

***

Keywords: product hunt scraper, producthunt api alternative, product hunt
leaderboard scraper, daily launches, product hunt votes, upvotes, product hunt
makers, startup launch data, new product tracker, product hunt topics, launch
monitoring, startup lead generation, product hunt data export, product hunt
without api key.

# Actor input Schema

## `leaderboard` (type: `string`):

Which Product Hunt leaderboard to read for the dates below. <b>Daily</b> gives one ranked launch list per day, <b>Weekly</b> the top launches of each week the range touches, <b>Monthly</b> the top launches of each month.

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

First day to read, as <code>YYYY-MM-DD</code> (for example <code>2026-08-01</code>). Leave both dates empty to get the most recent completed day. Product Hunt keeps every past leaderboard, so you can go back years.

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

Last day to read, as <code>YYYY-MM-DD</code>. Leave empty to read only the From date.

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

Paste leaderboard or product pages instead of picking dates, for example <code>https://www.producthunt.com/leaderboard/daily/2026/8/16</code> or <code>https://www.producthunt.com/products/notion</code>. A product URL returns that product's full record (website, description, makers, categories, followers, reviews).

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

Total launches to return across every date. Product Hunt server-renders the top 20 of each leaderboard period, so a 30-day daily range tops out around 600.

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

Also open each launch's product page to add the product's website URL, full description, the makers with their Product Hunt usernames, categories, follower and review counts and the social links. This is what turns a launch list into a lead list. It adds one request per launch, so runs take noticeably longer, and it is only charged for launches where the extra data was actually found.

## Actor input object example

```json
{
  "leaderboard": "daily",
  "startUrls": [],
  "maxResults": 20,
  "includeProductDetails": false
}
```

# Actor output Schema

## `launches` (type: `string`):

One item per 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 = {
    "leaderboard": "daily",
    "dateFrom": "",
    "dateTo": "",
    "startUrls": [],
    "maxResults": 20,
    "includeProductDetails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/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 = {
    "leaderboard": "daily",
    "dateFrom": "",
    "dateTo": "",
    "startUrls": [],
    "maxResults": 20,
    "includeProductDetails": False,
}

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/producthunt-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 '{
  "leaderboard": "daily",
  "dateFrom": "",
  "dateTo": "",
  "startUrls": [],
  "maxResults": 20,
  "includeProductDetails": false
}' |
apify call tagadanar/producthunt-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tagadanar/producthunt-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/ydG47fLqI9u5T5Onj/builds/TJKzQMJHJYp6acYDJ/openapi.json
