# OpenStreetMap POI Extractor

> OpenStreetMap POI extractor: get cafes, shops and hotels for a city or map box. Name, coordinates, address, website and hours. No login.

URL: https://cliqtomedia.com/actors/openstreetmap-poi-extractor/

Category: Leads, companies & validation · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto

Get places from OpenStreetMap for a city or a map box. Add a map tag like amenity=cafe. You get one row per place with name, coordinates and contact fields.

## How to use it: 3 steps

1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `amenity=cafe` in OSM tags. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Get points of interest from OpenStreetMap for a city or a map rectangle. Add a place name and one or more map tags such as `amenity=cafe`, and the Actor returns one row per place with name, coordinates, address, website, phone and opening hours.

- It finds your area. A place name becomes the official OSM boundary of that place. A bounding box is used as it is.
- It asks the public Overpass API for every place inside the area that has your tags.
- It saves one clean row per place in the Dataset. You can export the rows as JSON, CSV or Excel.

### Good for

- Lists of cafes, restaurants, hotels or shops in one city, with coordinates and contact fields.
- Store-location and competitor maps: all supermarkets, pharmacies or fuel stations in a region.
- Travel and tourism data: hotels, attractions, viewpoints and museums for a guide or an app.
- Any other map object with an OSM tag, from bicycle parking to charging stations.

### Not a good fit

- Reviews, ratings, photos or prices. OpenStreetMap does not store them.
- A full business directory. Some places are missing from the map. Many places have no phone or website.
- Many cities in one run. Run the Actor once per area, or use a bounding box.
- Live opening status. `openingHours` is the schedule that mappers wrote down.

## Price

Prices will be shown after release.

## Questions

### Do I need an OpenStreetMap account or key?

No. It uses public OSM services. You need only an Apify account.

### Can I use the data in my product?

Yes, under the ODbL licence. You must credit OpenStreetMap contributors.

### Is the list complete?

No map is complete. Many places have no phone or website. A truncated flag shows when more places exist.

### Does it give reviews or ratings?

No. OpenStreetMap does not store reviews, ratings, photos or prices.

### Will two runs return the same places?

Yes, if the map did not change. `osmId` stays the same, so you can compare runs by `osmId`.

### Does the Actor collect personal data?

No. It returns only public map data about places. Phone and email fields are business contacts that mappers added to the map.

## Data fields

- `status` (string): Row result: complete (a POI), not_found (the area or POIs were not found, free) or error (free). See statusReason and errorCode.
- `statusReason` (string): Plain-English reason for a not_found or error row; null for POIs.
- `errorCode` (string): Machine code for error rows: INVALID_INPUT, RATE_LIMITED, SOURCE_UNAVAILABLE, SOURCE_TIMEOUT, SOURCE_INCOMPLETE, SOURCE_BAD_REQUEST, DEADLINE_REACHED; null otherwise.
- `osmId` (string): OpenStreetMap element id with its type: node/123, way/456 or relation/789. Stable across runs.
- `osmType` (string): OSM element type: node (a point), way (a building or outline) or relation.
- `osmUrl` (string): Link to the element on openstreetmap.org.
- `name` (string): POI name as mapped (local language); null when unnamed.
- `nameEn` (string): English name (name:en tag) when mapped.
- `category` (string): OSM key of the tag that matched, e.g. amenity, shop, tourism.
- `type` (string): Value of the matched key, e.g. cafe, supermarket, hotel.
- `matchedTag` (string): The matched tag as key=value, e.g. amenity=cafe.
- `lat` (number): Latitude (WGS84). For ways and relations the centre of the outline.
- `lng` (number): Longitude (WGS84). For ways and relations the centre of the outline.
- `address` (object): Address from addr:* tags: street, houseNumber, postcode, city, suburb, country, full (one line). null when the mappers recorded no address.
- `website` (string): Business website from website, contact:website or url tags, normalized to an http(s) URL.
- `phone` (string): Business phone as mapped (phone or contact:phone tag). Business data only, no private persons.
- `email` (string): Business e-mail as mapped (email or contact:email tag).
- `openingHours` (string): Opening hours in OSM opening_hours syntax, e.g. Mo-Fr 08:00-18:00; Sa 09:00-14:00.
- `cuisine` (string): cuisine tag for food places, e.g. thai;seafood.
- `brand` (string): Brand or chain name (brand tag).
- `operator` (string): Operating company (operator tag).
- `wheelchair` (string): Wheelchair accessibility: yes, limited or no.
- `tags` (object): All OSM tags of the element as key/value pairs; null when includeTags is off.
- `area` (string): Your area input as given.
- `areaName` (string): Place name resolved by the geocoder (English where available), or the bounding box.
- `areaOsmId` (string): OSM boundary used for the search, e.g. relation/1234; null for bounding boxes.
- `attribution` (string): © OpenStreetMap contributors. Keep this credit when you publish the data.
- `license` (string): Data licence: ODbL 1.0.
- `licenseUrl` (string): https://www.openstreetmap.org/copyright
- `source` (string): Data route: overpass (Overpass API over OpenStreetMap).
- `sourceEndpoint` (string): Overpass instance that answered this run.
- `dataTimestamp` (string): OSM data freshness on that instance (timestamp_osm_base), ISO 8601 UTC.
- `fetchedAt` (string): When the Actor read the source, ISO 8601 UTC.

## Input settings

