Submit a market niche, receive a data-driven winnability score backed by Reddit pain signals, Google Trends momentum, and Claude AI synthesis. Async job pattern — submit, then poll.
https://nicheiqs.comAll endpoints accept and return JSON. Authenticate via
X-API-Key header.
Pass your key in the X-API-Key request header.
Keys are provisioned automatically after purchase and emailed to you.
The demo key free-demo gives 3 free analyses with no account.
X-API-Key: ne_your_key_here
Enqueue a niche analysis job. Returns immediately with a job_id — poll
/results/{job_id} until status is success.
Results are cached for 24 hours; repeated queries for the same niche return instantly.
| Body param | Type | Required | Description |
|---|---|---|---|
| niche | string | required | The market niche to analyze. 3–300 characters. Be specific — "AI invoice software for freelancers" scores better than "AI software". |
POST /analyze X-API-Key: ne_your_key Content-Type: application/json { "niche": "AI invoice software for freelancers" }
{
"job_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "pending",
"poll_url": "/results/3fa85f64-5717-4562-b3fc-2c963f66afa6"
}job_id to poll.
Fetch the status and result of a submitted job. Poll every 2–3 seconds until
status is success or failure. Typical analysis time: 15–45 seconds.
| Path param | Type | Description |
|---|---|---|
| job_id | string (uuid) | The job_id returned by POST /analyze. |
{ "job_id": "3fa8...", "status": "pending", "report": null }{
"job_id": "3fa8...",
"status": "success",
"report": {
"score": 74,
"verdict": "strong", // "strong" | "promising" | "weak"
"summary": "Strong demand from freelancers...",
"breakdown": {
"pain_score": 82,
"demand_score": 71,
"competition_score": 68,
"monetization_score": 75
},
"demand": {
"pain_post_count": 34,
"key_subreddits": ["freelance", "smallbusiness"],
"trend_direction": "rising",
"trend_score": 71
},
"competition": {
"level": "moderate",
"incumbents": ["FreshBooks", "Wave"]
},
"opportunity": {
"icp": "Freelancers billing 3–10 clients/month",
"monetization": "$12–19/mo SaaS",
"entry_strategy": "Target r/freelance with free tier"
}
}
}status field: pending → started → success | failure.Returns the top 12 most-queried niches with their scores. No API key required. Useful for discovery and seeding agent pipelines.
{
"niches": [
{
"niche": "AI invoice software for freelancers",
"score": 74.0,
"verdict": "strong",
"query_count": 38,
"analyzed_at": "2025-04-14T20:00:00+00:00"
}
]
}Liveness check. Returns 200 when the API is up.
{ "status": "ok", "ts": "2025-04-14T20:00:00+00:00" }
Use NicheIQs as a native tool inside Claude Desktop or Claude Code.
The MCP server handles polling automatically — just call analyze_niche.
analyze_niche(niche) · get_trending_niches()
{
"mcpServers": {
"nicheiqs": {
"command": "python",
"args": ["/path/to/mcp_server/server.py"],
"env": {
"NICHE_ENGINE_API_KEY": "ne_your_key",
"NICHE_ENGINE_BASE_URL": "https://nicheiqs.com"
}
}
}
}import httpx, time # pip install httpx API_KEY = "ne_your_key" BASE = "https://nicheiqs.com" def analyze_niche(niche: str) -> dict: # Submit r = httpx.post(f"{BASE}/analyze", json={"niche": niche}, headers={"X-API-Key": API_KEY}) r.raise_for_status() job_id = r.json()["job_id"] # Poll while True: res = httpx.get(f"{BASE}/results/{job_id}", headers={"X-API-Key": API_KEY}).json() if res["status"] == "success": return res["report"] elif res["status"] == "failure": raise RuntimeError(res["report"]) time.sleep(2) report = analyze_niche("dropship pet gear") print(report["score"], report["verdict"])
curl -s -X POST https://nicheiqs.com/analyze \ -H "X-API-Key: ne_your_key" \ -H "Content-Type: application/json" \ -d '{"niche":"dropship pet gear"}'
curl -s https://nicheiqs.com/results/JOB_ID \ -H "X-API-Key: ne_your_key"