Methodology
How this project collects, verifies, labels and limits its data. If something here looks wrong, the raw files are linked throughout so you can check our work.
What this project is, and isn't
Iowa First Check presents sourced information about Iowa's gubernatorial candidates, campaign activity and selected long-term Iowa trends. It is not a campaign site, an advocacy page or an opinion blog. It may show politically consequential facts, but it does not tell readers how to vote.
Where the data comes from
- Candidate events — we start by scraping each campaign's own website and event listings (Zach Lahn's Webflow event pages, Rob Sand's Mobilize.us public API), then add to that by watching news coverage, campaign Facebook posts and other public sources for events that don't appear on either campaign's own site. Some events found this way may be private, invitation-only, or require an RSVP, donation or ticket — inclusion here doesn't mean an event is open to the public or press; check with the campaign directly, or look for an RSVP link, before planning to attend.
- Aircraft activity — the OpenSky Network's public ADS-B flight-tracking API, for one aircraft (tail N512MM) publicly associated with Zach Lahn.
- Campaign finance — itemized contribution records from the Iowa Ethics & Campaign Disclosure Board's public search tool, January 1, 2026 onward for both candidates (a matched window, not full committee-to-date history — see below). Cash-on-hand and debt figures come separately from each committee's own periodic DR-2 disclosure report.
- Residency and citation records — Kansas and Iowa voter registration records as reported by the Kansas Reflector and The Gazette, and public court/citation records.
- Iowa trend data — the U.S. Bureau of Labor Statistics, U.S. Census Bureau and U.S. Bureau of Economic Analysis, via FRED (Federal Reserve Bank of St. Louis).
- Policy positions — each campaign's own published priorities pages and public statements, including the July 10, 2026 Iowa PBS gubernatorial debate.
What the uncertainty labels mean
Some records are more solid than others. Rather than flatten that into false certainty, events on this site carry labels:
- Independently reported — covered by press reporting, not just the campaign's own materials.
- Campaign-reported — comes from a campaign's own website, social media or press release, with no independent confirmation found yet.
- Time approximate — the date is accurate but no exact time was available in the source, so a placeholder time is used internally; the displayed date is still correct.
- Press/audience access unknown — we could not confirm from available sources whether press or the public could ask questions at that event. We do not guess.
Political control vs. causation
Iowa Trends shows the period of unified Republican state control (governorship plus both legislative chambers) since 2017 as a shaded region on each chart. That is shown for context only. A single party holding power does not, by itself, prove that party's policies caused any measured change — other states, national conditions, and long-running trends all matter too. We call this "unified Republican control" or "Republican trifecta," not any more loaded term, in the public interface.
Limitations
- Event data is only as complete as what each campaign publishes or press covers — an event that never appeared in either source will not appear here.
- Aircraft data shows the aircraft moved. It cannot show who was aboard or the purpose of any flight.
- Campaign finance figures are totals as filed with the Iowa Ethics & Campaign Disclosure Board as of each data refresh; they are not a real-time feed and donor street addresses are intentionally excluded.
- Residency and citation records are drawn from published reporting and public court/citation records, not a raw voter file — see the caveats on the candidates page.
- Iowa Trends figures are statewide annual averages or year-end totals; they can obscure regional or demographic variation within Iowa.
How this stays current
Event, aircraft and news data update on a recurring schedule through the scripts documented in this project's source repository. Every publish run is validated before anything goes live — see that repository's README for the full pipeline, including what happens when a data source fails.