# Product Hunt Scraper: Daily Launches, Votes & Websites (`mystique-lab/producthunt-scraper`) Actor

Export Product Hunt launches for any day or date range: daily rank, votes, comments, topics, tagline and the product's real website. Featured only or every launch. No login or API key. $1.50 per 1,000 launches, no start fee.

- **URL**: https://apify.com/mystique-lab/producthunt-scraper.md
- **Developed by:** [Mystique Lab](https://apify.com/mystique-lab) (community)
- **Categories:** Lead generation, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 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.

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: Daily Launches, Votes & Websites

Export Product Hunt launches for any day or date range. Each row has the daily rank, votes, comments, topics, tagline, launch time and the product's **real website** (not the Product Hunt redirect link). You can get featured launches only, or every launch posted that day. No login or API key needed.

**Price: $1.50 per 1,000 launches. No start fee.** You only pay for launches saved. Days that fail are logged for free.

### What you can use it for

- **Lead lists:** new startups and their websites every day, ready for outreach or enrichment.
- **Market research:** see what is launching in AI, dev tools, marketing and other topics, and how many votes each launch gets.
- **Competitor tracking:** watch for launches that match your keywords.
- **Investors and scouts:** find top-ranked new products early.
- **Newsletters and dashboards:** a daily feed of the top launches.

### Input

| Field | What it does | Default |
|---|---|---|
| Start date | First launch day (YYYY-MM-DD, Pacific time, which is Product Hunt's day) | Yesterday |
| End date | Last launch day. Leave empty for a single day. Max 366 days. | Same as start |
| Featured only | Only launches Product Hunt featured on its homepage. Turn off to get every launch. | On |
| Max launches | Stop after this many launches in total | 100 |
| Max per day | Cap launches per day (for example, 10 gets the top 10 each day) | 1000 |
| Minimum votes | Skip launches with fewer votes | 0 |
| Keywords | Keep only launches whose name, tagline or topics contain one of these words | empty |
| Find real websites | Follow the Product Hunt link to get the product's own website | On |

### Output example

```json
{
  "launchDate": "2026-10-21", "dailyRank": 1, "name": "Example", "tagline": "The fastest way to ...",
  "votes": 512, "launchDayVotes": 480, "comments": 64, "topics": ["Productivity", "Artificial Intelligence"],
  "featured": true, "launchUrl": "https://www.producthunt.com/posts/example",
  "productUrl": "https://www.producthunt.com/products/example", "website": "https://example.com",
  "launchedAt": "2026-10-21T07:01:00Z", "thumbnailUrl": "https://ph-files.imgix.net/..."
}
```

You can download the results as JSON, CSV, Excel or HTML, or get them through the API. A run summary is saved as `SUMMARY` in the key-value store.

### FAQ

**How fast is it?** Yesterday's featured launches take about 15 seconds. A full week of every launch (around 1,000 launches) with websites takes about 5–10 minutes.

**Why are some votes empty?** Product Hunt hides vote counts on some launches for the first hours of launch day. Run it again later, or pick an earlier day.

**Can I schedule it daily?** Yes. Use an Apify schedule with the default input and you'll get yesterday's launches every morning.

**Why does a launch have no website?** A few makers link only to an app store page or remove the link. Over 98% of launches in our tests had a website.

**How far back can I go?** Any day Product Hunt has a leaderboard for (2014 onward), up to 366 days per run.

**What if a day fails?** The scraper retries with a fresh connection. If a day still fails, it adds a free error row with the date, so you can rerun just that day.

**Is it legal?** It only collects public launch data. Use it in line with Product Hunt's terms and the privacy laws that apply to you.

# Actor input Schema

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

First launch day to export, as YYYY-MM-DD (Pacific time, like Product Hunt). Leave empty for yesterday.

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

Last launch day, as YYYY-MM-DD. Leave empty to export only the start date. Up to 366 days per run.

## `featuredOnly` (type: `boolean`):

On: only the launches on Product Hunt's daily leaderboard (usually 15-50 a day). Off: every launch that day, often 500-1,500.

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

Stop after this many launches in total. You're only charged for launches saved.

## `maxPerDay` (type: `integer`):

Keep only the top N launches of each day, by daily rank. Handy for date ranges.

## `minVotes` (type: `integer`):

Skip launches with fewer votes than this. 0 keeps everything.

## `keywords` (type: `array`):

Keep only launches whose name, tagline or topics contain at least one of these words (not case sensitive). Leave empty to keep all.

## `resolveWebsites` (type: `boolean`):

Follow each launch's link to save the product's real website URL (tracking tags removed). Adds about a second per launch.

## Actor input object example

```json
{
  "featuredOnly": true,
  "maxItems": 100,
  "maxPerDay": 1000,
  "minVotes": 0,
  "resolveWebsites": true
}
```

# Actor output Schema

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

No description

## `summary` (type: `string`):

No description

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

// Run the Actor and wait for it to finish
const run = await client.actor("mystique-lab/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 = { "startDate": "" }

# Run the Actor and wait for it to finish
run = client.actor("mystique-lab/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 '{
  "startDate": ""
}' |
apify call mystique-lab/producthunt-scraper --silent --output-dataset

```

## MCP server setup

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