- `area` (string, required): Where to search. A place name resolved by the OpenStreetMap geocoder (city, district, region: Pattaya, Berlin Mitte, Lisbon, Portugal) or a bounding box as south,west,north,east in decimal degrees (12.90,100.85,12.98,100.93), up to 5° per side. A named place becomes its OSM boundary, so only POIs inside the boundary are returned. Required.
- `tags` (array, required): 1–20 OpenStreetMap tag filters, one per line: key=value (amenity=cafe, shop=supermarket, tourism=hotel), key=* or key for any value (shop=*), or key~regex for a value pattern (amenity~^(cafe|restaurant)$). Common keys: amenity, shop, tourism, leisure, office, craft, healthcare. See the README for a tag cheat sheet.
- `match` (string): any (default): a POI matches if it has at least one of the tags (union, e.g. cafes or restaurants). all: a POI must have every tag (e.g. amenity=restaurant plus cuisine=thai).
- `maxItems` (integer): Maximum number of POI rows, 1–10000. Default 100. Each POI row is charged; the run summary tells you when the area holds more POIs than this limit.
- `includeTags` (boolean): Add the full OSM tag object to every row (all keys the mappers recorded: cuisine, brand, wheelchair, levels, etc.). Turn off for a smaller, flat Dataset. Default on.

## Step by step on Apify

1. Open the Input tab.
2. Type a city in Area, for example `Pattaya`.
3. Keep `amenity=cafe` in OSM tags, or add your own tag.
4. Keep Max POIs at `20` for a first test.
5. Click Start.
6. Open the Output tab and check the POIs table.

## Use cases

| Task | Input | Key fields | Next step |
|---|---|---|---|
| Lead list of local businesses | `area` = city, `tags` = `amenity=restaurant` | `name`, `phone`, `website`, `address` | Export CSV to your CRM or spreadsheet |
| Store and competitor map | `area` = region, `tags` = `shop=supermarket` | `brand`, `lat`, `lng`, `address` | Load into a GIS tool or a map library |
| Travel guide data | `area` = city, `tags` = `tourism=hotel`, `tourism=attraction` | `name`, `type`, `website`, `openingHours` | Feed a travel app or a content plan |
| Accessibility check | `area` = district, `tags` = `amenity=restaurant` | `wheelchair`, `name`, `lat`, `lng` | Filter by `wheelchair` in a spreadsheet |

## Tips

- Use a bounding box when a city name is not exact enough.
- Run once for each area, because one run covers one area.
- Compare runs by osmId to see what changed on the map.

## Limits



- One area per run. A bounding box can be 5° per side at most.
- `maxItems` is 10000 at most. A run with 10000 rows in Paris took about 90 seconds.
- 1–20 tags per run.
- The Actor waits for OSM servers for about 150 seconds at most. After that it stops and reports a source error.
- Data depends on OSM volunteers. Coverage is different from region to region.
- The data is as fresh as the Overpass server. `dataTimestamp` shows the time, usually a few minutes old.
- The Actor uses public OSM servers. It follows the Nominatim usage policy and does not send heavy parallel requests.

## Sample result

```json
{
  "status": "complete",
  "statusReason": null,
  "errorCode": null,
  "osmId": "way/1455905589",
  "osmType": "way",
  "osmUrl": "https://www.openstreetmap.org/way/1455905589",
  "name": "Espresso Love",
  "nameEn": null,
  "category": "amenity",
  "type": "cafe",
  "matchedTag": "amenity=cafe",
  "lat": 12.9049444,
  "lng": 100.869448,
  "address": {
    "street": "Thappraya Rd",
    "houseNumber": "315",
    "postcode": "20150",
    "city": null,
    "suburb": null,
    "country": null,
    "full": "Thappraya Rd 315, 20150"
  },
  "website": null,
  "phone": "+66 81 982 4727",
  "email": null,
  "openingHours": "Mo-Su 06:00-19:00",
  "cuisine": "coffee_shop",
  "brand": null,
  "operator": null,
  "wheelchair": null,
  "tags": {
    "amenity": "cafe",
    "cuisine": "coffee_shop",
    "name": "Espresso Love",
    "opening_hours": "Mo-Su 06:00-19:00",
    "outdoor_seating": "no"
  },
  "area": "Pattaya",
  "areaName": "Pattaya City, Nong Pla Lai, Bang Lamung District, Chon Buri Province, Thailand",
  "areaOsmId": "relation/12645794",
  "attribution": "© OpenStreetMap contributors",
  "license": "ODbL 1.0",
  "licenseUrl": "https://www.openstreetmap.org/copyright",
  "source": "overpass",
  "sourceEndpoint": "https://overpass-api.de/api/interpreter",
  "dataTimestamp": "2026-10-17T08:32:06Z",
  "fetchedAt": "2026-10-17T08:33:11.550Z"
}
```

## Similar tools

- [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/)
- [Bulk Email Verifier: MX, Disposable, Role & Typo Check](https://cliqtomedia.com/actors/email-verifier/)
- [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/)
- [EU VAT Number Validator (VIES) - Bulk Check, No Login](https://cliqtomedia.com/actors/vat-number-validator/)
- [Europages Scraper: B2B Suppliers & Certificates (No Login)](https://cliqtomedia.com/actors/europages-companies-scraper/)
- [France Company & SIRET Search](https://cliqtomedia.com/actors/france-sirene-company-search/)
