Skip to main content

Address Enrichment API

Geocoding, neighborhood hierarchy, and nearby POIs in a single call.

Pass an address. Receive coordinates, neighborhood hierarchy, and nearby places in a single response. Everything your listing pages need to become AI-visible, in one API call.

How It Works

Three steps to a fully enriched listing.

No stitching together multiple services. One endpoint handles geocoding, neighborhood resolution, and POI lookup in a single call.

01

Send the address

Pass any raw address string, a postal code, or a coordinate pair to GET /v1/geoenrich. No pre-processing or address normalisation required.

02

MapAtlas resolves the full geo layer

The API geocodes the address to rooftop precision, resolves the neighborhood hierarchy, and scans 1B+ indexed POIs within your chosen radius, returning ratings, transit lines, opening hours, and travel times.

03

Inject into your JSON-LD and serve

Every field in the response maps directly to a schema.org property. Drop coordinates into GeoCoordinates, neighborhood into containedInPlace, and nearby places into amenityFeature. No transformation needed.

The API

One call. Complete location intelligence.

Most listing databases store what humans enter: address, price, bedrooms. They were never designed to supply machine-readable geographic context. GeoEnrich API bridges that gap in a single request, returning coordinates, neighborhood analytics, real-time transit, ratings, travel times, and more.

  • Pass the raw address string. No pre-processing needed.
  • Receive coordinates, full neighborhood hierarchy, and profile scores.
  • Get nearby places with ratings, opening hours, and live transit data.
  • Every field maps directly to a schema.org property.
RequestGET
GET https://api.mapatlas.eu/v1/geoenrich
  ?address=Kollwitzstraße 65, Berlin
  &radius=600
  &categories=transit,education,leisure,supermarket
  &include=neighborhoodProfile,realtime,busyness
  &key=YOUR_API_KEY
ResponseJSON
{
  "address": {
    "street":     "Kollwitzstraße 65",
    "postalCode": "10405",
    "city":       "Berlin",
    "country":    "DE"
  },
  "coordinates": {
    "lat":      52.53841,
    "lng":      13.41327,
    "accuracy": "rooftop",
    "elevation": 42
  },
  "adminHierarchy": {
    "subDistrict":  "Kollwitzkiez",
    "neighborhood": "Prenzlauer Berg",
    "district":     "Pankow",
    "city":         "Berlin",
    "state":        "Berlin",
    "country":      "DE",
    "postalCode":   "10405"
  },
  "neighborhoodProfile": {
    "tags":         ["family-friendly", "trendy", "cycling-culture", "cafe-dense"],
    "walkScore":    94,
    "bikeScore":    91,
    "transitScore": 98,
    "noiseLevel":   "moderate",
    "airQualityIndex": 38,
    "greenSpaceCoverage": "18%"
  },
  "dataTimestamp": "2026-03-01T00:00:00Z",
  "radius":   600,
  "poiCount": 1328,
  "nearby": [
    {
      "name":          "Eberswalder Str.",
      "type":          "transit",
      "subtype":       "metro",
      "distance":      140,
      "bearing":       "NW",
      "lines":         ["U2"],
      "destinations":  ["Pankow", "Ruhleben"],
      "frequency":     "every 5 min (peak)",
      "accessibility": "step-free",
      "realtime": {
        "nextDeparture": "in 3 min",
        "direction":     "Pankow",
        "platform":      "platform 1"
      },
      "travel": {
        "walking": { "duration": "2 min", "distance": "140m" },
        "cycling": { "duration": "1 min", "distance": "150m" },
        "driving": { "duration": "1 min", "distance": "180m" }
      }
    },
    {
      "name":         "Bus 142 / N2 at Eberswalder Str.",
      "type":         "transit",
      "subtype":      "bus",
      "distance":     145,
      "bearing":      "NW",
      "lines":        ["142", "N2"],
      "destinations": ["Ostbahnhof", "Zoologischer Garten"],
      "frequency":    "every 10 min (day) / 30 min (night)",
      "realtime": {
        "nextDeparture": "in 7 min",
        "direction":     "Ostbahnhof"
      },
      "travel": {
        "walking": { "duration": "2 min", "distance": "145m" },
        "cycling": { "duration": "1 min", "distance": "155m" },
        "driving": { "duration": "1 min", "distance": "180m" }
      }
    },
    {
      "name":         "Kollwitzplatz",
      "type":         "leisure",
      "subtype":      "park",
      "distance":     210,
      "bearing":      "SE",
      "openingHours": "24/7",
      "size":         "1.2 ha",
      "amenities":    ["playground", "dog-friendly", "benches", "fountain", "market-tue-sat"],
      "rating":       4.6,
      "reviews":      1842,
      "busyness": {
        "now":  "quiet",
        "peak": "Sat 11:00-14:00"
      },
      "travel": {
        "walking": { "duration": "3 min", "distance": "210m" },
        "cycling": { "duration": "1 min", "distance": "225m" },
        "driving": { "duration": "1 min", "distance": "350m" }
      }
    },
    {
      "name":      "Grundschule am Kollwitzplatz",
      "type":      "education",
      "subtype":   "primary_school",
      "distance":  380,
      "bearing":   "E",
      "ageRange":  "6-12",
      "schoolType":"public",
      "capacity":  340,
      "languages": ["German", "English"],
      "rating":    4.2,
      "reviews":   156,
      "travel": {
        "walking": { "duration": "5 min", "distance": "380m" },
        "cycling": { "duration": "2 min", "distance": "410m" },
        "driving": { "duration": "2 min", "distance": "520m" }
      }
    },
    {
      "name":     "REWE Kollwitzstraße",
      "type":     "supermarket",
      "subtype":  "grocery",
      "distance": 490,
      "bearing":  "N",
      "openingHours": {
        "mon-sat": "07:00-22:00",
        "sun":     "08:00-22:00"
      },
      "priceLevel":        "$$",
      "deliveryAvailable": true,
      "paymentMethods":    ["card", "cash", "contactless"],
      "rating":  4.1,
      "reviews": 892,
      "busyness": {
        "now":  "busy",
        "peak": "Mon-Fri 17:00-19:00"
      },
      "travel": {
        "walking": { "duration": "6 min", "distance": "490m" },
        "cycling": { "duration": "2 min", "distance": "510m" },
        "driving": { "duration": "2 min", "distance": "650m" }
      }
    }
    // ... 1,323 more across 18 categories
  ]
}

