# Google Maps Verified Leads 🗺️ (registry checked) (`tagadanar/google-maps-verified-leads`) Actor

Search Google Maps and get the businesses back checked against the official company register. Every row says whether the company is really registered, still trading or insolvent, and how confident that answer is. Built for lead lists you actually call, not stale directory dumps.

- **URL**: https://apify.com/tagadanar/google-maps-verified-leads.md
- **Developed by:** [Tagada Data](https://apify.com/tagadanar) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 94.1% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.50 / 1,000 verified leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Google Maps Verified Leads 🗺️ (registry checked)

Search Google Maps the way you would in the app, and get the businesses back
**checked against the official company register**. Every row tells you whether
the company is really registered, whether it is still trading or has gone into
insolvency, and how confident that answer is and why.

The point is simple: a directory dump ages badly. Businesses close, get struck
off, or go into liquidation, and Google Maps keeps showing them for months.
This actor asks the register.

### Google Maps scraper vs this actor

| | plain Maps scraper | Google Maps Verified Leads |
|---|---|---|
| Business name, address, phone, website | yes | yes |
| Rating, category, coordinates, place id | yes | yes |
| Advertisements filtered out of the results | usually not | yes, always |
| Registered legal name and registration number | no | yes (France, UK) |
| Still trading, or closed | no | yes |
| Insolvency and liquidation notices | no | yes (BODACC, The Gazette) |
| Confidence score, with the reasons written out | no | yes |
| Directors and incorporation date | no | yes, where the register publishes them |

Everything a Maps scraper gives you, plus the answer to the question that
actually decides whether the lead is worth a phone call.

### What you get per business

| Field | What it is |
|---|---|
| `name`, `category`, `categories` | The business as Google lists it |
| `address`, `street`, `city`, `postalCode`, `country` | Split out, ready for a mail merge |
| `phone`, `phoneNational` | International format first, so the list is dialable from anywhere |
| `website`, `websiteDomain` | Tracking parameters stripped off |
| `rating` | Google star rating |
| `latitude`, `longitude`, `placeId`, `cid`, `googleMapsUrl` | Location and the identifiers to join on |
| `registry`, `registrySource` | Which register answered, and where the data came from |
| `registryStatus` | `matched`, `ambiguous`, `no-match`, `source-error` or `not-checked` |
| `registryName`, `registryId`, `registryIdType` | The registered legal name and its SIREN or company number |
| `legalForm`, `incorporationDate`, `dissolutionDate` | Company facts from the register |
| `registryAddress`, `registryProfileUrl`, `officers` | Registered office, the public register page, and the directors |
| `isAlive` | `true` still trading, `false` closed or insolvent, `null` not established |
| `insolvencyStatus`, `insolvencyHits` | The notices themselves, with dates, courts and links |
| `confidence`, `confidenceBand` | 0 to 100, and the band: verified, likely, uncertain, unverified |
| `confidenceReasons` | Every point that was added or withheld, in plain words |
| `riskFlags`, `verdict` | `closed`, `insolvency`, `address-mismatch`, and a one-line verdict |
| `matchType`, `matchScore` | How the name was matched, so you can audit any row |

Fields are `null` when the data genuinely is not there. Nothing is guessed.

### Which registers are checked

| Country | Register | Insolvency source |
|---|---|---|
| France | SIRENE and RNE, via recherche-entreprises (INSEE and INPI) | BODACC |
| United Kingdom | Companies House | The Gazette |

Businesses in any other country come back with their full Google Maps details,
a `confidence` of `null` and the verdict "Country not covered". They are still
delivered, and they bill at the lower listing rate rather than the verified
rate, because the check you are paying for did not happen.

No API key is needed for either register. Both are public.

### How well does the matching actually work

Straight answer, because it decides whether this is useful to you.

Google Maps shows **shopfront names**. Company registers index **legal names**.
"Deansgate Dental Studio" on the door can be "1 Deansgate Dental Clinic Ltd" at
Companies House, or a partnership that is not at Companies House at all.

Measured on 2026-08-19, on 20 plumbers in Lyon and 20 dentists in Manchester:

- France: 9 of 20 matched to SIRENE. French trade names are published in the
  register (`enseigne` and `nom commercial`), which is why France does better.
- United Kingdom: 6 of 20 matched to Companies House. One of those six turned
  out to be **dissolved** and another had an **insolvency notice** against it.
  Both were still sitting in Google Maps looking perfectly normal.

So expect roughly a third to a half of a local search to come back matched. The
rest are honestly reported as `no-match` rather than guessed at, and a
`no-match` is itself worth knowing: it usually means a sole trader, a
partnership, or a business trading under a name it never registered.

The rows that do match are the ones carrying the dead-company warning, and that
is the part a plain Maps scraper cannot give you at any price.

### Use it for

- **Cold calling lists.** Drop every row where `isAlive` is `false` before your
  team wastes a morning on disconnected numbers.
- **Credit and onboarding checks.** `insolvencyHits` carries the court, the date
  and a link to the notice, so a "do not extend credit" decision has a source.
- **Territory research.** Registration numbers and incorporation dates tell you
  which competitors are new and which have been trading for twenty years.
- **Cleaning a list you already have.** Search the same trade and town, then
  join on `phone` or `websiteDomain` to find the rows that have gone stale.
- **Agency prospecting.** Filter to businesses with no `website` for a pitch
  that writes itself.

### Input

Three fields. Nothing else to configure.

```json
{
    "searchQueries": ["plumbers in Lyon"],
    "maxResults": 20,
    "country": "fr"
}
```

Several searches in one run, up to ten:

```json
{
    "searchQueries": [
        "plumbers in Lyon",
        "electricians in Villeurbanne",
        "roofers in Lyon"
    ],
    "maxResults": 60
}
```

A UK list:

```json
{
    "searchQueries": ["dentists in Manchester", "dental clinics in Salford"],
    "maxResults": 120,
    "country": "uk"
}
```

Put the town in the search text, the way you would when typing into Maps. The
`country` field is only there for the case where your search has no place in it
at all.

### Pricing

Pay per result, and only for the work that was actually done.

| Event | When it fires | Price |
|---|---|---|
| `verified-lead` | A business that was checked against its national register | **$0.015** ($15 per 1,000) |
| `business-listing` | A business in a country with no register coverage yet | **$0.005** ($5 per 1,000) |
| `actor-start` | Once per run | **$0.001** per run |

So 100 French plumbers, all of them reachable in SIRENE, cost $1.50 + $0.001.
`verified-lead` and `business-listing` both carry the 10 / 20 / 30 % Apify Store
discount tiers (Bronze / Silver / Gold and up), so a Gold account pays $0.0105
per verified lead; `actor-start` is flat.

A business in France or the UK bills as a verified lead whether or not the
register found a match, because the lookup ran either way and a well-evidenced
"not registered under this name" is a real answer. A business in Germany or
Spain bills at the lower listing rate, since only the Maps half happened.

Platform usage is included, no subscription. There is nothing else to pay and no
API key to buy.

### FAQ

**Is this a Google Maps scraper?**
It contains one, and it is the same data you would get from a good Maps scraper.
The reason to use this one is the register check bolted onto every row.

**Why does a business come back as `no-match`?**
Almost always because the name on the shopfront was never registered as a
company name: sole traders, partnerships, and franchises trading under a brand.
Check `confidenceReasons`, which says exactly what was searched and what came
back.

**Can I trust `isAlive`?**
It is `true` only when the register says the company is active **and** no
insolvency notice names it. It is `false` when the register says closed or a
notice was found. Anything less certain is `null` rather than a guess.

**How many results can I get per search?**
Up to 120. Google Maps itself stops producing results for most local searches
somewhere between 60 and 120, and the actor stops as soon as Google does.

**Are advertisements included?**
No. Google returns two paid placements per page and every one of them is
filtered out before the register check. You never pay for an advert.

**Do you support Germany?**
Not yet for the register check. German businesses come back with their full Maps
details at the listing rate. The German commercial register only answers through
a slow stateful session that would dominate the runtime of a sixty-result
search, so it is deliberately left out rather than shipped as something that
times out half the time.

**Do I need a Companies House API key?**
No. The UK check uses the public register search.

**Can I get review text or opening hours?**
Not in this actor. It is built to answer "is this business real and alive", and
every field it returns serves that question.

### Related actors

- **Google Maps Email Scraper / Contact Extractor** if what you need from the
  same Maps search is the email address rather than the register entry: it reads
  each business's own website for emails, extra phone numbers and social
  profiles. https://apify.com/tagadanar/google-maps-contact-extractor
- **B2B Lead Verifier** if you already have a list and just want it checked
  against SIRENE, Companies House and Handelsregister.
- **French Company KYC** and **German Company KYC** for a deep single-company
  file rather than a list.
- **BODACC Insolvency Monitor** and **UK Gazette Insolvency** to watch for new
  insolvency notices as they are published.

### Support

Open an issue on the actor's
[Apify Store page](https://apify.com/tagadanar/google-maps-verified-leads).
Issues are answered within a day or two.

***

google maps scraper, google maps leads, verified business leads, company
register check, SIRENE lookup, Companies House lookup, insolvency check,
b2b lead generation, local business data, lead list cleaning, dead lead removal,
google maps business extractor, SIREN, company number, BODACC, The Gazette

# Actor input Schema

## `searchQueries` (type: `array`):

What you would type into Google Maps, including the place: "plumbers in Lyon", "dentists in Manchester". Include the town or the district in the text, since that is what decides where the results come from. Up to 10 searches per run.

## `maxResults` (type: `integer`):

How many businesses to bring back for each search, at most 120. Google Maps itself runs out of results for most local searches somewhere between 60 and 120.

## `country` (type: `string`):

Optional. Runs the search from this country, the way results shift when you travel. Leave it empty and Google decides from your search text, which works well whenever the text names a town. Set it when your search is a bare trade with no place in it.

## Actor input object example

```json
{
  "searchQueries": [
    "plumbers in Lyon",
    "dentists in Manchester"
  ],
  "maxResults": 20,
  "country": "fr"
}
```

# Actor output Schema

## `results` (type: `string`):

One record per business: its Google Maps contact details plus the official register verdict.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "plumbers in Lyon"
    ],
    "maxResults": 20,
    "country": "fr"
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/google-maps-verified-leads").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["plumbers in Lyon"],
    "maxResults": 20,
    "country": "fr",
}

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/google-maps-verified-leads").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "plumbers in Lyon"
  ],
  "maxResults": 20,
  "country": "fr"
}' |
apify call tagadanar/google-maps-verified-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tagadanar/google-maps-verified-leads"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/tehkeW9gIsKkOToth/builds/o6zw393grCcAlBW06/openapi.json
