Product Hunt Scraper
Scrape Product Hunt launches: daily, weekly, monthly and yearly boards, topics and product pages. Name, tagline, upvotes, comments, makers and rank.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
leaderboardPeriod,dateFrom,dateTo(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.00045 per product = $0.45 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Product scraped | Charged for each Product Hunt launch saved to the dataset. Sample rows, diagnostic rows, duplicates and paid placements are never charged. | $0.00045 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-16, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
leaderboardPeriod | Which leaderboard to read. Daily gives one page per day in your date range (about 17-20 launches each). Weekly, monthly and yearly give the top 20 of each period the range touches. Leave empty if you are supplying your own URLs below. | string |
dateFrom | First day to read, as YYYY-MM-DD. Defaults to seven days before the To date. Up to 120 leaderboard pages per run. | string |
dateTo | Last day to read, as YYYY-MM-DD. Defaults to yesterday, because today's leaderboard is still moving. | string |
topics | Topic slugs, as they appear in a Product Hunt topic address - for example artificial-intelligence, developer-tools, productivity. Each topic returns the products Product Hunt currently ranks first in it. | array |
startUrls | Paste leaderboard, topic or product addresses directly, for example https://www.producthunt.com/leaderboard/daily/2026/8/14, https://www.producthunt.com/topics/artificial-intelligence or https://www.producthunt.com/products/notion. Anything you put here is read in addition to the leaderboard range above. | array |
maxItems | Total number of products to return across every page in the run. Keep it low while you are testing - you pay per row. | integer |
includeDetails | On by default. The list pages carry the name, tagline, votes, comments, topics, thumbnail, rank and launch date; the description, the maker names and the product's own website live on the product page, so each row costs one extra page read. Turn this off for a faster, lighter run when you only need the ranking and the engagement numbers. | boolean |
proxyUrls | Leave this empty for a normal run. Fill it in only if you want the traffic to leave through proxy servers you already pay for, one URL per line, in the form http://user:pass@host:port. | array |
What you get
A structured dataset — each result includes fields like:
productNametaglinedescriptionupvotescommentsCounttopicsmakerswebsiteUrlthumbnailUrllaunchedAtrankproductHuntUrlslugpostIdExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
Product Hunt Scraper: launches, upvotes, makers and websites, no token needed
Pick a leaderboard period and a date range, or paste leaderboard, topic and product addresses straight in. Every launch comes back as a row with its name, tagline, upvote and comment counts, topics, rank, launch date and the product's own website.
Worth knowing before you plan around it: only the daily board is deep. The weekly, monthly and yearly boards publish a top 20 each, so a year of weeklies is about a thousand rows, not the whole year of launches.
| Input | A period plus dates, topic slugs, or Product Hunt URLs |
| Output | One row per launch |
| Ceiling | 120 pages and 2,000 rows per run |
| Account needed | None |
| Price | $0.45 per 1,000 launches, flat on every plan |
🚀 What Product Hunt Scraper does
Three routes into the same data, and you can mix them in one run.
The leaderboards are the usual way in. Pick daily with a date range and you get one page per day, roughly 17 to 20 launches each. Pick weekly, monthly or yearly and you get the top 20 of each period your range touches.
Topics take the slug out of a Product Hunt topic address, like artificial-intelligence or developer-tools, and return what Product Hunt currently ranks first in that topic.
URLs are the escape hatch. Any leaderboard, topic or product address you paste is read in addition to whatever the date range generated.
No Product Hunt account is involved and there is no API token to get, so there is nothing to paste in and nothing that expires on you later.
📥 What you give it
Every field is optional. Run it with the input empty and you get one labelled sample row back.
{
"leaderboardPeriod": "daily",
"dateFrom": "2026-08-09",
"dateTo": "2026-08-15",
"maxItems": 100
}
| Field | Default | What it is |
|---|---|---|
leaderboardPeriod | none | daily, weekly, monthly or yearly. Leave it out if you are supplying your own URLs. |
dateFrom | seven days before dateTo | YYYY-MM-DD. 2026/8/9 is also accepted. |
dateTo | yesterday | Yesterday, not today, because today's board is still moving. |
topics | none | Up to 40 topic slugs, as they appear in the address. |
startUrls | none | Up to 120 leaderboard, topic or product addresses. |
maxItems | 20 | Total rows across every page, 1 to 2,000. |
includeDetails | true | Fetches each product's own page for the description, the maker names and the website. One extra read per row. Turn it off for ranking and engagement numbers only. |
proxyUrls | none | Leave it empty for a normal run. It is there for callers who want traffic to leave through servers they already pay for, as http://user:pass@host:port. |
A date that is not in one of those two shapes is silently replaced by the default window, which is the seven days ending yesterday. Nothing tells you it happened, so check launchedAt on the first few rows if your dates came out of another system.
📤 What you get back
A real row, from run crtA2I1AfUk9wDbze:
{
"ok": true,
"charged": true,
"recordType": "product",
"productName": "Omniwork",
"tagline": "The Creative Agent OS, create better with desktop AI agents",
"description": "Omniwork is an always-on Creative Agent OS that turns ideas into finished work. ...",
"upvotes": 416,
"commentsCount": 41,
"topics": ["Productivity", "Artificial Intelligence", "Social media marketing"],
"makers": ["Zoey Chen", "Finn Ding", "Shihao_Huang", "Tiana", "Abby Mao"],
"websiteUrl": "https://www.omniwork.ai",
"thumbnailUrl": "https://ph-files.imgix.net/ca9f8039-1afd-45fb-8410-e43e4f63d929.png",
"launchedAt": "2026-08-09T07:01:00.000Z",
"rank": 1,
"productHuntUrl": "https://www.producthunt.com/products/omniwork-2",
"slug": "omniwork-2",
"postId": "1196035",
"reviewsRating": 0,
"reviewsCount": 0,
"inputUrl": "https://www.producthunt.com/leaderboard/daily/2026/8/9",
"scrapedAt": "2026-09-21T01:27:08.091Z"
}
The description there is cut short for this page. A real row carries the whole paragraph.
| Field | What it is |
|---|---|
postId | The launch id. The right key to dedupe and diff on, because a product can launch more than once. |
upvotes, commentsCount | A snapshot taken when the page was read, not a final total. Read the same launch a week later and the numbers move. |
topics | Up to three, as Product Hunt files them. |
makers | Names only, and only when the page's launch matches the row. Older launches of a product that has shipped several, and rows that came from a topic page, have none. |
websiteUrl | The product's own site, not the Product Hunt page. This is the field lead lists are usually after. |
rank | Position within that period's board. |
inputUrl | The page the row came from, so you can trace it. |
🧾 Reading the output
Three kinds of row.
| Row | How to spot it | Billed |
|---|---|---|
| A launch | recordType: "product" | yes |
| The sample row | _sample: true, and only when the input named no target | no |
| A diagnostic | _diagnostic: true and ok: false | no |
charged is written when the row is built, a moment before the charge goes out, so treat it as "this is a real row" rather than as a receipt. A charge that fails adds a CHARGE_ERROR diagnostic at the end of the run.
The Console's default table hides the diagnostic columns, so those rows look blank there. Download the JSON, or add errorCode to the view, to read them.
| Code | What it means |
|---|---|
NO_RESULTS | The page held no launches. A future date or an empty board does this. |
DUPLICATES | Everything on that page had already been returned earlier in the same run. |
NOT_FOUND | The address does not exist. Usually a mistyped product slug or an unknown topic. |
RATE_LIMITED, BLOCKED | Product Hunt pushed back on that page. Try a smaller range. |
NETWORK | The page could not be reached. Re-run it. |
TIME_BUDGET | The run ran out of time before reading that page. Rows already collected are still delivered. |
PROXY_INPUT_ADJUSTED | Something in your proxyUrls was not usable and was adjusted. |
▶️ How to run it
1. Open Product Hunt Scraper and click Try for free. 2. Choose a Leaderboard period, then set From date and To date. 3. Or skip that and paste addresses into Product Hunt URLs. 4. Set Maximum rows. Keep it low on the first run. 5. Click Start, then download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$0.45 per 1,000 launches. The same rate on every Apify plan, with no volume tiers.
One charge per launch row. A launch that turns up on two pages in the same run is only charged once. Sample rows and diagnostic rows are never charged, so a leaderboard page that comes back empty does not add to your row count.
💡 What people use it for
- A weekly digest of what launched in a category, keyed on
postIdso nothing repeats. - Building a lead list from
websiteUrl, which is the product's own domain rather than a profile. - Tracking where a launch finished on its board, by reading
rankacross a date range. - Finding the makers behind launches in a niche, for outreach or research.
🚧 What it does not do
- No keyword search. You pick boards, topics or URLs. There is no query field.
- Weekly, monthly and yearly boards are the top 20 only. Only the daily board is deep.
- Counts are a snapshot, read at the moment the page was. They are not final totals.
- Makers are names, not profiles. No usernames, no links, no follower counts, and none at all on
rows that came from a topic page.
- No comments, no reviews text, no upvoter lists.
reviewsRatingandreviewsCountare the
summary numbers Product Hunt publishes, nothing more.
- When a product page cannot be read in time, the row is still delivered and still billed, with
description, makers and websiteUrl empty. Nothing in the row separates "not fetched" from "not published", so if those fields matter to you, check for empties and re-run those slugs.
- 120 pages and 2,000 rows per run. Anything past that is dropped, explicit URLs first in the
queue. Split a bigger job across runs.
- Today's board is deliberately out of reach through the date range, because it is still moving.
Paste the URL if you want it anyway.
🧭 Which launch and startup scraper do you need?
| If you want | Use |
|---|---|
| New product launches, makers and websites | This one |
| The Y Combinator company directory | Y Combinator Companies Scraper |
| Hacker News stories, Show HN and comments | Hacker News Scraper |
| What buyers say about a software product | G2 Reviews Scraper |
| Who a startup is hiring | Wellfound Jobs Scraper |
❓ Questions people ask
Do I need a Product Hunt account or an API token? No. Nothing to paste in, nothing to renew.
Can I search for a keyword? Not here. Read a topic or a date range and filter the rows yourself.
Why are makers empty on some rows? Because that page's launch id did not match the row, which happens on older launches of a product that has shipped several, and on every row that came from a topic page. An empty list beats a guessed one.
Can I get today's launches? Through the date range, no, because the board is still moving and the ranks would be wrong within the hour. Paste today's leaderboard URL into startUrls if you want it anyway.
Why is my run slower with details on? Because each row costs one extra page read. Turn includeDetails off when you only need ranks and engagement.
Is this legal? Leaderboards, topic pages and product pages are public. Rows can carry people's names, which data-protection law covers, so have a reason for collecting them. Apify's write-up on scraping and the law is a fair start, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the run ID and the input you used. The diagnostic row's errorCode and inputUrl name the page that went wrong.