Skip to main content

product-hunt-scraper-api

A Product Hunt scraper for Python, built on ScrapingBee's Product Hunt scraper API. It returns the ranked leaderboard as objects with rank, name, slug and URL.

Verified against the live site on 2026-08-25: the homepage returned 70 ranked products and Auto-Mode charged 1 credit for the call.

Install

pip install product-hunt-scraper-api

Today's launches

from product_hunt_scraper_api import ProductHuntScraper

scraper = ProductHuntScraper("YOUR-API-KEY")

for product in scraper.leaderboard()[:10]:
    print(product.rank, product.name, product.url)
1 akta.pro https://www.producthunt.com/products/akta-pro
2 Diet Claude https://www.producthunt.com/products/diet-claude
3 Jotform AI Data Assistant https://www.producthunt.com/products/jotform

Key from app.scrapingbee.com, 1,000 credits free.

Why this costs 1 credit and not 25

Product Hunt public listing pages render their product links server-side. That means no headless browser is needed, and the cheapest proxy tier is enough.

Rather than guessing that, the client sends mode=auto. ScrapingBee then tries configurations from cheapest to most expensive and charges only for the one that returns the page. On the homepage that settled at 1 credit. Confirm it yourself:

products, charged = scraper.leaderboard_with_cost()
print(len(products), "products for", charged, "credits")

If a page ever hardens, Auto-Mode climbs on its own up to max_cost without a code change. Raise the ceiling for a stubborn page:

scraper.leaderboard(max_cost=75)

What a Product object holds

Product Hunt uses Tailwind utility classes with no stable card identifier, so the dependable anchor is the product link, a[href^="/products/"]. Its text carries the rank inline, as "1. akta.pro". The client splits that apart for you:

Attribute Value
rank 1, parsed from the link text
name "akta.pro", with the rank prefix stripped
slug "akta-pro"
url absolute https://www.producthunt.com/products/akta-pro

product.as_dict() returns all four, ready for a dataframe or a JSON column.

Tracking a topic

for product in scraper.topic("developer-tools")[:10]:
    print(product.rank, product.name)

Any Product Hunt listing URL works through leaderboard(url=...), so category, topic and date-archive pages all behave the same way.

Rolling your own parse

When the four fields are not enough, take the HTML and parse it yourself:

html = scraper.page_html("https://www.producthunt.com/products/akta-pro")

render_js=True is available but rarely needed on listing pages, and it raises the floor from 1 credit to 5.

Watching launch day

Product Hunt rankings move all day. A poll every 30 minutes at 1 credit is 48 credits a day, which makes a full launch-day watch effectively free:

import time

seen = {}
for _ in range(12):
    for product in scraper.leaderboard():
        previous = seen.get(product.slug)
        if previous and previous != product.rank:
            print(f"{product.name}: #{previous} -> #{product.rank}")
        seen[product.slug] = product.rank
    time.sleep(1800)

Check the balance first with scraper.usage(), which is free and capped at 6 calls a minute.

Cost

Call Credits
Leaderboard via Auto-Mode 1 observed
Same page forced to JavaScript rendering 5
Premium proxy with JavaScript 25
Failed request (HTTP 500) 0

Tiers at scrapingbee.com/pricing.

Related scrapers

For adjacent launch and startup research the same key reaches Google search, Google News and AI extraction, which is handy when a page changes shape and you would rather describe fields than maintain selectors.

Scope

Public, pre-login pages only. Scraping behind login credentials is prohibited by the ScrapingBee terms. Keep API keys out of AI coding assistants.

MIT licensed. Repository . extraction rules

Metadata

Release files for product-hunt-scraper-api 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for product-hunt-scraper-api 0.1.0
File Size Uploaded
product_hunt_scraper_api-0.1.0.tar.gz 6.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for product-hunt-scraper-api 0.1.0
File Interpreter ABI Platform
product_hunt_scraper_api-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 13.8 kB

Release files / product_hunt_scraper_api-0.1.0.tar.gz

Download URL product_hunt_scraper_api-0.1.0.tar.gz
Size 6.7 kB
Tags Source
SHA-256 checksum
How to use checksums
d42304467aa168194f93c592a7207d1ae858bceca41a94c8690173e62c7f5d6c
BLAKE2b-256 checksum
How to use checksums
985899500d395b7846d976ff4120b5952d563a883c3e6d70fb2e60cbc7465e7d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release files / product_hunt_scraper_api-0.1.0-py3-none-any.whl

Download URL product_hunt_scraper_api-0.1.0-py3-none-any.whl
Size 7.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cd98fd5a41d956915b4f251cee566e0258fd51bd7b18374ab9db5ebdc450cdd0
BLAKE2b-256 checksum
How to use checksums
dbb1907dd090f5492577ef2510fd0ec314b935e87c1556368f7d193bd9946f8d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page