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.

Research Methodology

How OppIntell keeps scaled research honest

OppIntell publishes a lot of pages, so the methodology has to do the work that human review would do at lower volume. The publish guard, the citation framework, and the source-posture rules are the substitute.

47states with SoS coverage
4county adapters in production
Hourlyblog refresh cadence
Dailycandidate refresh cadence

Public records, not anonymous tips

Every research record traces back to a named public source: an FEC filing, a state Secretary of State portal, a county registration, an official campaign disclosure, or a government press release. Anonymous tips and unverifiable sourcing are not part of the pipeline.

Validation, not ceremony

The citation validation framework actually runs. URLs are resolved, source types are checked, and validation status is stored alongside the claim. A briefing that depends on a broken citation is held back automatically.

Posture matched to evidence

When the record proves a claim, the briefing states it directly. When the record only opens a question, the briefing uses posture language so readers can tell the difference between a documented fact and a research thread.

Volume governed at the rule layer

Auto-publish is not a shortcut around quality. It is an explicit choice to put the standard into the rules, the publish guard, the citation framework, the source registry, instead of into a human review queue that scaled content would overwhelm.

Does a human review every post before publication?

No. Posts auto-publish once they clear the publish guard and citation validation. The trust model is the rule layer itself, not per-post human review.

Why does some content use 'may' or 'could'?

That is intentional source-posture language. Where a public record opens a research question without resolving it, briefings use conservative phrasing so readers can distinguish documented facts from open threads.

How often does this content update?

Blog briefings regenerate hourly, candidate research records refresh daily, and indexing signals refresh continuously so new content is crawler-discoverable within minutes of clearing the publish guard.

What happens when a cited source disappears?

The citation_validation_status flips and the affected post is held back from public view until the source is re-resolved or replaced. Public URLs do not stay live on broken citations.

Research team

The named analysts who shape methodology, source coverage, and editorial posture.

Field briefings

Public, source-backed analysis posts that have cleared the publication quality gate.

State coverage

Per-state candidate research hubs assembled from Secretary of State and county sources.