
OpenStreetMap POI Scraper
hipersoft/osm-poi-scraper
Extract points of interest / local businesses from OpenStreetMap by category and area: name, address, coordinates, phone, website, opening hours and more. Great for lead generation.
Total users
2Monthly users
1Total runs
112Per poi scraped
$0.0008Last rebuilt
Oct 28, 2026Overview
Extract points of interest and local businesses from OpenStreetMap by category and area. Give it a place name and a category and get back clean, structured JSON: name, full address, coordinates, phone, website, email, and opening hours. Backed by free community map data — no account, no API key. Great for lead generation, local market research, and building location datasets.

Features
- 🗂️ 20 ready categories — pick from restaurants, cafes, bars, hotels, supermarkets, pharmacies, banks, gyms, and more via
category, or usecustom. - 🏷️ Custom tag filters — with
category: custom, target any OSM tags viacustomFilterslikeshop=bakeryortourism=museum. - 📍 Full location data — each POI carries
latitude/longitude, a structured address, plus readyosmUrlandgoogleMapsUrllinks. - ☎️ Contact details —
phone,website, andemailpulled from OSM contact tags where present. - 🕒 Rich attributes —
openingHours,cuisine,brand,operator, andwheelchairaccessibility, plus the rawtagsobject. - 🌍 Any area, auto-geocoded — pass place names like
Austin, TexasorBerlin; each is geocoded to a bounding box automatically. - 🔢 Volume control — cap output with
maxItemsPerArea(up to 10000); results are deduplicated per area.
What you get

