Product Hunt Scraper avatar

Product Hunt Scraper

Pricing

from $9.00 / 1,000 record scrapeds

Go to Apify Store
Product Hunt Scraper

Product Hunt Scraper

No-login Product Hunt scraper: daily/weekly/monthly/yearly leaderboards, full product & launch details, makers + hunter, comments, reviews & ratings, topic/category feeds, product search, and maker lead-gen (followers, Twitter, products). Optional BYO official API token.

Pricing

from $9.00 / 1,000 record scrapeds

Rating

0.0

(0)

Developer

Yuliia Kulakova

Yuliia Kulakova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Product Hunt Scraper — launches, products, makers, reviews & collections (no login)

Product Hunt Scraper

Scrape Product Hunt without an account, cookies, or API key. This actor reads Product Hunt's public pages and returns clean, structured records for launches, products, makers, hunters, comments, reviews, topics, categories, collections and search.

It is built for teams that turn Product Hunt into an intelligence feed:

  • Startup & launch intelligence — what launched today / this week / month / year, ranks, upvotes, comment velocity, topics and media.
  • Maker & founder lead-gen — maker and hunter profiles with follower counts, Twitter handles, headlines, the products they made and the tools they use, plus optional website email harvesting and verification.
  • Market & trend research — topic and category feeds, full-text product search, ratings and review counts.
  • VC / deal sourcing — surface fast-climbing launches, prolific makers and the products behind them.

No login is required — the default path reads Product Hunt's public pages. Optionally paste your own free Product Hunt developer token to additionally enrich launches through the official Product Hunt API.


Key features

  • 8 scrape modes — more surface area than any competing Product Hunt actor:
    • Leaderboard — daily, weekly, monthly and yearly ranked launches (single day, ISO week, month or year).
    • Product / launch details — full launch + product profile for any product or launch URL/slug.
    • Product search — Product Hunt search for one or more terms, paginated.
    • Topic feed — a topic's product feed (e.g. artificial-intelligence), paginated.
    • Category feed — a category's product feed (e.g. ai-code-editors), paginated.
    • Collection — the products inside curated collections.
    • Maker profile — maker / hunter lead-gen records.
    • Mixed URLs — paste any mix of Product Hunt URLs; each is auto-routed to the right handler.
  • Rich per-launch datavotes (current upvotes) and votesLaunchDay, commentsCount, reviewsRating + reviewsCount, makers[], hunter, topics[], media[] (screenshots + video), productLinks[], badges[], ranks and full description.
  • Product alternatives[] and launchHistory[] — the product's listed alternatives and its full visible launch history (unique among Product Hunt scrapers).
  • Product tech stack builtWith[] (opt-in) — the tools/products a product is "built with", captured from its built-with tab (each with name, tagline, logo, ratings and a shoutout note). Distinct from a maker's personal stacks[]. Count varies per product and over time.
  • Deep maker lead-gen — followers/following, Twitter handle + URL, headline, products made (madeProducts[]), products used (stacks[]), review activity, Kitty-coin ranks (kittyCoin.allTime/year/month) and visit streak.
  • Website email harvest + verification — optionally fetch each product's own website and harvest public contact emails (emails[]), then optionally verify them with real MX + SMTP-RCPT checks (emailsVerified[]), with an honest MX-only fallback when outbound port 25 is blocked.
  • Robust slug routing — accepts a product slug OR a launch/post slug; the wrong namespace is auto-corrected, so /products/{slug} and /posts/{slug} both work.
  • Optional BYO official API — supply your own apiToken for higher-reliability enrichment and comment bodies at scale. Entirely optional.
  • Keyless & reliable — no account and no setup. Proxies are included and configured automatically; the actor picks the right route for each page on its own.

Input

Every field is optional except mode. Provide only the targets relevant to your chosen mode.

