Product Hunt Daily Products Scraper avatar

Product Hunt Daily Products Scraper

Pricing

$1.00 / 1,000 results

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

$1.00 / 1,000 results

Rating

0.0

(0)

Developer

陈俊杰

陈俊杰

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

23 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