Google Local Pack Tracker · AI Overview + Rank avatar

Google Local Pack Tracker · AI Overview + Rank

Pricing

from $0.016 / local pack check (per keyword × location)

Go to Apify Store
Google Local Pack Tracker · AI Overview + Rank

Google Local Pack Tracker · AI Overview + Rank

Track the Google local 3-pack and AI Overview for any keyword and city. One row per keyword x place: who owns the 3-pack, whether an AI Overview is taking the query and who it cites, a 0-100 Local Visibility Score, week-over-week pack changes, and AI takeover alerts. Pay per row, no seat.

Pricing

from $0.016 / local pack check (per keyword × location)

Rating

0.0

(0)

Developer

David S

David S

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Share

Local Pack AI Tracker

Track the Google local 3-pack and AI Overview for any keyword × location — and know the moment AI starts eating your local visibility.

Give it a list of keywords and the cities you care about. For every keyword × place pair you get one row: who owns the local 3-pack, whether an AI Overview is now answering that query, which domains the AI cites, a 0–100 Local Visibility Score, a week-over-week pack diff, and an AI takeover alert when an AI Overview newly displaces the pack.

Built for local-SEO agencies, franchise networks, and multi-location brands who need a decision — not a raw SERP dump.


What you get per row

One dataset row = one keyword × place pair (keywords × places = the full cartesian list).

FieldTypeWhat it tells you
keywordstringThe tracked query (echo of input)
placestringThe location it was checked in (echo of input)
checkedAtISO 8601When this observation was taken
notFoundbooleantrue when there is no local pack for this pair (still a delivered answer)
localPackarray ≤3 {rank, name, domain, rating, reviewsCount}The 3-pack, in order. Every key is always present; domain/rating/reviewsCount may be null for a business with no site or ratings
aioPresentbooleanIs an AI Overview shown for this keyword?
aioCitedDomainsstring[]Normalised domains the AI Overview cites
aioDisplacementbooleanAI Overview is present and sits above / has pushed out the local pack
localVisibilityScorenumber 0–100Your visibility for this query — see below
packDiff{added[], dropped[], rankShifts[]} | nullWhat changed in the pack since the previous run — see below
aioTakeoverAlertbooleanAn AI Overview newly displaced the pack vs the previous run — see below
source"primary" | "fallback"Which data path filled the row

Local Visibility Score (0–100)

A single number that answers "how visible am I for this query, right now?"

  • Position weights in the pack: rank 1 = 100, rank 2 = 80, rank 3 = 60.
  • With trackedDomains set: the score is the best weight among your domains found in the pack (not in the pack → 0).
  • Without trackedDomains: the score reflects the pack surface itself — pack present = 100.
  • An AI Overview that displaces the pack subtracts a −25 penalty; the result is clamped to 0–100.
  • notFound (no pack) → 0.

packDiff — week-over-week 3-pack movement

The actor keeps a snapshot of each keyword × place pack between runs, so on the next run you see exactly what moved:

  • added — domains that entered the pack
  • dropped — domains that fell out
  • rankShifts{domain, from, to} for domains that changed position

The first run has no prior snapshot, so packDiff is null (the key is always present, never missing). A missing or corrupt snapshot is never an error — you get null and the run continues. Domains without a website (domain: null) do not take part in the diff.

aioTakeoverAlert — the signal that matters

true only when an AI Overview newly displaces the local pack for a query that it did not displace on the previous run. This is your early-warning that AI has started intercepting a query you used to win in the map pack. No prior snapshot → false.


Input

{
"keywords": ["plumber near me", "emergency plumber"],
"places": ["Austin, TX", "Dallas, TX"],
"languageCode": "en",
"trackedDomains": ["acmeplumbing.com"]
}
FieldRequiredNotes
keywordsyesLocal search queries (min 1). Each is combined with every place.
placesyesLocations to check (min 1). keywords × places = the rows tracked this run. US: "Austin, TX". International: a plain city name plus countryCode (e.g. "London" + "GB"), or a fully qualified "City,Region,Country" form.
languageCodenoTwo-letter language code. Default "en".
countryCodenoTwo-letter ISO country code of your places (e.g. "GB", "DE", "PL"). Resolves plain city names and picks the Google market for AI Overview checks. Derived from places/language when omitted.
trackedDomainsnoYour own domains, used to compute the Local Visibility Score. Leave empty to report pack composition only.

Pricing (pay per row, no seat)

Billing is per delivered row, using Apify's pay-per-event model.

EventWhenPrice
Run startOnce per run$0.005 (flat, one-time)
Tracked rowPer delivered row$0.02 per row (volume ladder below)

Volume ladder for the per-row event across account tiers:

TierPrice / row
FREE / BRONZE$0.020
SILVER$0.018
GOLD$0.016
PLATINUM$0.014
DIAMOND$0.012

You are never charged for:

  • Cache hits — a keyword × place pair checked in the last 24 hours is served from cache and bills nothing beyond the one-time run start.
  • Failures — a row that could not be fetched is skipped and never billed.

A notFound result is a delivered answer and is billed as one row — knowing a query has no local pack is a result.

Typical cadence: re-run every ~7 days to keep the week-over-week packDiff and takeover alerts fresh.


How it stays reliable

  • Cache (24h): identical keyword × place pairs within 24 hours are served from cache — free, and with the original observation time preserved.
  • Snapshots: a per-pair pack snapshot powers packDiff and aioTakeoverAlert. State is read/written fail-open — a storage hiccup yields packDiff: null, never a crashed run.
  • Fallback path: if the primary source fails twice for a single pair, that one row is retried through a secondary source (source: "fallback") so it is still delivered.
  • Plan-limit guard: on FREE accounts the run stops before the first paid request when the forecast exceeds your plan limit — nothing is charged.

  • This actor reports publicly visible Google local pack and AI Overview results for the keywords and locations you provide. It stores no personal data beyond public business listing fields (name, domain, rating, review count).
  • Output is provided as-is for competitive-intelligence and SEO-monitoring purposes. Search results change constantly; figures are point-in-time observations, not guarantees.
  • Google is a trademark of Google LLC. This actor is not affiliated with, endorsed by, or sponsored by Google.
  • You are responsible for using the output in line with the terms of the platforms you operate on and applicable law in your jurisdiction.

Pair this with the rest of the doesaiknow suite for a full local + listing view. See the publisher page for companion actors (rank tracking, listing audits, keyword research).