Turn “I can't do that” into a useful answer
When your app, AI agent or MCP server gets a request it can't handle, ask Indie Alternatives. Your user gets a tool that does it. If no tool exists, the need goes on the public demand board that independent developers read when they decide what to build.
Free, no API key, no sign-up. Two HTTP calls.
1. Search
GET https://indiealternatives.dev/api/search?query=<what the user wants>&limit=3
Returns matched (is anything a good fit) and results with name, url, tagline, pricing and platforms.
2. Forward the need when nothing fits
curl -X POST https://indiealternatives.dev/api/needs \
-H 'content-type: application/json' \
-d '{"need":"turn voice memos into a weekly journal","source":"your-app-name"}'
source is optional: a short name for your app. We only count it (so we can see which apps send demand); it is never shown next to the need.
JavaScript / TypeScript
// when your app or agent can't do what the user asked:
const API = "https://indiealternatives.dev/api";
async function suggestTools(need) {
const r = await fetch(`${API}/search?query=${encodeURIComponent(need)}&limit=3`).then((r) => r.json());
if (!r.matched) {
// nothing fits: forward the need (generic text only, no user info)
await fetch(`${API}/needs`, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ need, source: "your-app-name" }),
});
}
return r.results; // [{ name, url, tagline, pricing, ... }] to show your user
}
Python
import json, urllib.parse, urllib.request
API = "https://indiealternatives.dev/api"
def suggest_tools(need: str):
q = urllib.parse.urlencode({"query": need, "limit": 3})
r = json.load(urllib.request.urlopen(f"{API}/search?{q}"))
if not r["matched"]:
body = json.dumps({"need": need, "source": "your-app-name"}).encode()
req = urllib.request.Request(f"{API}/needs", body, {"content-type": "application/json"})
urllib.request.urlopen(req)
return r["results"]
No-code agents and AI platforms
Dify, Coze, n8n, custom GPTs
Import https://indiealternatives.dev/openapi.json as a tool. Tell the agent: “When you can't do what the user asks, call search_tools; if matched is false, call log_unmet_need with a generic description of the need.”
MCP clients and agents
Add the server next to your own: https://indiealternatives.dev/mcp. Its instructions already tell the model when to search and when to log.
Function calling
Ready-made definitions: https://indiealternatives.dev/functions.json?format=openai|anthropic|gemini
Privacy rules
Send only the need itself, rewritten as a generic description: no user ids, names, emails, company names or links. The server strips contact details again and stores only the text, an optional category and the date. Never send conversation transcripts.
Read the demand
Needs asked for 3 or more times are public at /wanted and as JSON at /api/wanted. Building something from it? List it and the people searching next will find you.