> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/product-hunt/leaderboard>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/product-hunt/leaderboard.mdx>

---

# Product Hunt Leaderboard API

Ranked posts for today or a chosen day, week, month or year, with the order and period the route used.

`GET /v1/product-hunt/leaderboard` returns `data.posts`, `data.totalCount`, `data.order`, `data.period` and `data.page`. With no parameters it returns today's daily board. Use `year` alone for a yearly board, `year` plus `week` for a weekly board, `year` plus `month` for a monthly board, or `year` plus `month` and `day` for a daily board.

`order` names the rank order, for example `YEARLY_RANK`, and `period` echoes the resolved period. A period with no ranked posts is `lookupStatus: found` with an empty list. Pages hold up to 20 posts. Posts-based lists stop at the first 5,000 rows and set `page.truncated: true`, so `totalCount` can be larger than the rows you can reach.

## Request

- **Endpoint:** `GET /v1/product-hunt/leaderboard`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by day, week, month or year
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/leaderboard/get)
- **Platform page:** [/platforms/product-hunt](https://www.socialfetch.dev/platforms/product-hunt)

## FAQ

### How do I request a yearly leaderboard?

Send `year` alone, for example `year=2025`. Add `month` for a monthly board, `week` for a weekly board, or `month` and `day` for a daily board. Omitting every parameter means today's daily board.

### What does period contain?

`period` echoes what the request resolved to: `{ kind: "today" }`, a day with `year`, `month` and `day`, a week with `year` and `week`, a month with `year` and `month`, or a year with `year`. Use it to store which board a row came from.

### How is the leaderboard different from launches?

`leaderboard` reads the ranked posts for the period. `launches` reads the launches for the same period shape. Both page the same way and both return `order` and `period`.

### How do I page through the leaderboard?

When `data.page.hasMore` is true, send `data.page.nextCursor` as `cursor` with the same period. A cursor is tied to the request that issued it. If `page.truncated` is true, more rows exist but none are available past offset 5,000, so there is no next cursor.

### How much does it cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. Each paginated page is a separate billed request.
