# Product Hunt Scraper (`dtrungtin/product-hunt-scraper`) Actor

Scrape Product Hunt launches: names, taglines, descriptions, websites, upvotes, comments, ratings and topics. Filter by topic and launch date. Works instantly via the public feed, or with full data and pagination via the official Product Hunt API.

- **URL**: https://apify.com/dtrungtin/product-hunt-scraper.md
- **Developed by:** [Tin](https://apify.com/dtrungtin) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 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/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

### What does Product Hunt Scraper do?

**Product Hunt Scraper** extracts product launches from [Product Hunt](https://www.producthunt.com): **names, taglines, descriptions, websites, upvotes, comments, review ratings, topics, thumbnails and launch dates**. Pick one or more topics (e.g. `artificial-intelligence`, `developer-tools`) or scrape all products, optionally filtered by launch date.

**No setup needed:** just enter topics and click Start. Data comes from the official Product Hunt API with upvotes, comments, ratings, descriptions, websites, date filters and sorting.

- **Without your own token** - the Actor uses a built-in shared token, limited to 200 products per run. If the shared token is busy, the run automatically continues with Product Hunt's public feed (up to 50 trending products per topic, fewer fields) instead of failing.
- **With your own free Product Hunt API token** - unlimited products per run, no waiting for other users.

Running on the Apify platform gives you API access, scheduling, integrations (Google Sheets, Slack, Zapier, Make, webhooks), monitoring and dataset exports out of the box.

### Why scrape Product Hunt?

- **Lead generation** - find new startups and SaaS tools the day they launch.
- **Market and competitor research** - track what launches in your category and how it performs.
- **Investors and VCs** - spot trending products early with upvote and comment counts.
- **Newsletters and content** - build daily or weekly roundups of the best launches automatically.
- **Trend analysis** - analyze topics, taglines and traction over time.

### How to scrape Product Hunt

1. Click **Try for free** and open the **Input** tab.
2. Enter the topic slugs you care about (from the topic URL, e.g. `producthunt.com/topics/developer-tools` → `developer-tools`), or leave empty for all products.
3. Set **Max products**.
4. Optional: paste your own Product Hunt API token for unlimited runs.
5. Click **Start** and download your data when the run finishes.

#### How to get your own Product Hunt API token (free, 1 minute)

1. Log in to Product Hunt and open [API applications](https://www.producthunt.com/v2/oauth/applications).
2. Click **Add an application**, enter any name, `https://localhost` as the redirect URI, keep the **Confidential** client type and click **Create Application**.
3. On the application page click **Create Token** and copy the **Developer Token**.

The token is stored as a secret input and is never written to the output or logs.

### Input

See the **Input** tab for all options. Example:

```json
{
    "topics": ["artificial-intelligence", "developer-tools"],
    "maxItems": 200,
    "apiToken": "YOUR_PRODUCT_HUNT_DEVELOPER_TOKEN",
    "order": "VOTES",
    "postedAfter": "2026-09-01",
    "postedBefore": "2026-09-23",
    "featuredOnly": true
}
```

| Field          | Description                                         | Requires token |
| -------------- | --------------------------------------------------- | -------------- |
| `topics`       | Topic slugs to scrape. Empty = all products.        | No             |
| `maxItems`     | Maximum number of products saved across all topics. | No             |
| `apiToken`     | Your own Product Hunt developer token (optional).   | -              |
| `order`        | `RANKING`, `VOTES`, `NEWEST` or `FEATURED_AT`.      | API only       |
| `postedAfter`  | Only products launched on or after this date.       | API only       |
| `postedBefore` | Only products launched before this date.            | API only       |
| `featuredOnly` | Only products featured on the homepage.             | API only       |

"API only" filters are ignored if the run falls back to the public feed.

### Output

Each product is one dataset item. Example:

```json
{
    "id": "1199144",
    "name": "tiun.",
    "tagline": "Auth, billing, and payments for AI builders",
    "description": "One system for auth, payments, customer data, and analytics. One command to install. Launch a paid product the same day you start building.",
    "url": "https://www.producthunt.com/products/tiun-2",
    "slug": "tiun-2",
    "website": "https://www.producthunt.com/r/TDDTPREQN2HR4H",
    "votesCount": 606,
    "commentsCount": 102,
    "reviewsRating": 5,
    "reviewsCount": 1,
    "topics": ["payments", "developer-tools", "artificial-intelligence"],
    "thumbnailUrl": "https://ph-files.imgix.net/86831409-94db-4f42-a2a6-651c9c669161.png?auto=format",
    "createdAt": "2026-09-15T07:01:00Z",
    "featuredAt": "2026-09-15T07:01:00Z",
    "updatedAt": null,
    "source": "api",
    "topicQuery": "developer-tools",
    "scrapedAt": "2026-09-24T00:11:40.594Z"
}
```

When a run falls back to the public feed (`"source": "feed"`), the fields `description`, `votesCount`, `commentsCount`, `reviewsRating`, `reviewsCount`, `thumbnailUrl` and `featuredAt` are `null`.

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Data fields

| Field                            | Description                                         |
| -------------------------------- | --------------------------------------------------- |
| `name`, `tagline`, `description` | Product name, one-line tagline and full description |
| `url`, `slug`                    | Product Hunt page URL and slug                      |
| `website`                        | Link to the product website (via Product Hunt)      |
| `votesCount`, `commentsCount`    | Upvotes and comments                                |
| `reviewsRating`, `reviewsCount`  | Average review rating and number of reviews         |
| `topics`                         | Topic slugs of the product                          |
| `thumbnailUrl`                   | Product logo / thumbnail                            |
| `createdAt`, `featuredAt`        | Launch and homepage feature dates                   |
| `source`                         | `api` (Product Hunt API) or `feed` (public feed)    |
| `topicQuery`                     | The input topic that matched this product           |

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

The Actor uses lightweight HTTP requests only (no browser), so it's very cheap to run. Runs usually finish in seconds with 256 MB of memory. A run of a few hundred products costs a fraction of a cent in platform usage, well within the Apify free plan's monthly credit.

### Tips

- **Need more than 200 products per run?** Add your own free API token, since the built-in shared token is limited to 200 products per run.
- **Daily launch tracking:** schedule the Actor every day with `postedAfter` set to yesterday and `order` set to `VOTES`.
- **Several topics at once:** products appearing in multiple topics are saved only once.
- **Rate limits:** the Product Hunt API allows a limited number of requests per 15 minutes. With your own token the Actor waits automatically and continues; with the shared token it continues with the public feed so you never pay for idle time.
- **Wrong topic slug?** Unknown topics are skipped with a warning in the log.

### FAQ, disclaimers, and support

**Is it legal to scrape Product Hunt?** This Actor collects publicly available product information through Product Hunt's public feed and official API. It does not collect personal data such as maker or hunter names. You are responsible for complying with the [Product Hunt Terms of Service](https://www.producthunt.com/terms) and [API terms](https://api.producthunt.com/v2/docs), which restrict commercial use of API data without Product Hunt's permission, as well as applicable laws such as GDPR.

**Why are some fields empty?** The built-in shared token was busy or its per-run limit was reached, so the run continued with the public feed. Add your own Product Hunt API token to always get full data.

**Found a bug or need a new field?** Open an issue in the **Issues** tab. Need a custom Product Hunt data solution? Get in touch through the Issues tab too.

# Actor input Schema

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

Product Hunt topic slugs to scrape, as they appear in topic URLs (e.g. "developer-tools" from producthunt.com/topics/developer-tools). Leave empty to scrape all products.

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

Maximum number of products to save across all topics. Without an API token the public feed returns at most 50 products per topic.

## `apiToken` (type: `string`):

Developer token from https://www.producthunt.com/v2/oauth/applications (create an application, then click "Create Token"). Leave empty to use the built-in shared token, which is limited to 200 products per run and falls back to the public feed (name, tagline, link, launch date) when it is busy. Your own token gives unlimited full-data runs with upvotes, comments, ratings, descriptions, websites, topics and date filters.

## `order` (type: `string`):

Result order. Requires an API token.

## `postedAfter` (type: `string`):

Only products launched on or after this date. Requires an API token.

## `postedBefore` (type: `string`):

Only products launched before this date. Requires an API token.

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

Only products featured on the Product Hunt homepage. Requires an API token.

## Actor input object example

```json
{
  "topics": [
    "artificial-intelligence",
    "developer-tools"
  ],
  "maxItems": 100,
  "order": "RANKING",
  "featuredOnly": false
}
```

# Actor output Schema

## `products` (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 = {
    "topics": [
        "artificial-intelligence",
        "developer-tools"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dtrungtin/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 = { "topics": [
        "artificial-intelligence",
        "developer-tools",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("dtrungtin/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 '{
  "topics": [
    "artificial-intelligence",
    "developer-tools"
  ]
}' |
apify call dtrungtin/product-hunt-scraper --silent --output-dataset

```

## MCP server setup

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