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

New product launches from Product Hunt as clean data: product, tagline, description, website, domain, topics, votes, comments, launch date, rank, every maker with headline and profile, the hunter and socials. By day, week, month, topic, search or URL. No login, dataset-only, MCP-ready.

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

## Pricing

from $10.00 / 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 — Launches, Makers & Startups

**Every company that launches on Product Hunt is telling you something: they have a product, a team, a
website, and this week they have budget and attention.** Founders answer their DMs on launch week. Competitors
show their hand in a tagline. The ones that climb the leaderboard are the ones raising next.

This Actor turns that daily stream into clean data: **which products launched, who built them, where to find
them, and how the market reacted** — by day, week or month, by topic, by search term, or for the exact products
you paste in.

***

### Who it is for

- **Outbound and SDR teams** — the freshest company list on the internet, with the maker's name, headline and
  profile on every row. A launch is the warmest first line there is.
- **AI / GTM agents** — one call, a flat dataset, no login and no key. `product`, `website`, `domain`,
  `makers`, `votes`, `launchDate`, `topics` are all on the row; run it on a schedule for a feed.
- **Product and competitive teams** — track every launch in your category, see who is gaining votes, and read
  the tagline your competitor chose.
- **Investors and analysts** — new companies by topic with traction signals (votes, comments, rank, followers,
  reviews) and company facts where the maker filled them in (team size, funding, YC).
- **Makers and marketers** — study what wins on a given day, who hunts what, and which topics are crowded.

***

### What you get per launch

```jsonc
{
  "product": "Weave Router 2.0",
  "tagline": "Subscription aware coding agent router",
  "description": "…",
  "website": "https://weaveos.com/",
  "domain": "weaveos.com",
  "topics": ["Open Source", "Developer Tools", "Artificial Intelligence"],
  "votes": 330,
  "votesHidden": false,
  "comments": 46,
  "launchDate": "2026-09-16",
  "dailyRank": 1,
  "weeklyRank": 6,
  "monthlyRank": 28,
  "isFeatured": true,
  "launchNumber": 3,
  "pricingType": "free_options",
  "makers": [
    { "name": "Adam Cohen", "username": "adamc", "profileUrl": "https://www.producthunt.com/@adamc",
      "headline": "CEO at Weave", "twitter": "https://x.com/adamc" }
  ],
  "makerNames": "Adam Cohen, Andrew Churchill, …",
  "makerCount": 5,
  "hunter": { "name": "Ben Lang", "username": "benln", "profileUrl": "…", "headline": "…" },
  "twitter": "https://x.com/weave", "linkedin": null,
  "reviewsRating": 4.5, "reviewsCount": 12, "followersCount": 300,
  "employeeSize": null, "fundingAmount": null, "wasInYCombinator": false,
  "launchUrl": "https://www.producthunt.com/products/weave/launches/weave-router-2-0",
  "productUrl": "https://www.producthunt.com/products/weave",
  "productId": "598173", "launchId": "1247729",
  "sources": ["day:2026-09-16"]
}
```

Two dataset views are built in: **Launches** (the leaderboard table) and **Makers & company** (the lead view).

***

### How to use it

| You want | Set |
| --- | --- |
| This week's launches, most upvoted first | nothing — that is the default |
| Today's or yesterday's launches | `period`: `today` / `yesterday` |
| A specific stretch of days | `period`: `custom`, `dateFrom`, `dateTo` |
| Everything launched in a topic | `topics`: `Developer Tools`, `Fintech`, `SaaS`… |
| Products matching a term | `searchTerms`: `CRM`, `AI agent for sales`… |
| Exact products or launches | `productUrls`: the Product Hunt page URLs |
| Every launch, not only the featured ones | `includeUnfeatured`: true |
| Newest first instead of most upvoted | `sort`: `newest` |
| Only launches with traction | `minVotes`: 50 |

The selectors combine. The same product coming from two selectors, or launching twice in the window, is
**one row** (the newest launch), with every selector it came from listed under `sources`.

***

### Accuracy, on purpose

