Product Hunt Scraper (with Email Enrichment) avatar

Product Hunt Scraper (with Email Enrichment)

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Product Hunt Scraper (with Email Enrichment)

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

Khadin Akbar

Maintained by Community

Actor stats

2

Bookmarked

80

Total users

13

Monthly active users

6 days ago

Last modified

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_url is the product's own site, resolved from Product Hunt's redirect link, maker pages or a search match, and website_resolution_signals lists the evidence that confirmed it.
  • Emails ranked and checked. Up to three public emails per product land in emails, split into verified_emails, risky_emails and rejected_emails, with the exact check status in email_verifications.
  • Lead scoring built in. lead_status, lead_score, lead_tier and lead_signals let 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. startDate and endDate (or lookbackDays) pull a whole week of daily leaderboards together.
  • Resumable large pulls. productHuntResumeCursor and excludeProductHuntUrls continue 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, and lean when 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 emails column.

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"
}
FieldTypeWhat it controls
modestringleaderboard, search, topic or urls. Default leaderboard.
leaderboardPeriodstringdaily, weekly, monthly or yearly in leaderboard mode.
searchQuerystringKeyword matched against name, tagline, description and topics in search mode.
topicstringProduct Hunt topic slug such as artificial-intelligence in topic mode.
startUrlsarrayPost, product-launch or dated leaderboard URLs in urls mode.
startDate, endDatestringDaily leaderboard date range in YYYY-MM-DD format.
lookbackDaysintegerRolling window of recent days when startDate is empty. Default 1.
maxResultsintegerProducts to return. Default 100.
includeAllProductsbooleanInclude featured and non-featured posts. Default true.
resolveWebsitesbooleanResolve and confirm each product's own website. Default true.
enrichEmailsbooleanLook for public emails on the product website. Default true.
maxWebsitePagesintegerPages read per product site, homepage plus linked contact, about, team, privacy or terms pages. Up to 5.
maxEmailsPerProductintegerRanked emails kept per product. Up to 3.
verifyEmailsbooleanCheck each selected email for deliverability. Default true.
findContactsbooleanFill open contact slots with a managed contact finder after the public-page pass. Default true.
websiteUrlOverridesarrayYour approved product-to-website mapping when you already know the right site.
excludeProductHuntUrlsarrayLaunch URLs to skip, for continuing an earlier run.
productHuntResumeCursorstringCursor from RUN_SUMMARY.nextProductHuntCursor to resume a capped query.
maxConcurrencyintegerParallel enrichment jobs. Default 3.
outputModestringfull, 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"
}
FieldWhat it contains
product_name, tagline, description, topics, thumbnail_urlThe launch as listed on Product Hunt
upvote_count, comment_count, reviews_count, reviews_ratingEngagement on Product Hunt
daily_rank, weekly_rank, monthly_rank, yearly_rankLeaderboard positions for the matching period
launch_date, featured, product_hunt_urlLaunch date, featured flag and launch link
makersMaker name, handle, profile link and any listed website
website_url, company_domainThe product's own website and normalized domain
website_resolution_source, website_resolution_status, website_resolution_confidence, website_resolution_signalsHow the website was found and the evidence that confirmed it
emails, verified_emails, risky_emails, rejected_emailsRanked public emails grouped by check result
email_verifications, rejected_email_verificationsPer-email status, source and check time
email_source, email_result, email_coverage, email_pages_visited, email_page_urlsWhere emails came from and which pages were read
lead_status, lead_score, lead_tier, lead_signalsLead qualification with plain-language reasons
enrichment_warnings, scraped_atPer-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:

  1. The run returns one dataset row per product; read them with get-dataset-items.
  2. Filter on lead_status and verified_emails, and cite website_resolution_signals as provenance for each website.
  3. Read RUN_SUMMARY in the key-value store for totals and nextProductHuntCursor when a capped run has more to fetch.
  4. Cost scope: each product row is one result event and each returned email is one Email Found event, so maxResults and maxEmailsPerProduct bound 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 ApifyClient
client = 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 situationHelpful actionExpected outcome
Weekly launch monitoringleaderboard with lookbackDays: 7 on a scheduleEvery daily leaderboard of the week in one dataset
A niche you tracktopic with its slug, such as artificial-intelligenceLaunches in that category only
You know the right websiteAdd it to websiteUrlOverridesThat site is used for email discovery
Research without contactsSet enrichEmails to false and outputMode to leanFast product rows with ranks and topics
A capped large pullPass RUN_SUMMARY.nextProductHuntCursor and the earlier product_hunt_url valuesThe next page with no repeat enrichment
Contacts for outreachKeep rows where verified_emails is non-emptyRows 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.

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.