Skip to content
AI & Agents
Skill

/apify-google-maps-leads

Build a local-business lead database from Google Maps in one Apify pipeline: search by target audience + geography, enrich each place with company contacts from its website, leads enrichment (names, emails, phones, LinkedIn), Instagram + Facebook profiles, and optionally reviews

From plugin
awesome-skills
25322 skills
Install
$ npx -y skills add apify/awesome-skills --skill apify-google-maps-leads --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-google-maps-leads

Context preview

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

Build a local-business lead database from Google Maps in one Apify pipeline: search by target audience + geography, enrich each place with company contacts from its website, leads enrichment (names, emails, phones, LinkedIn), Instagram + Facebook profiles, and optionally reviews

SKILL.md

apify-google-maps-leads.SKILL.md
name: apify-google-maps-leads
description: Build a local-business lead database from Google Maps in one Apify pipeline: search by target audience + geography, enrich each place with company contacts from its website, leads enrichment (names, emails, phones, LinkedIn), Instagram + Facebook profiles, and optionally reviews for lead scoring. For places with no named contacts, escalate to apify/ai-web-scraper to pull owner / decision-maker names from the business website. Backfill missing phones via scalelist/phone-finder and missing emails via scalelist/email-finder. Use when the user asks to build a lead list from Google Maps, scrape local businesses, generate B2B leads by city/industry, find owner/decision-maker contacts for restaurants / dentists / gyms / hotels / any local vertical, score leads by review volume or rating, or says "Google Maps lead-gen pipeline", "leads from Maps", "prospect local businesses", "scrape Google Maps for outreach", "find companies in <city>", or mentions chaining Google Maps + AI web scraper + Scalelist Actors.
author: Fabian Maume
author_url: https://github.com/fmaume
metadata:
  keywords: "google-maps, leads, lead-generation, local-business, b2b, prospecting, google-places, lead-scoring, reviews, instagram-enrichment, facebook-enrichment, ai-web-scraper, name-discovery, scalelist, phone-finder, email-finder, contact-enrichment"

Google Maps Leads (with Scalelist backfill)

Build a lead CSV from Google Maps in one pipeline:

1. **Interview** — ask target audience, target geography, and whether to use reviews for lead scoring. 2. **Scrape** — one `compass/crawler-google-places` run with four add-ons pre-configured (leads enrichment, website contacts, Instagram + Facebook profiles, optional reviews). 3. **Filter & score** — apply a review-based score if scoring is on. 4. **Discover missing names** — for places that came back with zero (or unnamed) leads, call `apify/ai-web-scraper` on the business website to extract owner/decision-maker names. Scalelist can't work without a name. 5. **Backfill contacts** — call `scalelist/phone-finder` for leads with a missing phone, `scalelist/email-finder` for leads with a missing email. 6. **Deliver** — a deduplicated CSV plus a `run_metadata.json` sidecar.

Prerequisites

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

Either the Apify CLI (recommended for portability) or the Apify MCP connector works. Commands below use the CLI; the MCP path is a drop-in via the `call-actor` and `get-dataset-items` tools.

Workflow

Track progress with this checklist:

Task Progress:
- [ ] Step 1: Interview — audience, geography, scoring choice
- [ ] Step 2: Build the Google Maps input
- [ ] Step 3: Run compass/crawler-google-places
- [ ] Step 4: Filter + score (if scoring enabled)
- [ ] Step 5: Discover missing names via apify/ai-web-scraper
- [ ] Step 6: Backfill missing phones and emails via scalelist Actors
- [ ] Step 7: Deduplicate and render the CSV

Step 1: Interview

Ask three questions **as one block** — don't drip them one by one.

1. **Target audience** — the business type(s) to search for. Free text. Examples: `"dentists"`, `"vegan restaurants"`, `"boutique hotels"`, `"dog groomers, pet stores"` (comma-splittable → array). 2. **Target geography** — one location per run. City + country reads best (`"Berlin, Germany"`, `"Austin, TX"`). If the user gives a country only, warn that Maps runs perform best on city-scoped searches. 3. **Use reviews for lead scoring? (y/n)** — if yes, we pull reviews (`maxReviews`) and filter by review volume + star rating post-run. If no, we skip reviews to cut cost.

Follow-ups only if the user asks for more control:

  • `maxCrawledPlacesPerSearch` — default `50`. Bigger runs = bigger cost.
  • `maximumLeadsEnrichmentRecords` — default `3` per place (people to enrich per business). Never `0` — that disables leads enrichment, which is the point.
  • `leadsEnrichmentDepartments` — default `[]` (any). Enum values are listed in [references/actor-inputs.md](references/actor-inputs.md).
  • Minimum star rating pre-filter (`placeMinimumStars`) — cheaper than post-filtering when scoring is off.
  • Review-scoring thresholds — default is `≥ 10 reviews AND ≥ 4.0 rating`.

**Cost warning threshold.** Compute `expected_leads = maxCrawledPlacesPerSearch × maximumLeadsEnrichmentRecords`. If it exceeds **200**, restate the number back to the user and confirm before running. Leads enrichment is the dominant cost line; a slip here is what surprises people.

Step 2: Build the Google Maps input

Set every field below on **every** run. Full field reference in [references/actor-inputs.md](references/actor-inputs.md).

| Field | Value | |---|---| | `searchStringsArray` | audience as array (e.g. `["dentists"]`) | | `locationQuery` | geography free text | | `maxCrawledPlacesPerSearch` | user override or default `50` | | `language` | `"en"` unless user specifies | | `scrapePlaceDetailPage` | `true` — needed for phone + hours + address | | `skipClosedPlaces` | `true` — permanent/temporary closures are dead leads | | `scrapeContacts` | `true` — **Add-on: Company contacts enrichment (from website) ($)** | | `scrapeSocialMediaProfiles` | `{"instagrams": true, "facebooks": true, "youtubes": false, "tiktoks": false, "twitters": false}` — Instagram + Facebook profile enrichment | | `maximumLeadsEnrichmentRecords` | user override or default `3` — **Add-on: Business leads enrichment ($)** | | `leadsEnrichmentDepartments` | user override or `[]` | | `verifyLeadsEnrichmentEmails` | `true` — always, never `false` | | `maxReviews` | `10` if scoring is on, `0` otherwise | | `reviewsSort` | `"newest"` if scoring is on |

`scrapeSocialMediaProfiles` auto-enables `scrapeContacts`. Both are billed on top of the base scrap

Read more
Ships withawesome-skills

Community collection of Apify agent skills for AI coding assistants

Get the whole plugin

Other skills on awesome-skills.