How I Built an Evidence-Backed SaaS Opportunity Pipeline A developer built GripeRadar, a multi-source SaaS opportunity pipeline that combines adapters, an evidence model, LLM analysis, deterministic scoring, and durable orchestration. The pipeline ingests signals from sources like Hacker News, GitHub, Google Trends, Product Hunt, and revenue records, but distinguishes between what each signal suggests and what it does not prove. The architecture uses a common adapter boundary to handle provider-specific details, and the system stores both the signal and its bounded meaning. A practical look at the adapters, evidence model, LLM analysis, deterministic scoring, and durable orchestration behind GripeRadar. I started building GripeRadar in June 2026 because I kept running into the same problem: generating SaaS ideas was easy, but finding convincing reasons to build them was hard. A complaint on Hacker News might reveal genuine frustration. A growing GitHub repository might show technical momentum. Google Trends can show increasing attention. Product Hunt can reveal launch activity. Revenue data can show commercial behavior. But none of those signals means the same thing. Ten complaints do not prove willingness to pay. GitHub stars do not prove unmet demand. Search growth does not prove that a useful product can be built. Revenue proves that someone is making money, but not necessarily that a nearby opportunity is still open. So instead of building another idea generator, I built a multi-source research pipeline around a more useful question: What evidence supports this opportunity, what does that evidence actually mean, and what is still uncertain? This article explains how the pipeline works, the architectural decisions behind it, and the mistakes I would avoid if I were starting again. The pipeline follows seven product phases: Source adapters ↓ Raw signal ingestion ↓ Structured LLM analysis ↓ Opportunity clustering ↓ Classification and review ↓ Deterministic scoring ↓ Daily report and newsletter The most important decisions were: The tempting approach is to collect a lot of data, convert every metric into points, and rank the results. That produces numbers quickly. It does not necessarily produce useful conclusions. | Signal | What it may suggest | What it does not prove | |---|---|---| | Hacker News complaints | Founder or developer pain | Market size or willingness to pay | | GitHub stars and issues | Adoption, technical momentum, or product gaps | A commercially attractive market | | Google Trends growth | Increasing search attention | Buyer intent | | Product Hunt activity | Launch density and category attention | Unmet demand | | YouTube comments | Questions, adoption friction, or tool requests | Independent commercial validation | | Revenue records | Commercial behavior in a category | That the same product should be copied | The pipeline stores both the signal and its bounded meaning. A GitHub repository stays technical evidence. A search trend stays attention evidence. A revenue record stays commercial evidence. The system can combine them later, but it does not pretend they are interchangeable units. This distinction became the foundation of the architecture. Each provider has different authentication, pagination, rate limits, identifiers, metadata, and failure modes. Letting those details spread through the application would make every new source a pipeline-wide change. I instead defined a common adapter boundary. The TypeScript interface looks roughly like this: interface SignalSourceAdapter