Case study · Data platform · Claude agents and MCP
SavingAmerica.ai: the engine behind a live civic reading of all 50 states
SavingAmerica.ai reads public United States data as it is published, scores where civic activity is rising in each state, and answers questions about it with links back to the source. We built the engine that runs it. It has been live in all fifty states since 4 July 2026.
- Client
- SavingAmerica.ai
- Industry
- Civic data and media
- Engagement
- Live since 4 July 2026
- Our team
- One engineer
- What we built
- Data ingestion, the scoring engine, enrichment, a knowledge graph, a REST API, an MCP server, and broadcast automation on Claude Managed Agents
- What is the client's
- The scoring method itself, which is its trade secret
- AI in the product
- Claude Managed Agents
- Status
- Live and running continuously
- 50states covered, continuously
- 11public data sources
- 1,274state-and-topic readings
- About 115,000evaluations a day
Operating figures as published by SavingAmerica.ai on its own site.
What SavingAmerica.ai is
SavingAmerica.ai measures civic activity in the United States. It reads public conversation and public records across all fifty states and scores how much civic movement is happening in each state and topic. A second score estimates how likely that movement is to be coordinated. The two are kept separate, so a loud state and a manipulated state are never confused.
The company takes no political side. In its own words: “We're not left. We're not right. We're Americans.”
The public product is a live national map, a signals feed, a published REST API and an assistant that answers questions from the record.

The brief
The scoring method was fixed and confidential. Our job was the machine that runs it: everything from the moment a public record is published to the moment an answer cites it. That machine had to do three things at once.
- Take new data sources without a rewrite. The source list was expected to keep growing.
- Score continuously without re-reading history. At this volume, re-reading the archive on every cycle is too slow and too costly.
- Make every number traceable. A published figure has to be rebuilt afterwards from the records behind it, so the company can defend it.
What we built
New sources by configuration.
Every source enters through one shared format. How often to read a source, its rate limits and how a publisher maps to a record are settings. Adding a publisher is a new row in a registry, and the list has grown into the thousands with the same ingestion code.
Scores that do not re-read history.
Each state, topic and time window keeps a running baseline that updates as events arrive. The work per cycle stays the same on day one and day one thousand. Where the data is thin, the system lowers its own confidence and can decline to publish a figure.
Enrichment that starts when a story does.
When detection opens a story, that event starts the work behind it: the narrative, the places, the people and organisations, and how they relate. A revision re-runs the same steps for that story alone, so no backlog builds between scheduled runs.
One record, and a graph built from it.
PostgreSQL holds the record: events, baselines, scores with their breakdowns, and the audit trail. The knowledge graph that users explore is built from that record and can be rebuilt from scratch at any time. A defect is fixed once, in the record.
Answers with citations.
A retrieval layer gives Claude agents search, lookup and graph tools over the Model Context Protocol and through the product's own API. Meaning-based search and keyword search run together. Every answer points to records the reader can open.
Backfills as a routine job.
A replay layer re-processes any dated window. It runs as a dry run first, keeps a journal, and reports its cost before anything is written. Repair, fill and replace are separate kinds of run, so one job cannot overwrite another source's work.
From a public record to a cited answer
How the AI is kept in check
- Every answer has sources. The assistant answers from the record and links to the records it used.
- It can say no. When the record cannot support an answer, the system says so and does not compose one.
- Spending has a ceiling. Model and data costs are tracked per result against hard caps.
- Answers are tested. An evaluation suite runs against the assistant, and the runs are published.
Broadcast automation
Three agents on Claude Managed Agents work together: one detects and scores signals, one decides when they go out, and one writes the script. Every signal passes a human approval step before anything is published. Approved signals go through an automated voice and video pipeline and stream to four platforms at once.
Results
| What the client needed | What runs today |
|---|---|
| National coverage from launch day | All fifty states, live since 4 July 2026 and running continuously |
| A source list that can keep growing | 11 sources and thousands of publishers, added by configuration |
| Numbers it can defend | Every published figure can be rebuilt from the audit trail |
| An assistant people can trust | Answers link to their sources, and the assistant declines when the record falls short |
| A platform that runs unattended | Alarms checked against real production data, cost caps and a routine replay job |
Under the hood: stack, API and how it was built
Stack: Python and FastAPI. PostgreSQL as the system of record, Neo4j for the graph, vector embeddings for search and object storage for archives. AWS, declared in Terraform, with an event bus and a queue per consumer.
API: a published, versioned REST API, public and gated. Examples: GET /map, GET /national, GET /signals/history, GET /graph/search. Endpoints with outside users are added or retired with notice.
AI: Claude Managed Agents with typed retrieval tools, served through a Model Context Protocol server.
- Each rule's test is checked by breaking the rule and confirming the test fails.
- Every alarm is confirmed to be receiving real data before it is trusted.
- Anything tunable is a setting with a default, so calibration needs no deploy.
- Queues, schedules, alarms and permissions are declared in code and reviewed before each change.
- Claims with numbers in them are checked against production before they are made.
Confidentiality: the client's scoring method, including its formulas, weights and thresholds, is its trade secret and is not described on this page.
Need a data pipeline that runs without a team watching it?
Tell us what it has to read and what it has to produce on a 30-minute call. You leave with a plan and a cost, in writing.
Book a discovery call