Data at a scale and speed never available before

1B+

POIs indexed globally

Transit, retail, education & more

180+

Countries covered

Consistent schema everywhere

<200ms

Avg. API response

At any scale, any location

18

Data categories

Per single API call

Surrounding Context

Every nearby place, verified fresh.

One call returns every relevant place within your chosen radius, organized by category. Each dataset carries a dataTimestamp so AI engines and search crawlers know exactly how current your location data is.

  • Transit stops, parks, schools, restaurants, all in one response
  • Configurable radius from 100m to 5km
  • Monthly refresh cycle with verified timestamps
  • AI engines cite fresh, timestamped data over stale listings

Kollwitzstraße 65

Prenzlauer Berg · Berlin · DE

Nearby within 600m

Eberswalder Str.U2Pankow ↔ Ruhleben · 5 min freq.
2 min1 min1 min
140m
Bus 142 / N2 at EberswalderBUSOstbhf ↔ Zoo
2 min1 min1 min
145m
Kollwitzplatz 4.6leisure
3 min1 min1 min
210m
Grundschule am Kollwitzplatzeducationages 6–12
5 min2 min2 min
380m
REWE Kollwitzstraße 4.1
Mon–Sat 07:00–22:00 · Sun 08:00–22:00
6 min2 min2 min
490m
+ 1,323 more placesacross 18 categories in full response

Data verified · March 2026

Monthly refresh · dataTimestamp: 2026-03-01

What one call returns

Coordinates. Neighborhood profile. Nearby places.

Every field in the response maps directly to a schema.org property. Coordinates, neighborhood hierarchy, walkScore, transit lines, ratings, opening hours, travel times. No transformation needed.

Precise Coordinates

Rooftop-precision lat/lng with elevation. Powers GeoCoordinates schema directly.

latlngelevation

Neighborhood Intelligence

Full hierarchy plus walkScore, bikeScore, transitScore, noise level, air quality index, and character tags. Powers containedInPlace and neighborhood context.

neighborhooddistrictwalkScorenoiseLevel

Rich Nearby Places

1,328+ POIs with ratings, opening hours, transit lines, live departures, travel times, and busyness data. Powers amenityFeature schema.

nametypedistancerealtimerating
GeoEnrich API

Simple. Predictable. One endpoint.

No complex setup. No stitching together multiple calls. Pass an address, receive the complete geo layer needed to power schema.org markup on every listing page.

  • Single endpoint handles geocoding and POI lookup together
  • Optional radius and category filters for precise control
  • Response maps directly to JSON-LD with no transformation needed
  • Run at build time for zero ongoing per-request cost
Check your listing pages with the AEO Checker
JSON-LD outputschema.org
{
  "@context": "https://schema.org",
  "@type": "Apartment",
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 52.5384,
    "longitude": 13.4132
  },
  "containedInPlace": {
    "@type": "Place",
    "name": "Prenzlauer Berg",
    "containedInPlace": { "@type": "City", "name": "Berlin" }
  },
  "amenityFeature": [
    { "@type": "LocationFeatureSpecification",
      "name": "Eberswalder Str.", "value": true,
      "description": "140m nearby" }
  ],
  "dateModified": "2026-03-01T00:00:00Z"
}
Built for every listing type

One API call. Every listing type.

The GeoEnrich API works for any listing: vacation rentals, real estate, hotels, or experiences. The API call is identical. Only the schema type differs. See how listing portals use this at scale.

