The pipeline behind every report
When you type a company name, six things happen in parallel. Roughly 30–60 seconds later, you have a structured report with inline citations. Here's exactly what runs.
Architecture overview
Sentinellis is built on Temporal workflows — a durable execution engine. Every report is a workflow with automatic retry policies, timeouts, and failure recovery. If a data source is briefly down, Temporal retries with exponential backoff. If it's permanently unavailable, the workflow completes with a partial result and a confidence score reflecting what we couldn't fetch.
The orchestrator (AnalyzeCompanyWorkflow) launches four data agents in parallel, waits for all four (with bounded timeouts), then hands the combined output to the synthesis agent.
The agents
Company Agent
Profile & financialsFetches Yahoo Finance via the yfinance Python package: ticker resolution, market cap, revenue, P/E, balance sheet, income statement, cash flow. Computes 100+ derived metrics (ROIC, WACC, Piotroski, Altman Z, margins, growth CAGRs). Runs synchronous yfinance calls inside an asyncio thread pool to avoid blocking the workflow event loop.
News Agent
Recent news (90-day window, 6-stage filter)NewsData.io as primary source with Google News RSS as fallback when NewsData returns 0 articles or is unreachable. Two parallel queries (company name + ticker), 8s timeout each. Six-stage relevance pipeline strips raw HTML, validates 7-day recency, scores each article via Claude Haiku, dedupes by story (preferring T1 sources like Reuters/Bloomberg over T2), caps at 8 articles, then summarizes each one in plain English via Haiku in parallel.
Executive Agent
Leadership & compensationPulls companyOfficers from Yahoo Finance ticker info: CEO, CFO, key VPs, total compensation. Fail-soft when Yahoo returns 500 on individual fields (which happens regularly on less-covered tickers). Returns an empty list rather than crashing the workflow.
Synthesis Agent
AI report assemblyClaude Sonnet 4.5 receives a curated subset of the financial output (16 key metrics — margins, FCF, ROIC, health score, Altman Z, Piotroski) plus the per-article summaries from the news agent. Returns a strict JSON schema with summary, what they do, financial health narrative, 4 risks, 4 opportunities, confidence score (1–10), and inline [Source] citations on every claim.
News pipeline (6-stage filter)
Most news APIs return noise — irrelevant articles, duplicates, snippets that are HTML soup. Sentinellis runs every article through six stages before it reaches the synthesis agent.
Fetch (parallel)
Two queries in parallel — company name + ticker — to NewsData.io with 8s timeout each. Dedup by URL.
Recency validation
Drop articles outside the 7-day window. NewsData.io filtering isn't always strict, so we re-validate post-fetch.
Relevance scoring
Each surviving article scored 1–10 by Claude Haiku in parallel. Articles below 6 dropped.
Story deduplication
Group near-duplicate stories. Prefer the higher-tier source (T1 Reuters/Bloomberg/AP over T2 CNBC/Forbes over T3 blog aggregators).
Volume cap
Top 8 articles by relevance score, then by recency. Free-tier NewsData.io caps at 10 results per query, so we usually have headroom.
Per-article summaries
Each article summarized to one paragraph in plain English via Claude Haiku in parallel. Synthesis agent uses these summaries — never the raw snippet.
Synthesis & inline citations
Once the four data agents complete, the synthesis agent receives their output and produces the final report.
Model
claude-sonnet-4-5-20250929 with max_tokens=2048 and a strict JSON schema that enforces inline [Source] tags on every factual claim.
Citations enforced at the schema level
The schema requires every risk, opportunity, financial claim, and historical statement to carry an inline citation pointing back to either Yahoo Finance, an article ID, or the company overview. Outputs missing citations are rejected and re-prompted.
What synthesis can't do
The system prompt explicitly blocks: analyst price targets, buy/sell/hold ratings, personalized investment advice, and speculation beyond what the source data supports. If a metric is missing, the report flags it rather than guessing.
Cache, retries, fail-soft
Redis cache (24h)
If the same company was analyzed in the last 24 hours, the cached report returns instantly and doesn't count against your quota. Fail-open: cache outage just means a fresh run.
Bounded retries
Each agent retries up to 3 times on transient errors (429, 5xx, timeouts). Permanent errors (400, 401, 403) are non-retryable — we fail fast and report the gap.
Fail-soft synthesis
If Claude returns a hard error (auth, malformed JSON, content policy), the report still ships with financials, news, and executives — just with an "analysis unavailable" banner instead of a missing section.
Performance
~32s
<200ms
80s
24h
See it in action
Run your first report free. Three included on signup, no credit card required.
Get started