Indie Hackers Posts Search API and MCP — top and newest posts with upvotes
Choose a feed: top posts for a week, a month or all time, or the newest posts. For a week or month you can pass a date inside that period. Set max_items to say how many you want. You get back each post's title, link, author, upvotes, comment count and rank.
- You send
- a sort (top or newest), a period and date for top posts, and max_items
- You get back
- Indie Hackers posts from the top-of-week, top-of-month, all-time or newest feed, with author, upvotes and comment counts.
- Coverage
- Indie Hackers records with a public page.
- Price
- 1 point per returned record — $1 per 1,000
- Billed per record actually returned, capped by max_items. A request that returns nothing costs nothing.
Ways to get this data
Three approaches teams use today, and where each one runs into trouble.
| Approach | What it takes | Cost | Trade-off |
|---|---|---|---|
| Indie Hackers directly | Type the query into Indie Hackers and read the results | Free, and slow | Fine for one record, useless across a list, and the layout differs on every platform |
| Building a scraper | Write it, host it, and repair it when Indie Hackers changes its pages | Engineering time | A maintenance commitment for something that isn't your product |
| NeuralVerge | One request, the same shape as every other source in the catalog | $1 per 1,000, misses not billed | Returns what Indie Hackers publishes at request time. Other platforms are separate sources with the same request format |
What you get back
Every field in the example response below.
| Field | Type | Description |
|---|---|---|
total_items | number | How many records are in this response. |
first_item.id | string | Short post id. |
first_item.name | string | Post title. |
first_item.url | string | Link to the post. |
first_item.alias | string | Post slug. Pass it to Indie Hackers post or post comments. |
first_item.title | string | Post title. |
first_item.summary | null | Short summary. Null in the sample. |
first_item.author.username | string | Author username. |
first_item.author.name | string | Author display name. |
first_item.author.url | string | Link to the author's profile. |
first_item.upvotes | number | Upvotes on the post. |
first_item.comment_count | number | Number of comments. |
first_item.rank | number | Position in the feed, starting at 1. |
first_item.product_slug | null | Slug of the linked product. Null in the sample. |
first_item.image | null | Post image. Null in the sample. |
items | array | Every returned record, in the same shape as first_item. |
total_found | number or null | Total matches the platform reports. Null when it does not report one. |
page_count | number | How many result pages were read to build the response. |
blocked | boolean | True if the platform refused the request; false when data came back. |
proxy_traffic_bytes | number | Data transferred for the request, in bytes. Informational. |
Example response
A real response, as returned.
{
"session_id": "11111111-1111-1111-1111-111111111111",
"kind": "indiehackers_posts_search",
"max_items": 2,
"start_page": 1,
"partial": false,
"human": "# Indie Hackers — posts search\n\n- **Query:** all\n- **Results:** 2\n- **Proxy traffic:** 68.9 KB",
"machine": {
"total_items": 2,
"first_item": {
"id": "6509e1a76a",
"name": "3 products. $0 revenue. I think I finally understand the problem.",
"url": "https://www.indiehackers.com/post/3-products-0-revenue-i-think-i-finally-understand-the-problem-6509e1a76a",
"alias": "3-products-0-revenue-i-think-i-finally-understand-the-problem-6509e1a76a",
"title": "3 products. $0 revenue. I think I finally understand the problem.",
"summary": null,
"author": {
"username": "bhavyshekhaliya",
"name": "bhavyshekhaliya",
"url": "https://www.indiehackers.com/bhavyshekhaliya"
},
"upvotes": 49,
"comment_count": 149,
"rank": 1,
"product_slug": null,
"image": null
},
"items": [
{
"id": "6509e1a76a",
"name": "3 products. $0 revenue. I think I finally understand the problem.",
"url": "https://www.indiehackers.com/post/3-products-0-revenue-i-think-i-finally-understand-the-problem-6509e1a76a",
"alias": "3-products-0-revenue-i-think-i-finally-understand-the-problem-6509e1a76a",
"title": "3 products. $0 revenue. I think I finally understand the problem.",
"summary": null,
"author": {
"username": "bhavyshekhaliya",
"name": "bhavyshekhaliya",
"url": "https://www.indiehackers.com/bhavyshekhaliya"
},
"upvotes": 49,
"comment_count": 149,
"rank": 1,
"product_slug": null,
"image": null
},
{
"id": "7cc69370fe",
"name": "I moved my SaaS \"upstream\" because agency margin is lost before the project even starts",
"url": "https://www.indiehackers.com/post/i-moved-my-saas-upstream-because-agency-margin-is-lost-before-the-project-even-starts-7cc69370fe",
"alias": "i-moved-my-saas-upstream-because-agency-margin-is-lost-before-the-project-even-starts-7cc69370fe",
"title": "I moved my SaaS \"upstream\" because agency margin is lost before the project even starts",
"summary": null,
"author": {
"username": "alokbhalke",
"name": "alokbhalke",
"url": "https://www.indiehackers.com/alokbhalke"
},
"upvotes": 37,
"comment_count": 122,
"rank": 2,
"product_slug": null,
"image": null
}
],
"total_found": null,
"page_count": 1,
"blocked": false,
"proxy_traffic_bytes": 70522
},
"total_points": 2
}How to run it
The same lookup works from the app, the API, or as a tool an agent can call mid-task.
Results come back in the same envelope as every other source: a session id, a readable summary, the structured result and the points charged. max_items caps how many records are returned and billed.
curl -X POST https://api.neuralverge.ai/functions/v1/run-indiehackers-posts-search \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"max_items":2}'What teams use it for
Where this field shows up in an actual workflow.
Pull the top posts of a week to see what founders are discussing.
Run the newest feed on a schedule to catch fresh launches and questions.
Take the alias of a promising post and pass it to the post and comments sources.
Compare upvotes and comment_count across periods.
Coverage, freshness and limits
What this source covers, how fresh it is, and where it stops.
Indie Hackers records with a public page.
Read at request time, so the answer reflects the platform as it stands when you ask.
This source returns information Indie Hackers shows publicly. Every response carries the session id you can trace.
- —max_items is limited to 20 per request for this feed.
- —total_found is null in the sample, so the platform does not report a total here.
- —Results include author names and profile links of individual members. Use them as post attribution only.
Questions, answered
Top posts for a week, month or all time (sort top with a period), or the newest posts (sort newest).
Related sources
Try indie hackers post search on your own data
One request format across every source in the catalog.