Local Business Leads with Emails from OpenStreetMap (No Key) avatar

Local Business Leads with Emails from OpenStreetMap (No Key)

Pricing

from $2.50 / 1,000 business with email founds

Go to Apify Store
Local Business Leads with Emails from OpenStreetMap (No Key)

Local Business Leads with Emails from OpenStreetMap (No Key)

Local business leads with emails: find businesses in any city by category from OpenStreetMap, with the role-based business address (info@, contact@, sales@) from their own website. Role-based business addresses only, GDPR-minded. A keyless Google Maps scraper alternative.

Pricing

from $2.50 / 1,000 business with email founds

Rating

0.0

(0)

Developer

LYFE Offshore

LYFE Offshore

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Share

Local business leads by city and category, with business emails from each business's own website: the businesses come from OpenStreetMap, no API key needed. A Google Maps scraper alternative that does not touch Google or LinkedIn.

Role-based business addresses only, GDPR-minded. It returns addresses such as info@, contact@, sales@, office@ or reservations@. Addresses that look like a person's (jan@, j.devries@, initials) are left out and never charged.

One run, before and after

Input: places: ["Haarlem, Netherlands"], categories: ["dentist"], maxResults: 10.

A plain OpenStreetMap exportThis Actor
Rows39 named dentists with a website or email tag, most without an email10 businesses, all with a role address
Emailmostly missing3 from OpenStreetMap tags, 7 read from the practice's own website

Real output of that run (6 October 2026, 17 businesses checked, about two minutes):

BusinessEmailFound onPhoneAddress
Tandartspraktijk Koninginfo@tandenkoning.nlOpenStreetMap+31 23 532 9002Lorentzkade 300, 2014CH Haarlem
Tandheelkundig Centrum Nederlandinfo@tcn.nlwebsite+31 23 534 3178Spaarne 72, 2011CL Haarlem
Geurst Tandartseninfo@geursttandartsen.nlwebsite+31 23 5262581Kraaienhorst 54-56, 2011NX Haarlem
De Vijfhoek tandartseninfo@tandartsenweb.nlwebsite+31 23 5428336Sophiastraat 71, 2011VV Haarlem
Mandana Mondzorginfo@mandanamondzorg.nlwebsite+31 23 5254222Schouwtjeslaan 23A, 2012KD Haarlem

How it works

  1. Looks the place up in OpenStreetMap (Nominatim) and lists every named business of your categories inside it (Overpass API).
  2. Uses the email / contact:email tag when the mapper filled it in.
  3. Otherwise reads the business's own site: the home page, then the contact or about page. mailto: links, plain text, [at] spellings and Cloudflare-protected addresses are all picked up. Image names, placeholder addresses (name@domain.com) and tracking addresses are dropped, and the business's own domain ranks above webmail and web agencies.
  4. Keeps role addresses only: the first word of the address must be a known role such as info, contact, sales, office, hello, support, booking or reservations (info.haarlem@ counts). Everything else, including names, initials and haarlem@-style addresses, is left out. A business with only such addresses gets no email, a note, and no charge. Over all 39 Haarlem dentists: 29 with a role address, 9 left out because they only publish personal-looking addresses.
  5. Returns the best address in email and up to four more in otherEmails.

It is polite by design: robots.txt is respected, at most a few pages per site, a small pause between requests, a few sites at a time, and a user agent that says who we are.

Input example

The prefilled run above:

{
"places": ["Haarlem, Netherlands"],
"categories": ["dentist"],
"maxResults": 10,
"onlyWithEmail": true
}
Field
placesCities or districts. Add the country: "Haarlem, Netherlands"
categoriesdentist, restaurant, hairdresser, lawyer, plumber, hotel, bakery, gym, accountant, estate_agent, car_repair and more, or any OSM tag such as craft=roofer
maxResultsStop after this many businesses with an email, across all places (default 50)
onlyWithEmailOff = also return businesses with a website or phone but no email (free; they count toward maxResults)
concurrencyWebsites read in parallel (default 5, maximum 10)

Output example

