Product Hunt Scraper (with Email Enrichment)
Pricing
from $2.00 / 1,000 results
Product Hunt Scraper (with Email Enrichment)
Extract product names, upvotes, makers, taglines, and website URLs from ProductHunt. Optionally crawl each product's website to find emails, LinkedIn, Twitter, and phone numbers. Supports daily/weekly/monthly leaderboard, keyword search, and topic scraping.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Khadin Akbar
Actor stats
0
Bookmarked
7
Total users
6
Monthly active users
19 days ago
Last modified
Categories
Share
ProductHunt Scraper Pro — Extract Listings with Email & LinkedIn Enrichment
Extract structured data from ProductHunt — product names, upvote counts, makers, taglines, website URLs, topics, and more. Optionally crawl each product's website to find email addresses, LinkedIn company pages, Twitter handles, Facebook pages, and phone numbers — all in a single actor run.
Supports four scraping modes: daily/weekly/monthly/yearly leaderboard, keyword search, topic/category browsing, and direct URL scraping.
What This Actor Extracts
From ProductHunt (always)
| Field | Type | Description |
|---|---|---|
product_name | string | Official product name |
tagline | string | One-line product description |
description | string | Full product description |
upvote_count | integer | Total upvotes received |
comment_count | integer | Number of comments |
daily_rank | integer | Leaderboard position (#1 = most upvoted) |
launch_date | string | Date featured on PH (YYYY-MM-DD) |
product_hunt_url | string | Full PH product page URL |
website_url | string | Product's own website |
topics | array | Category tags (e.g. "AI", "Productivity") |
thumbnail_url | string | Product logo/image URL |
makers | array | Founders with name, username, Twitter, PH profile |
featured | boolean | Whether PH editorially featured this product |
From Product Websites (when enrichContacts: true)
| Field | Type | Description |
|---|---|---|
emails | array | Email addresses found on the site |
linkedin_url | string | LinkedIn company page |
twitter_url | string | Twitter/X profile |
facebook_url | string | Facebook page |
phone_numbers | array | Phone numbers (tel: links) |
Scraping Modes
1. Leaderboard (default)
Scrape ProductHunt's ranked lists for any time period.
{"mode": "leaderboard","leaderboardPeriod": "daily","maxResults": 50}
Supported periods: daily, weekly, monthly, yearly.
2. Keyword Search
Find products matching a keyword or niche.
{"mode": "search","searchQuery": "AI writing tools","maxResults": 100}
3. Topic / Category
Scrape all products under a ProductHunt topic.
{"mode": "topic","topic": "artificial-intelligence","maxResults": 200}
Popular topic slugs: artificial-intelligence, developer-tools, marketing, productivity, saas, chrome-extensions, no-code, design-tools.
4. Direct URLs
Scrape specific ProductHunt pages.
{"mode": "urls","startUrls": [{ "url": "https://www.producthunt.com/posts/notion-ai" },{ "url": "https://www.producthunt.com/leaderboard/daily/2026/3/28" }]}
Contact Enrichment Example
Get emails and social links for every product in today's top 50:
{"mode": "leaderboard","leaderboardPeriod": "daily","maxResults": 50,"enrichContacts": true}
Output: Two record types in the same dataset, joined on product_hunt_url:
record_type: "product"— full PH data for each productrecord_type: "contact_enrichment"— emails, LinkedIn, Twitter from their website
How It Works
ProductHunt is built on Next.js with Apollo GraphQL. Instead of fragile CSS selector parsing (which breaks every time PH updates their frontend), this actor extracts data directly from the Apollo client cache embedded in window.__NEXT_DATA__. This normalized JSON cache contains all product data in a structured format, making extraction reliable regardless of UI changes.
For contact enrichment, a separate CheerioCrawler visits each product's website and:
- Scans
mailto:links for email addresses - Runs a regex scan of the page text for additional email patterns
- Decodes platform redirect wrappers (
/redirect?url=https://linkedin.com/...) before filtering social links — a key detail many scrapers miss - Extracts LinkedIn, Twitter/X, Facebook, and tel: phone links
Pricing
This actor uses PAY_PER_EVENT pricing — you pay only for what you actually use:
result-found— charged per product record extracted from ProductHuntresult-enriched— charged per website enrichment record (email/LinkedIn/Twitter)
You can set a budget cap in the Apify console to control total spend per run.
Output Format
Results are stored in the default Apify dataset. Filter and join records by record_type:
// Product recordsconst products = results.filter(r => r.record_type === 'product');// Enrichment recordsconst contacts = results.filter(r => r.record_type === 'contact_enrichment');// Join themconst enriched = products.map(p => ({...p,...contacts.find(c => c.product_hunt_url === p.product_hunt_url),}));
Typical Use Cases
Lead generation for B2B sales — Find newly launched SaaS products and contact their founders before they hit scale.
Market research — Track which categories are growing on ProductHunt week over week.
Competitor monitoring — Get notified when a competitor launches or when products in your category surge in upvotes.
Investor sourcing — Identify high-upvote early-stage products with their maker contact info.
Content creation — Build "Top ProductHunt launches this week" roundups automatically.
AI agent pipelines — Feed ProductHunt data into Claude, ChatGPT, or any LLM agent via the Apify MCP server.
FAQ
Does this require a ProductHunt API key? No. This actor scrapes the public ProductHunt website. No API key or account is needed.
How fresh is the data? Data is scraped in real time when you run the actor. Daily leaderboard data reflects the current day's standings at the time of the run.
How accurate is the contact enrichment? Email accuracy depends on how openly each product's website publishes contact info. Most SaaS products publish at least one email. Social links (LinkedIn, Twitter) are found on ~70-80% of product websites.
Can I scrape historical leaderboards?
Yes — ProductHunt keeps historical leaderboard pages. Use mode urls and provide the historical leaderboard URL (e.g. https://www.producthunt.com/leaderboard/daily/2025/12/25).
What's the maximum results I can get per run?
The maxResults cap is 5,000. For larger datasets, run the actor multiple times with different date ranges or topics.
Integration with AI Agents (MCP)
This actor is fully compatible with the Apify MCP server (mcp.apify.com). When connected to Claude, ChatGPT, or Cursor via MCP, AI agents can call this actor directly using natural language:
"Find today's top 20 AI tools on ProductHunt and get their founders' emails"
The agent will set mode: "leaderboard", leaderboardPeriod: "daily", maxResults: 20, enrichContacts: true and return a complete dataset.
Support
Found a bug or have a feature request? Leave a review or open an issue on the actor's GitHub page. Pull requests welcome.
Built by: USERNAME/producthunt-scraper-pro