Each row is one point of interest:
{
"name": "Franklin Barbecue",
"category": "restaurant",
"area": "Austin, Texas",
"street": "East 11th Street",
"houseNumber": "900",
"city": "Austin",
"postcode": "78702",
"country": "United States",
"phone": "+1-512-653-1187",
"website": "https://franklinbbq.com",
"email": null,
"openingHours": "Tu-Su 11:00-15:00",
"cuisine": "barbecue",
"brand": null,
"operator": null,
"wheelchair": "yes",
"latitude": 30.2701,
"longitude": -97.7314,
"osmType": "node",
"osmId": 123456789,
"osmUrl": "https://www.openstreetmap.org/node/123456789",
"googleMapsUrl": "https://www.google.com/maps/search/?api=1&query=30.2701,-97.7314",
"tags": { "amenity": "restaurant", "name": "Franklin Barbecue" }
}
Output schema
| Field | Type | Description |
|---|---|---|
name |
string | Name of the place or business. |
category |
string | Category the POI was matched under (e.g. restaurant). |
area |
string | Area query the POI was found in. |
street |
string | Street name of the address. |
houseNumber |
string | Building or house number. |
city |
string | City or town. |
postcode |
string | Postal code. |
country |
string | Country name. |
phone |
string | Contact phone number. |
website |
string | Website URL. |
email |
string | Contact email address. |
openingHours |
string | Opening hours in OpenStreetMap syntax. |
cuisine |
string | Cuisine type, for food and drink places. |
brand |
string | Brand name if the place is part of a chain. |
operator |
string | Organisation that operates the place. |
wheelchair |
string | Wheelchair accessibility status. |
latitude |
number | Latitude coordinate. |
longitude |
number | Longitude coordinate. |
osmType |
string | OpenStreetMap element type (node, way or relation). |
osmId |
integer | OpenStreetMap element identifier. |
osmUrl |
string (URL) | Link to the element on OpenStreetMap. |
googleMapsUrl |
string (URL) | Google Maps link for the coordinates. |
tags |
object | Raw OpenStreetMap tag key/value pairs for the element. |
Input
{
"areas": ["Austin, Texas", "Berlin, Germany"],
"category": "restaurant",
"maxItemsPerArea": 500
}
| Field | Description |
|---|---|
areas |
Place names to search within; each is geocoded to a bounding box (required). |
category |
Type of place, e.g. restaurant, cafe, hotel, pharmacy, or custom. Default restaurant. |
customFilters |
For category: custom, OSM key=value tags like shop=bakery; any match is included. |
maxItemsPerArea |
Maximum POIs to collect per area, 1–10000. Default 500. |
Use cases
- Build local-business lead lists with names, phones, and websites.
- Research market density and competitors in a target area.
- Enrich CRM or mapping data with coordinates and opening hours.
- Assemble category-specific place datasets across multiple cities.
Need more local & maps data?
FAQ
How many places can I scrape?
Up to 10,000 POIs per area — set maxItemsPerArea to control the volume; results are deduplicated per area.
Do I need any setup, account or API key? No. Just enter the areas and category and run — no login or key required.
Which categories are supported?
20 ready categories (restaurants, cafes, bars, hotels, supermarkets, pharmacies, banks, gyms and more), plus custom with your own customFilters tags.
What export formats are supported? JSON, CSV, Excel and XML, plus the Apify API for programmatic access.
How does billing work? Pay-per-event: a small amount per run and per item — you only pay for what you get.
Can I connect it to other tools? The OpenStreetMap POI Scraper can be connected with almost any cloud service or web app thanks to integrations on the Apify platform. It works with Make, Zapier, Slack, Airbyte, GitHub, Google Drive and many more, plus the Apify API, JavaScript/Python clients and MCP. Or use webhooks to trigger an action whenever a run finishes.
Notes
Returns only openly available, community-contributed OpenStreetMap data. This is an independent tool and is not affiliated with or endorsed by the OpenStreetMap Foundation; OpenStreetMap is a trademark of its respective owner. Please respect OSM data usage and attribution guidelines.
Input
| Field | Type | Description |
|---|---|---|
areasAreas | array | Place names to search within, e.g. "Austin, Texas" or "Berlin". Each is geocoded to a bounding box. |
categoryCategory | string · restaurant, cafe, bar, fast_food, hotel, supermarket… | Type of place to find. Default: "restaurant" |
customFiltersCustom tag filters | array | For category "custom": OSM key=value tags, e.g. "shop=bakery", "tourism=museum". Any match is included. |
maxItemsPerAreaMax items per area | integer | Maximum POIs to collect per area. Default: 500 |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~osm-poi-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"areas": [
"Austin, Texas"
],
"customFilters": [
"shop=bakery",
"amenity=cinema"
]
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/osm-poi-scraper").call(run_input={
"areas": [
"Austin, Texas"
],
"customFilters": [
"shop=bakery",
"amenity=cinema"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/osm-poi-scraper').call({
"areas": [
"Austin, Texas"
],
"customFilters": [
"shop=bakery",
"amenity=cinema"
]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| POI scraped One place with name, address, phone, coordinates and tags | $0.0008 | $0.0004 |
| Geocode request One area geocoding request | $0.001 | $0.001 |
| Overpass request One OpenStreetMap Overpass query | $0.001 | $0.001 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
North Data Scraper
Look up European companies on North Data: legal name, former names, register number, address, founding date, LEI, business purpose, managing directors and officers, and recent register publications. Germany, UK, France, Austria and 20+ countries. Bulk lookups.
2,467 runs · 5 users · $0.004 / companyWebsite Content Crawler
Extract clean, readable content from any list of websites: page title, meta description, headings, main body text, word count and link/image counts. Optional same-domain crawl. Bulk-ready. Great for LLM/RAG ingestion, content audits and research.
206 runs · 20 users · $0.0024 / page scrapedSpyFu Domain Scraper
Bulk SEO and PPC reports for any domain from SpyFu: organic keywords, monthly SEO clicks and value, Google Ads budget, paid keywords, top keywords, competitors, top countries and monthly history. Competitor research for agencies. Export CSV/JSON.
185 runs · 7 users · $0.008 / domain reportTrustpilot Reviews Scraper
Scrape Trustpilot reviews and company ratings by company domain or Trustpilot URL: star rating, title, text, reviewer name & country, verification, date, company reply, plus company TrustScore and total reviews.
146 runs · 4 users · $0.0006 / review scrapedACRA Singapore Company Registry Scraper
Search and export Singapore's full ACRA corporate registry: UEN, entity name, status, incorporation date, address, SSIC industry codes, officers, former names and audit firms. Filter by name, status, entity type or industry. Public open data, no setup.
138 runs · 10 users · $0.01 / company scrapedWayback Machine Scraper
List every Internet Archive (Wayback Machine) snapshot of a URL or whole domain: timestamp, snapshot URL, status code, MIME type and content digest. Filter by date, status and dedupe. For SEO, OSINT and historical research. No setup.
135 runs · 15 users · $0.002 / snapshot scrapedSend the site and the fields. We build it and you get it first.