Skip to content
AI & Agents
Skill

/apify-local-business-leads-osm

Build a local-business lead list without scraping Google Maps. Routes "find dentists / plumbers / salons / restaurants in <city> with emails", "business email finder for <category> in <city>", "web-design prospects with no website or a weak one", "enrich my list of business

From plugin
awesome-skills
25322 skills
Install
$ npx -y skills add apify/awesome-skills --skill apify-local-business-leads-osm --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/apify-local-business-leads-osm

Context preview

The summary Claude sees to decide when to auto-load this skill.

Build a local-business lead list without scraping Google Maps. Routes "find dentists / plumbers / salons / restaurants in <city> with emails", "business email finder for <category> in <city>", "web-design prospects with no website or a weak one", "enrich my list of business

SKILL.md

apify-local-business-leads-osm.SKILL.md
name: apify-local-business-leads-osm
description: Build a local-business lead list without scraping Google Maps. Routes "find dentists / plumbers / salons / restaurants in <city> with emails", "business email finder for <category> in <city>", "web-design prospects with no website or a weak one", "enrich my list of business websites with verified emails", "leads within 5 km of an address" and "alert me when new businesses appear" to an OpenStreetMap-based Actor that crawls each business's own website and returns one 73-column row per business with an MX-verified email, phone, social profiles, website platform and a 0-100 lead score. No Google Maps, no API key, no proxy, no login; every filter runs before billing. Use when the user wants local B2B leads for cold email or calls, a Google Maps alternative that avoids Google's terms, a bring-your-own-website-list enrichment pass, or a scheduled new-business watch for one category and city.
author: Zakariae (Flash Scrape) — routes to Actors built by the author; no affiliate or referral parameters
author_url: https://github.com/ZAKRIAZ
metadata:
  category: data-extraction
  keywords: "local-business, leads, lead-generation, business-emails, email-finder, verified-emails, mx-verification, openstreetmap, osm, google-maps-alternative, cold-email, web-design-prospects, lead-scoring, b2b, small-business, apify"

Local business leads from OpenStreetMap

Turn "I need local businesses in <city> with emails" into one scored, deduplicated lead table without touching Google Maps: businesses are discovered on OpenStreetMap, each business's own public website is crawled for a contact email, phones and social profiles, every email is MX-verified inside the same run, and the user knows the cost ceiling before the run starts.

Disclosure: the author of this skill owns the Actor it routes to (`flash_scraper/local-business-leads`). It is a pay-per-result Actor on the Apify Store; no referral or tracking parameters are used anywhere in this skill. For Google star ratings and review counts this skill sends the user elsewhere (see the boundary below).

Example prompts

Prompts this skill handles:

  • "Get me 200 dentists in Austin with a verified email and a phone number, as a CSV."
  • "I run a web-design agency: find hair salons in Lyon whose website is weak, or who have no website at all."
  • "Here are 300 business websites from a conference exhibitor list; find and verify a contact email for each."
  • "Every Monday, tell me which new restaurants appeared within 5 km of our downtown office."

Out of scope (the boundary):

  • "Sort them by Google rating" or "only businesses with 4+ stars and 50+ reviews". OpenStreetMap carries no review data, and the Actor only sees a rating when the business publishes one on its own site (about 7% of rows, 4 of 55 on the 2026-08-08 reference run). For Google ratings and review counts route to the [apify-google-maps-leads](../apify-google-maps-leads/SKILL.md) skill or `compass/crawler-google-places` directly.
  • Different from [apify-verified-email-finder](../apify-verified-email-finder/SKILL.md): that skill starts from Google Maps, a Google SERP or a user-supplied URL list; this one discovers on OpenStreetMap and never touches Google. If the user already has a URL list and only wants emails verified, that skill is the shorter path; use this one when discovery itself must avoid Google.
  • Person-level contacts (owner name, LinkedIn profile, direct dial). This Actor returns the business's published contact channels, not people; for named decision-makers use the leads-enrichment steps in [apify-google-maps-leads](../apify-google-maps-leads/SKILL.md).

Prerequisites

  • Apify account ([sign up](https://apify.com))
  • Authentication via one of:
  • `apify login` (OAuth, if using the Apify CLI)
  • `APIFY_TOKEN` environment variable
  • Token from [Apify Console → Settings → Integrations](https://console.apify.com/settings/integrations)

Never paste a token into a URL or into a file inside this skill; pass it as `Authorization: Bearer` (the CLI does this for you).

Workflow

Copy this checklist and track progress:

Task Progress:
- [ ] Step 1: Get the four anchors (category, city, what must every row have, how many)
- [ ] Step 2: Pick the search mode and check the live schema
- [ ] Step 3: Build the input and state the cost
- [ ] Step 4: Run and wait
- [ ] Step 5: Deliver: rows, fill rates, what the map could not supply

Step 1: Get the four anchors

Ask these as one block; do not start a run without them.

1. **Category** — plain English (`dentist`, `HVAC contractor`, `hair salon`). Several are fine. Warn up front that trades run from a van map thinly (see Step 5). 2. **City** — city plus region or country (`Austin, Texas`, `Lyon, France`). If the name exists in several countries ask for the country, and set `countryCode`. 3. **What must every row have** — the contactability floor. Default to "a website" for email work (`onlyWithWebsite`); "a verified email" for cold email (`onlyVerifiedEmail`); "a phone" for call lists (`requirePhone`); "no website" for first-website pitches (`onlyWithoutWebsite`). 4. **How many** — `maxItems` is the cost ceiling. Default to 25 for a first run; ask before going above 500.

Optional follow-ups, only if the user raises them: exclude chains or named brands, a radius around one address, a bring-your-own website list, a weekly new-business watch, a Slack/Discord webhook.

Step 2: Pick the search mode and check the live schema

| User need | Actor ID | Tier | Best for | |-----------|----------|------|----------| | Category + city (the normal case) | `flash_scraper/local-business-leads` | community | `category` + `location`, or the plural `categories` × `locations` matrix (up to 25 combinations per run); one row per OpenStreetMap object, deduplicated across categories | | Territory around one point | `flash_scraper/local-business-leads` with `searchRadiusKm` + `centerLat` + `cente

Read more
Ships withawesome-skills

Community collection of Apify agent skills for AI coding assistants

Get the whole plugin

Other skills on awesome-skills.