ActorStack.dev

A census with gaps is fine. A census that hides them is not

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.

By Oswaldo Carabano6 min read

Short answer

`RUN_SUMMARY` in the key-value store is part of this Actor's output rather than telemetry, because a dataset of businesses does not tell you whether it covers the area you asked about. `census_complete` false means pass 1 did not finish and what you have is the corner of the grid the sweep started from. `tiles_unresolved` above zero means the census has gaps. `max_depth_reached` equal to `max_depth_limit` means it is truncated. `stop_reason` names which brake stopped the run — max_places, request_budget or timeout. A census with gaps is a legitimate result; one that does not declare them is not.

Key points

  • The row count alone cannot tell you whether an area was covered, so completeness is reported separately.
  • `census_complete: false` means what you have is the corner of the grid the sweep started from, not a census.
  • `tiles_unresolved` above zero means specific parts of the area were never resolved.
  • `max_depth_reached` equal to `max_depth_limit` means the splitting hit its guard and the census is truncated.
  • `stop_reason` distinguishes a run that finished from one that hit a brake you set — or one that ran out of time.
On this page5 sections

The dataset tells you which businesses were found. It cannot tell you whether they are all of them. That is what the run summary is for.

Why completeness needs its own output

A truncated run and a complete run produce the same kind of rows. Nothing about a business row says whether the tile it came from was fully resolved, so completeness has to be reported separately or not at all. RUN_SUMMARY lives in the key-value store and is part of the output rather than telemetry.

The fields that matter

FieldWhat it means
census_completefalse means pass 1 did not finish. What you have is the corner of the grid the sweep started from, not a census of the area.
tiles_unresolvedAbove zero means specific parts of the area were never resolved. The log says so as well.
max_depth_reached / max_depth_limitEqual means the splitting hit its guard and the census is truncated.
stop_reasonmax_places, request_budget or timeout — which brake stopped the run.
places_from_cacheHow many rows were served without touching Google.

Combinations worth failing a pipeline on

census_complete: false when you asked for a whole country: the run did not survey the area, so the rows are a geographic sample of unknown shape. Treat that as a failed run rather than a partial one.

max_depth_reached == max_depth_limit combined with dense cells: the splitting stopped because of the guard rather than because tiles came back under the threshold, so the densest areas are the ones under-covered — which is exactly the wrong place to truncate.

stop_reason: timeout on a large area is normal and means the area needs batching, not that anything went wrong.

The cache counter

places_from_cache says how many rows came from the shared cache. Those rows are charged the same and always declare their own from_cache and data_age_hours, so a cached row never passes as a fresh one — the general rule.

Gaps are fine when they are declared

Frequently asked questions

How do I know the run actually covered the area?
Read `RUN_SUMMARY`. `census_complete` tells you whether pass 1 finished, `tiles_unresolved` whether any part was left unresolved, and `max_depth_reached` against `max_depth_limit` whether the splitting was truncated by its own guard.
What does `stop_reason` tell me?
Which brake ended the run: `max_places`, `request_budget` or `timeout`. The first two are limits you set; a timeout means the area needs to be split into batches.
Is an incomplete census a failure?
No — it is a legitimate result, especially for a large area run under a budget. What would be a failure is an incomplete census presented as a complete one, which is why the summary is part of the output rather than a log line.

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
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 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
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