See how coverage of a public figure, place, company, or event is developing day by day — across multiple channels. What each channel amplifies (Observed sentiment) vs what the broader media corpus actually says (Expected sentiment).
Current channels: Google News editorial algorithm, financial press (Finnhub), and local outlets across all 50 US states. More channels — social media, newsletters — coming soon.
// Narrative time series for Federal Reserve
GET /v1/narratives
?entity=federal+reserve
&concept=rate+hike
&from=2026-09-01
{
"entity": "federal reserve",
"concept": "rate hike",
"series": [
{
"date": "2026-09-14",
"mentions": 47,
"sentiment": -0.220,
"expectedSentiment": -0.065,
"ciLow": -0.180,
"ciHigh": 0.050,
"sampleSize": 24
}
// ... 89 more days
]
}Every endpoint returns observed sentiment and expected sentiment with confidence intervals. The subject of coverage — a person, company, place, or event, which we call an entity — is tracked alongside the specific storyline around them, which we call a concept. Together they give you up to 90 days of daily narrative history.
/v1/narrativesDaily time series for any entity+concept pair: mention count, observed sentiment (filterable by channel: google-news, financial, or all), expected sentiment (full corpus baseline), and 95% CI. Up to 90 days of history.
/v1/trendingEntities ranked by recency-weighted media velocity. 3× weight for last 24h, 2× for 24–48h. Filter by category.
/v1/entity/{entity}/coverageAll concepts associated with an entity — every angle the media is framing them through. Mention count, observed sentiment, and expected sentiment per concept.
/v1/searchResolve canonical entity names. "TSA" → "transportation security administration". Every other endpoint requires the canonical form.
/v1/articlesArticle metadata for an entity+concept pair: URL, title, source, date, and per-article sentiment with ES for context.
/v1/stocks/sentimentFinancial press vs. general press sentiment split per tracked stock. Includes price trend and market-wide context.
/v1/local/{state}State-level trending coverage for all 50 US states. Top articles with entity-concept sentiment, 24-hour window.
/v1/analyzeSend any article text. Returns every entity mentioned with sentiment, expected sentiment, and CI bounds. You scrape, we signal.
/v1/enrichTrigger expected sentiment computation for any entity+concept pair not yet in the dataset. Returns ES + CI + contributing domains.
Two signals per entity+concept pair — what gets amplified, and what the media actually says.
We ingest from multiple channels: Google News section feeds (editorial algorithm), financial press via Finnhub, and local RSS outlets across all 50 US states. Each channel has its own observed sentiment for any entity+concept pair — letting you compare how different channels cover the same story.
For each entity+concept pair, we run a separate Google News search and pull ~60 articles stratified across wire, broadcast, print, independent, and local sources — the full media corpus, not just what was promoted.
Each article is analyzed by an LLM for its specific sentiment toward the entity regarding that concept. Targeted — not topic-level tone, but sentiment about one entity through one lens.
1,000 cluster bootstrap resamples at the source-domain level give a 95% confidence interval — handles within-source editorial correlation without parametric assumptions.
A narrow CI (< 0.3) means the media landscape broadly agrees — settled consensus. A wide CI (> 0.6) means the population itself is divided — contested terrain before any individual source is considered.
Compare the observed (amplified) signal against the population CI. A gap outside the CI tells you where editorial curation departs from what the media landscape actually says.
All plans include Search and Trending. Upgrade for the narrative intelligence time series and analysis endpoints.
Free tier, no credit card required. 1,000 calls per month to explore the data.
Bug report, feature request, or just a thought — we read everything.