Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Product Hunt Scraper icon

Product Hunt Scraper

Scrape Product Hunt launches: daily, weekly, monthly and yearly boards, topics and product pages. Name, tagline, upvotes, comments, makers and rank.

141 runs on Apify $0.00045 per product ($0.45 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust leaderboardPeriod, dateFrom, dateTo (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export 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 forWhenPrice
Product scrapedCharged 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

FieldWhat it doesType
leaderboardPeriodWhich 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
dateFromFirst day to read, as YYYY-MM-DD. Defaults to seven days before the To date. Up to 120 leaderboard pages per run.string
dateToLast day to read, as YYYY-MM-DD. Defaults to yesterday, because today's leaderboard is still moving.string
topicsTopic 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
startUrlsPaste 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
maxItemsTotal number of products to return across every page in the run. Keep it low while you are testing - you pay per row.integer
includeDetailsOn 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
proxyUrlsLeave 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:

productNametaglinedescriptionupvotescommentsCounttopicsmakerswebsiteUrlthumbnailUrllaunchedAtrankproductHuntUrlslugpostId

Export 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 iconDeveloper & Research Tools

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.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

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.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

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.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

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.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

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.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

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.

2 use cases

See all 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.

InputA period plus dates, topic slugs, or Product Hunt URLs
OutputOne row per launch
Ceiling120 pages and 2,000 rows per run
Account neededNone
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
}
FieldDefaultWhat it is
leaderboardPeriodnonedaily, weekly, monthly or yearly. Leave it out if you are supplying your own URLs.
dateFromseven days before dateToYYYY-MM-DD. 2026/8/9 is also accepted.
dateToyesterdayYesterday, not today, because today's board is still moving.
topicsnoneUp to 40 topic slugs, as they appear in the address.
startUrlsnoneUp to 120 leaderboard, topic or product addresses.
maxItems20Total rows across every page, 1 to 2,000.
includeDetailstrueFetches 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.
proxyUrlsnoneLeave 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.

FieldWhat it is
postIdThe launch id. The right key to dedupe and diff on, because a product can launch more than once.
upvotes, commentsCountA snapshot taken when the page was read, not a final total. Read the same launch a week later and the numbers move.
topicsUp to three, as Product Hunt files them.
makersNames 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.
websiteUrlThe product's own site, not the Product Hunt page. This is the field lead lists are usually after.
rankPosition within that period's board.
inputUrlThe page the row came from, so you can trace it.

🧾 Reading the output

Three kinds of row.

RowHow to spot itBilled
A launchrecordType: "product"yes
The sample row_sample: true, and only when the input named no targetno
A diagnostic_diagnostic: true and ok: falseno

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.

CodeWhat it means
NO_RESULTSThe page held no launches. A future date or an empty board does this.
DUPLICATESEverything on that page had already been returned earlier in the same run.
NOT_FOUNDThe address does not exist. Usually a mistyped product slug or an unknown topic.
RATE_LIMITED, BLOCKEDProduct Hunt pushed back on that page. Try a smaller range.
NETWORKThe page could not be reached. Re-run it.
TIME_BUDGETThe run ran out of time before reading that page. Rows already collected are still delivered.
PROXY_INPUT_ADJUSTEDSomething 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 postId so 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 rank across 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. reviewsRating and reviewsCount are 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 wantUse
New product launches, makers and websitesThis one
The Y Combinator company directoryY Combinator Companies Scraper
Hacker News stories, Show HN and commentsHacker News Scraper
What buyers say about a software productG2 Reviews Scraper
Who a startup is hiringWellfound 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.