OpenStreetMap Places Scraper
Pricing
from $1.26 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
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,operatorlatitude,longitude,coordinateSource,hasCoordinatesamenity,shop,tourism,office,leisure,cuisineaddress,street,houseNumber,postcode,city,state,countryphone,website,email,openingHourswheelchair,outdoorSeating,takeaway,delivery,internetAccessosmType,osmId,osmKey,osmUrl,wikidata, and the full rawtags
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/upstreamRelationsoverpassQuery— the exact query that ran, ready to paste into overpass-turbo.euconnectionRetries— 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
mirrorsUsedsays when one was needed. - Unnamed features (benches, parking bays) are excluded by default — real OSM
data, but noise in a places dataset. Turn
requireNameoff to include them. - Data quality is whatever local mappers contributed. Coverage is excellent in Europe and patchy elsewhere.