Product Hunt Scraper — Leaderboards & Launches
Pricing
from $1.20 / 1,000 launches
Product Hunt Scraper — Leaderboards & Launches
Product Hunt launches from daily, weekly, monthly and yearly leaderboards plus topic and category pages.
Pricing
from $1.20 / 1,000 launches
Rating
0.0
(0)
Developer
DIOPSIDE AI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Share
Product Hunt Scraper — Leaderboards, Topics & Products
Drop-in compatible with maximedupre/product-hunt-scraper — cheaper and reliable. Same input fields, same output keys: change the Actor id and your existing integration keeps working.
Product Hunt launches as structured JSON — daily, weekly, monthly and yearly leaderboards, plus fully paginated topic and category pages. Rank, upvotes, comments, topics, review score, followers, public maker credits, funding and Y Combinator flag. No login, no API key, no captcha solver.
Why this one
Product Hunt sits behind Cloudflare, and that wall is per exit IP and unstable. While building this Actor, one probe run got a clean IP on its 3rd Apify datacenter session; the very next run was challenged on all four. A scraper that retries the same IP — or that discovers the block one 600 KB page request at a time — does not fail fast. It grinds until the platform kills it.
That is visible in the incumbent's own numbers. Over the 30 days to 2026‑09‑19 it ran 911 times: 743 succeeded, 37 failed, 16 were aborted, and 115 timed out — 18% of runs produced nothing, and the biggest single bucket is the timeout.
This Actor is built around that one fact:
| How it works here | |
|---|---|
| Cloudflare | Real Chrome TLS fingerprint (curl_cffi), and the session is warmed on the homepage first. A challenged warm‑up costs one 6 KB response and that exit IP is thrown away immediately — never a page request, never a retry loop. |
| Proxy ladder | Datacenter proxy first (cheap). If four exit IPs in a row are challenged the Actor escalates to RESIDENTIAL by itself and finishes the run. You do not have to notice, re-run, or reconfigure anything. |
| Parsing | Reads Product Hunt's own Apollo SSR payload (homefeedItems.edges[].node), not the markup. Class names change weekly; the payload does not. |
| Partial failure | A dead source is logged, named in the status message and skipped. It never takes down the records already collected, and it never silently returns an empty dataset as "success". |
| Honest counts | maxNbItemsToScrape: 15 saves 15 launches. Ad slots in the feed are detected by type (__typename == "Ad"), not by a pill image every row carries, so they are excluded from your bill without eating your quota. |
And one thing the incumbent does not have: topic and category pages here are paginated, and every row carries the source's totalCount. You can see that developer-tools has 14,243 products and decide how deep to go, instead of guessing.
Input
Every field below is the incumbent's field, spelled the incumbent's way.
| Field | Type | Default | What it does |
|---|---|---|---|
target | enum | daily | daily · weekly · monthly · yearly · category · topic · pageUrls |
startDate / endDate | string | today (California) | Inclusive YYYY-MM-DD range for the daily leaderboard |
startWeek / endWeek | string | — | Inclusive YYYY-WW range, e.g. 2026-37 |
startMonth / endMonth | string | — | Inclusive YYYY-MM range |
startYear / endYear | integer | — | Inclusive year range |
categorySlugs | string[] | — | e.g. ai-code-editors |
topicSlugs | string[] | — | e.g. developer-tools |
productHuntPageUrls | string[] | — | Leaderboard, topic, category or product page URLs |
maxNbItemsToScrape | integer | 20 | Stop after this many saved launches. Empty = everything the source yields |
maxPagesPerSource | integer | 5 | (new) Pages per topic/category slug; 15 products per page |
shouldIncludePromotedListings | boolean | false | Keep Product Hunt's paid feed slots |
shouldScrapeOnlyFeaturedLaunches | boolean | false | Keep only featured launches |
shouldScrapeProductDetails | boolean | false | (new) Visit each product page for description, followers, rating, links, screenshots and maker credits. No extra charge |
proxyConfiguration | object | {"useApifyProxy": true} | Required — see Proxy |
{"target": "daily","startDate": "2026-09-18","maxNbItemsToScrape": 15,"proxyConfiguration": { "useApifyProxy": true }}
Output
One item per launch (leaderboards) or product (topic/category/product pages). Field names match the incumbent; the additions come after.
{"isPromoted": false,"thumbnailUrl": "https://ph-files.imgix.net/75f0625c-cbfa-4751-b269-42252ecb1f75.png?auto=format","name": "Ami AI","url": "https://www.producthunt.com/products/ami-ai","tagline": "Lovable for getting customers","categories": [],"followers": null,"commentsCount": 182,"reviewsCount": null,"launchesCount": null,"dayRank": 1,"weekRank": 5,"monthRank": 11,"yearRank": null,"launchDate": "2026-09-18","description": null,"upvotesCount": 502,"links": [],"xAccountHandle": null,"imageUrls": [],"videoUrls": [],"tags": ["Sales", "Marketing", "Artificial Intelligence"],"team": [],"builtWith": [],"launches": [],"comments": [],"reviews": [],"website": null,"id": "1252325","slug": "ami-ai","productId": "1319473","productSlug": "ami-ai","productUrl": "https://www.producthunt.com/products/ami-ai","postUrl": "https://www.producthunt.com/posts/ami-ai","topics": [{ "id": "71", "slug": "sales", "name": "Sales" }],"launchScore": 490,"featuredAt": "2026-09-18T00:01:00-07:00","isFeatured": true,"sourceUrl": "https://www.producthunt.com/leaderboard/daily/2026/9/18/all","sourceType": "leaderboard","position": 1}
Turn on shouldScrapeProductDetails and the null columns fill in — description, followers, reviewsCount, reviewsRating, website, links, xAccountHandle, imageUrls, team, plus githubUrl, linkedinUrl, iosUrl, androidUrl, employeeSize, fundingAmount, wasInYCombinator. In the verification run every one of those was populated for 20/20 products.
Every record carries every column, on every source, so CSV and Excel exports line up.
builtWith, launches, comments and reviews are always empty arrays. They exist so a migrated integration does not hit a KeyError; use launchesCount, commentsCount, reviewsCount and reviewsRating instead.
Sizes and limits
| Source | Per page | Pagination |
|---|---|---|
| Daily / weekly / monthly / yearly leaderboard | Top 20 of that period | By period. Product Hunt's "load more" runs through a GraphQL endpoint that rejects every unauthenticated request, so the way to cover a range is a date/week/month range, not deeper pages |
| Topic pages | 15 products | Real, ?page=N, up to maxPagesPerSource |
| Category pages | 15 products | Real, ?page=N, up to maxPagesPerSource |
| Product page URL | 1 product, full detail | — |
Measured on the Apify platform (2026‑09‑19): 15 launches from one daily leaderboard in 15 s; 20 topic products with full product detail (21 page fetches) in 27 s.
Proxy
Apify Proxy is required. Raw Apify IPs get Cloudflare's "Just a moment…" interstitial — a verification run with useApifyProxy: false failed with exactly that, by design, rather than returning an empty dataset.
Leave proxyConfiguration at its default. Datacenter is tried first and the Actor escalates to RESIDENTIAL on its own when it has to. Set apifyProxyGroups: ["RESIDENTIAL"] yourself only if you want to skip the datacenter attempt entirely.
Use cases
- Launch tracking — run the daily target on a schedule and keep a table of every launch, its rank and its upvote curve.
- Competitive intelligence — walk a category (
ai-code-editors, 98 products) or a topic (developer-tools, 14,243) and get the whole field with review scores and follower counts. - Market sizing —
totalCountper topic/category, pluspostsCountandfirstLaunchedAtper product. - Trend research — monthly and yearly leaderboards back through Product Hunt's archive.
- Enriching a product list — feed
/products/<slug>URLs straight intoproductHuntPageUrls.
Switching from maximedupre/product-hunt-scraper
- Change the Actor id to
diopside/product-hunt-launches. - That's it —
target, the date/week/month/year fields,categorySlugs,topicSlugs,productHuntPageUrls,maxNbItemsToScrape,shouldIncludePromotedListingsandshouldScrapeOnlyFeaturedLaunchesall mean the same thing, and the output keys are unchanged.
Two differences worth knowing:
shouldScrapeComments,shouldScrapeReviews,shouldScrapeBuiltWith,shouldScrapeLaunchesandshouldScrapeWebsiteare accepted and ignored. UseshouldScrapeProductDetails, which covers the product-page fields in one pass at no extra charge.- No email enrichment. This Actor collects public product data and the maker credits Product Hunt prints on a launch. It does not visit personal profiles and does not collect contact details, so there is no per-email surcharge either.
Data and compliance
Public Product Hunt pages only — the same data any visitor sees, read from the page's own SSR payload. No login, no personal contact data, no email or phone lookup.