Product Hunt API — Product & Launch Detail
Documentation menu
FetchLayer FetchLayer API

Read a product and its launch

Read one product in full — description, website, categories, follower and review counts, screenshots and gallery media — together with a launch: its tagline, upvotes, comment count, launch date, daily, weekly and monthly rank, topics, makers, hunter and ranking badges. Defaults to the product's most recent launch; pass a launch slug for an older one, or includeLaunches to list every launch it has had.

POST /product-detail Products
https://api.fetchlayer.dev/producthunt/product-detail
OpenAPI JSON

Headers

Authorization string required

Bearer token — your FetchLayer API key.

Parameters

product string required

Product slug (for example "notion"), or any Product Hunt product or launch URL.

launch string optional

A specific launch slug or launch URL, instead of the product's most recent launch.

includeLaunches boolean optional

Also list every launch the product has had, newest first. (default: false)

format string optional

json or markdown. (default: json)

timeoutMs number optional

Per-request time limit in milliseconds (max 600000).

Response Fields

product-detail

Read a product and its launch

product object

The product record.

product.slug string

Product slug.

product.description string | null

The full product description.

product.websiteUrl string | null

The maker's own site, with websiteDomain alongside it.

product.categories object[]

Categories the product sits under.

product.socialLinks object

Public social profiles listed on the product.

product.media object[]

Gallery items: images carry url, videos carry the platform and id.

product.reviewsRating number | null

Average review rating, with reviewsCount alongside it.

launch object | null

The requested launch, or the most recent one. Null if the product has never launched.

launch.upvotes number | null

Upvotes on the launch.

launch.launchDayUpvotes number | null

Upvotes as of the end of launch day, where that differs from the current total.

launch.launchedAt string | null

When it launched. Null while a launch is still scheduled.

launch.dailyRank number | null

Rank on its launch day, with weeklyRank and monthlyRank alongside it.

launch.launchNumber number | null

1 for a product's first launch.

launch.topics object[]

Topics the launch was filed under.

launch.makers object[]

The people credited as makers.

launch.hunter object | null

Whoever posted the launch, who is not always one of the makers.

launch.badges object[]

Ranking ribbons the launch earned, such as #1 Product of the Day.

launches object[]

Every launch of the product, newest first, when includeLaunches was set.

launchCount number

How many launches the product has had.

requestedUrl string

The Product Hunt page this result corresponds to.

scrapedAt string

ISO timestamp the result was collected at.

notes string[]

Read this. Caveats about this specific result — a walk that stopped early, an upstream ceiling, or promoted entries that were dropped. An empty array means nothing was held back.

blocked boolean

Always false on a successful response.

Request

curl -X POST "https://api.fetchlayer.dev/producthunt/product-detail" \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"product":"notion","includeLaunches":true}'

Response

{
  "product": {
    "slug": "notion",
    "name": "Notion",
    "tagline": "The all-in-one workspace",
    "reviewsRating": 4.8,
    "launchesCount": 12
  },
  "launch": {
    "name": "Notion 3.0",
    "upvotes": 2841,
    "commentsCount": 312,
    "launchedAt": "2026-08-19",
    "dailyRank": 1,
    "launchNumber": 12
  },
  "launchCount": 12,
  "notes": []
}