May 24, 2026
TickerLens: An Analyst Note That Argues With Itself
I built TickerLens over a hackathon. The premise is simple: most financial tools hand you a single buy/sell signal and a false sense of certainty. I wanted the opposite - something that argues with itself and lets me make the call.
You type in a ticker. You get the company’s header data and then three cards: the buy case, the hold case, and the sell case, each with a confidence level and reasoning you can expand. The tagline I landed on sums it up - “an analyst note that argues with itself.”
How it works
The backend is a multi-agent graph built with LangGraph:
- Validate confirms the ticker actually exists (via yfinance) before spending a cent on model calls.
- Fundamentals and News run in parallel. Fundamentals pulls yfinance data and emits the header mid-stream so the UI fills in while the rest loads. News grabs headlines and pulls in broader market context using web search.
- Synthesis takes both and writes all three arguments in a single pass, so the disagreement is actually coherent - the bull and bear cases are responding to the same facts, not talking past each other.
Everything streams to the frontend over Server-Sent Events, deliberately paced. The slight delay between messages wasn’t a limitation - it makes the thing feel like it’s thinking, which suits an editorial tool more than an instant answer would.
Stack: Python, FastAPI, LangGraph, the Anthropic SDK (a couple of models for the cheap parallel work and a stronger one for synthesis), yfinance, and a Next.js frontend.
What I actually took away from it
The interesting part wasn’t the data plumbing. It was the framing. Treating financial research as an editorial problem - “give me the strongest version of each side” - instead of a signal problem - “tell me what to do” - produces something far more useful to a self-directed investor. The model is good at being a fair debate moderator. It’s much worse, and more dangerous, as an oracle.
That single design decision shaped everything else: the parallel agents, the single-pass synthesis, the confidence levels, even the slow pacing. Worth remembering the next time the obvious move is to make the AI just decide.
Repo’s here if you want to dig in.