Docs

A free, public, edge-native forward geocoder for Italian addresses. Backed by Overture Maps. Public for now — please be kind to it.

1. Quick start

curl --get "https://geocoding.qubitdata.it/v1/search" \
  --data-urlencode "q=Via Romagnosi 1, Milano"

2. Response shape

Google Geocoding API-compatible envelope: { status, results[] }. Drop-in replacement for most clients written against Google's API.

{
  "status": "OK",
  "results": [
    {
      "address_components": [
        { "long_name": "1", "short_name": "1", "types": ["street_number"] },
        { "long_name": "Via Romagnosi", "short_name": "Via Romagnosi", "types": ["route"] },
        { "long_name": "20121", "short_name": "20121", "types": ["postal_code"] },
        { "long_name": "Milano", "short_name": "Milano", "types": ["locality", "political"] },
        { "long_name": "Milano", "short_name": "MI", "types": ["administrative_area_level_2", "political"] },
        { "long_name": "Lombardia", "short_name": "Lombardia", "types": ["administrative_area_level_1", "political"] },
        { "long_name": "Italy", "short_name": "IT", "types": ["country", "political"] }
      ],
      "formatted_address": "Via Romagnosi, 1, 20121 Milano MI, Italy",
      "geometry": {
        "location": { "lat": 45.4684, "lng": 9.19054 },
        "location_type": "ROOFTOP",
        "viewport": { "northeast": {...}, "southwest": {...} }
      },
      "place_id": "qd_xxxxxxxxxxxxx",
      "types": ["street_address"]
    }
  ],
  "query": {
    "raw": "Via Romagnosi 1, Milano",
    "parsed": { "road": "via romagnosi", "number": "1", "city": "milano" }
  }
}

Status codes follow Google: OK, ZERO_RESULTS, INVALID_REQUEST, OVER_QUERY_LIMIT, REQUEST_DENIED, UNKNOWN_ERROR.

The query field is a proprietary extension Google omits — useful to debug parsing.

geometry.location_type

ValueMeaning
ROOFTOPCivic-level match. Highest precision (~10 m).
RANGE_INTERPOLATEDCivic interpolated between bracketing rows or snapped to a same-parity ±2 neighbour. ~30 m.
GEOMETRIC_CENTERStreet centroid: no civic-level row. ~50 m. Also used on cross-comune fallbacks.
APPROXIMATERoad matched without a usable city signal.

Per-result fields

Optional top-level fields (proprietary extensions)

3. Italian-aware parsing

4. Errors

StatusCodeMeaning
400query_too_shortq must be ≥ 3 chars
403turnstile_requiredDemo endpoint: missing Turnstile token.
403turnstile_invalidDemo endpoint: Turnstile siteverify rejected the token.
422unparseableparser couldn't extract a road from the query
429rate_limit_exceededper-key or per-IP throttle. retry-after header set.
503index_unavailableretry; index transiently unreachable
503demo_unavailableDemo endpoint not configured (Turnstile or DemoRL missing).

5. Support

Questions, integration help, enterprise terms: support@qubitdata.it