FieldTypeDefaultDescription
modeenum (required)leaderboardleaderboard / product-details / search / topic / category / collection / maker-profile / urls.
leaderboardPeriodenumdailydaily / weekly / monthly / yearly.
datestring YYYY-MM-DDDaily leaderboard day (empty = today, US Pacific).
dateFrom, dateTostring YYYY-MM-DDInclusive daily range (overrides date).
weekinteger 1–53Weekly period (pair with year).
monthinteger 1–12Monthly period (pair with year).
yearintegerYear for weekly / monthly / yearly.
searchTermsarraySearch-mode queries (e.g. ["AI","note taking"]).
topicsarrayTopic slugs (e.g. artificial-intelligence).
categoriesarrayCategory slugs (e.g. ai-code-editors).
collectionUrlsarrayFull collection URLs.
productUrlsarray/products/{slug} or /posts/{slug} URLs.
productSlugsarrayBare product or launch slugs (e.g. kilocode).
makerUsernamesarray@usernames (with or without @).
makerUrlsarray/@{username} profile URLs.
startUrlsarray (requestListSources)Mixed Product Hunt URLs (urls mode).
maxItemsinteger100Hard cap on saved records (0 = unlimited, safety-capped).
maxPagesinteger0Max feed pages per query (0 = until maxItems).
featuredOnlybooleanfalseLeaderboards: keep only featured launches.
includePromotedbooleanfalseInclude promoted / advertised rows.
enrichLaunchDetailsbooleantrueLeaderboard/urls: fetch each launch page for makers, media, links, description.
enrichProductDetailsbooleanfalseTopic/category/search: upgrade each product card to a full launch record.
includeMakersbooleantrueInclude makers[] + hunter.
includeMediabooleantrueInclude media[].
scrapeCommentsbooleanfalseAttach comments[] from the public page (no token needed).
maxCommentsinteger20Cap comments per launch.
scrapeReviewsbooleanfalseAttach detailed reviews[] + per-dimension ratings.
maxReviewsinteger20Cap reviews per product.
scrapeLaunchHistorybooleanfalseAttach the product's past launches (launchHistory[]).
scrapeAlternativesbooleanfalseAttach listed alternatives[].
includeBuiltWithbooleanfalseAttach the product tech stack builtWith[].
makerLeadEnrichmentbooleantrueMaker-profile: include products made, stacks, socials, Kitty-coin.
enrichWebsiteEmailsbooleanfalseHarvest public emails from each product's website → emails[].
verifyEmailsbooleanfalseVerify harvested emails via MX + SMTP → emailsVerified[].
apiTokenstring (secret)Optional BYO official Product Hunt API bearer token.
deduplicatebooleantrueDrop duplicate records within a run.
maxConcurrencyinteger8Parallel detail fetches (6–10 recommended).
maxRequestRetriesinteger5Retries per request on a block.
proxyobjectincludedOptional. Proxies are included and auto-configured — leave empty.

Input examples

Daily leaderboard with makers, comments and reviews

{
"mode": "leaderboard",
"leaderboardPeriod": "daily",
"date": "2026-09-01",
"enrichLaunchDetails": true,
"scrapeComments": true,
"scrapeReviews": true,
"maxItems": 50
}

Product / launch details with tech stack, alternatives and verified emails

{
"mode": "product-details",
"productSlugs": ["kilocode", "lovable"],
"includeBuiltWith": true,
"scrapeAlternatives": true,
"scrapeLaunchHistory": true,
"enrichWebsiteEmails": true,
"verifyEmails": true
}

Maker profiles for lead-gen

{
"mode": "maker-profile",
"makerUsernames": ["chrismessina", "fmerian"],
"makerLeadEnrichment": true,
"maxItems": 5
}

Product search

{
"mode": "search",
"searchTerms": ["AI code editor"],
"enrichProductDetails": false,
"maxPages": 3
}

Output

Each record carries a type field — launch, product or maker — plus sourceUrl and scrapedAt. Fields Product Hunt does not expose for a given record are omitted rather than faked.

launch record (trimmed)

Leaderboard (enriched), product-details and urls modes.