- Every field is read from the launch itself. Nothing is estimated: a fact the maker did not fill in is `null`.
- Product Hunt hides vote counts during a launch's first hours. Those rows carry `votes: null` and
  `votesHidden: true` — never a zero.
- Days follow Product Hunt's own calendar (US Pacific), so "yesterday" is the same day the leaderboard shows.
- Tracking parameters are stripped from websites; `domain` is the site's real host.
- No login, no API key, no browser. Residential proxy by default; a few kilobytes per launch.

***

### Cost

Pay per launch delivered, plus the platform's start fee. A week of featured launches is typically 100–200 rows.
Duplicates, rows removed by your filters and empty runs are never charged; `maxLaunches` caps both rows and
spend.

### Pairs well with

- **Company Enrichment** — turn `domain` into firmographics and a tech stack.
- **Decision-Maker Finder** and **Email Finder & Verifier** — from the maker's name and domain to a verified inbox.
- **Recently Funded Companies** — the launch today, the round tomorrow.

# Actor input Schema

## `period` (type: `string`):

Time window of launches to collect. Days follow Product Hunt's own calendar (US Pacific time). Choose `custom` to set exact dates below.

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

First launch day to include, `YYYY-MM-DD`. Used only when the window is `custom`. Up to 62 days per run.

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

Last launch day to include, `YYYY-MM-DD` (inclusive). Used only when the window is `custom`. Leave empty for today.

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

Product Hunt topics, one per line — a name (`Developer Tools`, `Artificial Intelligence`, `SaaS`) or a slug (`developer-tools`). Returns the products launched in that topic, ordered by the sort below.

## `searchTerms` (type: `array`):

Free-text product searches, one per line — `CRM`, `AI agent for sales`, `invoice`. Returns the products Product Hunt finds for the term, with their latest launch.

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

Specific Product Hunt pages, one per line — `https://www.producthunt.com/products/<slug>` or `/posts/<slug>`. Each gives one full row.

## `sort` (type: `string`):

`popular` = most upvotes first (the leaderboard order). `newest` = most recent launch first.

## `includeUnfeatured` (type: `boolean`):

Product Hunt features a curated subset of each day's launches on its front page; the rest are listed under "all". Off = featured only (what the leaderboard shows). On = every launch of the day.

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

Drop launches with fewer upvotes. Launches whose vote count is hidden (launch day) are kept.

## `maxLaunches` (type: `integer`):

Cap on delivered rows. Also caps what you pay.

## `fetchDetails` (type: `boolean`):

Reads each launch's own page for the description, website, makers, hunter, socials, pricing type and company facts. Off = the feed fields only (name, tagline, votes, comments, rank, date, topics) — faster, one request per 20 launches.

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

Concurrent requests to Product Hunt. Lower it if you see rate-limit warnings in the log.

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

Residential proxy by default — Product Hunt challenges datacenter IPs. Traffic is tiny (a few KB per launch).

## Actor input object example

```json
{
  "period": "last-7-days",
  "dateFrom": "2026-09-01",
  "dateTo": "2026-09-14",
  "topics": [
    "Developer Tools",
    "Artificial Intelligence"
  ],
  "searchTerms": [
    "CRM",
    "sales automation"
  ],
  "productUrls": [
    "https://www.producthunt.com/products/lovable"
  ],
  "sort": "popular",
  "includeUnfeatured": false,
  "minVotes": 0,
  "maxLaunches": 100,
  "fetchDetails": true,
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

One row per product launch: product, tagline, votes, comments, rank, launch date, website, domain, topics, makers and hunter.

## `makers` (type: `string`):

The lead view: website, domain, makers with headlines and profiles, hunter, socials, pricing type and company facts.

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

Launches delivered and charged, sources covered, totals, what could not be found and the per-source report.

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("inovaflow/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 = { "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    } }

# Run the Actor and wait for it to finish
run = client.actor("inovaflow/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 '{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call inovaflow/product-hunt-scraper --silent --output-dataset

```

## MCP server setup

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