OpenStreetMap Places Scraper avatar

OpenStreetMap Places Scraper

Pricing

from $1.26 / 1,000 results

Go to Apify Store
OpenStreetMap Places Scraper

OpenStreetMap Places Scraper

Points of interest from OpenStreetMap by city, bounding box or radius. Overpass reports a timed-out query as HTTP 200 with an empty result, and gives ways no coordinates unless asked - both are handled, so an empty answer here means an empty area.

Pricing

from $1.26 / 1,000 results

Rating

0.0

(0)

Developer

Ibnu Adzim

Ibnu Adzim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Share

Points of interest from OpenStreetMap — by city name, bounding box or radius around a point. No API key, no login.

Why an empty result here means an empty area

Overpass reports a timed-out or out-of-memory query as HTTP 200 with an empty result set, and puts the reason in a remark field most clients never read:

HTTP 200
{"elements": [], "remark": "runtime error: Query timed out ..."}

A scraper that ignores that tells you "there are no cafés in this area" when what actually happened is "the query failed" — and for POI data that lie is convincing, because an empty area is a perfectly plausible answer.

This actor checks remark before it touches the results and reports a failed query as a failure. If it hands you zero places, the area really is empty.

Why the big places are actually in your results

A node in OSM carries a latitude and longitude. A way — an outline — carries neither, only a list of node ids. And supermarkets, hospitals, hotels, malls and campuses are mapped as ways far more often than as points: in one Berlin box, hotels and supermarkets came back as 18 ways and 2 relations, and zero nodes.

Queried the obvious way, every one of those arrives as a plausible-looking row with no location at all. This actor always asks Overpass for centre points, and coordinateSource on each row tells you whether a coordinate is a surveyed point or the centroid of an outline — the same thing for a shop, not the same thing for a national park.

Categories

Twenty presets, each a union of the tags that actually carry what you mean. OSM splits things in ways nobody expects: "hotels" is tourism=hotel and hostel, guest_house, motel, apartment; a pharmacy is amenity=pharmacy but a chemist is shop=chemist. Picking one tag loses most of your results.

restaurants · cafes · fast_food · bars_pubs · hotels · shops · supermarkets · pharmacies · healthcare · education · banks_atms · fuel_charging · parking · attractions · offices · gyms_sports · places_of_worship · post_shipping · car_services · tourism_all

Anything they miss goes in customTags: amenity=veterinary for an exact match, or just craft to match any value of a key.

Output

One SEARCH_SUMMARY per run and one PLACE row per POI, with 44 fields:

  • name, nameEn, brand, operator
  • latitude, longitude, coordinateSource, hasCoordinates
  • amenity, shop, tourism, office, leisure, cuisine
  • address, street, houseNumber, postcode, city, state, country
  • phone, website, email, openingHours
  • wheelchair, outdoorSeating, takeaway, delivery, internetAccess
  • osmType, osmId, osmKey, osmUrl, wikidata, and the full raw tags

osmKey is type/id because a node and a way can share an id — the id alone is not unique.

The summary row tells you what you didn't get

  • upstreamTotal — the true size of the result set, from Overpass's own count query, run before anything is downloaded. So a cap tells you what it left behind rather than quietly becoming the answer.
  • upstreamNodes / upstreamWays / upstreamRelations
  • overpassQuery — the exact query that ran, ready to paste into overpass-turbo.eu
  • connectionRetries — Overpass sheds load by dropping TCP connections; the first attempt is often refused and the second succeeds in about a second. This is not an outage, and the count says how often it happened.
  • overpassSlotsReported — the concurrency budget, read from Overpass's own status endpoint rather than assumed

Known limits

  • Overpass is volunteer-funded infrastructure with a published budget of 2 concurrent queries per IP. Large areas take time; very large ones need to be split. The proxy is off by default deliberately — rotating addresses to get more slots takes capacity from a donated service.
  • The public mirrors were measured worse than the primary instance (HTTP 500/502, 30-second timeouts, a certificate for the wrong host). They are a last resort, and mirrorsUsed says when one was needed.
  • Unnamed features (benches, parking bays) are excluded by default — real OSM data, but noise in a places dataset. Turn requireName off to include them.
  • Data quality is whatever local mappers contributed. Coverage is excellent in Europe and patchy elsewhere.