Agent-Run AgencyBuild log · Alex Rowan · Guides

Guide · Alex Rowan · 11 Oct 2026

Find and qualify local SEO clients: Maps scraper + gap scorer + site auditor workflow

Build log

This is the full workflow I'd use to go from "plumbers in a city" to a short, checked list of businesses worth emailing. It chains three Apify Actors: a Google Maps scraper to collect businesses, the Local Leads SEO Gap Scorer to rank them, and the Local SEO Bulk Site Auditor to re-check the shortlist in detail right before outreach.

Disclosure: my agency, Manta Media, publishes the gap scorer and the site auditor. The Maps scraper is a third-party Actor; I only describe how its output feeds in. The test numbers are from a real run, with businesses and the city left out.

The workflow at a glance

  1. Collect: a Google Maps scraper exports businesses for one trade in one area.
  2. Score: the gap scorer audits each website, compares reviews with the group, finds public emails and assigns hot, warm or cold.
  3. Shortlist: you pick the leads with something specific and true to say.
  4. Re-check: the site auditor runs on the shortlist right before sending, so every claim is current.
  5. Contact: short, specific, compliant emails in small batches.

Step 1: collect businesses from Google Maps

Use a Google Maps scraper such as compass/crawler-google-places. Search one trade in one area, for example plumbers in a single city. Check that scraper's own page for its inputs and pricing. They're not covered here.

Two tips:

  • One trade, one area per run. The gap scorer compares each business's reviews with the median of the group, so a mixed group gives a meaningless median.
  • Keep the dataset ID. The gap scorer can read the scraper's dataset directly.

Step 2: score with the gap scorer

Open the Local Leads SEO Gap Scorer and set datasetId to the scraper's dataset. It recognizes the Maps fields title, website, phone, totalScore, reviewsCount, categoryName and city. Leave findEmails on (the default). Leave includeSpeed off unless you have your own free PageSpeed Insights key, because without one Google returns HTTP 429. Use maxLeads (default 500, up to 5,000) to cap the cost.

The cost is $8 per 1,000 leads, one lead-scored event per lead.

For each lead you get:

  • opportunityScore, 0 to 100, higher means a better prospect
  • tier: hot (50 or more, or no website), warm (30 or more), cold (under 30)
  • pitchPoints, such as "No LocalBusiness schema - Google gets no structured name/address/phone" or "12 reviews vs area median 48"
  • email, emailSource and emailCheck (verified, likely or unverified), only from the business's own site
  • Site facts: localSeoScore, hasLocalBusinessSchema, sslValid, httpRedirectsToHttps, responseTimeMs, siteError and the full seoIssues list
  • Review facts: rating, reviewCount and reviewMedian

What a real run looked like

22 plumbers in one city in Oregon (not named):

Result Count
Hot 5
Warm 7
Cold 10
Median opportunity score 34
Public email found 12 of 22

Scoring all 22 cost about 18 cents at $0.008 per lead.

Step 3: build the shortlist

From the Leads view, export to CSV and filter:

  1. Hot and warm only, to start.
  2. A public email, if email is your channel. In the test, 10 of 22 had none on their site. Don't guess addresses.
  3. Split the no-website leads out. They're automatically hot, but they need a web design conversation, not an SEO audit.
  4. One or two strong pitch points. Specific, checkable gaps make the best openers: no LocalBusiness schema, a phone mismatch, no meta description, reviews well below the group median.

In the test, that would mean starting from at most 12 hot and warm leads, then cutting any without a public email.

Step 4: re-check the shortlist with the site auditor

The gap scorer's site checks are a good first pass. Right before you send, run the shortlist through the Local SEO Bulk Site Auditor for a detailed, current view of each homepage:

  • Availability: final URL, HTTP status, response time, page size
  • Security: SSL valid, expiry date, days left, http→https
  • On-page: title and length, meta description and length, all H1s
  • Local schema: LocalBusiness or Organization JSON-LD, with the extracted name, address and phone
  • NAP: phones on the page (E.164), street address, and whether the page phone matches the schema phone
  • Mobile and indexing: viewport, canonical, robots meta
  • A 0 to 100 localSeoScore and a plain-English issues list

It costs $0.004 per URL, about $4 per 1,000, with no start fee.

Why bother, when the gap scorer already audited the site? Two reasons. Time passes between scoring and sending, and sites change. When my agents re-checked 30 of my own audits before my first outreach batch, 10 cited a problem the business had already fixed. And the auditor gives more detail, such as the H1 list and the schema phone versus the page phone, which makes a more specific email.

Drop any pitch point the re-check doesn't confirm. Drop any lead with nothing left.

Step 5: write and send

Keep each email short:

  • Who you are, in one line
  • One or two confirmed findings from their live site, in plain words
  • One fix they could hand to their web person, whether or not they hire you
  • A plain offer with prices stated, and no call required
  • Your real name, business name, postal address and an opt-out

Comply with anti-spam law for each country (CAN-SPAM, GDPR, PDPA), as the gap scorer's README says, and keep a suppression list. This isn't legal advice. Send small batches and read them first.

Costs for a run like the test

  • Gap scorer, 22 leads: about $0.18
  • Site auditor re-check on, say, 8 shortlisted sites: about $0.03
  • Maps scraper: see its own pricing page

What this workflow won't do

  • It won't promise replies, clients or rankings, and your emails shouldn't either.
  • The gap scorer doesn't scrape Maps, and neither Actor sends email.
  • Both Actors read raw HTML, so content added only by JavaScript may be missed. Spot-check before claiming something is missing.

Checklist

  1. One trade, one area, scraped from Maps.
  2. Gap scorer on the dataset; emails on; speed off unless you have a key.
  3. Hot and warm, public email, one or two strong pitch points.
  4. No-website leads in their own pile.
  5. Site auditor re-check right before sending.
  6. Short, specific, compliant emails in small batches.

The point of chaining the three is to spend your writing time only on businesses where you have something true, specific and current to say.

Free

Get the AI Agent Team Playbook

The five agent briefs, the approval gates and the verifier routine from this build, in a free 9-page PDF. No promises of rankings or income.

Get the free playbook