Skip to content
scrapeatlas.Dashboard

Get a Product Hunt forum or discussion

Try in Playground

List the threads in a Product Hunt forum: the community forums such as general, or a product's own forum by its slug, each with title, preview, votes, comments, author and featured or pinned flags, sorted by trending, new, popular or featured and paged with cursor. Pass discussion to retrieve one discussion instead: title, full HTML body, votes, comments, page views, status, flags, author and forum.

GET/v1/producthunt/forumx-api-key
x-api-keystringrequiredheader

Your ScrapeAtlas customer key. Create one on /account/ and set SCRAPEATLAS_API_KEY.

Query parameters
6
slugstringrequiredquery

Required forum slug, as in producthunt.com/p/<slug>: a community forum such as general, or a product’s slug for its forum.

Examplegeneral
orderenumquery

Thread list only: trending (default), new, popular or featured.

one of: trending, new, popular, featured

Exampletrending
windowenumquery

Thread list only. Time window for popular ordering: now, week, month, year or all (default).

one of: now, week, month, year, all

cursorstringquery

Opaque nextCursor from the previous page. Omit for the first page.

limitstringquery

Records per page, 1–20; defaults to 20 (the source's page ceiling).

discussionstringquery

Optional discussion slug, as in producthunt.com/p/<forum>/<discussion>. Returns that discussion instead of the thread list (order, window, cursor and limit are not accepted).

Response fields
47
requestIdstring

Request correlation identifier.

HTTP attempts, decoded bytes and duration for the operation, including the single shared retry.

accounting.upstreamRequestsinteger

Always included.

≥ 0

accounting.responseBytesinteger

Always included.

≥ 0

accounting.durationMsnumber

Always included.

≥ 0

successboolean

True when usable data is returned; inspect status and coverage for omissions.

statusenum

success, partial, failed, or challenged. HTTP 200 can be partial.

one of: success, partial

sourceUrlstring

Public Product Hunt page for the request.

absolute HTTPS URL

fetchedAtstring

UTC retrieval time.

source is public_api (Product Hunt's public web GraphQL) or public_feed (the Atom launch feed). Complete means this bounded page was returned without known omissions; votes_hidden marks launches whose vote count Product Hunt hides during their first hours (returned as null).

coverage.sourceenum

Always included.

one of: public_api, public_feed

coverage.completeboolean

Always included.

coverage.warningsstring[]

Always included.

The forum (thread list), or the discussion’s forum id and slug.

forum.idstring

Forum ID.

forum.slugstring

Forum slug.

forum.pathstring

Relative forum path.

forum.urlstring

Forum page URL.

What the forum belongs to: type DiscussionCategory (community forum) or Product, with id, slug, name and, for categories, description.

forum.subject.typestring

Always included.

forum.subject.idstring

Always included.

forum.subject.slugstring

Always included.

forum.subject.namestring

Always included.

forum.subject.descriptionstringnullableoptional

Optional.

Forum threads.

up to 20 items

threads.idstring

Thread ID.

threads.slugstring

Thread slug; read it with the discussion endpoint.

threads.titlestring

Thread title.

threads.descriptionPreviewstringnullable

Opening post preview (HTML), or null.

threads.createdAtstring

Creation time.

threads.isFeaturedboolean

Whether the thread is featured.

threads.isPinnedboolean

Whether the thread is pinned.

threads.commentsCountinteger

Comment count.

threads.votesCountintegernullable

Upvotes, or null while hidden.

threads.subjectTypestringnullable

DiscussionThread for discussions, Post when the entry is a launch shown in a product forum.

threads.pathstring

Relative thread path.

threads.urlstring

Thread page URL.

Thread author.

threads.user.idstring

Product Hunt user ID (string).

threads.user.namestringnullable

Display name.

threads.user.usernamestring

Username, as in producthunt.com/@username.

threads.user.headlinestringnullable

Profile headline, or null.

threads.user.avatarUrlstringnullable

Avatar image URL, or null.

threads.user.urlstring

Public profile URL.

totalCountintegernullable

Total records the source reports for this list, or null when it does not report one.

nextCursorstringnullable

Pass as cursor to read the next page; null on the last page.

hasMoreboolean

Whether another page exists.

HTTP 200 returns the success variant. Check status: partial means usable data with warnings, and failed or challenged requests carry a failure object described in Errors & responses.

Error codes
11
HTTPfailure.codeMeaning
200partialUsable data with votes_hidden warnings.
400invalid_requestMissing, duplicate, malformed or unsupported parameters, including incomplete or impossible leaderboard dates.
401unauthorizedMissing or invalid worker API key.
404not_foundThe product, launch, comment, topic, category, forum, discussion or user does not exist.
429upstream_rate_limitedSource throttling; no automatic retry.
502upstream_challengedSource rejected or challenged the unauthenticated request.
502unsupported_pageMalformed, mismatched or non-JSON source data, or a GraphQL error.
502response_too_large payload_too_complexResponse exceeded byte or parsing limits.
502unsafe_redirect request_limit upstream_errorBounded source retrieval could not complete.
503busyAll worker slots are occupied.
504timeoutTotal request deadline expired.