Local Pack Rank Checker - Google Maps by City or ZIP avatar

Local Pack Rank Checker - Google Maps by City or ZIP

Pricing

from $3.00 / 1,000 location checks

Go to Apify Store
Local Pack Rank Checker - Google Maps by City or ZIP

Local Pack Rank Checker - Google Maps by City or ZIP

Local rank checker for Google Maps: where a business ranks for each keyword in each city, ZIP or postal code you list, its rank (top 20 or 40), the map pack (3-pack) and who holds #1 in every place, with a summary and the competitors that beat it. Local SEO data as CSV, JSON or API. No login.

Pricing

from $3.00 / 1,000 location checks

Rating

0.0

(0)

Developer

Steady Scrape

Steady Scrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Local Pack Rank Checker — Google Maps rankings by city, ZIP or postal code

Check where a business ranks on Google Maps for each keyword in every city, town, ZIP or postal code you list — the way a customer searching from each of those places sees it. For each keyword in each place you get the business's rank, whether it is in the local 3-pack, who holds #1 there and the whole 3-pack with ratings. For each keyword you get a summary across all the places: where it is found, where it is in the pack, its average rank, its share of local voice and the competitors that beat it most often.

A pay-per-check local rank checker: no subscription, no login, no browser, no Google API key, no geocoding key — a city or a ZIP is placed by Google Maps itself.

What it is for

  • Service-area businesses (plumbers, roofers, HVAC, cleaners, movers): one run tells you in which of the fifteen towns you serve you show up in the map pack, and who takes the customers where you do not.
  • Local SEO agencies: a city-by-city or ZIP-by-ZIP map pack report per client and keyword, ready for a spreadsheet.
  • Multi-location brands and franchises: one keyword, every market, one table.
  • Competitor tracking: add up to nine competitors as extra businesses; one search ranks all of them, each with its own row and summary.
  • Before / after: run the same list before and after a Google Business Profile change, a review push or a new page.

Need a grid around one location instead (a 7×7 heatmap of a neighbourhood)? Use our Google Maps Rank Tracker (Geo-Grid).

How it works

  1. You give the business (its Google Maps link, a maps.app.goo.gl share link, its place id or its CID), one or more keywords, and the locations: city names (Austin, TX), ZIP or postal codes (78704, LS1 4AP, M5V 2T6) or coordinates (30.2672, -97.7431).
  2. The Actor looks the business up on Google Maps, and places each location where Google Maps' first result for it lies (coordinates are used as given).
  3. In every location it runs each keyword the way Google Maps does for someone looking at the map there (zoom 13 by default: part of a city), and finds the business by its place id among the results — never by its name, so a branch or a namesake is never mistaken for it.
  4. It writes one row per business × keyword × location, one summary per business × keyword, and a free row for each input it could not place.

Ranks 1–20 by default. Google Maps lists twenty places a page. Turn on Look down to rank 40 to read a second page in the locations where the business is not in the first twenty.

Input example

{
"businesses": ["https://www.google.com/maps/place/Swish+Dental+Downtown/data=!4m2!3m1!1s0x8644b5b434046875:0x644e6eb422388b7a"],
"keywords": ["dentist", "cosmetic dentist"],
"locations": ["Austin, TX", "78704", "Round Rock, TX", "30.2672, -97.7431"],
"checkTop40": false,
"zoom": 13,
"language": "en",
"country": "us"
}

Output

Every row has a rowType: check (one keyword in one location for one business), summary (one keyword over all the locations), business or location (an input that could not be used, free).

A check

