OpenStreetMap POI Extractor avatar

OpenStreetMap POI Extractor

Pricing

Pay per event

Go to Apify Store
OpenStreetMap POI Extractor

OpenStreetMap POI Extractor

Extract POIs from OpenStreetMap via Overpass API. Search by location + radius or bounding box. Filter by 20+ categories (restaurants, hotels, hospitals, parks, shops). Outputs name, coords, address, phone, website, opening hours. No API key needed.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Categories

Share

Extract points-of-interest (POIs) from OpenStreetMap using the free Overpass API — no API key needed. Search restaurants, hotels, hospitals, shops, parks, and 20+ other categories by location name + radius or precise bounding box. Get name, coordinates, address, phone, website, opening hours, and all OSM tags for every place.

What does OpenStreetMap POI Extractor do?

OpenStreetMap POI Extractor queries the Overpass API — a free, read-only API for the OpenStreetMap dataset — to find and extract points-of-interest in any area worldwide. Just enter a location name (e.g., "Vienna, Austria") and a search radius, pick a category, and the actor returns structured data for every matching place.

You can search for restaurants, hotels, hospitals, parks, museums, shops, banks, gyms, and more. Advanced users can write custom Overpass QL queries for any OSM tag combination. All output fields are structured and flat — ready for CSV/JSON export, Google Sheets import, or database ingestion.

Who is OpenStreetMap POI Extractor for?

📊 Researchers and data analysts who need geospatial datasets without spending money on premium APIs. Build datasets of restaurants, green spaces, healthcare facilities, or educational institutions for any city or region worldwide. Export to CSV and analyze in Excel, Python, or R.

🏙️ Urban planners and academics studying city infrastructure, accessibility, or service distribution. Extract wheelchair-accessible venues, healthcare coverage, school density, or park availability across administrative boundaries.

📱 App developers and GIS professionals who need POI seed data for maps, routing apps, or location services. OpenStreetMap's global coverage and community-maintained tags make it an excellent alternative to commercial POI databases.

💼 Market researchers and business analysts identifying competitor locations, mapping service gaps, or analyzing local market saturation. Find all coffee shops, hotels, or pharmacies in a target area without expensive data purchases.

🤖 Automation teams building pipelines that periodically refresh local business data for dashboards, reports, or alerting systems.

Why use OpenStreetMap POI Extractor?

  • No API key required — Overpass API is 100% free and public
  • Global coverage — OSM data exists for every country and city
  • 20+ preset categories — restaurants, hotels, hospitals, parks, shops, banks, and more
  • Custom queries — write any Overpass QL query for advanced use cases
  • Geocoding included — enter a city name, no need to look up coordinates
  • Structured output — name, coordinates, full address, phone, website, opening hours
  • No login, no browser, no proxy — pure HTTP actor, fast and lightweight
  • Apify platform benefits — schedule runs, export CSV/JSON/Excel, connect to 5,000+ apps

What data can you extract?

FieldDescriptionExample
osmIdOpenStreetMap element ID76514684
osmTypeElement type (node/way/relation)"node"
namePlace name"Pizza Bizi"
categorySearch category used"restaurants"
latLatitude48.2096466
lonLongitude16.3736843
address.streetStreet name"Rotenturmstraße"
address.houseNumberHouse number"4"
address.cityCity/town"Wien"
address.postcodePostal code"1010"
address.countryCountry code"AT"
phonePhone number"+43 1 5133705"
websiteWebsite URL"https://www.pizzabizi.at/"
openingHoursOSM opening hours string"Mo-Su 11:00-24:00"
wheelchairWheelchair accessibility"yes" / "no" / "limited"
extrasAll other OSM tags (optional){"cuisine": "italian"}

How much does it cost to extract POIs from OpenStreetMap?

OpenStreetMap POI Extractor uses pay-per-event (PPE) pricing — you only pay for what you extract.

EventFREE tierBRONZESILVERGOLD
Run start$0.005$0.005$0.0043$0.00375
Per POI extracted$0.0008$0.00072$0.00064$0.00052

Real-world cost examples:

  • 50 restaurants in a city center (~2 km radius): ~$0.045
  • 500 hotels in a country capital: ~$0.365
  • 1,000 shops in a major shopping district: ~$0.725

Free plan estimate: Apify's free $5/month credit gets you approximately 6,000 POIs on the FREE tier — plenty for research projects and testing.

