ProductHunt API endpoint

Retrieve Product Hunt leaderboard

Fetches Product Hunt leaderboard data for daily, weekly, monthly, or yearly scopes via Product Hunt GraphQL.

GETapiKey2 credits/requestproducthunt.leaderboardResponseDoc/producthunt/leaderboard

Parameters

NameInTypeRequiredEnumExampleDescription
scopequerystringNodaily, weekly, monthly, yearlyLeaderboard scope: daily, weekly, monthly, yearly
datequerystringNo2026-01-29Anchor date in YYYY-MM-DD format. Used to derive missing year/month/day/week values.
yearqueryintegerNo2026Leaderboard year override
monthqueryintegerNo1Daily/monthly month override
dayqueryintegerNo29Daily day override
weekqueryintegerNo5Weekly ISO week override
featuredquerybooleanNoFeatured products only
orderquerystringNoRanking order override. Defaults to scope rank enum.
cursorquerystringNoPagination cursor

Authentication

Send your scraping API key in the x-api-key header. Use the console API Keys page to rotate or select the active key.

Billing

Endpoint usage is metered in credits. The plan prices, included credits, limits, and overage rates below match the active backend billing configuration.

Credit cost
2 credits/request
Charged response
Successful 2xx responses
PlanPriceIncluded creditsDaily capRate limitOverage
Free$0/mo2,000500 daily credits5/minNo overage
Starter$9/mo20,0005,000 daily credits15/min$0.75/1,000 overage credits when enabled
Growth$29/mo100,00025,000 daily credits45/min$0.45/1,000 overage credits when enabled
Pro$79/mo400,000No daily cap120/min$0.30/1,000 overage credits
Business$199/mo1,200,000No daily cap300/min$0.20/1,000 overage credits
Enterprise$499/mo5,000,000No daily cap1,000/min$0.12/1,000 overage credits

Response behavior

- Pass the returned `cursor` value from a previous response to continue pagination. Example response: ```json { "code": 200, "msg": "OK", "data": { "scope": "daily", "featured": true, "order": "DAILY_RANK", "year": 2026, "month": 4, "day": 27, "week": 18, "connection": "homefeedItems", "has_next_page": false, "items": [ { "type": "post", "post": { "id": "1101061", "name": "Kitty Points Leaderboard", "slug": "kitty-points-leaderboard", "tagline": "Find interesting community members and see how you stack up", "latest_score": 140, "daily_rank": 3, "weekly_rank": 9, "comments_count": 18, "product": { "id": "112572", "slug": "producthunt", "name": "Product Hunt" } } } ] } } ```

Failure responses

StatusDescriptionSchema
400Missing or invalid parameters#/definitions/app.Response
404Product not found#/definitions/app.Response
429Rate limit exceeded#/definitions/app.Response
500Internal server error#/definitions/app.Response

Example response

{
  "code": 200,
  "msg": "OK",
  "data": {
    "scope": "daily",
    "featured": true,
    "order": "DAILY_RANK",
    "year": 2026,
    "month": 4,
    "day": 27,
    "week": 18,
    "connection": "homefeedItems",
    "has_next_page": false,
    "items": [
      {
        "type": "post",
        "post": {
          "id": "1101061",
          "name": "Kitty Points Leaderboard",
          "slug": "kitty-points-leaderboard",
          "tagline": "Find interesting community members and see how you stack up",
          "latest_score": 140,
          "daily_rank": 3,
          "weekly_rank": 9,
          "comments_count": 18,
          "product": {
            "id": "112572",
            "slug": "producthunt",
            "name": "Product Hunt"
          }
        }
      }
    ]
  }
}

Request schema

No body schema

Response schema

#/definitions/producthunt.leaderboardResponseDoc

