OpenStreetMap Tourist Attractions Scraper
Pricing
Pay per event
OpenStreetMap Tourist Attractions Scraper
Extract public tourist attractions from OpenStreetMap by city or bounding box, including categories, coordinates, contacts, websites, Wikidata and attribution.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Extract public tourist attractions from OpenStreetMap by city, destination, region, or bounding box.
The actor returns normalized tourism POIs with OSM IDs, category, coordinates, address fields, website, phone, email, Wikidata, Wikipedia, opening hours, accessibility tags, and OpenStreetMap attribution.
Use it when you need an attraction database without browser automation, private accounts, or paid marketplace scraping.
What does OpenStreetMap Tourist Attractions Scraper do?
OpenStreetMap Tourist Attractions Scraper queries public OpenStreetMap infrastructure for tourism=* points of interest.
It can geocode an area query such as Paris, France with Nominatim.
It can also accept an exact WGS84 bounding box for GIS workflows.
It then queries Overpass for tourism categories such as museums, attractions, viewpoints, galleries, zoos, aquariums, theme parks, artwork, and information points.
The final dataset is clean JSON that is ready for exports, enrichment, maps, lead lists, and destination analysis.
Who is it for?
🏛️ Destination marketing teams can build attraction inventories for cities and regions.
🗺️ GIS analysts can enrich map layers with public OSM tourism data.
✈️ Travel-tech teams can seed local attraction databases for itinerary products.
📍 Local SEO teams can compare website/contact coverage across visitor attractions.
🧭 Tour operators can discover museums, viewpoints, landmarks, and visitor information points in new markets.
Why use this actor?
OpenStreetMap is global, community-maintained, and openly licensed.
This actor focuses on public tourism POI data rather than reviews or booking pages.
It is HTTP/API based, so it is lightweight and avoids browser costs.
It includes OSM attribution and license metadata on every row.
It exposes raw tags optionally, so technical users can keep the long-tail OSM fields.
Data returned
| Field | Description |
|---|---|
osmId | Stable node/123, way/123, or relation/123 identifier |
osmType | OSM element type |
name | Attraction name when tagged |
tourismCategory | OSM tourism=* value |
latitude, longitude | Point coordinates or Overpass center for ways/relations |
address | Combined address from OSM tags |
website, phone, email | Public contact tags when present |
wikidata, wikipedia | Knowledge graph identifiers when present |
openingHours, fee, wheelchair | Visitor/accessibility tags |
sourceUrl | OpenStreetMap element URL |
attribution, license | OSM attribution and ODbL note |
How much does it cost to scrape OpenStreetMap tourist attractions?
The actor uses pay-per-event pricing.
There is a small start charge per run.
There is a per-attraction charge for each saved dataset item.
Current formula-derived pricing is $0.005 per run plus tiered per-result pricing.
Bronze per-attraction pricing is $0.00003053 per saved attraction, with Free at $0.000035109 and Diamond at $0.00001.
Input options
Use areaQuery for simple destination searches.
Use bbox when you already have exact GIS coordinates.
Use categories to choose OSM tourism tag values.
Use maxItems to cap the dataset size.
Use includeRawTags to preserve the original OSM tag object.
Use includeWaysAndRelations when you want attractions mapped as areas, not only points.
Example input: museums in Paris
{"areaQuery": "Paris, France","categories": ["museum", "gallery", "artwork"],"maxItems": 100,"includeWaysAndRelations": true,"includeRawTags": false}
Example input: exact bounding box
{"bbox": "48.8156,2.2241,48.9022,2.4699","categories": ["attraction", "viewpoint", "museum"],"maxItems": 250}
Example output
{"osmId": "node/247618453","osmType": "node","name": "Musée des Arts et Métiers","tourismCategory": "museum","latitude": 48.8660977,"longitude": 2.3554138,"address": "60 Rue Réaumur, 75003","website": "https://www.arts-et-metiers.net","phone": "+33 1 53 01 82 20","wikidata": "Q1538826","wikipedia": "fr:Musée des arts et métiers","sourceUrl": "https://www.openstreetmap.org/node/247618453","attribution": "© OpenStreetMap contributors"}
Tips for better results
Start with a city or destination instead of a whole country.
Use a bounding box for large regions so the request stays predictable.
Keep requestDelayMs above 1000 ms for polite use of public APIs.
Add more categories only when you need them.
Turn on includeRawTags when you need niche OSM tags such as operator, fee:conditional, or payment:*.
Common tourism categories
attraction covers general attractions.
museum covers museums.
viewpoint covers scenic viewpoints.
gallery covers galleries.
theme_park covers amusement parks.
zoo covers zoos.
aquarium covers aquariums.
artwork covers public art.
information covers visitor information features.
Integrations
Send the dataset to Google Sheets for quick attraction audits.
Export JSON or CSV into a GIS pipeline.
Join wikidata IDs with Wikidata enrichments.
Use sourceUrl to let editors verify OSM elements.
Feed records into a destination content workflow.
Monitor the same bbox over time to detect new tagged attractions.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/openstreetmap-tourist-attractions-scraper').call({areaQuery: 'Paris, France',categories: ['museum', 'attraction'],maxItems: 100,});console.log(run.defaultDatasetId);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/openstreetmap-tourist-attractions-scraper').call(run_input={'areaQuery': 'Rome, Italy','categories': ['museum', 'viewpoint', 'attraction'],'maxItems': 100,})print(run['defaultDatasetId'])
API usage with cURL
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~openstreetmap-tourist-attractions-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"areaQuery":"London, United Kingdom","categories":["museum","attraction"],"maxItems":100}'
MCP usage
Use the Apify MCP server with this actor enabled:
$npx -y @apify/actors-mcp-server --actors automation-lab/openstreetmap-tourist-attractions-scraper
Claude Desktop / Claude Code MCP URL:
https://mcp.apify.com/?tools=automation-lab/openstreetmap-tourist-attractions-scraper
Claude Desktop JSON config example:
{"mcpServers": {"apify-openstreetmap-tourist-attractions": {"url": "https://mcp.apify.com/?tools=automation-lab/openstreetmap-tourist-attractions-scraper"}}}
Example prompt:
"Find up to 100 museums and viewpoints in Prague from OpenStreetMap and return website coverage gaps."
Legality and attribution
This actor uses public OpenStreetMap-derived data.
OpenStreetMap data is licensed under the Open Database License.
Each result includes attribution and license metadata.
You are responsible for complying with OSM attribution requirements in your downstream product.
Do not overload public OSM services.
Troubleshooting
If you get no results, try a smaller area or different tourism categories.
If geocoding fails, use bbox directly.
If an Overpass endpoint is busy, the actor automatically tries fallback endpoints.
If a website or phone is missing, it probably is not tagged in OpenStreetMap.
Related scrapers
Use https://apify.com/automation-lab/google-maps-lead-finder when you need business listings and commercial lead enrichment.
Use https://apify.com/automation-lab/website-contact-finder when you already have attraction websites and need contact discovery.
Use this actor when public OSM tourism coverage is enough and you want open-data attribution.
FAQ
Can I scrape restaurants with this actor?
No. This actor targets OSM tourism=* tags. Restaurants usually use amenity=restaurant and are outside the MVP.
Does it return reviews?
No. OpenStreetMap does not provide review content.
Does it require proxies?
No. The actor uses public OSM APIs with polite delays.
Can I use a custom Overpass endpoint?
Yes. Set overpassEndpoint and optional fallbackOverpassEndpoints.
Why are some attractions unnamed?
Some OSM elements have a tourism tag but no name tag. The actor keeps them when they are valid tourism POIs.