OpenStreetMap POI Extractor avatar

OpenStreetMap POI Extractor

Pricing

from $0.03 / 1,000 poi saveds

Go to Apify Store
OpenStreetMap POI Extractor

OpenStreetMap POI Extractor

Extract public OpenStreetMap POIs by area and category for lead generation, market mapping, and site research.

Pricing

from $0.03 / 1,000 poi saveds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Share

Extract public OpenStreetMap points of interest by area, category, and optional name keyword.

What does OpenStreetMap POI Extractor do?

OpenStreetMap POI Extractor turns public OpenStreetMap places into a clean dataset.

You provide a small area and OSM category tags such as cafe, restaurant, supermarket, hotel, or museum.

The actor returns names, coordinates, category tags, address fields, contact links, opening hours, brand/operator tags, accessibility tags, and direct OpenStreetMap source URLs.

Who is it for?

  • 🧲 Local lead generation teams building prospect lists
  • πŸ™οΈ Site-selection teams comparing neighborhood amenities
  • 🚚 Logistics teams mapping nearby services and pickup points
  • 🏒 Real-estate analysts researching local surroundings
  • πŸ“Š Market researchers comparing category density by area
  • 🧭 Travel and mobility teams enriching maps with public POIs

Why use this actor?

OpenStreetMap is a strong alternative when you need public geographic data without scraping search engines or map apps.

This actor is designed for repeatable, bounded extraction jobs that produce structured rows you can export to CSV, Excel, JSON, Google Sheets, or an API pipeline.

What data can you extract?

FieldDescription
osmIdOpenStreetMap object ID
osmTypeOSM object type: node, way, or relation
namePlace name when available
categoryKeyOSM category group such as amenity, shop, or tourism
categoryValueOSM category value such as cafe or hotel
latLatitude
lonLongitude
addressHuman-friendly address assembled from common OSM tags
cityCity, town, or village field
postcodePostal code
countryCountry code when present
phonePhone/contact phone when present
websiteWebsite/contact website when present
openingHoursOSM opening hours string
brandBrand tag
operatorOperator tag
wheelchairWheelchair accessibility tag
rawTagsOptional raw OSM tags object
sourceUrlDirect OpenStreetMap object URL

Pricing

This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.

EventWhat is chargedPrice
startOne-time fee charged when a run starts. Covers fixed startup cost.$0.005
itemCharged per OpenStreetMap POI saved to the dataset.$0.000028

Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.

How to use it

  1. Choose a small area.
  2. Enter either a bbox (south,west,north,east) or a placeName.
  3. Add one or more OSM tag values under amenity, shop, or tourism.
  4. Optionally add a name keyword filter.
  5. Set maxItems.
  6. Run the actor.
  7. Export the dataset or connect it to your workflow.

Area input options

Bounding box

Use bbox when you already know the exact coordinates.

Example:

{
"bbox": "40.720,-74.005,40.730,-73.995"
}

The order is always:

south,west,north,east

Place name

Use placeName for a quick test or neighborhood-level query.

Example:

{
"placeName": "SoHo, New York, USA"
}

Very large places may be rejected. Use a smaller area for reliable results.

Category input options

OpenStreetMap uses tags.

This actor supports three common POI tag groups:

  • πŸͺ amenityTags
  • πŸ›οΈ shopTags
  • 🏨 tourismTags

Examples of amenityTags:

  • cafe
  • restaurant
  • pharmacy
  • school
  • bank
  • bar
  • charging_station

Examples of shopTags:

  • supermarket
  • bakery
  • convenience
  • clothes
  • hairdresser

Examples of tourismTags:

  • hotel
  • hostel
  • museum
  • attraction
  • guest_house

Example input

{
"bbox": "40.720,-74.005,40.730,-73.995",
"amenityTags": ["cafe", "restaurant"],
"shopTags": [],
"tourismTags": [],
"maxItems": 50,
"includeRawTags": false
}

Example output