{
"type": "launch",
"postId": "…",
"name": "Kilo Code",
"slug": "kilocode",
"url": "https://www.producthunt.com/posts/kilocode",
"tagline": "Open-source AI coding agent for VS Code",
"description": "…",
"votes": 503,
"votesLaunchDay": 498,
"commentsCount": 87,
"reviewsCount": 42,
"reviewsRating": 4.9,
"dailyRank": 1,
"featured": true,
"isTopLaunch": true,
"launchNumber": 3,
"launchState": "default",
"leaderboardRank": 1,
"createdAt": "2026-09-01T07:01:00Z",
"featuredAt": "2026-09-01T07:01:00Z",
"thumbnailUrl": "https://ph-files.imgix.net/…?auto=format&fit=crop&w=300&h=300",
"topics": [
{ "id": "…", "name": "Developer Tools", "slug": "developer-tools" },
{ "id": "…", "name": "Artificial Intelligence", "slug": "artificial-intelligence" }
],
"topicNames": "Developer Tools, Artificial Intelligence",
"media": [
{ "type": "image", "imageUrl": "https://ph-files.imgix.net/…?auto=format&fit=max", "width": 1270, "height": 760 },
{ "type": "video", "platform": "youtube", "videoId": "…", "videoUrl": "https://www.youtube.com/watch?v=…" }
],
"productLinks": [
{ "store": "Website", "website": "kilocode.ai", "redirectUrl": "https://www.producthunt.com/r/…" },
{ "store": "Github", "website": "github.com", "redirectUrl": "https://www.producthunt.com/r/…" }
],
"websiteUrl": "https://kilocode.ai",
"badges": [ { "type": "TopPostBadge", "period": "DAY", "date": "2026-09-01", "position": 1 } ],
"hunter": {
"id": "…",
"name": "Chris Messina",
"username": "chrismessina",
"headline": "Inventor of the hashtag …",
"avatarUrl": "https://ph-avatars.imgix.net/…",
"profileUrl": "https://www.producthunt.com/@chrismessina"
},
"hunterUsername": "chrismessina",
"makers": [
{ "id": "…", "name": "…", "username": "…", "headline": "…", "avatarUrl": "https://ph-avatars.imgix.net/…", "profileUrl": "https://www.producthunt.com/@…" }
],
"makersCount": 2,
"product": {
"id": "…",
"slug": "kilocode",
"name": "Kilo Code",
"url": "https://www.producthunt.com/products/kilocode",
"websiteUrl": "https://kilocode.ai",
"cleanUrl": "kilocode.ai",
"description": "…",
"logoUrl": "https://ph-files.imgix.net/…?auto=format",
"followersCount": 1240,
"reviewsCount": 42,
"reviewsRating": 4.9,
"postsCount": 3,
"wasInYCombinator": false,
"socialLinks": { "twitter": "https://twitter.com/…", "github": "https://github.com/…" },
"categories": [ { "id": "…", "name": "AI Code Editors", "slug": "ai-code-editors" } ]
},
"sourceUrl": "https://www.producthunt.com/posts/kilocode",
"scrapedAt": "2026-09-03T09:00:00.000Z"
}

Notes: product.employeeSize, product.fundingAmount and pricingType are mapped but are not in Product Hunt's public payload, so they resolve to null and are dropped from the record (see Limitations). The hunter/makers[] objects on launch/product records typically carry {id, name, username, headline, avatarUrl, profileUrl} (a maker's twitterUsername and follower counts are additionally included only when the page exposes them, which for launch/product records is rare). For reliable maker Twitter handles, follower counts and the products they made, use maker-profile mode (a separate type:maker record).

launch field list: type, postId, name, slug, url, tagline, description, votes, votesLaunchDay, commentsCount, reviewsCount, reviewsRating, dailyRank, weeklyRank, monthlyRank, leaderboardRank (leaderboard mode), featured, isTopLaunch, launchNumber, launchState, isPromoted, createdAt, featuredAt, scheduledAt, thumbnailUrl, topics[], topicNames, media[], productLinks[] ({store, website, redirectUrl, devices}), websiteUrl, badges[], hunter{}, hunterUsername, makers[], makersCount, product{}, leaderboard{period,url} (leaderboard mode), and optionally comments[] + commentsCaptured + commentsTruncated, reviews[] + reviewsCaptured + reviewsTruncated, launchHistory[], alternatives[], builtWith[], emails[], emailsVerified[], apiEnriched + apiNote (only with a BYO apiToken), sourceUrl, scrapedAt.

builtWith[] shape (opt-in via includeBuiltWith)

The product's tech stack, each entry a product Product Hunt lists under "built with":

"builtWith": [
{
"id": "…",
"name": "Claude",
"slug": "claude",
"url": "https://www.producthunt.com/products/claude",
"tagline": "…",
"logoUrl": "https://ph-files.imgix.net/…?auto=format",
"reviewsRating": 4.8,
"reviewsCount": 210,
"followersCount": 5400,
"categories": [ { "id": "…", "name": "…", "slug": "…" } ],
"note": "We use it for the agent's reasoning loop"
}
]

emailsVerified[] shape (opt-in via enrichWebsiteEmails + verifyEmails)

"emails": ["hello@kilocode.ai", "support@kilocode.ai"],
"emailsVerified": [
{
"email": "hello@kilocode.ai",
"status": "unknown",
"confidence": 50,
"mxFound": true,
"mxHost": "aspmx.l.google.com",
"smtpChecked": false,
"smtpBlocked": true,
"note": "SMTP unreachable (ETIMEDOUT); fell back to MX-only"
}
]

