Product Hunt Scraper (with Email Enrichment)
Pricing
from $2.00 / 1,000 results
Product Hunt Scraper (with Email Enrichment)
Extract Product Hunt launches with product names, upvotes, makers, taglines and website URLs, plus optional email enrichment. Works with Apify MCP and the API.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
2
Bookmarked
80
Total users
13
Monthly active users
6 days ago
Last modified
Categories
Share
What is Product Hunt Scraper (with Email Enrichment)?
Product Hunt Scraper (with Email Enrichment) turns Product Hunt launches into a dataset of company leads. Each row returns the product name, tagline, upvotes, daily, weekly and monthly ranks, topics and makers, then adds the product's real website, up to three ranked public emails with a deliverability status for each, and a lead score and tier. Growth teams, founders researching competitors, sales prospectors and AI agents use it to go from "what launched this week" to a reviewed contact list in one run.
Why launch researchers pick this Product Hunt scraper
- The real website, with proof.
website_urlis the product's own site, resolved from Product Hunt's redirect link, maker pages or a search match, andwebsite_resolution_signalslists the evidence that confirmed it. - Emails ranked and checked. Up to three public emails per product land in
emails, split intoverified_emails,risky_emailsandrejected_emails, with the exact check status inemail_verifications. - Lead scoring built in.
lead_status,lead_score,lead_tierandlead_signalslet you sort a launch list into outreach-ready and research-only rows. - Four ways to find launches. Leaderboards by day, week, month or year, keyword search, topic slugs, or pasted post and leaderboard URLs.
- Date ranges in one run.
startDateandendDate(orlookbackDays) pull a whole week of daily leaderboards together. - Resumable large pulls.
productHuntResumeCursorandexcludeProductHuntUrlscontinue a capped run without re-enriching rows you already have.
Best fit for this Actor
- Best fit for teams that start from Product Hunt and want product rows with a verified website and public contacts.
- Use
outputMode: "leads"when the next step is a CRM or outreach tool, andleanwhen an AI agent needs compact rows. - Designed for public product websites and public maker pages; contacts are the addresses those sites publish.
- When you then want a second deliverability pass on the emails, continue with Email Address Validator and pass it the
emailscolumn.
Example workflow: from a weekly leaderboard to an outreach sheet
A growth marketer at a developer-tools agency starts every Monday with last week's launches. She runs mode: "leaderboard" with leaderboardPeriod: "daily", lookbackDays: 7 and outputMode: "leads". The dataset returns one row per launch with website_url, verified_emails, lead_tier and topics. She filters to lead_tier A and B in the developer topics, exports the rows to a spreadsheet, then feeds the domains into Bulk Website Contact Extractor when she wants phones and social profiles too. She schedules the same input weekly so the sheet grows with each new batch of launches.
Input
{"mode": "leaderboard","leaderboardPeriod": "daily","lookbackDays": 7,"maxResults": 50,"includeAllProducts": true,"resolveWebsites": true,"enrichEmails": true,"maxWebsitePages": 5,"maxEmailsPerProduct": 3,"verifyEmails": true,"findContacts": true,"outputMode": "leads"}
Search by keyword or topic instead:
{"mode": "topic","topic": "developer-tools","maxResults": 25,"outputMode": "full"}
| Field | Type | What it controls |
|---|---|---|
mode | string | leaderboard, search, topic or urls. Default leaderboard. |
leaderboardPeriod | string | daily, weekly, monthly or yearly in leaderboard mode. |
searchQuery | string | Keyword matched against name, tagline, description and topics in search mode. |
topic | string | Product Hunt topic slug such as artificial-intelligence in topic mode. |
startUrls | array | Post, product-launch or dated leaderboard URLs in urls mode. |
startDate, endDate | string | Daily leaderboard date range in YYYY-MM-DD format. |
lookbackDays | integer | Rolling window of recent days when startDate is empty. Default 1. |
maxResults | integer | Products to return. Default 100. |
includeAllProducts | boolean | Include featured and non-featured posts. Default true. |
resolveWebsites | boolean | Resolve and confirm each product's own website. Default true. |
enrichEmails | boolean | Look for public emails on the product website. Default true. |
maxWebsitePages | integer | Pages read per product site, homepage plus linked contact, about, team, privacy or terms pages. Up to 5. |
maxEmailsPerProduct | integer | Ranked emails kept per product. Up to 3. |
verifyEmails | boolean | Check each selected email for deliverability. Default true. |
findContacts | boolean | Fill open contact slots with a managed contact finder after the public-page pass. Default true. |
websiteUrlOverrides | array | Your approved product-to-website mapping when you already know the right site. |
excludeProductHuntUrls | array | Launch URLs to skip, for continuing an earlier run. |
productHuntResumeCursor | string | Cursor from RUN_SUMMARY.nextProductHuntCursor to resume a capped query. |
maxConcurrency | integer | Parallel enrichment jobs. Default 3. |
outputMode | string | full, lean or leads. |
Output
One row per Product Hunt product. A real full row from a daily leaderboard (maker details replaced with fictional values, tracking parameters trimmed):
{"product_name": "Aarivi","tagline": "Your Job hunt on Autopilot","description": "Your job hunt on autopilot - discover startup jobs, tailor resumes, track applications, and build your portfolio in one place.","upvote_count": 0,"comment_count": 1,"daily_rank": 1,"weekly_rank": null,"launch_date": "2026-10-01","product_hunt_url": "https://www.producthunt.com/products/aarivi","website_url": "https://aarivi.com/","website_resolution_status": "verified_search_match","website_resolution_confidence": 100,"website_resolution_signals": ["product_name_matches_domain","product_name_matches_page_title","tagline_matches_page"],"company_domain": "aarivi.com","topics": ["Hiring", "Education", "Career"],"makers": [{"maker_name": "Jordan Lee","maker_id": "jordanlee","maker_url": "https://www.producthunt.com/@jordanlee","twitter_url": null,"website_url": null}],"featured": false,"emails": ["hi@aarivi.com"],"verified_emails": ["hi@aarivi.com"],"risky_emails": [],"email_verifications": [{"email": "hi@aarivi.com","status": "ok","source": "public_website","checkedAt": "2026-10-01T13:44:36.668Z"}],"email_source": "page_scrape","email_result": "emails_found","email_coverage": "complete","email_pages_visited": 4,"email_page_urls": ["https://aarivi.com/","https://aarivi.com/about","https://aarivi.com/privacy","https://aarivi.com/terms"],"lead_status": "verified_contact","lead_score": 78,"lead_tier": "A","lead_signals": ["website_resolved","high_confidence_website","deliverable_email_verified","email_published_on_website"],"scraped_at": "2026-10-01T13:43:39.440Z"}
| Field | What it contains |
|---|---|
product_name, tagline, description, topics, thumbnail_url | The launch as listed on Product Hunt |
upvote_count, comment_count, reviews_count, reviews_rating | Engagement on Product Hunt |
daily_rank, weekly_rank, monthly_rank, yearly_rank | Leaderboard positions for the matching period |
launch_date, featured, product_hunt_url | Launch date, featured flag and launch link |
makers | Maker name, handle, profile link and any listed website |
website_url, company_domain | The product's own website and normalized domain |
website_resolution_source, website_resolution_status, website_resolution_confidence, website_resolution_signals | How the website was found and the evidence that confirmed it |
emails, verified_emails, risky_emails, rejected_emails | Ranked public emails grouped by check result |
email_verifications, rejected_email_verifications | Per-email status, source and check time |
email_source, email_result, email_coverage, email_pages_visited, email_page_urls | Where emails came from and which pages were read |
lead_status, lead_score, lead_tier, lead_signals | Lead qualification with plain-language reasons |
enrichment_warnings, scraped_at | Per-row notes and collection time |
lead_status values seen in practice include verified_contact, catch_all_contact, unverified_contact, no_contact and unresolved_website, so you can route each group differently.
Pricing
This Actor uses Pay per event with Apify platform usage included in the event price. You pay one result event for each product row saved, one Email Found event for each email returned in a row, and one Actor Start event per run. Rows with no email cost only the result event. The live Pricing tab on this page shows the current event prices.
Worked example in words: a run that saves 20 products, where 5 of them carry one email each, costs 20 result events, 5 Email Found events and one start event. Set maxEmailsPerProduct lower or enrichEmails to false to keep a launch-research run to result events only.
Use with AI agents (MCP)
Connect the Actor to Claude, ChatGPT or another MCP client through Apify MCP and ask:
Pull this week's Product Hunt launches in the developer-tools topic, resolve each product's website, and list the ones with verified emails, sorted by lead score.
What the agent gets back and how to read it:
- The run returns one dataset row per product; read them with
get-dataset-items. - Filter on
lead_statusandverified_emails, and citewebsite_resolution_signalsas provenance for each website. - Read
RUN_SUMMARYin the key-value store for totals andnextProductHuntCursorwhen a capped run has more to fetch. - Cost scope: each product row is one result event and each returned email is one Email Found event, so
maxResultsandmaxEmailsPerProductbound the spend.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~producthunt-scraper-pro/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"mode": "search", "searchQuery": "AI agents", "maxResults": 20, "outputMode": "leads"}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("khadinakbar/producthunt-scraper-pro").call(run_input={"mode": "topic", "topic": "productivity", "maxResults": 25, "outputMode": "leads"})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["product_name"], row["website_url"], row["verified_emails"])
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| Weekly launch monitoring | leaderboard with lookbackDays: 7 on a schedule | Every daily leaderboard of the week in one dataset |
| A niche you track | topic with its slug, such as artificial-intelligence | Launches in that category only |
| You know the right website | Add it to websiteUrlOverrides | That site is used for email discovery |
| Research without contacts | Set enrichEmails to false and outputMode to lean | Fast product rows with ranks and topics |
| A capped large pull | Pass RUN_SUMMARY.nextProductHuntCursor and the earlier product_hunt_url values | The next page with no repeat enrichment |
| Contacts for outreach | Keep rows where verified_emails is non-empty | Rows with a confirmed deliverable address |
Rows where website_resolution_status is unresolved still carry the full Product Hunt record; add an override and rerun those launches when you want their contacts.
Builder's note
I found that Product Hunt's own website field is usually a redirect, and a lookalike domain is worse than no domain for outreach, so every website must pass identity checks before the Actor reads a single page. I designed the email fields as three separate buckets with the exact check status beside each address, because a reviewer deciding who to contact needs to see the quality of each contact rather than one merged list.
FAQ
Can I scrape a single Product Hunt post?
Yes. Set mode to urls and paste the post or product-launch URL into startUrls.
Does every product get an email?
Products whose website or makers publish a contact address get one. The rest are still saved with their Product Hunt data, website and a lead_status that tells you why.
Can I get featured launches only?
Set includeAllProducts to false to request featured posts.
How do I keep agent context small?
Use outputMode: "lean", which keeps name, tagline, website, upvotes, rank, emails and topics.
Responsible use
This Actor collects public Product Hunt launch data and contact addresses that product websites publish. Business emails can still be personal data under laws such as the GDPR and CAN-SPAM rules, so use them with a lawful basis, honor opt-outs and suppression lists, and respect Product Hunt's terms and the terms of each website. A deliverable status describes the mailbox, and consent to contact is yours to establish. Product Hunt is a trademark of its owner; this independent Actor is not affiliated with or endorsed by Product Hunt.