Nimbryxo Studio

Use Product Hunt Launch & Topic Data Exporter with Python

Export Product Hunt launches with votes, comments, makers, hunter and topics from the daily leaderboard, a topic, a maker's history, or specific product slugs.

1. Choose the data you need

Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.

2. Prepare a source-based input

This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.

{
  "categorySlugs": [],
  "featuredOnly": false,
  "includeComments": false,
  "includeDetails": true,
  "includeHistory": false,
  "includeReviews": false,
  "maxComments": 20,
  "maxItems": 3,
  "maxPages": 1,
  "maxReviews": 10,
  "mode": "latest",
  "period": "daily",
  "postIds": [],
  "productSlugs": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "topicSlugs": []
}

Download input.example.json and save your reviewed copy as input.json.

FieldTypeRequiredDescription
modestringrequiredPick the launch feed, a leaderboard period, a date range, a topic, a category, a keyword search, specific products, or specific launches.
periodstringoptionalUsed when mode is `leaderboard`. Daily = one day, weekly = ISO week, monthly = calendar month, yearly = calendar year.
datestringoptionalOptional date for mode=leaderboard, in YYYY-MM-DD form. The daily period uses the exact day; weekly, monthly and yearly use that day's ISO week, month or year. Defaults to today.
fromstringoptionalOptional first day for mode=dailyRange, in YYYY-MM-DD form. Defaults to the `to` date, or yesterday.
tostringoptionalOptional last day for mode=dailyRange, in YYYY-MM-DD form. Defaults to the `from` date, or yesterday.
topicSlugsarrayoptionalTopics for mode=topic, e.g. `artificial-intelligence`, `developer-tools`, or a full `/topics/...` URL.
categorySlugsarrayoptionalCategories for mode=category, e.g. `ai-code-editors`, `productivity`, or a full `/categories/...` URL.
searchQuerystringoptionalKeyword for mode=search, e.g. `notion`, `ai browser`, `invoice`. Product Hunt searches products, then the actor resolves each product's latest launch.
productSlugsarrayoptionalProducts for mode=product, e.g. `notion`, `figma`, or full `https://www.producthunt.com/products/...` URLs. Each product's latest launch is returned.
postIdsarrayoptionalLaunches for mode=launch, e.g. `strawberry-1-0`, or full `https://www.producthunt.com/products/...?launch=...` URLs.
maxItemsintegeroptionalStop after this many launch records. One record is one launch (comments and reviews stay attached to it).
maxPagesintegeroptionalPage cap per feed, topic, category, search query, product history, comment thread or review feed. A full Product Hunt day is about 40-60 pages of 20 launches.
maxCommentsintegeroptionalUsed when `includeComments` is on. Comments are read 20 threads per page, including replies, and capped at this number.
maxReviewsintegeroptionalUsed when `includeReviews` is on. Reviews are read 10 per page and capped at this number.
includeDetailsbooleanoptionalFetch the full launch page for description, hunter, makers, media, website, pricing, ranks and review score. Turn off for a faster, lighter feed.
includeCommentsbooleanoptionalAttach the discussion thread (comments and nested replies) to each launch. Adds one or more requests per launch.
includeReviewsbooleanoptionalAttach Product Hunt's detailed reviews, ratings, pros and cons to each launch. Adds one request per 10 reviews.
includeHistorybooleanoptionalAttach every earlier launch from the same product, newest first.
featuredOnlybooleanoptionalKeep only launches that Product Hunt selected for the homepage.
proxyConfigurationobjectoptionalOptional. The actor works without a proxy; add one only if Product Hunt blocks your network or you need a specific location.

3. Start an Actor run

Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.

Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.

import json
import os
import urllib.request

# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
    actor_input = json.load(stream)

token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
    "https://api.apify.com/v2/acts/GAAwZYbMvugYH1EkV/runs?timeout=120&maxTotalChargeUsd=0.50",
    data=json.dumps(actor_input).encode("utf-8"),
    headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
    method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
    run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.

4. Inspect the actual results

Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.

One dataset row per Product Hunt launch, with product details, ranks, makers, media, optional comments/replies, optional reviews and optional launch history.

Questions before you run

Which inputs are required?

The published required fields are mode

What does this guide verify?

The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.

What if the run request times out?

Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.

Generated from source build Gt2QpRfveJ3Ze6KsE and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.