Product Hunt API — Getting Started — FetchLayer Docs
Documentation menu
FetchLayer FetchLayer API

Getting Started

Pull a day's leaderboard, follow a launch into its comment threads, then set the same call running on a schedule.

1. Get your API key

Create an account and generate a FetchLayer API key from your dashboard. There is no Product Hunt developer account, OAuth flow, or API token involved.

Create free account →

2. Pull a leaderboard

bash
curl -X POST https://api.fetchlayer.dev/producthunt/leaderboard \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"period":"daily","date":"2026-09-01","limit":20}'

Counts will not match the website exactly

Product Hunt places three promoted entries in every twenty of a leaderboard feed. Those are dropped from entries, and the number dropped is reported in notes — so twenty ranked launches on the site can come back as seventeen here, with a note saying why.

3. Follow a launch into its comments

Every leaderboard entry carries a launch.slug and a productSlug. Pass either to /product-comments to read launch-day feedback, or to /product-detail for the full record.

bash
curl -X POST https://api.fetchlayer.dev/producthunt/product-comments \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"product":"granola","sortBy":"SCORE","limit":100}'

Tip

Replies are nested, not flattened: each thread in comments carries its own replies array, which carries theirs. Walk the tree recursively — a flat loop over comments sees only the top-level posts.

4. Read the notes

Every JSON response carries a notes array. It is where the backend reports a reply walk that stopped early, an upstream ceiling it hit, or promoted entries it dropped — rather than failing the request. An empty array means nothing was held back.

json
{
  "notes": [
    "Dropped 3 promoted entries from the feed."
  ],
  "entryCount": 17,
  "hasNextPage": true
}

Next steps