ActorStack.dev

Google Maps output fields and where their coverage comes from

Every field the Actor returns, which are always present, which depend entirely on the market, and the four that are deliberately absent.

By Oswaldo Carabano7 min read

Short answer

One row per business, deduplicated by `feature_id`. Name, address, latitude, longitude and `place_id` are at 100% in every market measured. Phone, opening hours, rating and website vary by market and by vertical rather than by anything the tool controls — `phone_e164` runs 96.7% in Toronto to 41.4% in remote regions. `reviews_count` is delivered when Google serves it, which was 8.5% of rows, and is never promised. Four things are deliberately absent: review text, email addresses, a parsed postal code and any data from individual place pages.

Key points

  • Identity and location fields are at 100% in every market measured, so a row is always usable as a located business.
  • Contact and reputation fields carry market and vertical ranges rather than single numbers.
  • `reviews_count` at 8.5% is delivered when present and never promised, because Google serves it inconsistently.
  • `language` is on every row, which makes the language-dependence of `categories` and `opening_hours` auditable.
  • Place names are kept exactly as Google publishes them, in their own alphabet and accents — Mérida is not Merida.
On this page6 sections

One row per business, deduplicated by feature_id. Below, what is always there, what depends on where you are looking, and what is missing on purpose.

Identity and location

FieldFill rateNotes
name100%Exactly as Google publishes it, accents and alphabet included.
address100%Formatted. The postal code stays embedded in it.
latitude / longitude100%Every row in every market measured.
place_id100%The Places API identifier. Joins outward.
feature_id100%Google's internal id. The deduplication key.

Contact and reputation, with their ranges

These four carry ranges rather than single figures, because their coverage is a property of the market and the vertical — the full measurement.

FieldBest marketWeakest market
phone_e16496.7% Toronto41.4% remote regions
opening_hours96.1% Toronto48.9% remote regions
rating97.5% Toronto55.5% remote regions
website87.4% Toronto5.7% remote regions

The field that is never promised

reviews_count came back on 8.5% of rows, because Google serves it in some responses and not others. It is delivered when present and never promised. If you need a review count on every row, this is not the tool — and that is stated here rather than discovered after a run.

Language changes the rows, not just the labels

The language comes from the country and sets the language of categories and opening_hours. Two runs of the same area in different languages therefore produce different rows, not just differently-labelled ones. language is on every row so this is visible in the data rather than assumed.

Provenance

from_cache and data_age_hours on every row. Cached rows are charged the same as fresh ones and always declare their age.

Four things deliberately absent

Not returnedWhy
Review textWriting by identifiable people. Out of scope.
Email addressesGoogle Maps does not publish them — zero in 498 records.
Postal codeEmbedded in address, format varies by region. Parsing it out would be guesswork.
Place page dataPhone, hours and website already arrive in the search response; fetching each place would multiply cost ~200x for nothing.

The email measurement in full, since it is the omission that gets questioned most.

Frequently asked questions

Which fields are always present?
Name, address, latitude, longitude, `place_id` and `feature_id` were at 100% in every market measured, along with `language` and the provenance fields.
Why is `reviews_count` so rarely filled?
Because Google serves it only in some responses — it came back on 8.5% of rows. It is delivered when present and never promised, because a field that arrives one time in twelve cannot be planned around.
Why is there no postal code field?
It is embedded inside `address` and its format varies by region, so parsing it out would be guesswork that fails silently in exactly the regions where it is least familiar. It is left where Google put it.
Does the language setting change the data?
Yes. The language comes from the country and sets the language of `categories` and `opening_hours`, so two runs of the same area in different languages produce different rows. `language` is on every row so this is visible rather than assumed.

Sources

Every URL below was requested and returned a page on the date shown.

  1. Operator claimchecked 9 Sept 2026
    Google Maps Business Scraper — Actor README and input schemaActorStack / Apify Store
  2. Platform docschecked 9 Sept 2026
    Place IDsGoogle Maps Platform
A white measuring tape curving across a dark background, showing the numbers 15 to 45.
Google MapsMeasured

Coverage is the market

Phone, hours, rating and website vary enormously by city and by vertical. Two independent samples, 16,725 businesses, and why an average would be the wrong thing to publish.

7 min
A laptop screen showing a plain text-mode terminal with a command prompt.
Google MapsReference

Joining on place_id

Two identifiers ship on every row and they do different jobs: one deduplicates within and across runs, the other joins to anything you already have from Google.

5 min
A white measuring tape curving across a dark background, showing the numbers 15 to 45.
Google MapsReference

Reading the run summary

Four fields in the run summary decide whether your data covers the area you asked for. What each one means and which combinations should stop a pipeline.

6 min