Build log
Two of the most common gaps on small-business websites are easy to explain to an owner: the site isn't served securely, or it has no LocalBusiness schema markup to tell search engines who and where the business is. This tutorial shows how to find both across a list of sites with the Local SEO Bulk Site Auditor, an Apify Actor, and how to filter the results without over-claiming.
Disclosure: my agency, Manta Media, publishes this Actor. Everything below describes its documented fields. The sample findings come from a real run, with business details removed.
Why these two checks
SSL. A site without a valid certificate shows browser warnings, and visitors leave. A site that has a certificate but doesn't redirect http:// to https:// can still be reached insecurely, and may split signals between two versions.
LocalBusiness schema. Structured data (JSON-LD) can help Google understand a business's name, address, phone and type. It doesn't guarantee better rankings, but it's a concrete, checkable gap with a clear fix, and it's the single biggest item in the Actor's score (15 of 100 points).
The fields you'll use
For SSL:
| Field | Meaning |
|---|---|
sslValid |
true if the certificate is valid |
sslExpiry |
Certificate expiry date |
sslDaysLeft |
Days until expiry |
httpRedirectsToHttps |
Whether http:// redirects to https:// |
For schema:
| Field | Meaning |
|---|---|
schema.present |
Any LocalBusiness or Organization JSON-LD found |
schema.localBusiness |
Whether it's LocalBusiness (including subtypes like Dentist or Plumber) |
schema.type |
The type found |
schema.name, schema.address, schema.phone |
Values extracted from the schema |
napConsistent |
Whether the phone on the page matches the schema phone |
null means the Actor couldn't determine the value. For example, httpRedirectsToHttps is null when port 80 is unreachable. Treat null as "unknown", not "missing".
Step 1: run the Actor on your list
Open the Local SEO Bulk Site Auditor. Paste your homepage URLs into urls. Leave includeSpeed off for this job, because neither check needs PageSpeed, and leaving it off keeps the run fast. Keep maxConcurrency at the default of 3 unless you have a reason to change it.
{
"urls": [
{ "url": "https://www.example-dentist.com" },
{ "url": "example-hvac.com" }
],
"includeSpeed": false
}
The cost is $0.004 per URL audited (about $4 per 1,000), with platform usage included and no start fee.
Step 2: open the right views
Two of the three dataset views map straight onto this job:
- Technical SEO shows SSL valid, SSL expiry and http→https next to each URL.
- NAP & schema shows schema present, LocalBusiness, type, the extracted name, address and phone, and whether the phone matches.
Export both to CSV.
Step 3: filter for SSL problems
In your spreadsheet, create three filters:
- No valid certificate:
sslValidisfalse. These are the clearest cases. - Certificate expiring soon:
sslDaysLeftbelow a threshold you choose, such as 30. Worth a heads-up, not an alarm, because many hosts renew automatically. - No http→https redirect:
httpRedirectsToHttpsisfalse. Leave thenullrows aside and check them by hand if they matter.
Also look at the error column. A site that couldn't be fetched at all, or returned an HTTP error, isn't an SSL finding. Its score is capped at 20, and it needs a manual look before you say anything about it.
Step 4: filter for schema problems
- No structured data at all:
schema.presentisfalse. - Structured data, but not LocalBusiness:
schema.presentistrueandschema.localBusinessisfalse. Often a generic Organization block from a theme or plugin. - Schema that disagrees with the page:
napConsistentisfalse. The phone in the schema doesn't match the phone on the page. That can confuse customers as well as search engines.
The third one is often the most useful to an owner, because it's specific: "your markup says one number, your page says another".
Sample findings (real run, anonymized)
From my own test on 11 Oct 2026: six small-business homepages, four US trades and two Singapore dental clinics. Names, domains and phones removed.
SSL. In the cloud run, all six had a valid certificate and redirected http:// to https://. So none of these six would make an SSL lead. That's normal for a small sample of established businesses, and a good reminder not to assume the gap exists before you've checked. In the local run, days left on the certificates ranged from 22 to 45. One (Site C) was under 30 days, which on its own is a heads-up, not a problem, since many hosts renew automatically.
Schema. This is where the gaps were:
| Filter | Sites | Count |
|---|---|---|
No structured data (schema.present false) |
Site B (Plumbing, US) | 1 |
| Organization only, not LocalBusiness | Site A (Roofing, US), Site F (Dental, SG) | 2 |
| LocalBusiness but missing address or phone | Site D (Dental, SG) | 1 |
Phone in schema doesn't match page (napConsistent false) |
Site E (HVAC, US) | 1 |
| LocalBusiness, complete and consistent | Site C (HVAC and plumbing, US) | 1 |
So five of the six had something specific to say about schema, and none had an SSL problem. The Actor's own wording for these issues, from this run:
- "No LocalBusiness structured data (schema markup) - this helps Google show your business in local results."
- "Structured data only says "Organization"; use a LocalBusiness type so Google understands your location."
- "The LocalBusiness structured data is missing an address or phone number."
Six sites is a tiny sample. Don't read these as rates for a market; run your own list.
Step 5: check before you claim
The Actor reads the raw HTML of one page. Two cases to keep in mind:
- JavaScript-rendered sites. If schema is injected only by JavaScript, the Actor may not see it. Before telling an owner their schema is missing, view the page source or test it in Google's Rich Results Test.
- The wrong page. Some businesses put LocalBusiness markup on a contact or location page rather than the homepage. If that matters for your list, add those pages as extra URLs.
And re-check right before you send anything. Sites change. When my agents re-checked 30 audits against the live sites before my first outreach batch, 10 cited a problem the business had already fixed, most often reviews that had since been added. A late re-run of the Actor on just your shortlist costs very little.
Step 6: write the finding in plain words
The Actor's issues list already phrases things plainly. The README's example for schema reads: "No LocalBusiness structured data (schema markup) - this helps Google show your business in local results." For an owner, keep it to:
- What you saw ("your homepage has no LocalBusiness markup")
- Why it might matter, hedged once ("it can help Google understand your business details")
- One fix they could hand to their web person
Avoid percentages and promises you can't back up. Nobody can promise that adding schema will change rankings.
Limits
- One page per URL, no crawl
- Raw HTML only, so JavaScript-only content may be missed
robots.txtis respected: disallowed pages are skipped and reportednullvalues mean "unknown"
A short workflow to copy
- Run your homepages with speed off.
- Export Technical SEO and NAP & schema.
- Filter:
sslValidfalse,httpRedirectsToHttpsfalse,schema.presentfalse,schema.localBusinessfalse,napConsistentfalse. - Check the
errorandnullrows by hand. - Spot-check schema on JavaScript-heavy sites.
- Re-run the shortlist right before contacting anyone.
It's a quick way to turn a list of sites into a short list of specific, fixable gaps. What you do with that list, and how carefully you check it, is up to you.