How we make profiles
VoteStack has a short profile for each candidate and judge on your ballot. This page explains how we make them and what we can’t check. VoteStack doesn’t tell you how to vote.
In short
- An AI model, the kind of AI that writes text, writes each profile from public sources.
- A second AI model checks each sentence against its source.
- Software checks every profile before it appears, including its sources, links, dates and length.
- Every sentence links to its source, so you can check it yourself.
The rest of this page explains each step in detail.
What a profile contains
Every profile has the same four parts, in the same order.
- The overview says who the person is, their main positions, their record and their main work. Judges may not announce views on issues, so a judge’s overview covers their legal background and time on the bench instead of positions.
- Campaign money shows totals from official campaign finance reports. See “Campaign money” below.
- Endorsements lists the organizations and elected officials that endorsed the candidate, each with a link to a page that shows it. For judges, this part also shows each bar association’s rating, word for word.
- Sources is a numbered list of every page the profile uses, with the date we read it. The small numbers in the text point to this list.
The length of the overview depends on the race:
- Top of the ballot, such as governor or U.S. Senate: up to 250 words in 3 paragraphs or fewer.
- Legislature, county board, Board of Review, Water Reclamation District and school board: up to 120 words in 2 paragraphs or fewer.
- Judges and small local offices: up to 70 words in one paragraph.
When we find nothing for a part, it says “Not found in public sources” with the date we looked. We never hide a part.
Where the information comes from
Profiles use news organizations, the candidate’s own website, Wikipedia and Ballotpedia, official sources such as government and court websites, bar associations, and the endorsers’ own announcements. We don’t use social media or material from a candidate’s opponents.
Profiles never include home addresses, phone numbers, email addresses, family members, birth dates or ages, or allegations that weren’t proven in court. Overviews leave out polls, past races, opponents and trivia. When a claim comes only from the campaign, the profile says so, for example “Her campaign says she supports…”.
How a profile is written
Two AI models write each profile in steps. No person reviews each profile before it appears.
- Each kind of office has its own search plan. Everyone in the same race gets the same plan.
- One AI model, DeepSeek V4 Pro, writes a draft from those search results. Each sentence cites one source, and that source must say everything in the sentence.
- A second AI model, Google Gemini 3.1 Pro, opens every page the draft cites. It keeps or corrects each sentence, and removes anything it can’t confirm. It also finds endorsements and confirms each one on a page it opened.
- Software adds campaign money and bar ratings from official lists. Then it checks that every paragraph and endorsement cites a source, every link opens without a login or paywall, no source is social media, every source was read in the last 30 days, the wording is neutral, the length fits the limit and no personal details appear.
What we can’t promise
AI models can still make mistakes. A model can misread a page or miss newer news, and software can’t tell whether a page really says what the sentence says. Every sentence links to its source, so you can check it yourself.
Equal treatment
Everyone in a race gets the same parts, the same research and the same length limit. Some candidates have less public information, so their profiles are shorter. We never shorten one profile to match another.
A race appears only when every candidate in it passes the checks. Until then, every candidate in that race shows “No profile yet”. A judge up for retention has no opponents, so their profile appears once it passes.
There are no photos, and no candidate is featured, ranked or recommended.
Endorsements and bar ratings
Endorsements come from organizations, such as unions, advocacy groups, parties and newspaper editorial boards, and from people who hold or held elected office. Each one is for this candidate in this race and links to a page that shows it.
Bar association ratings of judges come from the lists the groups publish. AI doesn’t write them. When a group published nothing for a judge, the profile says “No rating published”.
Campaign money
Campaign money comes from official reports: the Federal Election Commission (FEC) for U.S. Senate and House, and the Illinois State Board of Elections (ISBE) for all other races. AI doesn’t write this part.
Each profile shows how much the campaign raised, its cash on hand and the kinds of sources the money came from. We never name donors. We show percentages only when a committee raised at least $5,000 in the period, because below that one or two gifts decide the shares.
Each profile shows the period its numbers cover and links to the filings. We update the numbers when new reports come in.
Report an error
Use the “Report an error” link near the top of a profile. The form asks what is wrong and for a link to a page that shows the correct information. We change a profile only when a source shows it’s wrong.
We read every report. If the profile is wrong, a person corrects it and the correction cites its own source. We can’t reply, because the form doesn’t ask how to reach you. It saves only what you write and which profile it’s about. It doesn’t save your name, email, IP address or street address.
We research every profile again at least every 30 days.
