Methodology

How we gather campaign promises, relate them to legislation, and keep the site up to date.

End-to-end pipeline

How promises and bills are connected behind the scenes

Find campaign language

Tavily's research API scans official campaign and office issue pages, then we split any numbered or delimiter-based lists into individual promises without rewriting them.

Structure promises

Google Gemini converts that text into clear, labeled promises with categories plus concrete/measurable flags so similar items can be compared across politicians.

Match to legislation

We pull recent sponsored and cosponsored bills from Congress.gov, embed the summaries, and have Gemini rate whether each bill supports or contradicts the promise.

Store and display

Structured promises, related bill numbers, and short explanations are saved so public pages load quickly without rerunning research for every visitor.

Campaign promise collection

How research answers become readable promises

We ask Tavily for structured answers, but we also handle short replies, comma-separated lists, or other formats by splitting the text into individual promises and preserving the order. Lists stay as long or as short as the source material without adding filler items.

Whenever Tavily can infer a campaign or issues URL, we store it alongside the captured text. That reference is used for context and fact-checking; on-page content is generated from the saved, structured promises instead of live scraping.

Structuring & matching with AI

Making promises comparable to real bills

Google Gemini converts each promise into a consistent shape with a category plus concrete and measurable indicators. We fetch up to a few hundred recent sponsored and cosponsored bills from Congress.gov, embed both the promises and bill summaries, and pre-filter to the most relevant candidates.

Gemini then scores whether each candidate bill supports or contradicts the promise and writes a short explanation. We save the bill numbers, direction of impact, and explanation text so visitors can see why a bill is linked without rerunning the models.

How updates happen

Keeping information current without over-promising

Promises and bill links are refreshed in small batches so each update stays within hosting time limits. When a politician is refreshed, the previous promises and matches are replaced with the newest research while keeping any collected source links for context.

Updates are triggered periodically as tooling improves or new statements and legislation become available. Because everything runs one politician at a time, progress is steady but may take multiple passes to cover everyone when there is a surge of new activity.

Known limitations

Important context when interpreting the data

Research results can be brief or uneven; we keep partial promise lists instead of inventing a full set when a source provides fewer items.

Campaign language is summarized from public sites and may change or disappear; older statements might stay until a new refresh finds updated text.

Bill matching depends on Congress.gov updates and AI similarity scores, so occasionally a linked bill may only partially relate to the promise or miss important nuance.

Some recent bills may not appear right away if they have not been indexed yet, and expired bills remain visible until they are clearly superseded.

AI explanations aim to be transparent, but they should not be treated as legal analysis or a replacement for reading the underlying legislation.

If you spot an error or missing context, please let us know. We regularly tune prompts, parsing, and matching thresholds to improve accuracy.