ActorStack.dev

`place_id` is the same identifier the official Places API uses

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.

By Oswaldo Carabano5 min read

Short answer

Every row carries two Google identifiers. `feature_id` is Google's own stable internal identifier and is used as the deduplication key, so the same business never appears twice — not within a run and not across separate runs. `place_id` is the same identifier the official Places API returns, which means a dataset from this Actor joins directly to anything you already hold from Google without a fuzzy matching step on name and address. Name-and-address matching is where local-business datasets usually go wrong, and having a shared key removes the problem rather than mitigating it.

Key points

  • `feature_id` is Google's stable internal id and the deduplication key, across runs as well as within one.
  • `place_id` is the identifier the official Places API uses, so a join to existing Google data needs no matching logic.
  • Deduplication across runs is what makes batched country sweeps safe to overlap at the edges.
  • Matching local businesses on name and address is unreliable: punctuation, suite numbers and transliteration all break it.
  • Both identifiers are at 100% in every market measured, so neither join has a coverage caveat.
On this page4 sections

Two identifier columns, both from Google, doing two different jobs. Getting them the right way round saves a category of problem that is otherwise very hard to notice.

Two identifiers, two jobs

FieldJobWhy that one
feature_idDeduplicationGoogle's own stable internal id for the place.
place_idJoining outwardThe same identifier the official Places API returns.

Both were present on 100% of rows in every market measured.

Deduplication across runs

Deduplication on feature_id works within a run and between runs. That is what makes country-scale sweeps practical: batches can overlap at their edges, a batch can be re-run after a timeout, and neither produces duplicate rows or duplicate charges — re-running a finished census cost 8 requests instead of 180.

Joining to Places API data

If you already hold Google data — from the Places API, from a previous product, from a vendor who used it — place_id joins the two sets directly. No name normalisation, no address parsing, no distance threshold.

Why not match on name and address

Because local business records vary in every dimension that a match would rely on: punctuation, accents, suite and floor numbers, abbreviations, transliteration, and the shop that renamed itself last year. Matching on those produces both false merges and false splits, and neither announces itself — you get a business with two records or two businesses with one, and the row count still looks plausible.

Place names here are kept exactly as Google publishes them, accents and alphabet included — Mérida is not Merida — which is another reason not to build a key out of them.

Frequently asked questions

Can I join this data to the Google Places API?
Yes, directly on `place_id`, which is the same identifier the official Places API returns. No fuzzy matching on name and address is needed.
How is deduplication done?
On `feature_id`, Google's own stable identifier, across runs as well as within a single run. That is what lets country sweeps be split into overlapping batches without producing duplicate rows or duplicate charges.
Why not deduplicate on name and address?
Because local business names and addresses vary in punctuation, suite numbers, abbreviations and transliteration between records of the same place. Matching on them produces both false merges and false splits, and neither announces itself.

Sources

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

  1. Platform docschecked 9 Sept 2026
    Place IDsGoogle Maps Platform
  2. Operator claimchecked 9 Sept 2026
    Google Maps Business Scraper — Actor README and input schemaActorStack / Apify Store
A street of small independent shops with striped awnings and plants on the pavement.
Google MapsReference

Field reference

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

7 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
Overhead view of a suburban neighbourhood, showing house plots and the street grid between them.
Google MapsExplainer

The 200-result cap

The cap is per query, not per page, so the answer is geographic rather than paginated. What saturation means, why the threshold is 190, and how deep the splitting goes.

6 min