Product Hunt Scraper — Leaderboards & Launches avatar

Product Hunt Scraper — Leaderboards & Launches

Pricing

from $1.20 / 1,000 launches

Go to Apify Store
Product Hunt Scraper — Leaderboards & 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

DIOPSIDE AI

Maintained by Community

Actor 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
CloudflareReal 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 ladderDatacenter 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.
ParsingReads Product Hunt's own Apollo SSR payload (homefeedItems.edges[].node), not the markup. Class names change weekly; the payload does not.
Partial failureA 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 countsmaxNbItemsToScrape: 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.

FieldTypeDefaultWhat it does
targetenumdailydaily · weekly · monthly · yearly · category · topic · pageUrls
startDate / endDatestringtoday (California)Inclusive YYYY-MM-DD range for the daily leaderboard
startWeek / endWeekstringInclusive YYYY-WW range, e.g. 2026-37
startMonth / endMonthstringInclusive YYYY-MM range
startYear / endYearintegerInclusive year range
categorySlugsstring[]e.g. ai-code-editors
topicSlugsstring[]e.g. developer-tools
productHuntPageUrlsstring[]Leaderboard, topic, category or product page URLs
maxNbItemsToScrapeinteger20Stop after this many saved launches. Empty = everything the source yields
maxPagesPerSourceinteger5(new) Pages per topic/category slug; 15 products per page
shouldIncludePromotedListingsbooleanfalseKeep Product Hunt's paid feed slots
shouldScrapeOnlyFeaturedLaunchesbooleanfalseKeep only featured launches
shouldScrapeProductDetailsbooleanfalse(new) Visit each product page for description, followers, rating, links, screenshots and maker credits. No extra charge
proxyConfigurationobject{"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

SourcePer pagePagination
Daily / weekly / monthly / yearly leaderboardTop 20 of that periodBy 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 pages15 productsReal, ?page=N, up to maxPagesPerSource
Category pages15 productsReal, ?page=N, up to maxPagesPerSource
Product page URL1 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 sizingtotalCount per topic/category, plus postsCount and firstLaunchedAt per product.
  • Trend research — monthly and yearly leaderboards back through Product Hunt's archive.
  • Enriching a product list — feed /products/<slug> URLs straight into productHuntPageUrls.

Switching from maximedupre/product-hunt-scraper

  1. Change the Actor id to diopside/product-hunt-launches.
  2. That's it — target, the date/week/month/year fields, categorySlugs, topicSlugs, productHuntPageUrls, maxNbItemsToScrape, shouldIncludePromotedListings and shouldScrapeOnlyFeaturedLaunches all mean the same thing, and the output keys are unchanged.

Two differences worth knowing:

  • shouldScrapeComments, shouldScrapeReviews, shouldScrapeBuiltWith, shouldScrapeLaunches and shouldScrapeWebsite are accepted and ignored. Use shouldScrapeProductDetails, 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.