Eyal Rosenthal · Web scraping at scale

OpenStreetMap POI Bulk Extractor

OpenStreetMap POI Bulk Extractor — Bounding-Box Queries via Overpass API

OpenStreetMap POI Bulk Extractor

Pull every POI of a given type within a bounding box from OpenStreetMap via the public Overpass API. Maps to "give me every cafe / clinic / EV charger / pharmacy in this geographic area" briefs — common in local-listings, real-estate, field-sales, and competitive-density-analysis projects.

Built 2026-05-03 as Demo #16. Different brief class — geographic / location-intelligence, not e-commerce or content.

Run

. ~/freelance/.venv/bin/activate
cd ~/freelance/portfolio_demos/osm_poi_extractor
python extract.py                                 # all targets in targets.json
python extract.py --target cafes_lower_manhattan  # one target

Result (3 sample regions × 3 categories)

  • 42 cafes · lower Manhattan ✅
  • 2 EV charging stations · downtown SF ✅
  • 10 pharmacies · central London ✅
  • 54 POIs total with addresses, phones, websites, opening hours, wheelchair access ✅
  • Auto-fallback to overpass.kumi.systems mirror if primary endpoint is throttled ✅
  • 2-second politeness sleep between queries (Overpass is a free public service) ✅

Why Overpass beats paid alternatives

For breadth POI coverage in most countries, OpenStreetMap density rivals or exceeds SafeGraph / Foursquare API at $0/month. The trade-off is data freshness and proprietary metadata (e.g., visit counts) — but for use cases like "find every car wash in this metro" or "build a heatmap of cafe density," OSM via Overpass is the right tool.

Adding a new target

Add an entry to targets.json:

{
  "name": "schools_berlin_mitte",
  "bbox": [52.5100, 13.3800, 52.5400, 13.4100],
  "tag_key": "amenity",
  "tag_value": "school"
}

Tag keys/values follow OSM's wikiamenity, shop, leisure, tourism, office, healthcare, etc.

Hire me to build this for your stack

Same patterns, your target site. Send the brief and I'll quote fixed-price within 24 hours.

info@luba.media