FieldTypeRequiredEnumBoundsExampleDescription
codeintegerNo200
dataproducthunt.LeaderboardPageNo
data.connectionstringNo
data.dayintegerNo29
data.end_cursorstringNo
data.featuredbooleanNo
data.golden_kitty_yearsarrayNo
data.has_next_pagebooleanNo
data.itemsarrayNo
data.items[].adproducthunt.LeaderboardAdItemNo
data.items[].ad.channel_kindstringNo
data.items[].ad.idstringNo
data.items[].ad.large_asset_uuidstringNo
data.items[].ad.namestringNo
data.items[].ad.postproducthunt.LeaderboardAdPostNo
data.items[].ad.post.comments_countintegerNo
data.items[].ad.post.created_atstringNo
data.items[].ad.post.disabled_when_scheduledbooleanNo
data.items[].ad.post.embargo_preview_atstringNo
data.items[].ad.post.featured_atstringNo
data.items[].ad.post.featured_commentproducthunt.ProductCategoryAdCommentNo
data.items[].ad.post.featured_comment.body_textstringNo
data.items[].ad.post.featured_comment.idstringNo
data.items[].ad.post.featured_comment.is_pinnedbooleanNo
data.items[].ad.post.featured_comment.pathstringNo
data.items[].ad.post.featured_comment.subject_idstringNo
data.items[].ad.post.featured_comment.userproducthunt.ProductCategoryUserNo
data.items[].ad.post.featured_comment.user.avatar_urlstringNo
data.items[].ad.post.featured_comment.user.idstringNo
data.items[].ad.post.featured_comment.user.namestringNo
data.items[].ad.post.featured_comment.user.usernamestringNo
data.items[].ad.post.has_votedbooleanNo
data.items[].ad.post.hide_votes_countbooleanNo
data.items[].ad.post.idstringNo
data.items[].ad.post.latest_scoreintegerNo
data.items[].ad.post.launch_day_scoreintegerNo
data.items[].ad.post.namestringNo
data.items[].ad.post.productproducthunt.LeaderboardProductRefNo
data.items[].ad.post.product.idstringNo
data.items[].ad.post.product.is_no_longer_onlinebooleanNo
data.items[].ad.post.product.is_subscribedbooleanNo
data.items[].ad.post.product.is_top_productbooleanNo
data.items[].ad.post.product.logo_uuidstringNo
data.items[].ad.post.product.namestringNo
data.items[].ad.post.product.slugstringNo
data.items[].ad.post.randomization_statusproducthunt.LeaderboardRandomizationStatusNo
data.items[].ad.post.randomization_status.activebooleanNo
data.items[].ad.post.randomization_status.next_transition_atstringNo
data.items[].ad.post.randomization_status.random_daybooleanNo
data.items[].ad.post.randomization_status.randomize_orderbooleanNo
data.items[].ad.post.slugstringNo
data.items[].ad.post.topicsarrayNo
data.items[].ad.post.topics[].idstringNo
data.items[].ad.post.topics[].namestringNo
data.items[].ad.post.topics[].slugstringNo
data.items[].ad.post.updated_atstringNo
data.items[].ad.small_asset_uuidstringNo
data.items[].ad.subjectstringNo
data.items[].ad.taglinestringNo
data.items[].ad.thumbnail_uuidstringNo
data.items[].ad.urlstringNo
data.items[].ad.variation_idstringNo
data.items[].ghost_adproducthunt.LeaderboardGhostItemNo
data.items[].ghost_ad.idstringNo
data.items[].ghost_ad.subjectstringNo
data.items[].postproducthunt.LeaderboardPostItemNo
data.items[].post.comments_countintegerNo
data.items[].post.created_atstringNo
data.items[].post.daily_rankintegerNo
data.items[].post.disabled_when_scheduledbooleanNo
data.items[].post.embargo_preview_atstringNo
data.items[].post.featured_atstringNo
data.items[].post.friend_voters_countintegerNo
data.items[].post.has_votedbooleanNo
data.items[].post.hide_votes_countbooleanNo
data.items[].post.idstringNo
data.items[].post.is_subscribedbooleanNo
data.items[].post.latest_scoreintegerNo
data.items[].post.launch_day_scoreintegerNo
data.items[].post.monthly_rankintegerNo
data.items[].post.namestringNo
data.items[].post.productproducthunt.LeaderboardProductRefNo
data.items[].post.product.idstringNo
data.items[].post.product.is_no_longer_onlinebooleanNo
data.items[].post.product.is_subscribedbooleanNo
data.items[].post.product.is_top_productbooleanNo
data.items[].post.product.logo_uuidstringNo
data.items[].post.product.namestringNo
data.items[].post.product.slugstringNo
data.items[].post.product_statestringNo
data.items[].post.randomization_statusproducthunt.LeaderboardRandomizationStatusNo
data.items[].post.randomization_status.activebooleanNo
data.items[].post.randomization_status.next_transition_atstringNo
data.items[].post.randomization_status.random_daybooleanNo
data.items[].post.randomization_status.randomize_orderbooleanNo
data.items[].post.scheduled_atstringNo
data.items[].post.shortened_urlstringNo
data.items[].post.slugstringNo
data.items[].post.taglinestringNo
data.items[].post.thumbnail_image_uuidstringNo
data.items[].post.topicsarrayNo
data.items[].post.topics[].idstringNo
data.items[].post.topics[].namestringNo
data.items[].post.topics[].slugstringNo
data.items[].post.updated_atstringNo
data.items[].post.weekly_rankintegerNo
data.items[].typestringNo
data.monthintegerNo1
data.orderstringNoDAILY_RANK
data.raw_page_infoobjectNo
data.scopestringNodaily
data.total_countintegerNo
data.weekintegerNo5
data.yearintegerNo2026
msgstringNoRequest successful

Example request

curl -X GET "https://api.crawlora.net/api/v1/producthunt/leaderboard?date=2026-01-29&year=2026&month=1&day=29&week=5" -H "x-api-key: <api-key>"

TypeScript fetch

const url = new URL("https://api.crawlora.net/api/v1/producthunt/leaderboard");
url.searchParams.set("date", "2026-01-29");
url.searchParams.set("year", "2026");
url.searchParams.set("month", "1");
url.searchParams.set("day", "29");
url.searchParams.set("week", "5");
const headers = new Headers();
headers.set("x-api-key", "<api-key>");
const response = await fetch(url, {
  method: "GET",
  headers,
});
const payload = await response.json();