OpenStreetMap Scraper · POI & Places by City, Category, Radius avatar

OpenStreetMap Scraper · POI & Places by City, Category, Radius

Pricing

from $2.00 / 1,000 extracted places

Go to Apify Store
OpenStreetMap Scraper · POI & Places by City, Category, Radius

OpenStreetMap Scraper · POI & Places by City, Category, Radius

Places from OpenStreetMap (Overpass) as one clean table: name, category, address, coordinates, website, phone, opening hours, OSM link. Pick a city, bounding box or radius plus 34 category presets or your own tag filter. Field completeness report. Not found areas are never charged.

Pricing

from $2.00 / 1,000 extracted places

Rating

0.0

(0)

Developer

TheQuietStack

TheQuietStack

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

OpenStreetMap scraper for POI and places: name, address, coordinates, website, phone and opening hours by city, radius or bounding box, no API key.

OpenStreetMap POI Scraper exports places from OpenStreetMap as one clean table: cafes in Kiel, dentists in Leeds, EV chargers within 5 km of a point, every bicycle shop in a bounding box. Name, category, full address, coordinates, website, phone, email, opening hours, brand, a link to the OSM object and the timestamp of the data, for every row. An open-data alternative to Google Maps scraping, with the license already in every row.

What you get

  • Area by name, box or radius. "Kiel, Germany" is resolved with Nominatim; or pass south,west,north,east; or a center point plus radius.
  • 34 category presets (restaurants, cafes, dentists, doctors, pharmacies, hotels, ev_chargers, supermarkets, gyms, lawyers, ...) plus your own OpenStreetMap tag filters (shop=bicycle, cuisine~pizza, ["amenity"="cafe"]["internet_access"="wlan"]).
  • "Only places that have" a website, phone, email, opening hours or address: filtered on the server, before anything is charged.
  • Field completeness report in the run summary: exactly how many of the rows have a website, phone, opening hours ... so you know what OSM covers in your area before you build on it.
  • License built in: every row carries license and attribution (ODbL 1.0), so the data stays usable in your product.
  • Honest failures. A place name that does not exist fails the run with Area not found. An overloaded or failing Overpass server fails the run with the server's message. Neither is ever reported as "0 results", and neither is charged.
  • Data source is open data, no login, no API key, no bot protection, no proxy needed.

Use cases

  • Local lead lists: dentists, lawyers, gyms or hairdressers in a city, with website and phone, filtered to places that have them.
  • Store locators and maps: every EV charger, pharmacy or bike shop in a region with coordinates and opening hours.
  • Site selection and market research: count competitors around a point with radiusMeters.
  • Data enrichment: OSM IDs and links to join with your own records; includeRawTags for every tag.
  • Training and analytics datasets under an open license (ODbL share-alike applies, see below).

Input

FieldWhat it does
areasPlace names, e.g. ["Kiel, Germany", "Lübeck, Germany"]. Be specific: add the country.
boundingBoxAlternative: "54.30,10.10,54.35,10.16" (south,west,north,east).
latitude, longitude, radiusMetersAlternative: search around a point (radius up to 50 km).
categoriesPresets, see the table below.
customFiltersYour own tag filters, one per line. Lines are OR, conditions inside one line are AND.
requireFieldsname, website, phone, email, openingHours, address.
maxResultsHard limit on rows written and charged (default 100).
maxCostUsdOptional own spending cap, computed from the live per-row price of the run.
includeRawTagsAdds every OSM tag of the place as tags (default on).
overpassUrl, fallbackOverpassUrls, overpassTimeoutSec, nominatimUrlWhich public servers to use.

Example:

{
"areas": ["Kiel, Germany"],
"categories": ["cafes"],
"requireFields": ["website"],
"maxResults": 20
}

Category presets

