Indie Hackers Products Search API and MCP — directory with self-reported revenue
Pick how to sort the directory (recently updated, recently added, highest or lowest revenue), and optionally narrow by category slug, business model and a monthly revenue range in USD. You get each matching product's name, link, tagline and self-reported revenue.
- You send
- optional sort, category, business model and monthly revenue range, and max_items
- You get back
- Products from the Indie Hackers directory: name, tagline and self-reported monthly revenue.
- 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 | Product id, the same as its slug. |
first_item.name | string | Product name. |
first_item.url | string | Link to the product page. |
first_item.alias | string | Product slug. Pass it to Indie Hackers product. |
first_item.tagline | string | One-line tagline. |
first_item.image | null | Product image. Null in the sample. |
first_item.revenue | number | Self-reported monthly revenue as a number, in dollars. |
first_item.revenue_text | string | Revenue as displayed, such as "$0/month". |
first_item.revenue_note | string | Label saying the figure is self-reported. |
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_products_search",
"max_items": 2,
"start_page": 1,
"partial": false,
"human": "# Indie Hackers — products search\n\n- **Query:** all\n- **Results:** 2\n- **Proxy traffic:** 81.9 KB",
"machine": {
"total_items": 2,
"first_item": {
"id": "launchnest-ln-21",
"name": "LaunchNest LN",
"url": "https://www.indiehackers.com/product/launchnest-ln-21",
"alias": "launchnest-ln-21",
"tagline": "Your Product Is Built. Now Make Sure People Can Find It",
"image": null,
"revenue": 0,
"revenue_text": "$0/month",
"revenue_note": "self-reported revenue"
},
"items": [
{
"id": "launchnest-ln-21",
"name": "LaunchNest LN",
"url": "https://www.indiehackers.com/product/launchnest-ln-21",
"alias": "launchnest-ln-21",
"tagline": "Your Product Is Built. Now Make Sure People Can Find It",
"image": null,
"revenue": 0,
"revenue_text": "$0/month",
"revenue_note": "self-reported revenue"
},
{
"id": "steer",
"name": "Steer",
"url": "https://www.indiehackers.com/product/steer",
"alias": "steer",
"tagline": "Web Apps reimagined to be Voice First",
"image": null,
"revenue": 10,
"revenue_text": "$10/month",
"revenue_note": "self-reported revenue"
}
],
"total_found": null,
"page_count": 1,
"blocked": false,
"proxy_traffic_bytes": 83900
},
"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-products-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.
Sort by highest revenue or set a revenue range to list products that report earnings.
Filter by category slug, such as ai, to see which products are listed there.
Filter by free, ads, commission, transactions or subscriptions to compare how products charge.
Sort by recently added to catch products as they appear.
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.
- —Revenue is self-reported by the owners and many products show $0 or no figure.
- —max_items is capped at 18 per request for this directory.
- —total_found is null in the sample, so the directory does not report how many products match.
Questions, answered
Sort, category slug, business model, and a minimum and maximum monthly revenue in USD.
Related sources
Try indie hackers product search on your own data
One request format across every source in the catalog.