{
"osmId": 123456789,
"osmType": "node",
"name": "Example Cafe",
"categoryKey": "amenity",
"categoryValue": "cafe",
"lat": 40.7251,
"lon": -74.0001,
"address": "10 Example Street, New York 10001, US",
"city": "New York",
"postcode": "10001",
"country": "US",
"phone": "+1 555 0100",
"website": "https://example.com",
"openingHours": "Mo-Fr 08:00-18:00",
"brand": null,
"operator": null,
"wheelchair": "yes",
"sourceUrl": "https://www.openstreetmap.org/node/123456789"
}

Tips for better results

  • βœ… Start with one or two categories.
  • βœ… Use a small area for the first run.
  • βœ… Use exact OSM tag values.
  • βœ… Increase maxItems after confirming the output.
  • βœ… Enable includeRawTags only when you need advanced OSM metadata.

Common use cases

Local lead lists

Extract cafes, restaurants, shops, or pharmacies in a target neighborhood.

Real-estate enrichment

Measure nearby services around a building, parcel, or rental area.

Market mapping

Compare the number and density of similar places across areas.

Logistics research

Find service points, fuel stations, convenience stores, or nearby amenities.

Integrations

Use the dataset with:

  • Google Sheets exports
  • CSV and Excel workflows
  • CRM enrichment pipelines
  • BI dashboards
  • Geospatial tools
  • Apify API automations
  • Webhooks after run completion

API usage with Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/openstreetmap-poi-extractor').call({
bbox: '40.720,-74.005,40.730,-73.995',
amenityTags: ['cafe'],
maxItems: 25
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/openstreetmap-poi-extractor').call(run_input={
'bbox': '40.720,-74.005,40.730,-73.995',
'amenityTags': ['cafe'],
'maxItems': 25,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

API usage with cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~openstreetmap-poi-extractor/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"bbox": "40.720,-74.005,40.730,-73.995",
"amenityTags": ["cafe"],
"maxItems": 25
}'

MCP server usage

Connect this actor to AI tools through the Apify MCP server.

MCP URL:

https://mcp.apify.com/?tools=fetch_cat/openstreetmap-poi-extractor

Claude Code example:

$claude mcp add --transport http apify-osm-pois "https://mcp.apify.com/?tools=fetch_cat/openstreetmap-poi-extractor"

Claude Desktop example:

{
"mcpServers": {
"apify-osm-pois": {
"url": "https://mcp.apify.com/?tools=fetch_cat/openstreetmap-poi-extractor"
}
}
}

Example prompts:

  • "Find cafes in this bounding box and return a CSV-ready table."
  • "Extract hotels around this district and summarize addresses and websites."
  • "Compare supermarkets in two neighborhoods using separate actor runs."

Limits and fair use

OpenStreetMap and Overpass are community resources.

This actor intentionally enforces conservative limits:

  • Small bounding boxes only
  • Maximum 1,000 saved POIs per run
  • Short public API timeouts
  • Limited retries

If you need very large OSM extracts, use official planet/regional extracts or your own Overpass infrastructure.

Legality and attribution

This actor extracts public OpenStreetMap data.

OpenStreetMap data is available under the Open Database License (ODbL). You are responsible for complying with OSM attribution and share-alike requirements for your use case.

A practical attribution line is:

Β© OpenStreetMap contributors

Review the OpenStreetMap copyright and license pages before redistributing derived databases.

Troubleshooting

Why did my run fail with a large bounding box?

The actor rejects large areas to protect public API resources and avoid expensive runs.

Use a smaller neighborhood-level bounding box or split the area into several runs.

Why are some fields empty?

OpenStreetMap is community-contributed data. Some POIs have complete address and contact tags; others only have names and coordinates.

Enable includeRawTags to inspect all available tags.

Why did I get fewer items than maxItems?

The selected area and categories may contain fewer matching POIs than your requested maximum.

Try a broader category or a nearby area.

FAQ

Can this scrape Google Maps?

No. This actor extracts OpenStreetMap data only.

Can I search by brand name?

Yes. Use keyword to filter by the OSM name tag.

Can I extract hotels?

Yes. Add values such as hotel, hostel, or guest_house to tourismTags.

Can I extract supermarkets?

Yes. Add supermarket to shopTags.

Can I include all OSM tags?

Yes. Set includeRawTags to true.