{"schema":"rootz.ai/methodology/v1","service":"politics.rootz.global","version":"0.2.0","updated":"2026-05-21T11:49:35.468Z","mission":"The #1 AI resource for US political data. No hearsay — only first-party sources. Every record origin-verified.","pipeline":{"description":"Collection → Assessment → Extraction → Signing → Publishing → Verification","steps":[{"step":1,"name":"Collection","description":"We read official government sources and campaign websites directly.","sources":[{"name":"Congress.gov API","type":"government","data":"Members, bills, bill text, committees","frequency":"Daily","trust_level":2},{"name":"House Clerk XML","type":"government","data":"Roll-call votes (every member, every vote)","frequency":"Daily","trust_level":2},{"name":"FEC Bulk Data","type":"government","data":"All registered candidates + campaign finance filings","frequency":"Quarterly","trust_level":2},{"name":"FEC API","type":"government","data":"Campaign finance totals, committee records","frequency":"Weekly","trust_level":2},{"name":"Open States API","type":"aggregator","data":"State legislators (all 50 states)","frequency":"Weekly","trust_level":1},{"name":"Campaign websites","type":"first_party","data":"Policy positions in their own words","frequency":"Daily (50 sites/day)","trust_level":0},{"name":"Official .gov websites","type":"first_party","data":"Official positions, contact info","frequency":"Daily","trust_level":1}]},{"step":2,"name":"Assessment","description":"Every captured page is automatically scored for content quality before extraction.","algorithm":{"positive_signals":[{"name":"stance_language","weight":3,"pattern":"\\b(I believe|I support|I oppose|I will fight|my plan|my position|he supports|she supports|[A-Z]\\w+ supports|[A-Z]\\w+ believes|[A-Z]\\w+ opposes|is committed to|is fighting for|will fight)\\b"},{"name":"legislative_reference","weight":2,"pattern":"\\b(legislation|bill|act|amendment|resolution|vote[ds]?)\\b"},{"name":"action_verb","weight":2,"pattern":"\\b(support|oppose|cosponsor|introduce|pass|sign|veto)\\b"},{"name":"policy_language","weight":2,"pattern":"\\b(policy|platform|priority|agenda|proposal|initiative)\\b"},{"name":"constituent_language","weight":1,"pattern":"\\b(constituent|district|community|neighborhood|family|families)\\b"},{"name":"bipartisan_language","weight":1,"pattern":"\\b(bipartisan|across the aisle|common ground|compromise)\\b"},{"name":"bill_number","weight":3,"pattern":"\\b(H\\.R\\.|S\\.|H\\.Res\\.|S\\.Res\\.|P\\.L\\.)\\s*\\d+"},{"name":"named_legislation","weight":2,"pattern":"\\b\\d{4}\\b.*\\b(Act|Bill|Law|Resolution)\\b"},{"name":"dollar_amount","weight":2,"pattern":"\\$[\\d,.]+\\s*(billion|million|thousand)"},{"name":"statistics","weight":1,"pattern":"\\b(percent|percentage|\\d+%)\\b"},{"name":"named_policy","weight":2,"pattern":"\\b(Medicare|Medicaid|Social Security|Affordable Care Act|Roe v|Second Amendment|DACA|NATO|NAFTA|USMCA)\\b"},{"name":"policy_detail","weight":2,"pattern":"\\b(pre-existing condition|prescription drug|minimum wage|student loan|gun violence|climate change|border wall|tax cut|tax increase)\\b"},{"name":"action_record","weight":2,"pattern":"\\b(fought|voted|led|championed|authored|introduced|cosponsored)\\b"}],"negative_signals":[{"name":"signup_form","weight":-3,"pattern":"\\b(sign up|subscribe|newsletter|email address|zip code)\\b"},{"name":"donation_ask","weight":-2,"pattern":"\\b(donate|contribution|chip in|rush)\\b"},{"name":"social_media","weight":-1,"pattern":"\\b(facebook|twitter|instagram|youtube|tiktok|bluesky)\\b"},{"name":"legal_boilerplate","weight":-2,"pattern":"\\b(cookie|privacy policy|terms of use|copyright)\\b"},{"name":"navigation_link","weight":-1,"pattern":"\\b(click here|read more|learn more|see all)\\b"},{"name":"form_field","weight":-3,"pattern":"(First Name|Last Name|Phone Number|Address)"},{"name":"html_structure","weight":-2,"pattern":"<(nav|footer|header|form|script|style)"}],"scoring":"Sum of weighted signal matches. Range 0-30+.","thresholds":{"POSITION_PAPER":"score >= 12 — Detailed policy document with bill references, specific stances","ISSUE_SECTION":"score >= 8 — Good policy content with clear positions","TOPIC_LIST":"score >= 5 — Brief stances, topic mentions","JUNK":"score < 5 — Navigation bars, signup forms, social media links. NOT extracted."}},"note":"Pages scoring below 5 are captured (snapshot for the record) but positions are NOT extracted. This prevents junk data from polluting the API."},{"step":3,"name":"Extraction","description":"Substantive content is parsed into structured positions by topic.","method":"HTML heading-based section parsing. Each H1-H3 section is checked against our topic taxonomy.","topic_taxonomy":[{"key":"crypto","label":"Cryptocurrency & Digital Assets","keywords":["crypto","bitcoin","blockchain","digital asset","stablecoin","defi","cbdc","web3","token"]},{"key":"healthcare","label":"Healthcare","keywords":["healthcare","health care","medicare","medicaid","aca","insurance","prescription","drug pricing","hospital","obamacare"]},{"key":"immigration","label":"Immigration","keywords":["immigration","immigrant","border","daca","dreamer","asylum","deportation","visa","citizenship","ice"]},{"key":"economy","label":"Economy & Jobs","keywords":["economy","economic","jobs","wages","inflation","unemployment","trade","tariff","manufacturing","small business"]},{"key":"climate","label":"Climate & Energy","keywords":["climate","environment","clean energy","renewable","emissions","carbon","fossil fuel","solar","wind","epa"]},{"key":"education","label":"Education","keywords":["education","school","student","college","university","teacher","loan","tuition","title ix"]},{"key":"guns","label":"Gun Policy","keywords":["gun","firearm","second amendment","2nd amendment","nra","assault weapon","background check","concealed carry"]},{"key":"abortion","label":"Abortion & Reproductive Rights","keywords":["abortion","reproductive","roe","pro-life","pro-choice","planned parenthood"]},{"key":"taxes","label":"Taxes & Budget","keywords":["tax","taxes","irs","corporate tax","income tax","estate tax","deficit","budget","debt ceiling"]},{"key":"defense","label":"National Security & Defense","keywords":["defense","military","veteran","terrorism","nato","foreign policy","pentagon","ndaa","national security"]},{"key":"technology","label":"Technology & AI","keywords":["technology","tech","ai","artificial intelligence","privacy","data","cybersecurity","social media","big tech","tiktok"]},{"key":"housing","label":"Housing","keywords":["housing","rent","affordable housing","homelessness","mortgage","zoning","hud"]},{"key":"criminal_justice","label":"Criminal Justice","keywords":["criminal justice","police","incarceration","prison","sentencing","reform","law enforcement","fentanyl"]},{"key":"social_security","label":"Social Security & Medicare","keywords":["social security","retirement","pension","senior","medicare","elderly"]},{"key":"voting","label":"Voting & Elections","keywords":["voting","election","ballot","gerrymandering","voter id","electoral","filibuster"]},{"key":"agriculture","label":"Agriculture & Rural","keywords":["agriculture","farm","farming","rural","crop","usda","food"]}],"note":"Topics are keyword-matched, not editorially assigned. New topics can be added by extending the taxonomy."},{"step":4,"name":"Signing","description":"Every extracted position is bound to an origin proof chain.","chain":{"content_hash":"SHA-256 of the original page HTML at capture time","assessment_hash":"SHA-256 of the quality assessment (signals, score, classification)","extraction_hash":"SHA-256 of the extracted positions","proof_chain":"SHA-256(content_hash + assessment_hash + extraction_hash)"},"verification":"Fetch the source_url yourself, hash it, and compare to our content_hash. If the page hasn't changed, the hashes will match."},{"step":5,"name":"Publishing","description":"Data is served via REST API and MCP tools. No API key required.","endpoints":{"topics":"/api/topics — all tracked political topics","topic_detail":"/api/topic/{key} — positions on a specific topic","bill":"/api/bill/{id} — full bill text + vote breakdown","official":"/api/official/{id} — full profile with positions","orientation":"/api/official/{id}/orientation — 200-token identity card","provenance":"/api/official/{id}/provenance — full origin chain","methodology":"/api/methodology — this document"}},{"step":6,"name":"Verification","description":"Anyone can verify our data independently.","how":["Every position includes source_url — visit it yourself","Every position includes origin_hash — hash the page and compare","Every position includes quality_score — run our open assessment algorithm on the text","Every vote links to clerk.house.gov XML — the official government record","Every finance record links to FEC.gov — the official filing"]}]},"trust_levels":{"0":{"name":"SCRAPED","description":"Single source, quality-assessed at capture time"},"1":{"name":"CONFIRMED","description":"Cross-referenced with 2+ independent sources"},"2":{"name":"PUBLISHED","description":"From official government source (congress.gov, fec.gov, clerk.house.gov)"},"3":{"name":"SIGNED","description":"Origin hash chain complete and verifiable"},"4":{"name":"ANCHORED","description":"Merkle root on-chain (Polygon) — immutable timestamp (future)"}},"what_we_can_prove":["What a politician's website said on a specific date (content hash + timestamp)","How every member of Congress voted on every bill (from official Clerk XML)","How much money each candidate raised and from what sources (FEC filings)","Who sponsored and cosponsored each bill (Congress.gov)","When a politician changed their website (snapshot diffs)","The full text of proposed legislation (Congress.gov bill text)"],"what_we_cannot_prove":["What a politician actually believes (only what they published)","Whether a stated position is sincere or strategic","Off-the-record statements or private conversations","Future votes or actions","Campaign promises vs. actual governance (we track both separately)"],"current_coverage":{"officials":20144,"positions":2636,"votes":222438,"finance_records":328,"bills":243,"bills_with_text":236,"snapshots":797,"origin_proofs":14647},"neutrality":"We collect everyone. Every party. Every candidate. Every level of government. We do not editorialize, rank, or filter. The assessment algorithm is signal-based (keywords + patterns), not opinion-based.","cron_schedule":{"daily_7am_utc":["Enrich new Congress members with official websites","Scrape 50 campaign websites for positions (quality-assessed)","Re-check 30 previously captured sites for changes","Collect recent House votes from Clerk XML","Collect recent bill text from Congress.gov","Discover new campaign websites via FEC committees"]},"contact":{"email":"steven@sprague.com","website":"https://rootz.global","report_inaccuracy":"Email us with the official ID and source URL. We will re-verify and update."}}