# PainSignal > A free, community-driven index of real, unsolved business problems — described by the people who actually have them — turned into structured, buildable software opportunities for developers, founders and product teams. PainSignal listens to how workers across every industry describe operational pain: the plumber fighting a scheduling tool, the dental office manager chasing patient reminders, the restaurant owner drowning in spreadsheets. Those people are not the people who build software. PainSignal bridges that gap by turning their complaints into a searchable, categorised corpus of validated problems, each with an AI-generated app brief covering the concept, core features, target users and a plausible revenue model. ## Key facts - **Free.** No paid tiers, no usage limits, no gated features. An email is required only to save, vote or comment. - **Scale.** 23,362 individual problems grouped into 11,033 clusters, spanning 87 industries and 415 problem categories. 1,313 of those clusters have a full AI-generated app brief and are surfaced as "app ideas"; the rest are single-signal or brief-less groupings that are reachable but not promoted. - **All industries from day one.** The taxonomy is not pre-built — an LLM assigns industry, job role and problem category per item, and a nightly job merges near-duplicates and strips malformed labels. - **Every problem carries structured fields.** `severity_score` (1–5), `opportunity_score` (0–100), `industry`, `problem_category`, `job_role` and `willingness_to_pay` (none | implied | explicit). These are exposed as JSON-LD `PropertyValue` nodes on each problem page and as fields on the API. - **Not a developer-forum scrape.** Sources are places where non-technical workers naturally discuss their jobs, not places where engineers discuss tooling. - **Every page has a markdown twin.** Append `.md` to any path, or send `Accept: text/markdown`. Token count is advertised in the `X-Markdown-Tokens` response header. - **Public read API, no authentication.** See [/auth.md](https://painsignal.net/auth.md) and [/.well-known/api-catalog](https://painsignal.net/.well-known/api-catalog). - Operated by GZOO. Founded by Edwin Huertas. ## Start here - [Home](https://painsignal.net/index.md): what PainSignal is and the current top opportunities - [Explore](https://painsignal.net/explore.md): search and filter the full problem corpus - [App ideas](https://painsignal.net/app-ideas.md): opportunities framed as concrete products to build - [Top 10](https://painsignal.net/top-10.md): highest-signal opportunities by period - [About](https://painsignal.net/about.md): who this is for and how the data is produced ## Browse - [Industries](https://painsignal.net/industries.md): 87 industries, from plumbing to veterinary to logistics - [Categories](https://painsignal.net/categories.md): 415 problem categories such as scheduling, invoicing, compliance - [Collections](https://painsignal.net/collections.md): hand-grouped themes - [Projects](https://painsignal.net/projects.md): what people are building from these problems ## Canonical URL patterns Every record type has one stable, server-rendered, canonical URL. Slugs are lowercase, hyphen-separated and stable once assigned. Append `.md` to any of these for the markdown representation. - **Problem** (one reported problem): `https://painsignal.net/problem/{slug}` — slug is `{title-slug}-{8-hex}`, e.g. `/problem/shiftsync-rn-17e5f0aa` - **Opportunity** (a cluster of related problems): `https://painsignal.net/opportunity/{slug}` - **Industry** (facet landing page): `https://painsignal.net/industry/{slug}` — e.g. `/industry/field-service`, `/industry/trucking-logistics` - **Category** (facet landing page): `https://painsignal.net/category/{slug}` — e.g. `/category/compliance-management`, `/category/diagnostics-troubleshooting` - **Search**: `https://painsignal.net/search?q={query}` (GET, no JavaScript required) - **Filtered browse**: `https://painsignal.net/explore?industry=&category=&severity=&sort=&page=` — all filter state lives in the query string and is canonicalised in a stable parameter order Facet and problem pages are paginated with `?page=N`, using real `` links so every page is reachable without JavaScript. Complete URL coverage is in the sitemap index at [https://painsignal.net/sitemap.xml](https://painsignal.net/sitemap.xml), which chunks into `/sitemaps/{section}.xml` (problems are split across `problems-0.xml`, `problems-1.xml`, …). ## For developers - [Developer hub](https://painsignal.net/developers.md): every way to consume the corpus - [API reference](https://painsignal.net/developers/api.md): full prose reference for all public endpoints - [OpenAPI 3.1 spec](https://painsignal.net/openapi.json): machine-readable description of the same - [MCP server](https://painsignal.net/developers/mcp.md): connect Claude, Cursor or any MCP client - [Datasets and feeds](https://painsignal.net/developers/datasets.md): bulk export, RSS/JSON feeds, field dictionary ## Analytics - [Market analytics](https://painsignal.net/analytics.md): where pain concentrates by industry and category, willingness-to-pay economics, report volume over time - [Tool Gap Index](https://painsignal.net/tools.md): the incumbent tools people name when describing what fails them, ranked by complaint volume — per-tool pages at `/tools/{slug}` ## API - [API catalog](https://painsignal.net/.well-known/api-catalog): RFC 9727 linkset of public endpoints - `GET /api/v1/signals`: individual problems with app briefs - `GET /api/v1/clusters`: problems grouped into opportunities - `GET /api/v1/industries`, `GET /api/v1/categories`: taxonomy with counts - `GET /api/v1/trends`: rising, stable and declining themes - `GET /api/v1/analytics`: corpus-wide aggregates; `/analytics/timeseries` and `/analytics/tools` for the time axis and the tool index - `GET /api/v1/search?q=`: semantic (vector) search, for meaning rather than keywords - `GET /api/v1/export?format=csv|jsonl`: streaming bulk export All read endpoints return `{ "data": ..., "meta": { "page", "limit", "total" }, "error": null }` and accept `?page=` and `?limit=`. No authentication is required anywhere. An optional free API key (`X-API-Key` or `Authorization: Bearer`) raises rate limits and lifts the 1,000-row cap on export — it does not unlock any additional data. Time-series analytics use the date the problem was REPORTED (the source post's own timestamp, spanning 2015–2026), not when it was classified. Trends built on classification time would describe the ingestion schedule rather than the market. ## Optional - [Contact](https://painsignal.net/contact.md) - [Privacy](https://painsignal.net/privacy.md) - [Terms](https://painsignal.net/terms.md)