One Call. Complete Geo Layer.
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
No stitching together multiple services. One endpoint handles geocoding, neighborhood resolution, and POI lookup in a single call.
Pass any raw address string, a postal code, or a coordinate pair to GET /v1/geoenrich. No pre-processing or address normalisation required.
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.
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.
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.
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{
"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
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.
Kollwitzstraße 65
Prenzlauer Berg · Berlin · DE
Nearby within 600m
Data verified · March 2026
Monthly refresh · dataTimestamp: 2026-03-01
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.
Rooftop-precision lat/lng with elevation. Powers GeoCoordinates schema directly.
Full hierarchy plus walkScore, bikeScore, transitScore, noise level, air quality index, and character tags. Powers containedInPlace and neighborhood context.
1,328+ POIs with ratings, opening hours, transit lines, live departures, travel times, and busyness data. Powers amenityFeature schema.
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.
{
"@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"
}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.
Make individual rental pages appear in AI queries like 'beachfront villa near Faro with restaurants nearby.'
Surface listings for queries like 'apartments in Prenzlauer Berg close to the metro' without manual data entry.
Win AI citations for queries like 'boutique hotel in the Marais, walkable to museums.'
Get cited for queries like 'cooking class in Barcelona near the Gothic Quarter.'
One endpoint returns the complete geo data layer your listing pages need to become AI-visible.
Four decimal place accuracy. Populates GeoCoordinates schema on every listing page so AI engines can place it in geographic space.
Neighborhood, district, city, and country resolved from the address. Powers the containedInPlace chain for area-level AI retrieval.
Transit, education, leisure, and healthcare within a configurable radius. Each place returned with distance and walk time for amenityFeature schema.
Every response includes a dataTimestamp updated monthly. Map it to dateModified in your JSON-LD so AI engines see verified, current data.
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.
Fully EU-hosted with GDPR compliance documentation and standard contractual clauses. No data residency risk for European listing portals.
Start building with MapAtlas today. Sign up for free and get instant access to all our mapping APIs with generous free tier limits.
Everything you need to know before enriching your first listing.