Google listing vs website phone check: one sheet that flags every local business whose Google Maps number differs from the number on its own website
Partner programme opening soon: join the free waitlist. Planned terms are 50% of each referred sale (75% once you have 5+ paying customers), single level, paid through Gumroad only from revenue received.
What you get: one Google Sheet with one row per business that puts the phone number on its Google Maps listing next to every phone number its own website shows. Each row gets a Result (Match / Different / No phone on website / No phone on Google / Skipped), the page the matching number was found on, and a plain Next step. Web and local SEO agencies use it to check client sites before a call; owners of several branches use it to catch the branch whose website still shows an old number. Formulas are below. The example rows are made up.
The finished sheet
check tab (example rows are made up)
| Business | Domain | Status | Google phone | Website phones | Result | Found on | Next step |
|---|---|---|---|---|---|---|---|
| Smile Dental | smiledental.example | ok | +914012345678 | +914012345678, +919800000001 | Match | smiledental.example/contact | OK: same number on Google and the website |
| Corner Bakery | cornerbakery.example | ok | +914022223333 | +914044445555 | Different | Ask the owner which number is right, then fix the other place | |
| City Physio | cityphysio.example | ok | +914066667777 | No phone on website | Add the number to the contact page and footer as a tap-to-call link | ||
| Green Florist | greenflorist.example | ok | +914088889999 | No phone on Google | Owner adds a phone to the Google Business Profile | ||
| Big Chain Store | bigchain.example | blocked-by-terms | +911800000000 | Skipped | Check the website by hand |
Why check the two numbers against each other
- Customers call the number they see first. If the Google listing and the website disagree, one of them often rings an old line, a former owner or nobody. A Different row is a lost call you can fix in five minutes.
- Google asks for it. Its Business Profile guidelines (read 27 Oct 2026) say to represent your business "as it's consistently represented and recognized in the real world", to provide a phone number "that connects to your individual business location", and to use a local number instead of a central call-centre helpline whenever possible. We do not claim anything about rankings; the point here is that the number works and is the same everywhere.
- Branches drift. A chain with ten locations often has one branch page still showing the head-office number. The sheet shows that on one screen.
Step 1: get the Google listings
Run a Google Maps scraper on Apify for your search (for example "physiotherapist in Hyderabad") or for your own list of places. The popular Google Maps Scraper (made by Compass, not by us) returns title, website and phoneUnformatted (the phone in international format, like +17183565168) for each place. Note the run's dataset ID.
Agency checking existing clients? Skip this step and type the client list straight into the scrape tab (see the free route below).
Step 2: run the contact scraper on those websites
Open the website contact scraper and set the input like this:
What it does, as written in the Actor's input schema and code on 27 October 2026:
- Reads each item's
websitefield and ignores items without one (counted asdatasetItemsWithoutWebsite). Google Maps links are never treated as the business website. datasetCarryFieldsreplaces the default list, so keeptitlein it. The carried values land insourceItemson each output row.- Reads the homepage plus the most contact-like pages (contact, about, imprint, support). Phones are returned in international format in
phones/N/phone, withphones/N/foundOn(the first page it was seen on) andphones/N/source(for example a tap-to-call link or a WhatsApp link). - Duplicate domains are removed, so a chain whose branches share one website gives one row; its
sourceItemslist holds up to 20 branches. - Follows robots.txt and reads each site's terms, so some rows come back as
blocked-by-terms,blocked-by-tos-listorblocked-by-robots. Those you check by hand.
Export the dataset as CSV. In your sheet use File → Import → Upload, choose "Insert new sheet", untick "Convert text to numbers, dates and formulas" (otherwise +91... numbers lose their plus sign), and rename the tab scrape. Headers look like sourceItems/0/phoneUnformatted and phones/0/phone, so the formulas find columns by header name.
Free route
For a handful of businesses, make a scrape tab with the headers domain, status (type ok), sourceItems/0/title, sourceItems/0/phoneUnformatted, phones/0/phone, phones/0/foundOn, phones/1/phone, phones/1/foundOn. Copy the number from the Google listing and from the website, both written as +, country code, then digits with no spaces. The formulas work the same.
Step 3: build the check tab
Create a tab named check, put these headers in row 1 and these formulas in row 2, and fill down as many rows as scrape has.
| Col | Header | Formula (row 2) |
|---|---|---|
| A | Business | =IFERROR(INDEX(scrape!$A2:$ZZ2, MATCH("sourceItems/0/title", scrape!$A$1:$ZZ$1, 0)), "") |
| B | Domain | =IFERROR(INDEX(scrape!$A2:$ZZ2, MATCH("domain", scrape!$A$1:$ZZ$1, 0)), "") |
| C | Status | =IFERROR(INDEX(scrape!$A2:$ZZ2, MATCH("status", scrape!$A$1:$ZZ$1, 0)), "") |
| D | Google phone | =IFERROR(REGEXREPLACE(TO_TEXT(INDEX(scrape!$A2:$ZZ2, MATCH("sourceItems/0/phoneUnformatted", scrape!$A$1:$ZZ$1, 0))), "[^0-9+]", ""), "") |
| E | Website phones | =IFERROR(TEXTJOIN(", ", TRUE, FILTER(scrape!$A2:$ZZ2, REGEXMATCH(scrape!$A$1:$ZZ$1, "^phones/\d+/phone$"))), "") |
| F | Result | =IFS(C2<>"ok", "Skipped", AND(D2="", E2=""), "No phone anywhere", D2="", "No phone on Google", E2="", "No phone on website", ISNUMBER(SEARCH(D2, E2)), "Match", TRUE, "Different") |
| G | Found on | =IFERROR(INDEX(scrape!$A2:$ZZ2, MATCH(SUBSTITUTE(INDEX(scrape!$A$1:$ZZ$1, MATCH(D2, scrape!$A2:$ZZ2, 0)), "/phone", "/foundOn"), scrape!$A$1:$ZZ$1, 0)), "") |
| H | Next step | =IFS(F2="Match", "OK: same number on Google and the website", F2="Different", "Ask the owner which number is right, then fix the other place", F2="No phone on website", "Add the number to the contact page and footer as a tap-to-call link", F2="No phone on Google", "Owner adds a phone to the Google Business Profile", F2="Skipped", "Check the website by hand", TRUE, "Find a working number before anything else") |
Notes on the formulas:
- Column D strips spaces and dashes so
+91 40 1234 5678and+914012345678compare as the same number. - Column G finds which
phones/N/phoneheader holds the Google number, swaps it forphones/N/foundOnand returns that page. - A Different row is not always wrong: a clinic may list a reception line on Google and a mobile on the website. That is why the next step is to ask the owner, not to change anything yourself.
- Chains: if
sourceItems/1/phoneUnformattedexists, add columns for the other branches with the same formula as D and E, one per branch.
Step 4: work the list
Add a tab named plan. In A1: =QUERY(check!A2:H, "select F, count(B) where B is not null group by F order by count(B) desc label F 'Result', count(B) 'Businesses'", 0). Fix your own or your clients' Different and No phone on website rows first; they are the ones losing calls today.
- Call the number on each Different row before changing anything. Write down which one answered and the date.
- Only the owner or a manager of the Google Business Profile can edit the listing. Send them the right number and the link to the listing.
- On the website, make the number a tap-to-call link (
tel:+914012345678) in the footer, so every page has it. - Re-run the two scrapers a week later and check that the rows turned to Match.
Agencies: a Different row on a business that is not your client is a reason to offer help, not to send bulk email. Contact one business at a time, say how you found the mismatch, and honour every "no".
Partner programme opening soon
Partner programme opening soon: join the free waitlist. Planned terms are 50% of each referred sale (75% once you have 5+ paying customers), single level, paid through Gumroad only from revenue received.
Frequently asked questions
Do I need both scrapers?
No. For a few businesses, copy both numbers by hand into the scrape tab. The scrapers save time when you check dozens or hundreds.
Why does a number show as Different when it looks the same?
Usually one side lost its plus sign or country code on import. Re-import the CSV with "Convert text to numbers, dates and formulas" unticked.
Does the contact scraper read Google Maps?
No. It reads only each business's own website. The Google listing data comes from a separate Google Maps scraper whose dataset you pass in.
What does the Unadhi Actor cost?
No Actor fee during launch. You pay Apify only for the platform usage of each run; Apify's free plan includes $5 of usage a month.
Not legal advice. Use public business phone numbers only for business contact, follow anti-spam and telemarketing rules where you are, and honour every opt-out. Spotted an error? Write to mininglife7@gmail.com and we correct it.
Sources
- Google Business Profile guidelines ("consistently represented and recognized in the real world", phone that connects to the individual location, local number over a central helpline): support.google.com (read 27 October 2026).
- Google Maps Scraper output fields
title,website,phoneUnformatted: Apify Store listing by Compass (read 27 October 2026). - Contact scraper inputs and outputs (
datasetId,datasetCarryFields,sourceItemsup to 20 per domain,phones/N/phone,foundOn,source,datasetItemsWithoutWebsite, blocked statuses): Apify Store listing and the Actor's input schema and code. - Apify pricing (free plan, $5 monthly usage): apify.com/pricing.
- Google Sheets INDEX/MATCH, FILTER, REGEXREPLACE, SEARCH and QUERY functions: Google Docs Editors Help.
Related
- Add emails and phones to a Google Maps export
- Web agency client website contact check sheet
- Business website WhatsApp and social links
- Clean a contact CSV into a call sheet
Unadhi Guides are free, independent explainers. We correct errors as soon as we find them: write to mininglife7@gmail.com.