status is one of valid / invalid / catch-all / role / disposable / unknown; confidence is 0–100. Outbound port 25 is blocked on the Apify platform (and most hosts), so in practice verification runs MX-only: mxFound true/false, smtpChecked:false, smtpBlocked:true, confidence ~40–50 (role/company inboxes ~40). The catchAll field and a full mailbox verdict (valid/invalid at confidence ~95, smtpChecked:true) only appear where outbound port 25 is actually open. These are public company/role addresses from the product's own site (e.g. sales@, hello@) — not personal maker contacts.

product record (trimmed)

Topic / category / search / collection modes, when not upgraded with enrichProductDetails.

{
"type": "product",
"id": "…",
"name": "Cursor",
"slug": "cursor",
"url": "https://www.producthunt.com/products/cursor",
"tagline": "The AI code editor",
"reviewsRating": 4.7,
"reviewsCount": 318,
"logoUrl": "https://ph-files.imgix.net/…?auto=format",
"rank": 1,
"categorySlug": "ai-code-editors",
"sourceUrl": "https://www.producthunt.com/categories/ai-code-editors",
"scrapedAt": "2026-09-03T09:00:00.000Z"
}

topicSlug / categorySlug / searchTerm / collectionUrl identifies which query produced the card.

maker record (trimmed)

Maker-profile mode.

{
"type": "maker",
"id": "…",
"username": "chrismessina",
"name": "Chris Messina",
"url": "https://www.producthunt.com/@chrismessina",
"headline": "Inventor of the hashtag. Product Hunt's #1 hunter …",
"avatarUrl": "https://ph-files.imgix.net/…",
"headerImageUrl": "https://ph-files.imgix.net/…?auto=format",
"isMaker": true,
"isAccountVerified": true,
"isAmbassador": true,
"twitterUsername": "chrismessina",
"twitterUrl": "https://twitter.com/chrismessina",
"followersCount": 41800,
"followingsCount": 2100,
"productsCount": 38,
"submittedPostsCount": 2600,
"collectionsCount": 40,
"reviewsCount": 120,
"stacksCount": 55,
"kittyCoin": {
"allTime": { "rank": 1, "value": "…" },
"year": { "rank": 3, "value": "…" },
"month": { "rank": 5, "value": "…" }
},
"visitStreak": { "emoji": "🔥", "duration": 365 },
"stacks": [ { "id": "…", "name": "Notion", "slug": "notion" } ],
"madeProducts": [
{ "type": "product", "id": "…", "name": "…", "slug": "…", "url": "https://www.producthunt.com/products/…", "tagline": "…" }
],
"sourceUrl": "https://www.producthunt.com/@chrismessina",
"scrapedAt": "2026-09-03T09:00:00.000Z"
}

maker field list: type, id, username, name, url, headline, avatarUrl, headerImageUrl, isMaker, isAccountVerified, isAmbassador, twitterUsername, twitterUrl, followersCount, followingsCount, productsCount, submittedPostsCount, collectionsCount, reviewsCount, stacksCount, kittyCoin{allTime,year,month}, visitStreak{emoji,duration}, stacks[], madeProducts[], sourceUrl, scrapedAt.

The sample values above are illustrative and trimmed; field names and shapes match exactly what the actor emits.


Pricing

This actor is billed per record: a small per-run start fee plus a flat rate for each record saved to the dataset (launches, products and makers), plus Apify's standard platform usage (compute and proxy) for the run. Enrichment options (comments, reviews, tech stack, email harvest/verification) add extra fetches per record but do not change what counts as a record — sub-objects such as comments[], reviews[], builtWith[], emails[] and emailsVerified[] are attached to their parent record at no additional per-record charge. See the actor's pricing tab for the exact current rates.

Tip: keep maxItems and maxPages set to what you actually need, and leave heavy enrichment off unless you need it.


Use cases

  • Launch & trend tracking — pull the daily/weekly/monthly leaderboard on a schedule to watch what is launching, how fast it climbs, and in which topics.
  • Maker & founder lead-gen — build lists of makers and hunters with follower counts, Twitter handles and the products they ship; optionally attach and verify contact emails from product websites.
  • Competitor launch monitoring — track a competitor's product page for new launches, ratings, reviews, alternatives and its tech stack over time.
  • VC / deal sourcing — surface fast-rising launches and prolific, well-followed makers early, with the product profile and links needed to reach out.
  • Market research — topic and category feeds plus product search for ratings, review counts and positioning across a space (e.g. ai-code-editors).

