OpenStreetMap Tourist Attractions Scraper avatar

OpenStreetMap Tourist Attractions Scraper

Pricing

Pay per event

Go to Apify Store
OpenStreetMap Tourist Attractions Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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

FieldDescription
osmIdStable node/123, way/123, or relation/123 identifier
osmTypeOSM element type
nameAttraction name when tagged
tourismCategoryOSM tourism=* value
latitude, longitudePoint coordinates or Overpass center for ways/relations
addressCombined address from OSM tags
website, phone, emailPublic contact tags when present
wikidata, wikipediaKnowledge graph identifiers when present
openingHours, fee, wheelchairVisitor/accessibility tags
sourceUrlOpenStreetMap element URL
attribution, licenseOSM 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 ApifyClient
client = 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.

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.