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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

product_hunt_scraper_api-0.1.0.tar.gz (6.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

product_hunt_scraper_api-0.1.0-py3-none-any.whl (7.0 kB view details)

Uploaded Python 3

File details

Details for the file product_hunt_scraper_api-0.1.0.tar.gz.

File metadata

File hashes

Hashes for product_hunt_scraper_api-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d42304467aa168194f93c592a7207d1ae858bceca41a94c8690173e62c7f5d6c
MD5 9a9fe6947096692f487a34e6e438bde5
BLAKE2b-256 985899500d395b7846d976ff4120b5952d563a883c3e6d70fb2e60cbc7465e7d

See more details on using hashes here.

File details

Details for the file product_hunt_scraper_api-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for product_hunt_scraper_api-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cd98fd5a41d956915b4f251cee566e0258fd51bd7b18374ab9db5ebdc450cdd0
MD5 3b8e06382462e9bd6980307b62491d8f
BLAKE2b-256 dbb1907dd090f5492577ef2510fd0ec314b935e87c1556368f7d193bd9946f8d

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 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