vote.help uses AI to generate personalized voting guides. To prove our process is fair and nonpartisan, we publish our complete methodology and have submitted it to four independent AI systems for bias review.
We submitted our complete methodology to four independent AI systems. Each scored our process across five dimensions: partisan bias, factual accuracy, fairness of framing, balance of pros/cons, and transparency.
ChatGPT (OpenAI) Review
Pending
Audit not yet run. Results will be published here when complete.
Gemini (Google) Review
Pending
Audit not yet run. Results will be published here when complete.
Grok (xAI) Review
Pending
Audit not yet run. Results will be published here when complete.
Claude (Anthropic) Review
Pending
Audit not yet run. Results will be published here when complete.
Each AI was given the same prompt with our full methodology export embedded. Scores are extracted automatically from structured JSON responses. You can also view the raw results as JSON.
This JSON file contains every prompt, safeguard, and data pipeline used in the app. You can paste it into any AI system to verify our claims.
Run the Audit Yourself
Don't just take our word for it. Click a button below to copy the complete audit prompt (with our methodology export embedded) and open it in your AI of choice. Just paste and hit send.
Prompt copied! Paste it into the chat.
How We Generate Recommendations
When a voter uses vote.help, the process works as follows:
Interview: The voter answers questions about their top issues, political spectrum, policy stances, and what qualities they value in candidates. All questions are neutrally framed and answer options are shuffled.
District lookup: Their address is sent to the U.S. Census Bureau Geocoder (a public government API) to determine their congressional, state house, and state senate districts. This filters the ballot to only races they can vote in.
Guide generation: The voter's profile (issues, spectrum, stances) is sent along with the full candidate data for their ballot to Claude (by Anthropic) with strict nonpartisan instructions. The AI recommends one candidate per race and a stance on each proposition, with reasoning tied to the voter's stated values.
Local storage: The generated guide is stored only on the voter's device. Nothing is saved on our servers.
Our Prompts
These are the exact AI prompts used in production. Nothing is paraphrased or summarized.
Guide Generation System Prompt
You are a non-partisan voting guide assistant for Texas elections. Your job is to make personalized recommendations based ONLY on the voter's stated values and the candidate data provided. You must NEVER recommend a candidate who is not listed in the provided ballot data. You must NEVER invent or hallucinate candidate information. VOICE: Always address the voter as "you" (second person). Never say "the voter" or use third person. For example, say "aligns with your values" not "aligns with the voter's values". NONPARTISAN RULES: - Base every recommendation on the voter's stated issues, values, and policy stances — never on party stereotypes or assumptions about what a voter 'should' want. - Use neutral, factual language in all reasoning. Avoid loaded terms, partisan framing, or editorial commentary. - Treat all candidates with equal analytical rigor regardless of their positions. - For propositions, connect recommendations to the voter's stated values without advocating for or against any ideology. Respond with ONLY valid JSON — no markdown, no explanation, no text outside the JSON object.
Guide Generation User Prompt (Template)
Recommend ONE candidate per race and a stance on each proposition. Be concise.
NONPARTISAN: All reasoning must be factual and issue-based. Never use partisan framing, loaded terms, or assume what the voter should want based on their party. Treat every candidate and proposition with equal analytical rigor. Connect recommendations to the voter's specific stated values, not to party-line positions.
IMPORTANT: For profileSummary, write 2 sentences in first person — conversational, specific, no generic labels. NEVER say "I'm a Democrat/Republican" — focus on values and priorities.
VOTER: [Party] primary | Spectrum: [voter's spectrum]
Issues: [voter's top issues]
Values: [voter's candidate qualities]
Stances: [voter's policy views]
BALLOT:
[Full candidate data for all races on their ballot, including name, incumbency, key positions, endorsements, pros, cons]
VALID CANDIDATES (MUST only use these names):
[List of all candidate names per race]
Return ONLY this JSON:
{
"profileSummary": "2 sentences, first person, conversational",
"races": [{
"office": "exact office name",
"recommendedCandidate": "exact name from list",
"reasoning": "1 sentence why this candidate fits the voter",
"matchFactors": ["2-3 short phrases citing specific voter priorities that drove this match"],
"confidence": "Strong Match|Good Match|Best Available|Symbolic Race"
}],
"propositions": [{
"number": 1,
"recommendation": "Lean Yes|Lean No|Your Call",
"reasoning": "1 sentence connecting to voter",
"confidence": "Clear Call|Lean|Genuinely Contested"
}]
}
Profile Summary System Prompt
You are a concise, non-partisan political analyst. Return only plain text, no formatting. Describe the voter's views using neutral, respectful language. Never use partisan labels, stereotypes, or loaded terms. Focus on their actual stated values and priorities.
Candidate Research System Prompt (County Seeder)
You are a nonpartisan election data researcher for Texas. Use web_search to find verified, factual information about elections. Return ONLY valid JSON. Never fabricate information — if you cannot verify something, use null.
SOURCE PRIORITY: When evaluating web_search results, prefer sources in this order:
1. Texas Secretary of State filings (sos.state.tx.us)
2. County election offices ({county}.tx.us)
3. Official campaign websites
4. Nonpartisan references (ballotpedia.org, votesmart.org)
5. Established Texas news outlets (texastribune.org, dallasnews.com)
6. National wire services (apnews.com, reuters.com)
7. AVOID: blogs, social media, opinion sites, unverified sources
CONFLICT RESOLUTION: If sources disagree, trust official filings over campaign claims, and campaign claims over news reporting.
Daily Updater System Prompt
You are a nonpartisan election data researcher. Use web_search to find verified, factual updates about candidates. Return ONLY valid JSON. Never fabricate information — if you cannot verify something, use null.
SOURCE PRIORITY: When evaluating web_search results, prefer sources in this order:
1. Texas Secretary of State filings (sos.state.tx.us)
2. County election offices ({county}.tx.us)
3. Official campaign websites
4. Nonpartisan references (ballotpedia.org, votesmart.org)
5. Established Texas news outlets (texastribune.org, dallasnews.com)
6. National wire services (apnews.com, reuters.com)
7. AVOID: blogs, social media, opinion sites, unverified sources
CONFLICT RESOLUTION: If sources disagree, trust official filings over campaign claims, and campaign claims over news reporting.
Data Sources
Candidate filings: Texas Secretary of State official filing lists
Candidate profiles: Researched via Claude with web_search tool, cross-referenced against Ballotpedia, campaign websites, and local news. Each candidate gets the same fields: summary, background, key positions, endorsements, strengths (pros), and concerns (cons).
District boundaries: U.S. Census Bureau Geocoder API (public government data)
County voting info: County election office websites, verified via web search
Propositions: Official ballot language from the Texas Secretary of State, with background, fiscal impact, supporters, and opponents researched from nonpartisan sources
All AI research prompts include a 7-tier source priority hierarchy: TX SOS filings > county offices > campaign sites > nonpartisan references > established news > wire services > avoid blogs/social. When sources conflict, official filings take precedence. See the methodology export for full details.
Bias Safeguards
Every layer of the system includes explicit nonpartisan constraints:
Prompt-level: Every AI prompt includes a NONPARTISAN instruction block prohibiting partisan framing, loaded terms, and party-line assumptions
Data-level: Both parties' ballots are generated with identical prompts and formatting. Every candidate gets the same structured fields (pros and cons, endorsements, key positions). Candidates with sparse data are labeled "Limited public info" so information gaps are transparent rather than misleading
UI-level: Candidate order randomized on every page load. Party labels hidden from candidate cards. Interview answer options shuffled. Confidence levels prevent false certainty
Validation-level: The daily updater validates that candidate counts and names don't change unexpectedly, endorsement lists can't shrink by more than 50%, and no empty fields are introduced
Translation-level: Spanish translations use identical grammatical structures for both parties. Candidate names and data terms stay in English for accuracy
Output constraints: The AI must return structured JSON with specific fields. It cannot recommend candidates not in the ballot data. It cannot invent candidate information. Reasoning must cite the voter's specific stated values.
Sample Data Structure
Every candidate in our database has this structure (equal depth for all candidates):
vote.help uses Claude (by Anthropic) to generate recommendations. By asking four AI systems — ChatGPT, Gemini, Grok, and Claude itself — to review our methodology, we get a range of independent assessments. Each has different training data, different biases, and different incentives. Including Claude as an auditor of its own system adds a self-review dimension — it knows its own capabilities and limitations better than anyone, but may also have blind spots about its own biases. If all four find our process fair, that's meaningful. If any identifies bias, we'll address it and publish the fix.
Changes Made from Audit Findings
County coverage labeling: Both ChatGPT and Gemini flagged that silently omitting local races when county data is unavailable could mislead voters about their ballot's completeness. We now display an in-product info banner — "Local races for [County] County are not yet available" — on both the ballot page and the printable cheat sheet whenever a voter's county lacks local race data. This ensures voters always understand the scope of their guide.
Source ranking policy: ChatGPT's audit recommended documenting an explicit source priority hierarchy for AI web research. We now embed a 7-tier SOURCE PRIORITY block in every research prompt — ranking Texas SOS filings highest and blogs/social media lowest — along with a CONFLICT RESOLUTION rule: official filings override campaign claims, which override news reporting. Full details are in the methodology export under sourceRankingPolicy.
Automated balance checks: Added a /api/balance-check endpoint that scores pros/cons symmetry across all races with critical/warning/info flags. Results are integrated into the Data Quality Dashboard so imbalances are caught automatically.
Bias reporting: Added a "Flag this info" button on candidate cards so voters can report potential bias or inaccuracy directly. Reports are sent to flagged@vote.help for review and correction.
Pros/cons display on recommendations: Candidate strengths and concerns are now displayed directly on ballot recommendation cards using green and orange styled boxes, giving voters immediate visibility into balanced analysis.
Per-candidate source validation: Each candidate profile now includes individually attributed source citations with URLs, titles, and access dates — not just per-race sources. The county seeder validates sources during data population.
Ongoing Commitment
This audit is not a one-time event. We will re-run it whenever we make significant changes to our prompts, data pipeline, or recommendation logic. The methodology export at /api/audit/export always reflects the current production code.
Related
How It Works — Plain-language explanation for non-technical users