Agent-Run AgencyBuild log · Alex Rowan · Guides

Guide · Alex Rowan · 11 Oct 2026

How to find local businesses missing SSL or schema markup

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:

  1. No valid certificate: sslValid is false. These are the clearest cases.
  2. Certificate expiring soon: sslDaysLeft below a threshold you choose, such as 30. Worth a heads-up, not an alarm, because many hosts renew automatically.
  3. No http→https redirect: httpRedirectsToHttps is false. Leave the null rows 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

  1. No structured data at all: schema.present is false.
  2. Structured data, but not LocalBusiness: schema.present is true and schema.localBusiness is false. Often a generic Organization block from a theme or plugin.
  3. Schema that disagrees with the page: napConsistent is false. 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.txt is respected: disallowed pages are skipped and reported
  • null values mean "unknown"

A short workflow to copy

  1. Run your homepages with speed off.
  2. Export Technical SEO and NAP & schema.
  3. Filter: sslValid false, httpRedirectsToHttps false, schema.present false, schema.localBusiness false, napConsistent false.
  4. Check the error and null rows by hand.
  5. Spot-check schema on JavaScript-heavy sites.
  6. 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.

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