Local Rank and Map Pack Tracker
Pricing
from $46.75 / 1,000 rank checks
Local Rank and Map Pack Tracker
Track where a business ranks on Google for each keyword and location: organic position, map pack position, and local finder position (top 20), searched from the location itself. Rating, reviews, top competitors, and change since the last run. No API key.
Pricing
from $46.75 / 1,000 rank checks
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Track where a business ranks on Google in each city it serves. Enter keywords, locations, and your domain or business name. For every keyword in every location you get one row with your organic position, your map pack position, and your position in the full local finder list (top 20), with the search placed at that location rather than at the server's own city. Each row also names who holds the top spots, and with a schedule name it shows how far you moved since the last run. Rows are flat, so they export to CSV or drop into a Clay table.
Features
- Searched from the location. Each place name is turned into coordinates (OpenStreetMap), and the Google search is placed at that point, so a check for Austin returns the Austin map pack even though the request leaves from another city.
- Three positions per row. Organic position (up to 50 deep), map pack position on page one (1 to 3), and local finder position (top 20) when you are not in the pack.
- Your listing details. For a matched map listing: name, rating, review count, category, phone, website, and address as Google shows them.
- Who outranks you. The top 10 organic domains and the top map listings for each keyword and location.
- Change tracking. Give a schedule name and every row carries the previous positions and the change, so a weekly schedule becomes a rank history.
- Matching you can check. Organic results match on your domain (subdomains included). Map listings match on the website on the listing, then on your business name, and the row says which.
- Clay ready. Every field also accepts text, as Clay sends it, and every row has the same columns.
How it reads Google
Google result pages are read through the Apify Google SERP proxy, with one request per page. No Google account, no API key, and no other developer's actor. Keyword search volume is not included: it needs a paid data source.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
keywords | array | Search terms, one per line, for example plumber | |
locations | array | Place names (Austin, Texas, United States) or coordinates (30.2672,-97.7431), one per line. Commas inside a place name are kept | |
target_domain | string | Your website, for example weplumbatx.com | |
business_name | string | The name on your Google Business Profile. Give it, the domain, or both | |
country | string | US | Google market and proxy exit, two letters |
language | string | en | Google interface language |
organic_depth | integer | 10 | 10, 20, 30, or 50 positions. Each 10 is one Google page, and paging stops once your domain is found |
include_local_finder | boolean | true | Open the full map list when you are not in the 3 result pack |
state_key | string | Schedule name. Keeps positions between runs for the change fields | |
max_charge_usd | string | Stop before a rank check would pass this amount |
Up to 500 keyword and location pairs per run.
Output
One row per keyword and location. Key fields:
| Field | Example |
|---|---|
keyword, location, location_resolved, latitude, longitude | plumber, Austin, Texas, United States, Austin, Travis County, Texas, United States, 30.26, -97.75 |
organic_position, organic_url, organic_title | 4, www.weplumbatx.com/austin, Plumber in Austin, TX |
organic_depth_checked, organic_results_found | 10, 10 |
local_pack_present, local_pack_position, local_finder_position | true, 1, 1 |
local_match_method, local_business_name, local_website | domain, We Plumb LLC, https://weplumbatx.com/ |
local_rating, local_review_count, local_category, local_phone, local_address | 4.9, 189, Plumber, (737) 297-5863 |
top_organic_domains, top_local_businesses | ["yelp.com", "homeadvisor.com"], ["We Plumb LLC", "Chase LLC"] |
previous_organic_position, previous_local_position, organic_change, local_change | 6, 2, 2, 1 (positive means you moved up) |
google_pages, serp_requests, row_status, error_reason, billable_events_json | 2, 2, ok, null, {"rank-check":1,"extra-page":1} |
An empty position means you were not found in the positions checked. The run summary (key-value store record RUN_SUMMARY) lists checks done, rows by status, Google requests, and charged events.
Pricing
Pay per event. You pay only these events; the Apify platform and proxy costs of your run, Google SERP proxy included, are paid by Mamba Labs.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
Rank check (rank-check), one keyword in one location | $0.055 | $0.05225 | $0.0495 | $0.04675 |
Extra Google page (extra-page): organic page 2 and up, or the local finder | $0.018 | $0.0171 | $0.0162 | $0.0153 |
Actor start (apify-actor-start), once per run | $0.002 | $0.002 | $0.002 | $0.002 |
A rank check includes Google page one, which carries the first 10 organic results and the map pack, and is charged whether or not you rank, because the check was made. An extra page is charged only when it is read: organic pages 2 and up stop once your domain is found, and the local finder is opened only when you are not in the map pack and Check the local finder is on. Each row's google_pages and billable_events_json show what it was charged. Blocked and error rows are free. On the Apify free plan the actor stops at 1.50 USD of evaluation a month (about 27 rank checks); any paid Apify plan removes that cap.
Example: 10 keywords in 5 cities is 50 rank checks, $2.75 at the free plan price, plus one extra page for each pair where you are not in the map pack. To pay only for page one, set Organic positions to check to 10 and turn off Check the local finder.
Usage examples
Apify Console or API
{ "keywords": ["plumber", "emergency plumber"], "locations": ["Austin, Texas, United States", "Round Rock, Texas, United States"], "target_domain": "weplumbatx.com", "business_name": "We Plumb LLC" }
{ "keywords": ["dentist"], "locations": ["51.5072,-0.1276"], "country": "GB", "target_domain": "example-dental.co.uk", "organic_depth": 30 }
Clay
Add an Apify column, send keywords, locations, and target_domain from your table, and read organic_position, local_pack_position, and local_finder_position.
Scheduled rank history
Save the input as an Apify task with a state_key, then schedule it weekly. Each row then carries the previous positions and the change.
MCP
The MCP server @mambalabsdev/mcp-local-rank-map-pack-tracker exposes this actor as a tool for Claude and other MCP clients.
Error handling
| Situation | What you get |
|---|---|
| Google refuses every attempt for a check | One free row with row_status blocked and the reason |
| A place name cannot be found on the map | The page is read with Google's own near location, the local finder is skipped, and error_reason says so |
| A later organic page fails | The row ships with the positions read so far and says how deep it got |
| The local finder page fails | The row ships with the map pack result and says so |
| Max charge reached | The run stops before the next charged row and says why in the status message |
Limitations
- Positions are one desktop search at one point at one moment. Google personalizes and moves results, so read a trend over several runs, not a single row.
- Organic URLs are the display URL Google prints (domain plus path segments), because the result links are redirects.
- A map listing with no website and a different name from
business_namecannot be matched. - The local finder is read to the top 20.
- Place names are looked up on OpenStreetMap Nominatim. For a precise point, give coordinates.
- Google's terms govern automated access to its result pages. You are responsible for how you use the rows.
More from Mamba Labs
Built by Mamba Labs.