Product Hunt Scraper & API - Daily Launches, Leaderboard, Leads
Pricing
$0.70 / 1,000 results
Product Hunt Scraper & API - Daily Launches, Leaderboard, Leads
Product Hunt scraper and API for daily, weekly, monthly or yearly leaderboards. One result = one launch: rank, name, tagline, votes, comments, topics, real website URL, plus description, X/LinkedIn/GitHub links, reviews, followers. Startup leads, no login, no start fee. $0.70 per 1,000.
Pricing
$0.70 / 1,000 results
Rating
0.0
(0)
Developer
Giovanni Rich
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
This Product Hunt scraper is a Product Hunt launches scraper and unofficial Product Hunt API: pick a day, a date range, a week, a month or a year and get the launches from that Product Hunt leaderboard as clean JSON, CSV or Excel. One row per launch: rank, name, tagline, score, comment count, topics, launch date and the product's real website URL and domain, plus company details from its Product Hunt page: description, X / LinkedIn / GitHub / app store links, reviews, followers and categories - ready for startup lead generation.
It reads the same data the Product Hunt website loads, over plain HTTP with no headless browser and no login: every launch of a full day (about 900 products) with websites in around 4 minutes. Use it for startup leads, new-product monitoring, competitor and market research, newsletter curation, investor deal flow and feeding AI agents with fresh launch data.
What you get
One dataset item per launch:
- Ranking:
rank(the rank on the leaderboard you asked for),dailyRank,weeklyRank,monthlyRank,score,launchDayScore,commentsCount. - Launch:
name,tagline,topics,launchedAt(ISO timestamp),launchId,slug,thumbnailUrl. - Links:
websiteUrlandwebsiteDomain(the product's own site, tracking parameters removed),launchUrlandproductHuntUrlon Product Hunt. - Context:
leaderboardPeriod,leaderboardDate(2026-10-10,2026-W41,2026-09or2025),leaderboardUrl,scrapedAt.
With Website and company details on (default) each launch also has:
description(the full product description),companyWebsiteUrl,companyDomain.twitterUrl,linkedinUrl,facebookUrl,instagramUrl,githubUrl,iosUrl,androidUrl(the company's own profiles, when it lists them).reviewsRating,reviewsCount,followersCount,categories.launchesCount,firstLaunchAt(is this a first launch or the tenth?),wasInYCombinator,isNoLongerOnline,makersCount,logoUrl.
People are not returned: no maker or hunter names, profiles or avatars. This is company data.
A RUN_SUMMARY record in the key-value store lists per-leaderboard counts, pages read and why each one stopped.
Sample output
From a real cloud run (daily leaderboard, 2026-10-10):
| rank | name | websiteDomain | score | commentsCount | followersCount |
|---|---|---|---|---|---|
| 1 | Onepin | onepin.ai | 442 | 76 | 1495 |
| 2 | ReSO AI | resollm.ai | 462 | 37 | 1081 |
| 3 | Claude Dashboards & Motion | claude.com | 246 | 5 | 280 |
Use cases
- Startup lead generation: every day about 900 new products launch, each with a website. Export them, keep the topics you sell to, and pass the domains to an email or contact finder.
- Agency and SaaS prospecting: new launches need design, SEO, analytics, hosting, payments.
firstLaunchAt+launchesCounttell you who is brand new. - Market and competitor monitoring: schedule a daily run and watch a topic ("Sales", "Developer Tools", "Artificial Intelligence").
- Investor deal flow: top launches per week or month with scores, followers and the Y Combinator flag.
- Newsletters and content: the top 10 of the day or week with taglines and links, ready to paste.
- AI agents: a small, predictable JSON row per product that an agent can read without a browser.
Pricing
$0.70 per 1,000 launches (pay per result; failed requests are never charged). Company details, websites and social links are included at the same price, with no add-on events. The most-used Product Hunt scrapers on the Store charge $0.75-$1.80 per 1,000, and some add a start fee or a second charge for extra data.
| You scrape | You pay |
|---|---|
| 100 launches | $0.07 |
| 1,000 launches | $0.70 |
| 10,000 launches | $7.00 |
| 100,000 launches | $70.00 |
No start fee. The Apify free plan's $5 monthly credit covers about 7,000 launches. A whole day (about 900 launches with details) costs about $0.63. The prefilled input (yesterday's top 10) costs $0.007 and took 35 seconds in a cloud test. If you set a maximum cost per run, the scraper stops cleanly when it reaches it.
Why this one
- The cheapest of the most-used Product Hunt scrapers: $0.70 per 1,000, against $1.80 (maximedupre), $0.80 + $0.01 per run + $1.00 per 1,000 for extra data (memo23) and $0.75 + maker / e-mail add-ons (fatihtahta).
- Company details in the same row: description, X / LinkedIn / GitHub / app store links, reviews, followers, categories and the Y Combinator flag.
- The real website:
websiteUrlandwebsiteDomainwith tracking parameters removed, ready for a contact finder. - Any period back to 2013: daily, weekly, monthly or yearly leaderboards, up to 400 per run.
- Company data only: no maker or hunter personal data.
FAQ
Is it legal? Does it return personal data?
It reads public Product Hunt pages and returns company data only: maker and hunter names and profiles are left out on purpose (makersCount is only a number). You are responsible for how you use the results. This is not legal advice.
Is this the official Product Hunt API? Does it need a login? No. It is an independent tool that reads public pages. It needs no Product Hunt account or API key.
How fast is it and how many launches can I get? Every launch of a full day (about 900) with websites takes around 4 minutes; turning details off is about 5x faster. One run reads up to 400 leaderboards, back to November 2013.
Which proxy does it need? The default Apify Proxy. Product Hunt sits behind Cloudflare, so some requests are challenged and retried on another IP (free); in testing 992 of 992 requests on a full-day run succeeded. Switch to RESIDENTIAL only if the log shows repeated blocks.
Can I schedule it or use it via API?
Yes. Run it every morning with empty dates to get yesterday's launches (daily leaderboards do not overlap; use launchId as the unique key if you combine periods). It also works from the REST API, Make, Zapier, n8n and the Apify MCP server for AI agents.
How do I get only AI or only developer tools?
Filter the output on topics (launch tags) or categories. Both are plain string arrays.
Why is websiteUrl different from companyWebsiteUrl?
websiteUrl is the link of that launch (it can be a feature page such as together.ai/link). companyWebsiteUrl is the product's main site. For most launches they are the same.
Example inputs for common jobs
Copy one into the JSON tab of the input and adjust.
Daily lead list: every launch from yesterday (about 900) with websites and social links, ready for a contact finder (about $0.63):
{ "period": "daily", "maxItemsPerLeaderboard": 1000, "includeDetails": true }
Newsletter or deal-flow digest: the top 20 of each week in October, featured launches only:
{ "period": "weekly", "startDate": "2026-10-01", "endDate": "2026-10-31", "maxItemsPerLeaderboard": 20, "featuredOnly": true }
Fast ranking-only export for research: the top 50 of every month this year, no details (about 5x faster):
{ "period": "monthly", "startDate": "2026-01-01", "endDate": "2026-10-31", "maxItemsPerLeaderboard": 50, "includeDetails": false }
Enrich products you already know (one detailed row each):
{ "productUrls": ["notion", "https://www.producthunt.com/products/linear"] }
How to use
- Choose a Leaderboard period (daily is the default) and a Start date / End date. Leave the dates empty to get yesterday's launches.
- Set Max launches per leaderboard (default 20). Set 1000 to get every launch of a day, not only the top ones.
- Leave Website and company details on if you want websites and social links (you do for lead lists). Turn it off for a fast ranking-only export.
- Click Start. Download the results as JSON, CSV, Excel or HTML from the Output tab, or pull them through the Apify API, Make, Zapier, n8n or an MCP client.
Already know the products? Paste Product Hunt product URLs or slugs into Product URLs or slugs and get one detailed row per product instead.
Input example
{"period": "daily","startDate": "2026-10-01","endDate": "2026-10-07","maxItemsPerLeaderboard": 50,"includeDetails": true,"featuredOnly": false}
| Field | Type | Default | What it does |
|---|---|---|---|
period | string | daily | daily, weekly, monthly or yearly leaderboards. |
startDate, endDate | string | yesterday | YYYY-MM-DD, Pacific time. A range reads every leaderboard of the chosen period it touches (up to 400 per run). |
maxItemsPerLeaderboard | integer | 20 | Launches saved per leaderboard, in leaderboard order. 1000 = a whole day. Max 10000. |
includeDetails | boolean | true | Adds website, domain, description, social links, reviews, followers, categories. Off = ranking data only, about 5x faster. |
featuredOnly | boolean | false | Only launches Product Hunt featured on its homepage. |
leaderboardUrls | array | empty | Leaderboard URLs such as https://www.producthunt.com/leaderboard/monthly/2026/9. |
productUrls | array | empty | Product URLs, launch URLs or slugs (notion): one detailed row per product. |
maxConcurrency, maxRequestRetries, proxyConfiguration | 5, 15, Apify Proxy | Advanced. Defaults work. |
With an empty input the actor returns the top 20 launches of yesterday with websites.
Output example
A real row from a cloud run (description shortened):
{"rank": 1,"name": "Onepin","tagline": "AI voiceover with every name, price and date said right","websiteUrl": "https://onepin.ai/","websiteDomain": "onepin.ai","score": 442,"launchDayScore": 430,"commentsCount": 76,"topics": ["Developer Tools", "Artificial Intelligence", "Audio"],"launchedAt": "2026-10-10T07:01:00.000Z","dailyRank": 1,"weeklyRank": 7,"monthlyRank": 9,"launchId": "1257662","slug": "onepin","productSlug": "onepin","launchUrl": "https://www.producthunt.com/posts/onepin","productHuntUrl": "https://www.producthunt.com/products/onepin","thumbnailUrl": "https://ph-files.imgix.net/25268265-e582-4351-8a6e-1f94e6959d71.png","description": "AI voices sound human now. But they still guess names from the spelling, and nobody has time to listen to every line. Onepin runs on the voices you already use (ElevenLabs, OpenAI, Google, 30+ more)...","companyWebsiteUrl": "https://onepin.ai/","companyDomain": "onepin.ai","twitterUrl": "https://x.com/onepinai","linkedinUrl": null,"facebookUrl": null,"instagramUrl": null,"githubUrl": null,"iosUrl": null,"androidUrl": null,"reviewsRating": null,"reviewsCount": 0,"followersCount": 1495,"categories": ["Voice AI Tools"],"launchesCount": 1,"firstLaunchAt": "2026-10-10T07:01:00.000Z","wasInYCombinator": false,"isNoLongerOnline": false,"makersCount": 1,"logoUrl": "https://ph-files.imgix.net/25268265-e582-4351-8a6e-1f94e6959d71.png","leaderboardPeriod": "daily","leaderboardDate": "2026-10-10","leaderboardUrl": "https://www.producthunt.com/leaderboard/daily/2026/10/10","scrapedAt": "2026-10-11T17:41:46.088Z"}
Fill rates measured on 934 launches (every launch of 7 October 2026): website, domain, description, followers, launch counts 100%; X profile 29%; GitHub 9%; LinkedIn 5%; categories 13%. On the top 50 of four days: X 54%, GitHub 24%, LinkedIn 13%, categories 72%. Small first-time launches list fewer links than featured ones.
API example
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("rel8ble/product-hunt-scraper").call(run_input={"period": "weekly", "maxItemsPerLeaderboard": 100, "includeDetails": True})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["rank"], item["name"], "|", item["websiteDomain"], "|", item["score"])
One HTTP call that runs the actor and returns the rows (curl):
curl -X POST "https://api.apify.com/v2/acts/rel8ble~product-hunt-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"period": "daily", "maxItemsPerLeaderboard": 20}'
Integrations
- API:
POST https://api.apify.com/v2/acts/rel8ble~product-hunt-scraper/run-sync-get-dataset-items?token=...with the input JSON returns the rows in one call. - Schedules: run it every morning with empty dates to get yesterday's launches into Google Sheets, Airtable, Slack or a webhook.
- Make, Zapier, n8n: use the Apify app, pick this actor, map the dataset rows.
- MCP / AI agents: available through the Apify MCP server. Input is small and typed; an empty input is valid.
Limits (read before large runs)
- Product Hunt sits behind Cloudflare. Some requests are challenged and retried on another IP; you will see retry warnings in the log. That is expected and free. In testing every request eventually succeeded (992 of 992 on a full-day run).
- Leaderboard order is Product Hunt's own. On the "all launches" view the order is close to, but not exactly, final rank; the
rankfield is the true rank. rankon a yearly leaderboard is the position in the list (Product Hunt publishes no yearly rank number).- Scores change for a few days after launch. Run again later for final numbers.
- One run reads at most 400 leaderboards. Split longer daily ranges, or use weekly / monthly periods.
- Not included: comments, reviews text, maker and hunter profiles, upvoter lists, email addresses. For emails, pass
websiteDomainto a contact finder such as Website Contact Scraper.
How it works (for developers)
Each leaderboard starts with one GET of the public leaderboard page; the launches are read from the JSON the page embeds for its own rendering. Following pages are requested the way the site's own client does it: the page's GraphQL document is sent back with its SHA-256 (the persisted-query protocol) and the next cursor, 17 launches per call. Company details use the product page's own header document the same way, one small JSON call per product (about 10 KB instead of a 1 MB page); if that document is refused, the actor falls back to the full product page. Requests run through a small pool of proxy sessions so an IP that passes Cloudflare is reused and a challenged one is dropped. Results are pushed with Actor.pushData(item, 'result'), one charge event per saved launch.