How to extract POIs from OpenStreetMap

  1. Go to OpenStreetMap POI Extractor on Apify Store
  2. Click Try for free to open the actor
  3. Enter a location name (e.g., "Berlin, Germany") in the Location field
  4. Set a search radius in kilometers (e.g., 5 km for a city center)
  5. Select a category from the dropdown (restaurants, hotels, hospitals, etc.)
  6. Optionally set Max POIs to limit results for testing
  7. Click Start to begin extraction
  8. Download results as JSON, CSV, or Excel from the dataset

Example inputs for different use cases:

// Find all restaurants in central Paris (2 km radius)
{
"location": "Paris, France",
"radiusKm": 2,
"category": "restaurants",
"maxItems": 200
}
// Extract hotels in a precise area using bounding box
{
"boundingBox": "48.18,16.33,48.24,16.42",
"category": "hotels"
}
// Custom Overpass query for bicycle parking in Vienna
{
"category": "custom",
"customQuery": "[out:json][timeout:60];\n(\n node[\"amenity\"=\"bicycle_parking\"](48.18,16.33,48.24,16.42);\n);\nout center;"
}

Input parameters

ParameterTypeDefaultDescription
locationstringCity or address to search around. Geocoded automatically via Nominatim.
radiusKminteger2Search radius in km around location. Min 0, max 100.
boundingBoxstringPrecise area as "south,west,north,east" coordinates. Alternative to location+radius.
categorystring"restaurants"Category preset. See full list below.
customQuerystringFull Overpass QL query. Used when category is "custom".
maxItemsinteger0Max POIs to extract. 0 = unlimited.
includeAllTagsbooleanfalseInclude all raw OSM tags in extras field.
overpassEndpointstringCustom Overpass API server. Defaults to overpass-api.de.

Available categories: restaurants, cafes, bars, fast_food, hotels, shops, supermarkets, hospitals, pharmacies, schools, universities, parks, museums, attractions, banks, parking, fuel, post_offices, police, fire_stations, gyms, cinemas, all_amenities, custom

Output examples

Single restaurant record:

{
"osmId": 76514684,
"osmType": "node",
"name": "Pizza Bizi",
"category": "restaurants",
"lat": 48.2096466,
"lon": 16.3736843,
"address": {
"street": "Rotenturmstraße",
"houseNumber": "4",
"city": "Wien",
"postcode": "1010",
"country": "AT",
"countryCode": "AT",
"state": null
},
"phone": "+43 1 5133705",
"website": "https://www.pizzabizi.at/",
"openingHours": "Mo-Su,PH 11:00-24:00",
"wheelchair": "no",
"extras": {}
}

Hospital record with extras enabled:

{
"osmId": 499319990,
"osmType": "node",
"name": "NHS Soho Walk-In Centre",
"category": "hospitals",
"lat": 51.5145964,
"lon": -0.132073,
"address": { "street": null, "city": null, ... },
"phone": null,
"website": null,
"openingHours": null,
"wheelchair": null,
"extras": {
"healthcare": "clinic",
"healthcare:speciality": "minor_injuries",
"operator": "NHS"
}
}

