Build log
A cold email to a local business works better when it says something specific and true about their website. Audit data gives you that. This guide is how I'd turn a list of local business websites into a prioritised, contactable lead list using the Local SEO Bulk Site Auditor, an Apify Actor, while staying on the right side of accuracy and spam rules.
Disclosure: my agency, Manta Media, publishes this Actor, and I run an email-only local SEO agency myself. I'll only describe the Actor's documented inputs and outputs. My own outreach numbers below come from my build log, not from this Actor's output.
The idea in one paragraph
Collect homepages for one trade in a few cities. Audit them in bulk. Keep the ones with a published email address and at least one clear, fixable issue. Sort by how much there is to fix. Re-check right before you send. Write each email around one or two specific findings.
Step 1: pick a narrow segment
A list of "local businesses" is too broad to write good emails for. Pick one trade and a handful of cities, such as roofers in three mid-sized towns. A narrow list means the same few issues come up again and again, so you can write one good explanation of each and reuse it.
Collect the business's own homepage URL for each, plus the name, trade and city, in a sheet. Skip directory listings.
Step 2: audit in bulk
Open the Local SEO Bulk Site Auditor. Put the homepages in urls. For a lead list, I'd leave includeSpeed off on the first pass. It adds about 10 to 40 seconds per URL and needs your own PageSpeed key. You can run it later on the shortlist.
The cost is $0.004 per URL audited, about $4 per 1,000, with platform usage included and no start fee.
Step 3: export and join
Export the Overview view (URL, score, HTTP status, title, phones, emails, issues, error) and the NAP & schema view to CSV. Join them to your prospect sheet on the URL. Use finalUrl as well as inputUrl, because sites redirect.
Step 4: keep only contactable, real prospects
Filter in this order:
- Drop errors. Rows with an
error, or an HTTP error (score capped at 20), need a manual look. They're not leads yet. - Keep published emails only. The
emailsfield lists public email addresses found on the page. Only contact addresses the business publishes itself. In my own first week, 92 of the 154 businesses my agents audited had a published email. The rest weren't emailed, even when an address could have been guessed. - Keep rows with at least one clear issue. Use the
issueslist. Skip prospects where the only findings are marginal.
Step 5: prioritise
The localSeoScore (0 to 100) is a sorting tool. Lower scores usually mean more to fix. Combine it with which issues are present, because some are easier to explain and act on than others:
| Finding | Field | Why it makes a good opener |
|---|---|---|
| No LocalBusiness schema | schema.localBusiness false |
Concrete, checkable, clear fix |
| Phone mismatch | napConsistent false |
Specific and a bit surprising to owners |
| No valid SSL | sslValid false |
Visible to every visitor |
| No http→https redirect | httpRedirectsToHttps false |
Simple fix for their host |
| No phone or address on page | phones empty, addressOnPage null |
Basic, and costs them calls |
| Title cut off in Google | titleLength |
Easy to show with a screenshot |
Pick one or two per prospect. More than that turns a useful note into a report nobody reads.
Sample lead sheet (real run, anonymized)
The column layout I'd use, filled with the six sites from my own test on 11 Oct 2026 (local run scores; names, domains and phones removed):
| Business | Trade, country | Score | Email published | Top issue to open with | Keep? |
|---|---|---|---|---|---|
| Site A | Roofing, US | 87 | Yes | Schema says Organization, not LocalBusiness | Yes |
| Site B | Plumbing, US | 77 | Yes (a Gmail address) | No LocalBusiness schema, no street address on page | Yes |
| Site C | HVAC and plumbing, US | 100 | Yes | No issues found | No: nothing to say |
| Site D | Dental, SG | 89 | Yes | Title is 11 characters; schema missing address and phone | Yes |
| Site E | HVAC, US | 94 | No | Title 182 characters; schema phone doesn't match page | No: no published email |
| Site F | Dental, SG | 74 | No | No meta description; server took 13.2 s | No: no published email |
From six audited sites, three are contactable leads with something specific to say. That's what the filters are for. A perfect score (Site C) isn't a lead, and a site with problems but no published email (Sites E and F) isn't one either, however tempting.
Step 6: verify right before sending
This is the step most lead lists skip. The audit and the email happen at different times, and websites change in between.
When my agents re-checked 30 of my own audits against the live sites before my first outreach batch, 10 cited a problem the business had already fixed. Two had no confirmed issue left and were dropped.
So before each batch:
- Re-run the Actor on just the prospects you're about to email.
- Keep only issues that still show up.
- Drop any prospect with nothing left.
- View the page yourself for anything that matters, especially schema on JavaScript-heavy sites. The Actor reads raw HTML and may miss content injected only by JavaScript.
Step 7: write the email around the finding
Keep it short:
- Who you are and why you're writing
- The one or two findings, in plain words, from their live site
- 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 a clear opt-out
That last line isn't optional. In the US, CAN-SPAM requires a postal address and an opt-out. In Australia, the Spam Act has its own rules. Read them for the countries you email, and keep a suppression list that every batch is checked against. This isn't legal advice.
Step 8: send small, then adjust
Send a small batch first and read it closely. My first batch was 10 emails, sent by hand after a scripted send timed out. I haven't recorded replies yet, so I can't tell you what response rate to expect, and I'd be wary of anyone who promises one.
What the Actor won't do
- It doesn't find businesses for you. You supply the URLs.
- It audits one page per URL and doesn't crawl.
- It doesn't send email or manage outreach.
- It makes no claim about rankings, and neither should your email.
The whole workflow
- One trade, a few cities, own homepages only.
- Bulk audit with speed off.
- Export Overview and NAP & schema; join on URL.
- Drop errors; keep published emails and clear issues.
- Sort by score; pick one or two findings per prospect.
- Re-run and verify right before each batch.
- Short, specific, compliant emails, sent in small batches.
Audit data won't make anyone reply. It makes sure that what you say about their website is true, specific and useful, which is the minimum a stranger's email should be.