{
"rowType": "check",
"status": "ok",
"businessName": "Swish Dental Downtown",
"placeId": "ChIJdWgENLS1RIYReos4IrRuTmQ",
"cid": "7227836171923524474",
"keyword": "dentist",
"location": "Austin, TX",
"locationName": "Austin",
"locationAddress": "Austin, TX",
"locationCategory": null,
"lat": 30.267153, "lng": -97.7430608,
"rank": 1,
"inLocalPack": true,
"inTop20": true,
"searchedDepth": 20,
"resultsSeen": 20,
"leaderName": "Swish Dental Downtown",
"localPack": [
{ "position": 1, "name": "Swish Dental Downtown", "placeId": "ChIJdWgENLS1RIYReos4IrRuTmQ", "cid": "7227836171923524474", "rating": 4.5, "reviewCount": 992, "category": "Dentist" },
{ "position": 2, "name": "Breeze Dental", "placeId": "ChIJrTahjN-0RIYRchMKUA6urbg", "cid": "13307483850445296498", "rating": 4.8, "reviewCount": 1002, "category": "Dentist" },
{ "position": 3, "name": "Toothbar", "placeId": "ChIJO0xN0RG1RIYRIDFDZYJkYjA", "cid": "3486459572745613600", "rating": 4.9, "reviewCount": 735, "category": "Dentist" }
],
"mapsUrl": "https://www.google.com/maps/search/dentist/@30.267153,-97.743061,13z"
}
fieldmeaning
status, reasonok, or blocked with why nothing was measured
business, businessName, placeId, cidthe business as you gave it, its name on Google Maps and its ids
keywordthe keyword searched
searchedDepth, zoom, scrapedAthow deep it looked (20 or 40), the map zoom, and when
locationthe location as you wrote it
locationName, locationAddress, lat, lngwhere Google Maps placed it, and where the search was made
locationCategorynull for a city, an area or coordinates; Postal code for a ZIP; a category (such as Museum) when a name led to a single place — write the state or country to be precise
rankthe business's position among Google Maps' places there; null when it is not within searchedDepth — never a made-up number
inLocalPack, inTop20rank 1–3, rank 1–20
leaderNamewho is #1 in that location
localPackthe top three there, with place id, CID, rating, review count and category
resultsSeenhow many places the search listed (fewer than 20 where Google Maps lists fewer)
mapsUrlthe same search on Google Maps, to look at it yourself

On a blocked check nothing was measured, so rank, inLocalPack and inTop20 are all null and it is not charged.

A summary (free)

fieldmeaning
business, businessName, businessAddress, placeId, cid, keywordwhich business and keyword it sums up
plannedLocations, blockedLocationslocations placed on the map, and those where Google refused or did not answer (free)
reasonwhat was left out, if anything: locations past your spending limit or blocked
checkedLocations, foundLocationslocations searched, and those where the business appears
localPackLocations, firstPlaceLocationslocations where it is in the 3-pack, and where it is #1
averageRankaverage rank over the locations where it appears
averageRankWithMissesaverage rank counting a location where it does not appear as one past the depth searched (21 or 41)
shareOfLocalVoice% of locations where the business is in the 3-pack
bestLocation, localPackIn, notFoundInits best location and rank, the locations where it is in the pack, and the ones where it is invisible
competitorsup to 10 places, ranked by how often they are #1 and in the 3-pack across your locations, with their average rank

Pricing

Pay per event, no start fee:

eventprice
location-check — one business's rank for one keyword in one location (with the 3-pack and the leader)US$0.003
extra-depth-check — ranks 21–40 for that check, only when you ask for it and only where the business is not in the first twentyUS$0.002

One business, 3 keywords and 15 towns is 45 checks = US$0.135. Summaries, unresolved businesses and locations, and blocked checks are free. The spending limit of your run is respected before any search is sent: the Actor plans only the checks your limit pays for (counting the second page where you asked for it) and says in the summary which locations it left out.

Stops when Google asks for verification

The Actor reads the same answers Google Maps gives its own web page, at a moderate pace. If Google ever asks for verification — its "unusual traffic" page, a CAPTCHA, a JavaScript check, or any answer that is not Google Maps' normal data — the run stops sending requests and every check left is a free blocked row that says so. It never solves, bypasses or replays a challenge, and it does not hide where it searches from: the location travels in the map view, as it does when you move the map yourself. Plain overloads (HTTP 429 or 5xx without a challenge) are retried through Apify's datacenter proxy; checks that still get no answer are free.

Limits

  • Up to 10 businesses, 20 keywords and 100 locations per run.
  • A location name is placed where Google Maps' first result for it lies: Springfield alone lands on one Springfield's landmark, Springfield, IL on the city. locationName and locationCategory show what it resolved to.
  • Ranks are those of Google Maps' place list for the search in each location (the "Places" list a customer scrolls). Paid ads are not counted.
  • Results depend on the zoom and on Google's personalisation; this Actor sees them as a signed-out visitor.

It reads publicly visible search results, at a pace a person browsing the map could produce, without logging in and without collecting personal data: the places are businesses as they present themselves on Google Maps. Use the data in line with Google's terms and the laws that apply to you. This Actor is not affiliated with, endorsed by or sponsored by Google.