CivorenRequest access

Capability

Geospatial

Data LiveAPI Planned

Every jurisdiction carries its real boundary, so one coordinate resolves to the complete stack of governments that touch it, down to the elementary school district, in a single query with no third-party district service anywhere in the path.

One point, every jurisdiction

This is an actual result from the production graph for a coordinate in downtown Phoenix, returning nine jurisdictions ordered smallest first in one round trip.

  • Phoenix Elementary District

    school-district

    15
  • Arizona State Senate District 11

    state-legislative-senate

    106
  • Arizona State House District 11

    state-legislative-house

    106
  • Phoenix Union High School District

    school-district

    174
  • Arizona's 3rd Congressional District

    congressional-district

    206
  • Phoenix city

    municipality

    519
  • Maricopa County

    county

    9,226
  • Arizona

    state

    113,985
  • United States

    country

    3,635,169
Area in square miles, logarithmicsq mi

Two details in that result separate a real spatial model from a simple district lookup. Both school districts appear, because Phoenix Elementary and Phoenix Union High School overlap the same address wherever elementary and secondary districts are drawn independently. The stack is also not a strict hierarchy, since the legislative districts are larger than the city without being contained by it. We return the true containment set ordered by area rather than pretending governance nests cleanly.

GET /v1/districts_by_point
{
  "point": { "lat": 33.4484, "lng": -112.0740 },
  "regions": [
    { "slug": "region:az-phoenix-elementary-district-0406300",
      "name": "Phoenix Elementary District", "level": "school-district",
      "area_sq_mi": 15, "vintage": 2024 },
    { "slug": "region:az-state-senate-district-11",
      "name": "Arizona State Senate District 11",
      "level": "state-legislative-senate", "area_sq_mi": 106 },
    { "slug": "region:az-phoenix-0455000",
      "name": "Phoenix city", "level": "municipality", "area_sq_mi": 519,
      "ocd_id": "ocd-division/country:us/state:az/place:phoenix" }
    // six more, ordered by area
  ]
}

Geometry is stored in PostGIS as SRID 4326 polygons behind a spatial index, and resolution is a single containment test ordered by area and filtered to the boundaries valid on the requested date. Coordinate input is exact, whereas address input is geocoded first, so a coordinate is always the more precise call.

Boundary coverage

The tiers below county are both the hardest to obtain and the hardest to keep current, which is where most of this work went.

Jurisdiction tierBoundaries
Municipality37,636
School district13,317
State house4,784
County3,235
Precinct2,256
State senate1,964
Congressional district469
Ward285
State56
Judicial district40

Measured from the production graph on 2026-08-20.

What a region carries besides its shape

A boundary alone answers where something is, while these fields answer who lives there and how to reach them without bringing in a second data vendor.

FieldWhat it is
populationACS population estimate for the jurisdiction
vintageCensus vintage year the boundary was drawn from
timezoneThe zone that decides what "polls close at 7pm" actually means
ocd_idOpen Civic Data identifier, for joining to outside datasets
languagesMost-spoken languages at home, priority ordered, from ACS
land_area_sqm and water_area_sqmLand and water area, for real density arithmetic
fips and state_fipsCensus identifiers, for joining to any federal dataset

The languages field drives outreach. Colusa County, California returns ["es","en","de","vi"], so anyone planning ballot translation, canvass materials or a multilingual voter guide can see where to spend, attached to the same boundary they just resolved.

Boundaries are versioned

Districts get redrawn, so a boundary is never a fact about now but a fact about a window of time, which is why every region carries its Census vintage and the same validity dates as everything else in the graph.

Districts as of a past date
GET /v1/districts_by_point?lat=33.4484&lng=-112.0740&as_of=2022-06-01

Ask what district an address sat in during the last cycle and you get the answer that was true then rather than today's boundary applied retroactively, which matters a great deal when reconciling historic turnout or auditing a past targeting decision.

Derived boundaries

Some jurisdictions have no published boundary file at all, and state judicial districts are the clearest case as well as a documented gap for both major alternatives.

We build them ourselves. A judicial district is defined by statute as a set of whole counties, so we merge those counties into a single exact boundary and attach the court authority to it, which produces a real queryable shape for a jurisdiction that is otherwise invisible.

Derived boundaries are labelled as derived. A merged boundary carries the same provenance record as anything else and cites the statute it was built from, so you can always tell which shapes came from the Census and which we constructed.

Geography without geometry

Spatial queries are expensive, and most containment questions do not need one because the nesting is already stored in the graph as containment edges that you can traverse instead.

School districts in a county, and who is running
MATCH (county:Region { slug: 'region:az-maricopa-county' })
MATCH (county)-[:CONTAINS*1..2]->(sd:Region)
WHERE sd.level = 'school-district'
MATCH (o:Office)-[:SCOPED_TO]->(sd)
MATCH (c:Candidacy)-[:RUNS_IN]->(:Contest)-[:FILLS]->(o)
MATCH (c)-[:IS_CANDIDACY_OF]->(p:Person)
RETURN sd.name AS district, sd.population AS population,
       o.name AS office, collect(p.name) AS candidates

That single statement goes from a county to every school board race inside it. Resolving the same thing through a district lookup service and a separate candidate feed would mean a spatial call, a join on names, and a reconciliation problem you would own permanently.

Why this beats a district lookup service

Our assessment, not a vendor-confirmed comparison. The Civoren column is measured from the graph, while the left column describes the general shape of the address-to-district services we have evaluated.

QuestionA typical district serviceCivoren
InputAddress or ZIPCoordinate, address, or a node slug
Levels returnedFederal and state legislativeTen levels, down to precinct
School districtsRarelyElementary and secondary held apart
PrecinctsNoReal boundaries
Judicial districtsNoDerived from statute
Historic boundariesCurrent onlyVersioned, query as of any date
Connected to racesA separate lookup you join yourselfSame graph, one traversal
Demographics attachedNoPopulation, languages, timezone, area
Raw geometryNot exposedGeoJSON on request