curl --request POST \
--url https://api.neuralverge.ai/functions/v1/run-indiehackers-products-search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"max_items": 2
}'import requests
url = "https://api.neuralverge.ai/functions/v1/run-indiehackers-products-search"
payload = { "max_items": 2 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({max_items: 2})
};
fetch('https://api.neuralverge.ai/functions/v1/run-indiehackers-products-search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.neuralverge.ai/functions/v1/run-indiehackers-products-search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'max_items' => 2
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.neuralverge.ai/functions/v1/run-indiehackers-products-search"
payload := strings.NewReader("{\n \"max_items\": 2\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.neuralverge.ai/functions/v1/run-indiehackers-products-search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"max_items\": 2\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.neuralverge.ai/functions/v1/run-indiehackers-products-search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"max_items\": 2\n}"
response = http.request(request)
puts response.read_body{
"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
}Indie Hackers products search
Browse the Indie Hackers products directory by sort, category, business model and monthly revenue range: name, tagline and self-reported revenue. 1 point per returned record.
curl --request POST \
--url https://api.neuralverge.ai/functions/v1/run-indiehackers-products-search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"max_items": 2
}'import requests
url = "https://api.neuralverge.ai/functions/v1/run-indiehackers-products-search"
payload = { "max_items": 2 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({max_items: 2})
};
fetch('https://api.neuralverge.ai/functions/v1/run-indiehackers-products-search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.neuralverge.ai/functions/v1/run-indiehackers-products-search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'max_items' => 2
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.neuralverge.ai/functions/v1/run-indiehackers-products-search"
payload := strings.NewReader("{\n \"max_items\": 2\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.neuralverge.ai/functions/v1/run-indiehackers-products-search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"max_items\": 2\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.neuralverge.ai/functions/v1/run-indiehackers-products-search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"max_items\": 2\n}"
response = http.request(request)
puts response.read_body{
"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
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Sort. Options: recently-updated = Recently updated, recently-added = Recently added, highest-revenue = Revenue: high to low, lowest-revenue = Revenue: low to high
recently-updated, recently-added, highest-revenue, lowest-revenue Category slug. e.g. ai
Business model. Options: free = Free, ads = Advertising, commission = Affiliate / commission, transactions = Transactional, subscriptions = Subscription-based
free, ads, commission, transactions, subscriptions Monthly revenue from (USD)
x >= 0Monthly revenue to (USD)
x >= 0Max items (up to 18)
1 <= x <= 18Response
Run completed.
Session identifier for this run.
Data source identifier for this endpoint.
True when the scrape stopped early and returned the records collected so far.
Markdown summary of the result, for display.
Structured result payload.
Show child attributes
Show child attributes
Points charged for this run.