Product Hunt Daily Products Scraper avatar

Product Hunt Daily Products Scraper

Pricing

Pay per usage

Go to Apify Store
Product Hunt Daily Products Scraper

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

Pay per usage

Rating

0.0

(0)

Developer

陈俊杰

陈俊杰

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Product Hunt Scraper — Apify Actor

Apify Actor Python

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

  1. The actor sends a standard HTTP GET request to the Product Hunt collection page of your choice (e.g. https://www.producthunt.com/tech).
  2. Product Hunt is built with Next.js, so the initial page state is serialised into a <script id="__NEXT_DATA__"> tag.
  3. The actor parses this JSON payload to extract products without needing a headless browser — making it fast and resource-efficient.
  4. Each product is normalised, filtered (by minimum upvotes), limited, and pushed to the Apify dataset.

Input parameters

FieldTypeDefaultDescription
datestringtodayThe date to scrape (YYYY-MM-DD). Used for reference; Product Hunt often returns currently featured products.
collectionenumtechWhich Product Hunt collection to scrape.
min_votesint0Minimum number of upvotes — products below this threshold are dropped.
limitint25Maximum number of products to return (capped at 100).

Available collections

  • tech
  • games
  • podcasts
  • books
  • developer-tools
  • artificial-intelligence
  • all (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

FieldTypeDescription
namestringProduct name
taglinestringShort one-line description
descriptionstringFull description (often same as tagline)
urlstringProduct Hunt post URL
slugstringURL slug
upvotesintegerNumber of upvotes ▲
comments_countintegerNumber of comments
maker_namestringName of the first listed maker
thumbnail_urlstringThumbnail image URL
website_urlstringProduct's external website
tagsarrayList of topic/category tags
featured_atstringISO 8601 timestamp when featured
idstringUnique Product Hunt ID

Example usage (Apify client)

Python

from apify_client import ApifyClient
client = 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().items
for 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 repository
git clone <repo-url> product-hunt-scraper
cd product-hunt-scraper
# 2. Create a virtual environment
python -m venv venv
source venv/bin/activate # or venv\Scripts\activate on Windows
# 3. Install dependencies
pip install -r requirements.txt
# 4. Run the actor locally
python -m src

Note: When running locally without the Apify platform, Actor.push_data() and Actor.get_input() require either the Apify CLI (apify run) or environment variables. For quick tests, you can set APIFY_LOCAL_EMULATION=true or use the Apify CLI.


Technical details

  • Language: Python 3.14
  • HTTP client: httpx (async)
  • HTML parsing: BeautifulSoup is 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