PresetOpenStreetMap tags (OR)
restaurantsamenity=restaurant
cafesamenity=cafe
bars_pubsamenity=bar, amenity=pub
fast_foodamenity=fast_food
bakeriesshop=bakery
supermarketsshop=supermarket
convenience_storesshop=convenience
hotelstourism=hotel, tourism=motel
lodgingtourism=hotel, motel, guest_house, hostel, apartment
dentistsamenity=dentist, healthcare=dentist
doctorsamenity=doctors, healthcare=doctor
pharmaciesamenity=pharmacy
hospitalsamenity=hospital
veterinariansamenity=veterinary
hairdressersshop=hairdresser
beauty_salonsshop=beauty
gymsleisure=fitness_centre
ev_chargersamenity=charging_station
fuel_stationsamenity=fuel
car_repairshop=car_repair
car_dealersshop=car
bicycle_shopsshop=bicycle
banksamenity=bank
atmsamenity=atm
lawyersoffice=lawyer
accountantsoffice=accountant, office=tax_advisor
estate_agentsoffice=estate_agent
schoolsamenity=school
kindergartensamenity=kindergarten
parkingamenity=parking
toiletsamenity=toilets
playgroundsleisure=playground
museumstourism=museum
attractionstourism=attraction

Output

One row per OpenStreetMap object (node, way or relation; ways and relations get their center point). Real row from a run on the Apify platform on 01.10.2026 (Kiel, cafes, 5 rows), tags omitted:

{
"name": "Mum und Dad",
"category": "cafes",
"matchedFilter": "amenity=cafe",
"categories": [
"cafes"
],
"street": "Ziegelteich",
"houseNumber": "14",
"postcode": "24103",
"city": "Kiel",
"country": "DE",
"addressFull": "Ziegelteich 14, 24103 Kiel, DE",
"latitude": 54.3191408,
"longitude": 10.1319589,
"website": "https://www.mumdadkiel.de/",
"phone": null,
"email": "info@mumdadkiel.de",
"openingHours": "Mo-Th 12:00-24:00, Fr 12:00-01:00, Sa 10:00-01:00",
"brand": "MUM&DAD",
"operator": null,
"cuisine": "snacks",
"wheelchair": "limited",
"osmType": "node",
"osmId": 192202688,
"osmUrl": "https://www.openstreetmap.org/node/192202688",
"osmVersion": 24,
"lastEditedAt": "2026-09-01T11:39:20Z",
"dataTimestamp": "2026-10-01T09:42:51Z",
"area": "Kiel, Schleswig-Holstein, Deutschland",
"scrapedAt": "2026-10-01T09:43:27.543Z",
"license": "ODbL-1.0",
"attribution": "© OpenStreetMap contributors (ODbL 1.0, https://www.openstreetmap.org/copyright)"
}

Field completeness of that same run (SUMMARY.fieldCompleteness, excerpt): name 5/5, website 5/5, addressFull 4/5, openingHours 4/5, brand 3/5, phone 1/5, email 1/5. OSM coverage differs by city and category; this report shows it before you rely on a field.

website and phone also read the contact:* variants. OSM contributor user names are not exported.

The run summary (key-value store record SUMMARY) lists the resolved area per input (with the OSM object Nominatim matched), the exact Overpass query sent, the data timestamp, field completeness (filled / total per field, plus a percentage rounded to one decimal), areas not found, failures, duplicates skipped and the billing counts.

How much does it cost?

Pay per event. Platform usage is included; you pay only for places written to the dataset.

EventCharged whenPrice
place-extracted (Extracted place)One row written to the dataset.$0.002
Actor startonce per run$0.00005

Examples:

  • 1,000 places = $2. 10,000 places = $20.
  • All cafes with a website in one mid-sized city, say 150 rows = $0.30.
  • An area name that does not exist, a failed query or an area with 0 matches = $0 (only the Actor start).

Never charged: areas not found, failed or timed-out queries, areas with 0 matches, duplicate objects across overlapping areas, invalid input. maxResults, your own maxCostUsd and the platform's Max cost per run are all respected; the run stops cleanly before any of them is exceeded.