Tips for best results

  • 🎯 Start small — use maxItems: 50 to preview results before extracting thousands of POIs
  • 📍 Be specific with location names — "Paris, France" works better than just "Paris"
  • 🗺️ Use bounding box for precise areas — copy coordinates from bbox.2live.de or bboxfinder.com
  • 🏷️ Enable includeAllTags for research — OSM tags contain cuisine type, seating capacity, email, social media, accessibility details, and more
  • Large areas return more results — a 10 km radius in a major city may return 5,000+ restaurants; use maxItems to cap costs
  • 🔁 Schedule runs to detect new or closed venues over time (Apify's built-in scheduler works great for monthly refreshes)
  • 🔍 Custom queries let you filter by multiple tags — e.g., only vegan restaurants (amenity=restaurant + diet:vegan=yes)

Integrations

OpenStreetMap POI Extractor → Google Sheets Extract all restaurants in your city and pipe results directly to Google Sheets via the Apify → Google Sheets integration. Refresh weekly to detect new openings. Build a live competitor map without any manual data entry.

OpenStreetMap POI Extractor → Slack/Discord alerts Schedule a daily run to detect new hospitals, clinics, or healthcare facilities in your target area. When new POIs appear, trigger a Slack webhook to notify your research team automatically.

OpenStreetMap POI Extractor → Make (Integromat) / Zapier Connect extracted POI data to your CRM, send location data to field sales teams, or auto-populate a property management system with nearby amenities. The flat JSON output maps directly to most form fields.

Batch multi-city extraction via Apify API Use the API to queue extractions for 50 cities at once. Each run targets a single city; your pipeline aggregates results into a master dataset for cross-market analysis.

Scheduled accessibility audits Run the actor monthly with category: "all_amenities" and includeAllTags: true to track changes in wheelchair accessibility tags across a neighborhood. Use this for urban planning or disability advocacy research.

Using the Apify API

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('automation-lab/openstreetmap-poi-extractor').call({
location: 'Vienna, Austria',
radiusKm: 2,
category: 'restaurants',
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Extracted ${items.length} POIs`);

Python

from apify_client import ApifyClient
client = ApifyClient(token="YOUR_APIFY_TOKEN")
run = client.actor("automation-lab/openstreetmap-poi-extractor").call(run_input={
"location": "Berlin, Germany",
"radiusKm": 3,
"category": "hotels",
"maxItems": 200,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(f"Extracted {len(items)} POIs")

cURL

curl -X POST "https://api.apify.com/v2/acts/automation-lab~openstreetmap-poi-extractor/runs" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"location": "Tokyo, Japan",
"radiusKm": 1,
"category": "parks",
"maxItems": 50
}'

Use with AI agents via MCP

OpenStreetMap POI Extractor is available as a tool for AI assistants that support the Model Context Protocol (MCP).

Add the Apify MCP server to your AI client — this gives you access to all Apify actors, including this one:

Setup for Claude Code

$claude mcp add --transport http apify "https://mcp.apify.com"

Setup for Claude Desktop, Cursor, or VS Code

Add this to your MCP config file:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com"
}
}
}

Your AI assistant will use OAuth to authenticate with your Apify account on first use.

Example prompts

Once connected, try asking your AI assistant:

  • "Use automation-lab/openstreetmap-poi-extractor to find all restaurants within 2 km of the Eiffel Tower and save results to a CSV file"
  • "Extract all hospitals and clinics in Vienna, Austria using the OpenStreetMap POI extractor, then show me which ones are wheelchair accessible"
  • "Find all parks and green spaces in a 5 km radius around Central Park, New York using OpenStreetMap data"

Learn more in the Apify MCP documentation.

Yes. OpenStreetMap data is published under the Open Database License (ODbL), which permits free use, sharing, and adaptation — including commercial use — as long as you attribute OpenStreetMap contributors and share any derived databases under the same license.

This actor queries the Overpass API, which is the official read-only API for OpenStreetMap data. It is designed for exactly this type of programmatic access. The actor follows Overpass API best practices by:

  • Using a descriptive User-Agent header identifying the application
  • Respecting rate limits with delays between requests
  • Not storing OSM data beyond the actor's dataset output

For your own use case, review the OSM copyright guidelines and add attribution in any published work. This actor is intended for research, business intelligence, and application development using lawfully accessible public data.

FAQ

How accurate is OpenStreetMap POI data? OSM data quality varies by region. Major cities in Europe and North America have excellent coverage (often better than Google Maps for specialized places). Rural areas or less-mapped countries may have sparser data. OSM is community-maintained and updated continuously — millions of edits happen every week.

How fast does the actor run? For most queries (under 1,000 POIs), the actor completes in under 30 seconds. The Overpass API typically responds in 5-15 seconds. Larger areas with thousands of results may take 60-120 seconds due to Overpass processing time.

How much does it cost to extract 1,000 restaurants? At the FREE tier price of $0.0008/POI + $0.005 start fee: 1,000 × $0.0008 + $0.005 = $0.805. On the GOLD tier (business subscribers): 1,000 × $0.00052 + $0.00375 = $0.524. Apify's free $5/month credit gets you ~6,000 POIs on the FREE tier.

Why do some POIs have null address or phone fields? OSM is a community-contributed dataset — not all places have complete address or contact information. Many nodes have a name and coordinates but no structured address tags. Enabling includeAllTags: true may reveal additional fields like contact:email, contact:facebook, or informal address notes in other tag keys.

Why are results empty for my location? First check that your location name is recognized (try a more specific format like "City, Country"). Second, some areas have sparse OSM coverage — try a larger radiusKm. Third, some categories like museums have fewer POIs than restaurants — the search is working correctly, there may just be fewer mapped places in that area.

Can I filter by sub-categories, like vegan restaurants or 5-star hotels? Yes — use the custom category with an Overpass QL query. For example, to find vegan restaurants:

[out:json][timeout:60];
(node["amenity"="restaurant"]["diet:vegan"="yes"](LAT1,LON1,LAT2,LON2););
out center;

See the OSM Map Features wiki for all available tags.

The actor runs but returns fewer results than expected — why? If you search a very small radius (under 0.5 km) or a category with few POIs, fewer results are normal. For dense categories in large cities, increase radiusKm or use a bounding box covering the full city. Note that OSM coverage for some business types (e.g., specific shop subtypes) may be incomplete in certain regions.

Other location data tools