A real row from the same Haarlem search (run locally with this Actor's code on 5 October 2026):

{
"name": "Geurst Tandartsen",
"category": "amenity=dentist",
"address": "Kraaienhorst 54-56, 2011NX Haarlem",
"city": "Haarlem",
"phone": "+31 23 5262581",
"website": "https://www.geursttandartsen.nl",
"lat": 52.3844788,
"lon": 4.6336066,
"osmUrl": "https://www.openstreetmap.org/node/2710520821",
"email": "info@geursttandartsen.nl",
"otherEmails": [],
"emailSource": "website",
"searchPlace": "Haarlem, Netherlands"
}
FieldMeaning
nameBusiness name from OpenStreetMap
categoryThe OSM tag it matched, e.g. amenity=dentist
address / cityStreet, number, postcode and city as mapped
phonePhone from OpenStreetMap, as mapped
websiteWebsite from OpenStreetMap
lat / lonCoordinates
osmUrlLink to the object on openstreetmap.org
emailThe best role address found (null if none)
otherEmailsUp to four more role addresses found
emailSourceopenstreetmap (tag) or website (read from the site)
searchPlaceWhich of your places it came from
noteOnly when reading the site had a problem, e.g. robots.txt disallows some pages or website unreachable
attribution© OpenStreetMap contributors, ODbL 1.0: keep it with the data if you share or publish it

A run summary (leads, with email, businesses checked) is stored under the SUMMARY key.

Price

Price per 1,000 by your Apify plan (Apify applies the right column automatically):

FreeStarterScaleBusiness and up
Business with email found, per 1,000$3.50$3.50$3.00$2.50

No start fee. The figures below use the Free-plan price; on a paid plan the same run costs less.

EventPrice
Business with email found$0.0035
  • 1,000 businesses with an email ≈ $3.50.
  • The Haarlem run above: 10 businesses with an email = $0.035.
  • Free: businesses without an email (returned only with onlyWithEmail off).

Pay per event, platform usage included. A run can be capped with the usual maximum-cost setting; the Actor stops at the cap instead of doing work it cannot be paid for.

Use it from code or an AI agent

curl -X POST "https://api.apify.com/v2/acts/lyfe_tools~osm-business-email-leads/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"places": ["Haarlem, Netherlands"], "categories": ["dentist"], "maxResults": 10}'

It returns the rows as a JSON array. AI agents (Claude, Cursor and other MCP clients) can call the Actor through the Apify MCP server at https://mcp.apify.com: the agent sends places, categories and maxResults and reads name, email, phone, website and address.

FAQ

How do I get a list of local businesses with email addresses in a city? Give the city in places (with the country) and a category such as restaurant or plumber in categories.

Is this a Google Maps scraper? No. It does not use Google at all. Businesses come from OpenStreetMap and emails from the businesses' own websites or OSM tags.

Do I need an API key? No Google, OpenStreetMap or other key. Only your Apify account.

Which categories can I search? The friendly names listed under Input, or any OpenStreetMap tag in key=value form, such as craft=roofer or shop=florist.

Why are some businesses missing? Only businesses mapped in OpenStreetMap with a name, and with a website or email tag, can become a lead. Sites with only a contact form are skipped.

Am I charged for businesses without an email? No. Only rows with a role address are charged.

Why do I get info@ but not the owner's address? On purpose: the Actor returns role-based business addresses only (GDPR-minded). Addresses that look like a person's are left out.

Next step: verify the addresses with Catch-All Email Verifier.

Honest limits

  • Coverage is what OpenStreetMap has. Dense in Europe, thinner elsewhere. Only businesses with a website or email tag can be turned into a lead, which is roughly a third of them. Big cities are better covered than villages.
  • Not every site publishes an email. Many use a contact form only; those businesses are skipped, not guessed.
  • The Overpass servers are free community servers and are sometimes overloaded. The Actor tries three of them and retries; if all fail it stops with a clear message instead of returning an empty dataset. Run again a few minutes later. The same goes for a search that finds no business with an email: the run fails with a message and costs nothing.
  • Addresses are taken as published, not checked for delivery.
  • Role addresses only, by design. Personal-looking addresses are never returned or charged, to keep personal data out of the output. A role address can still reach one person at a very small business, so check the rules for cold outreach in the recipient's country; you are responsible for how you use the addresses.
  • OpenStreetMap data is © OpenStreetMap contributors, available under the ODbL. Keep that attribution if you publish the data.

Questions or problems: tools@lyfeoffshore.com