Google Civic Information API alternative
Google shut down the Civic Information API's representatives endpoint in April 2025. If your app called representativeInfoByAddress, it now returns errors — and Google's replacement covers elections only, not officials. The Repped API is a drop-in-shaped replacement: one GET request from an address or lat/lng to every district and every elected official, federal to mayor.
TL;DR migration
- Get a free API key (1,000 lookups/month, no card).
- Replace the Google URL with
GET https://repped-api.onrender.com/api/v1/representatives?address=…and send your key asx-api-key. - Map fields with the table below — the OCD division IDs are the same.
Field-by-field mapping
| Google Civic | Repped API | Notes |
|---|---|---|
| normalizedInput | resolvedAddress | Same idea — the address the lookup actually resolved. |
| divisions (OCD IDs) | districts + officials[].divisionId | We use the same OCD division IDs (ocd-division/country:us/…), plus a flat districts object with state, congressionalDistrict, stateUpperDistrict, stateLowerDistrict. |
| offices[].name | officials[].office | Denormalized — every official carries their own office string. No officeIndices bookkeeping. |
| offices[].levels | officials[].level | country → federal, administrativeArea1 → state, locality → local. |
| offices[].roles | officials[].chamber | house, senate, executive, upper, lower. |
| officials[].name / party / photoUrl | officials[].name / party / photoUrl | Same names. Party is normalized to D / R / I. |
| officials[].channels | officials[].socials | Twitter/X, Facebook, Instagram, YouTube handles as a flat object. |
| officials[].phones / emails / urls | officials[].phones / email / urls | Contact fields where the official publishes them. |
| — (never existed) | officials[].fieldProvenance | Per-field source, verification status, and checked-at timestamp. Google never told you where a value came from. |
Example request
curl "https://repped-api.onrender.com/api/v1/representatives?lat=41.5582&lng=-73.0515" \
-H "x-api-key: YOUR_KEY"
{
"resolvedAddress": "Waterbury, CT",
"districts": {
"state": "CT",
"congressionalDistrict": "5",
"stateUpperDistrict": "15",
"stateLowerDistrict": "73"
},
"officials": [
{
"name": "Hayes, Jahana",
"office": "U.S. Representative",
"level": "federal",
"chamber": "house",
"party": "D",
"divisionId": "ocd-division/country:us/state:ct/cd:5",
"socials": { "twitter": "RepJahanaHayes", ... },
"fieldProvenance": {
"name": { "source": "congress.gov", "status": "verified", "checkedAt": "..." }
}
},
...
]
}What you gain over Google Civic
- Local officials. Google's locality coverage was always thin; Repped includes verified mayors across 5,500+ municipalities in all 50 states — see how the data is verified.
- Provenance on every field. Each value carries its source, verification status, and a checked-at timestamp.
- 2026 election context. District margins and race data are in the same ecosystem, built for the midterm cycle.
- A roadmap. Google deprecated; this API is actively growing (coverage expands weekly).
Migrate this afternoon
Free tier is 1,000 lookups/month — enough to validate the mapping end to end. Paid tiers start at $79/month, month-to-month, no contract.
Get a free API key →