About / Methodology
How OppIntell produces research
OppIntell is a high-volume opposition-research publication built on public records, machine-assisted drafting, and a database-layer publication guard. This page documents the end-to-end research process so readers, sources, and search engines can audit how a given briefing got from a public filing to the public site.
Public records firstCitation-validatedSource-posture languageAuto-publish via quality gate
1. Public-records ingestion
Every research record begins with a public source. OppIntell ingests federal Federal Election Commission filings (candidate committees, principal campaign committees, independent expenditures, and Super PAC reports), Secretary of State candidate filings from 47 states, and county-level candidate registrations from the four county adapters currently in production. Ingestion runs on a schedule rather than on-demand because opposition-research data decays quickly, candidate filings change, committees terminate, address records update, and a one-shot scrape goes stale within days.
2. Candidate universe assembly
Records from upstream sources are normalized into a single candidate universe in Supabase. Deduplication is keyed on a combination of legal name, jurisdiction, office, and filing identifiers from the source registry, with an explicit reliability score attached to each upstream source so downstream queries can prefer the most authoritative record when two sources disagree. The candidate universe is the substrate that every briefing, candidate profile, and race page reads from.
3. Claim drafting with citations
Individual research claims, the atomic units behind a briefing, are drafted from the candidate universe with an explicit citation attached. Every claim carries a source URL, a source type (FEC filing, Secretary of State portal, court record, official campaign site, government press release, etc.), and a citation_validation_status that tracks whether the cited document still exists at the cited URL and still contains the cited language. Claims that fail validation do not flow into public posts.
4. Source-posture language
OppIntell content uses deliberately conservative phrasing. Where a public record supports a direct factual claim, the briefing states it directly and cites the record. Where a record opens a research question without resolving it, the briefing uses posture language, "may", "could", "would examine", "appears consistent with", so a reader can tell the difference between a documented fact and a research thread. This is a deliberate editorial constraint, not a hedge: opposition research that overclaims is less useful to the campaigns that depend on it than research that is honest about what it does and does not yet know.
5. The publish guard
Before a draft post becomes a public URL, it passes through a structural quality gate. The guard enforces a minimum content length, a minimum FAQ count for cluster pages, a minimum number of source-backed signals per candidate-level briefing, the presence of structured data, and the absence of any noindex marker, broken citation, or source whose reliability score has dropped below threshold. The guard runs at the database layer so it applies uniformly across the entire content pipeline, not on a post-by-post human review cycle.
6. Auto-publish trust model
OppIntell does not human-review each post before it appears. The trust model is the publish guard itself, the validation rules, the source registry, the citation checks, and the structural minimums are the publication standard, and any post that satisfies them is allowed to appear. Volume is part of the product: the only way to cover thousands of candidates across fifty states is to govern the pipeline at the rule layer rather than at the post layer.
7. Update cadence
Blog briefings regenerate on an hourly cadence. Candidate research records refresh daily. Sitemap and indexing signals refresh continuously, so newly published briefings are discoverable by crawlers within minutes of clearing the publish guard. When an upstream source materially changes, candidate withdraws, committee terminates, filing is amended, the corresponding research record is reprocessed on the next ingestion run and the public surface updates with it.
8. Corrections and source decay
When a citation breaks because an upstream document was moved, removed, or amended, the citation_validation_status flips and the affected post is held back from public view until the source is re-resolved or replaced. Corrections that affect a fact already published are reflected on the next regeneration cycle rather than as visible edits to an existing URL, which keeps each public URL canonical to the most current version of the underlying record.