Product Hunt Daily Products Scraper
Pricing
$1.00 / 1,000 results
Product Hunt Daily Products Scraper
Scrape Product Hunt for daily/top products with votes, reviews, descriptions, and maker information. Perfect for competitive analysis, market research, and founder intelligence.
Pricing
$1.00 / 1,000 results
Rating
0.0
(0)
Developer
陈俊杰
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
23 days ago
Last modified
Categories
Share
Product Hunt Scraper — Apify Actor
Scrape Product Hunt for daily and top products, including upvotes, comment counts, descriptions, maker information, tags, and more. This actor is perfect for:
- Competitive analysis — track new product launches in your niche.
- Market research — discover trending products and categories.
- Founder intelligence — build lead lists of makers and their projects.
- Content curation — aggregate Product Hunt data for newsletters or dashboards.
How it works
- The actor sends a standard HTTP GET request to the Product Hunt collection page of your choice (e.g.
https://www.producthunt.com/tech). - Product Hunt is built with Next.js, so the initial page state is serialised into a
<script id="__NEXT_DATA__">tag. - The actor parses this JSON payload to extract products without needing a headless browser — making it fast and resource-efficient.
- Each product is normalised, filtered (by minimum upvotes), limited, and pushed to the Apify dataset.
Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
date | string | today | The date to scrape (YYYY-MM-DD). Used for reference; Product Hunt often returns currently featured products. |
collection | enum | tech | Which Product Hunt collection to scrape. |
min_votes | int | 0 | Minimum number of upvotes — products below this threshold are dropped. |
limit | int | 25 | Maximum number of products to return (capped at 100). |
Available collections
techgamespodcastsbooksdeveloper-toolsartificial-intelligenceall(home page / trending)
Example output
Each item in the dataset is a JSON object like this:
{"name": "Not Diamond","tagline": "The AI model router that improves every LLM output","description": "Not Diamond automatically routes each query to the best LLM, saving costs and improving quality.","url": "https://www.producthunt.com/posts/not-diamond","slug": "not-diamond","upvotes": 987,"comments_count": 42,"maker_name": "Tommy Sun","thumbnail_url": "https://ph-files.imgix.net/...","website_url": "https://notdiamond.ai","tags": ["artificial-intelligence", "developer-tools", "open-source"],"featured_at": "2025-05-26T07:01:00Z","id": "123456"}
Field descriptions
| Field | Type | Description |
|---|---|---|
name | string | Product name |
tagline | string | Short one-line description |
description | string | Full description (often same as tagline) |
url | string | Product Hunt post URL |
slug | string | URL slug |
upvotes | integer | Number of upvotes ▲ |
comments_count | integer | Number of comments |
maker_name | string | Name of the first listed maker |
thumbnail_url | string | Thumbnail image URL |
website_url | string | Product's external website |
tags | array | List of topic/category tags |
featured_at | string | ISO 8601 timestamp when featured |
id | string | Unique Product Hunt ID |
Example usage (Apify client)
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run_input = {"collection": "tech","min_votes": 50,"limit": 10,"date": "2025-05-26",}run = client.actor("your-actor-id").call(run_input=run_input)dataset_items = client.dataset(run["defaultDatasetId"]).list_items().itemsfor item in dataset_items:print(f"{item['name']} — ▲ {item['upvotes']} by {item['maker_name']}")
JavaScript / TypeScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const input = {collection: 'developer-tools',min_votes: 100,limit: 5,};const run = await client.actor('your-actor-id').call(input);const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(item => {console.log(`${item.name} — ▲ ${item.upvotes}`);});
Local development
# 1. Clone the repositorygit clone <repo-url> product-hunt-scrapercd product-hunt-scraper# 2. Create a virtual environmentpython -m venv venvsource venv/bin/activate # or venv\Scripts\activate on Windows# 3. Install dependenciespip install -r requirements.txt# 4. Run the actor locallypython -m src
Note: When running locally without the Apify platform,
Actor.push_data()andActor.get_input()require either the Apify CLI (apify run) or environment variables. For quick tests, you can setAPIFY_LOCAL_EMULATION=trueor use the Apify CLI.
Technical details
- Language: Python 3.14
- HTTP client:
httpx(async) - HTML parsing:
BeautifulSoupis declared as a dependency, but the primary extraction path uses the__NEXT_DATA__JSON payload — no full DOM parsing needed. - Scraping approach: Static HTTP request with a real browser User-Agent. No headless browser (Puppeteer/Playwright) required.
- Dataset: Each product is pushed individually via
Actor.push_data().
Limitations
- Product Hunt rate-limits aggressive requests. Adding randomised delays between multiple runs is recommended.
- The
__NEXT_DATA__JSON structure may change when Product Hunt updates their frontend. The actor includes fallback logic to find product data by key name, but occasional breakage is possible. - Only publicly visible data on collection pages is extracted. Authentication-gated data (e.g. private follow feeds) is not supported.
License
MIT