Honest limitations

We would rather set expectations correctly than oversell.

  • Proxies are included and automatic. No proxy setup is required — the actor routes each page appropriately on its own. You can pin your own proxy in the input, but it is not necessary.
  • Each leaderboard returns its top band, not the entire board. Every leaderboard — daily, weekly, monthly and yearly — returns roughly the top ~15–20 launches of that period (the complete featured set plus a partial non-featured tail). Launches further down the board are loaded only through on-page interaction and are not returned. In practice this is the ranked "leaderboard" people mean. To cover a whole month or year in depth, run the daily leaderboard across a dateFromdateTo range instead — each day contributes its own top band.
  • product.employeeSize, product.fundingAmount and pricingType are not in Product Hunt's public payload. They are mapped for completeness but resolve to null (dropped from the record). Do not rely on this actor for company headcount, funding, or free/paid pricing figures.
  • comments[] and reviews[] are a sample, not the full set. They contain the most relevant comments/reviews available on the public page — typically far fewer than the total commentsCount/reviewsCount (e.g. a launch with 79 comments / 46 reviews may return ~7 / ~3). Raising maxComments/maxReviews will not return more than the public page exposes (they only cap the sample, not expand it). Each record reports how many were captured via commentsCaptured/reviewsCaptured (with commentsTruncated/reviewsTruncated:true when below the total). Comments are ordered sticky/pinned-first then by votes, not in the site's native order.
  • Very large products fetched by bare slug (e.g. notion, figma via productSlugs//products/{slug}) return full product-level data (reviews, followers, socials, categories, alternatives, builtWith) but the top-level launch's makers, hunter, topics, media and description may be absent — the public page does not fully render the highlighted launch for these. Pass the exact launch URL (/posts/{launch-slug}) or use leaderboard mode to get the complete launch record with makers.
  • Email verification is MX-only in practice. Outbound port 25 is blocked on the Apify platform (and most hosts), so verifyEmails returns an MX-only verdict (mxFound true/false, smtpBlocked:true, confidence ~40–50); full mailbox verdicts (valid/invalid) only occur where port 25 is open. Harvested emails are public company/role addresses from the product's own site, not personal maker contacts.
  • Topic / category / search return lightweight product cards (name, tagline, rating, review count, logo) unless enrichProductDetails is on, which adds one fetch per product to upgrade it to a full launch record.
  • Emails are harvested from the product's own website only. Product Hunt does not expose maker personal emails, so enrichWebsiteEmails reads public addresses published on the product site — and a JS-only SPA that exposes no address yields nothing.
  • The official-API path is optional and best-effort. The no-login website path is the fully tested default and already returns makers, comments and reviews.

FAQ

Do I need to log in or provide an API key? No. The default no-login path reads Product Hunt's public pages and already returns launches, products, makers, comments and reviews. Optionally, you can paste your own free Product Hunt developer token (apiToken) to additionally enrich launches through the official API — it is never required.

How are upvotes reported? votes is Post.latestScore — the current upvote number shown on the site. votesLaunchDay is the launch-day tally. There is no separate hidden vote count in the public payload.

Can I pass a launch URL instead of a product URL (or vice versa)? Yes. Both /products/{slug} and /posts/{slug} URLs and bare slugs work; the actor auto-corrects the namespace.

What's the difference between builtWith[] and a maker's stacks[]? builtWith[] is the product's tech stack (tools it is built with). A maker's stacks[] is the tools a person uses. They are separate.

Why is a field missing from my records? Fields Product Hunt does not expose for a record are omitted rather than filled with fake values. Enable the matching option (e.g. scrapeComments, scrapeReviews, includeBuiltWith, enrichWebsiteEmails) to populate optional data.

Is this allowed? The actor reads only public, logged-out Product Hunt pages; no authentication is bypassed. You are responsible for how you use personal data (maker names, Twitter handles, any harvested emails) and for complying with Product Hunt's terms and applicable law.


Feedback & support

Maintained by brilliant_gum.

  • ⭐️ If this actor is useful, a rating on its Apify Store page really helps other people find it.
  • 🐛 Something not working, or a field you need? Open an issue on the actor's Issues tab — it is monitored and fixes ship fast.
  • 💡 Feature requests are welcome the same way.