Vacation Rentals

Make individual rental pages appear in AI queries like 'beachfront villa near Faro with restaurants nearby.'

Real Estate

Surface listings for queries like 'apartments in Prenzlauer Berg close to the metro' without manual data entry.

Hotels

Win AI citations for queries like 'boutique hotel in the Marais, walkable to museums.'

Experiences

Get cited for queries like 'cooking class in Barcelona near the Gothic Quarter.'

Everything in One Response

One endpoint returns the complete geo data layer your listing pages need to become AI-visible.

Precise Coordinates

Four decimal place accuracy. Populates GeoCoordinates schema on every listing page so AI engines can place it in geographic space.

Neighborhood Hierarchy

Neighborhood, district, city, and country resolved from the address. Powers the containedInPlace chain for area-level AI retrieval.

Nearby Places

Transit, education, leisure, and healthcare within a configurable radius. Each place returned with distance and walk time for amenityFeature schema.

Monthly Data Refresh

Every response includes a dataTimestamp updated monthly. Map it to dateModified in your JSON-LD so AI engines see verified, current data.

Built for Bulk

Designed for databases of 50,000 listings or more. Run the enrichment job once at build time, cache the geo layer, and serve at zero per-request cost.

EU-Hosted, GDPR-Compliant

Fully EU-hosted with GDPR compliance documentation and standard contractual clauses. No data residency risk for European listing portals.

Technical Specifications

Endpoint

Method
GET /v1/geoenrich
Response Format
JSON (schema.org-ready)

Parameters

address
Required. Raw address string.
radius
Meters. Default 600.

Response Fields

coordinates
lat / lng (4 decimal places)
nearby[]
name, type, distance (meters)

Ready to Get Started?

Start building with MapAtlas today. Sign up for free and get instant access to all our mapping APIs with generous free tier limits.

GeoEnrich API: common questions

Everything you need to know before enriching your first listing.

GeoEnrich API: common questions

Everything you need to know before enriching your first listing.

What data does the GeoEnrich API return?
A single call returns: rooftop-precision coordinates (lat/lng), a full neighborhood hierarchy (sub-district, neighborhood, district, city, state, country, postal code), and a list of nearby places within your chosen radius. Each nearby place includes name, type, distance, bearing, travel times by foot, bike, and car, plus rich detail such as transit line destinations, opening hours, ratings, and live busyness data. The response also includes a neighborhoodProfile with walkScore, bikeScore, transitScore, air quality index, and noise level.
What is the difference between the GeoEnrich API and a Geocoding API?
A geocoding API converts an address into coordinates. The GeoEnrich API goes much further: it combines geocoding with neighborhood resolution and a full POI search in a single call. Instead of returning a lat/lng pair, it returns everything a listing page needs to become AI-visible, including schema.org-ready fields for GeoCoordinates, containedInPlace, and amenityFeature.
How often is the location data updated?
POI data, transit schedules, ratings, and opening hours are refreshed on a monthly cycle. Every response includes a dataTimestamp field so you can surface the refresh date as dateModified in your JSON-LD. AI engines and search crawlers treat freshly timestamped data as more reliable, which improves citation rates.
Does the GeoEnrich API work for all countries?
Yes. The API covers 180+ countries with consistent JSON output and the same schema.org field mapping everywhere. Coverage depth varies by region: European cities have the most detailed POI and transit data, while global coverage includes coordinates, neighborhood hierarchy, and primary POI categories.
Can I run GeoEnrich on a large database of listings?
The API is specifically built for bulk use. Run the enrichment job once at build time, cache the geo layer per listing, and serve at zero ongoing per-request cost. The free tier includes 50,000 enrichments per month. Larger plans support higher throughput with batch endpoint support.
How does location data help listing pages rank in AI search?
AI search engines like Perplexity, ChatGPT, and Google AI Overviews answer queries such as 'apartments near the metro in Prenzlauer Berg' by reading structured data in your HTML. Without schema.org markup for GeoCoordinates, containedInPlace, and amenityFeature, your listings are invisible to these engines. GeoEnrich provides exactly the geo data needed to populate that markup at scale.
Is the GeoEnrich API GDPR-compliant?
Yes. All processing happens on EU-hosted infrastructure. Addresses and coordinates are not stored beyond the request lifecycle. MapAtlas provides standard contractual clauses and GDPR compliance documentation for European listing portals and data processors.
Can the GeoEnrich API return the geographic location of an IP address?
Yes. Pass an IP address and GeoEnrich returns its approximate geographic location, including country, region, city, and coordinates. IP geolocation is useful for default map centering, fraud signals, and localizing content before a user shares a precise location. All lookups run on EU-hosted infrastructure.
How accurate is IP geolocation compared to GPS coordinates?
IP geolocation resolves to city or region level, not the street-level precision of GPS. Use it for coarse defaults and analytics, and use the Geocoding API or device GPS when you need an exact address or point. GeoEnrich lets you combine both in a single enrichment call.