What it requires
Dates, places, and results are published in formats that search engines, voter tools, and researchers can read without scraping. Three criteria make up this standard.
Structured data for dates and places
Election dates, registration and ballot deadlines, and polling locations are marked up with schema.org vocabulary (Event, Place, GovernmentService) as JSON-LD, so search engines and assistants surface the right date and place.
Machine-readable results
Results are downloadable as CSV or JSON at the same time they appear on the page, with a documented column layout and an open license.
Polling-place feed or API
Polling locations, hours, and precinct assignments are published as a feed (for example in the Voting Information Project format) that voter tools can consume.
Why it matters
Most voters never visit the election site directly; they ask a search engine or an assistant "when is early voting" or "where do I vote." Those systems read structured data. Without it, they fall back to third-party guesses, which is how out-of-date hours and wrong locations spread. Machine-readable results let journalists and researchers verify numbers independently and reduce the load of records requests.
How to implement
- Add JSON-LD to the key-dates page (one
Eventper date) and to each polling location (PlacewithopeningHoursSpecification). Validate with a structured-data testing tool. - Export results from the tabulation system as CSV with stable column names. Publish a data dictionary and a license statement next to the file.
- Publish a polling-place feed in the format your state's voter-information partner accepts, or a simple JSON file if none applies. Update it whenever a location changes.
Examples
Meets the standard. The key-dates page carries JSON-LD for Election Day and early voting; search results show the correct dates with the office as the source. Results are available as CSV with a data dictionary and a CC0 license. A VIP-format feed is refreshed nightly.
Partial. Results CSV exists but no structured data on dates or places.
Incomplete. Everything is HTML tables and PDFs only.
Snippets
Election Day as a schema.org Event:
{
"@context": "https://schema.org",
"@type": "Event",
"name": "General election: Election Day voting",
"startDate": "2026-11-03T07:00:00-07:00",
"endDate": "2026-11-03T20:00:00-07:00",
"eventStatus": "https://schema.org/EventScheduled",
"organizer": {
"@type": "GovernmentOrganization",
"name": "Example County Elections",
"url": "https://vote.example-county.gov"
},
"location": {
"@type": "Place",
"name": "Your assigned polling place",
"url": "https://vote.example-county.gov/find-my-polling-place"
}
}A polling location as a Place with hours:
{
"@context": "https://schema.org",
"@type": "Place",
"name": "Oak Community Center",
"address": {
"@type": "PostalAddress",
"streetAddress": "410 Oak Avenue",
"addressLocality": "Example City",
"addressRegion": "ST",
"postalCode": "00000"
},
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"validFrom": "2026-11-03",
"validThrough": "2026-11-03",
"opens": "07:00",
"closes": "20:00"
}],
"amenityFeature": [{
"@type": "LocationFeatureSpecification",
"name": "Accessible ballot-marking device",
"value": true
}]
}Results CSV column layout:
contest_id, contest_name, candidate_id, candidate_name, party,
precinct_id, precinct_name, votes, ballots_cast, last_updated