Limits and good behaviour

  • Uses the public Overpass API (default overpass-api.de, fallback maps.mail.ru mirror) and the public Nominatim geocoder. Both are run by volunteers / sponsors. The Actor sends one Overpass query per area, sequentially, with an identifying User-Agent; on HTTP 429/504 it backs off (15 s, 45 s) and then tries the fallback instance. Nominatim is called at most once per second and results are cached for 30 days in a named key-value store (openstreetmap-extract-geocode-cache).
  • Very large areas (a whole country with a broad category) can exceed the server's memory or time limit. You get the server's error message, not an empty result. Split the area, narrow the category, or raise overpassTimeoutSec. For heavy, repeated use, run your own Overpass instance and set overpassUrl.
  • maxResults is passed to Overpass as an output limit, so a small run is a small query.
  • OpenStreetMap coverage varies by country and category. The completeness report shows what you got; it does not fill gaps. There are no reviews, ratings or photos in OSM.

Use it via API, integrations and AI agents

curl -X POST "https://api.apify.com/v2/acts/thequietstack~openstreetmap-extract/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"areas":["Leeds, United Kingdom"],"categories":["dentists"],"requireFields":["website"],"maxResults":50}'

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("thequietstack/openstreetmap-extract").call(run_input={
"latitude": 52.52, "longitude": 13.405, "radiusMeters": 5000,
"categories": ["ev_chargers"], "maxResults": 500,
})
for place in client.dataset(run["defaultDatasetId"]).iterate_items():
print(place["name"], place["latitude"], place["longitude"], place["osmUrl"])
  • Export: JSON, CSV, Excel, XML or HTML from the dataset tab or API (?format=csv).
  • Integrations: Google Sheets, Make, Zapier, n8n, webhooks via the integrations tab.
  • AI agents (MCP): https://mcp.apify.com?tools=thequietstack/openstreetmap-extract.

FAQ

Do I need an API key? No. The Actor uses the public Overpass API and Nominatim; no login, no key.

How does this compare to Google Maps scraping? OSM has no reviews, ratings or photos, and coverage varies by country. In return the data is openly licensed (ODbL), carries an exact edit timestamp, and is cheap per row. The completeness report tells you how many rows have a website, phone or opening hours in your area.

Can I use the data commercially? Yes, under the ODbL: attribute "© OpenStreetMap contributors" and, if you publish a derived database, share it under the ODbL. Details below.

How fresh is the data? Overpass is usually minutes behind the live OSM database. Every row carries dataTimestamp (state of the Overpass database) and lastEditedAt (last edit of that place).

Can I scrape a whole country? Large areas with a broad category can exceed the public server's limits. You then get the server's error, not an empty result. Split the area, narrow the category, or set your own overpassUrl.

Why does a place have no address? OSM contributors did not map one. The row is still exported (unless you use requireFields: ["address"]) and counted in the completeness report.

What does "Area not found" cost? Nothing. Not-found areas, failed queries and empty areas are never charged.

Data license: OpenStreetMap, ODbL 1.0

The data is © OpenStreetMap contributors and licensed under the Open Database License (ODbL) 1.0. See https://www.openstreetmap.org/copyright.

If you use the output you must:

  1. Attribute: show "© OpenStreetMap contributors" with a link to https://www.openstreetmap.org/copyright wherever the data or anything produced from it is shown (map, app, website, report, dataset).
  2. Share alike: if you publicly use a database derived from this data (for example, you merge it with your own data and publish or offer it), that derived database must be made available under the ODbL. Produced works such as a printed map or a chart may use any license, but must still carry the attribution.
  3. Keep the license notice with the data. Every row carries license and attribution fields for this reason.

Nominatim and Overpass usage policies: https://operations.osmfoundation.org/policies/nominatim/ and https://wiki.openstreetmap.org/wiki/Overpass_API#Public_Overpass_API_instances.

The Actor code is separate from the data and is licensed under ISC. Running this Actor does not grant you any rights to the data beyond the ODbL.

This Actor reads only openly licensed data from public, documented APIs, without login and without circumventing any protection. You are responsible for how you use the data: ODbL obligations above, and data-protection law where rows describe sole traders or contain personal contact details (for example GDPR when you use phone numbers or emails for marketing). Not affiliated with or endorsed by the OpenStreetMap Foundation.