Google Maps Business Profile Rank Checker
Pricing
from $60.00 / 1,000 local rank checks
Google Maps Business Profile Rank Checker
Check Google Maps local-pack rank by keyword, device, and geographic point. Returns one auditable rank row per keyword/location snapshot with match evidence, competitors, verification URL, timestamp, and provider cost.
Pricing
from $60.00 / 1,000 local rank checks
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
Check where a business appears in Google Maps local results for a specific keyword, language, device, and geographic point. The Actor defaults to DataForSEO Google Maps Standard priority for lower provider cost, with Live available when realtime latency matters. It writes one auditable dataset record per keyword/location check with localPackRank, rankStatus, competitor positions, a verification URL, and checkedAt.
Fit for this Actor
Use this Actor for local SEO agencies, multi-location operators, franchise reporting, and coordinate-based Google Business Profile visibility checks. Provide the business name plus a domain, Google place ID, or CID when available; those stable signals make target matching clearer than a name alone.
For business discovery and contact enrichment, continue with the public Google Maps Scraper — Emails, Phones & B2B Leads. This Actor is the focused rank-evidence step after the business and search intent are known.
Each run is a dated Maps snapshot. Schedule runs and retain the datasets when you need a time series. Interpret not_found as “the target was outside the provider's returned Maps results for this snapshot”; use the location, device, depth, and checkUrl fields to keep the conclusion scoped.
Scope and interpretation
The Actor reports the returned Maps provider snapshot for the requested keyword, location, language, device, and depth. It does not claim a separate organic SERP position. Use the recorded checkUrl, provider, and checkedAt values when comparing observations across scheduled executions.
How one workflow works
An agency starts with a client's profile name, website domain, three service keywords, and a small coordinate grid around the service area. Each keyword/location pair becomes one row. The agency compares localPackRank by keyword + locationLabel, reviews localPackResults to see which businesses appeared nearby, and uses targetMatchMethod plus checkUrl when explaining a visibility change to the client.
Input
Set DATAFORSEO_LOGIN and DATAFORSEO_PASSWORD as Actor environment variables using the credentials from DataForSEO API access. Credentials stay in the environment rather than in visible Actor input.
providerMode defaults to standard, which submits a queued DataForSEO Maps task at normal priority. Use live for a realtime request. The Actor records the selected mode and provider cost, and fails closed before writing a billable row if a provider response exceeds $0.006 per check. At the current $0.06 event price and Apify's 80% share, that is the guardrail for at least a 70% contribution margin before fixed maintenance costs.
Each location sets exactly one of locationCode, locationName, or locationCoordinate. Coordinates provide a direct path for a local geo-grid. The matrix is bounded at 20 keywords × 25 locations (500 checks).
{"businessName": "Acme Dental","targetDomain": "acmedental.com","keywords": ["dentist near me", "emergency dentist"],"locations": [{ "label": "Downtown", "locationCoordinate": "40.7128,-74.0060,500" },{ "label": "Northwest", "locationCoordinate": "40.7306,-73.9866,500" }],"languageCode": "en","device": "desktop","depth": 100,"providerMode": "standard","competitorNames": ["Rival Dental"]}
Use placeId or cid when known. Otherwise, targetDomain is a stable matching signal alongside business name. device accepts desktop or mobile; depth accepts 20–100 Maps results.
Output
One dataset record represents one completed keyword/location snapshot.
| Field | Meaning |
|---|---|
localPackRank | Target position in the returned local pack, or null |
rankStatus | local_pack when matched, otherwise not_found for this Maps-only check |
targetMatchMethod | place_id, cid, domain, or normalized business-name match |
localPackResults | Compact businesses returned in the local pack |
competitorRanks | Requested competitor names found in the snapshot |
checkUrl | Provider verification URL when available |
checkedAt | ISO timestamp for the snapshot |
Illustrative schema-valid item:
{"runId": "example-run-id","checkedAt": "ISO_8601_TIMESTAMP","keyword": "dentist near me","locationLabel": "Downtown","locationCode": null,"locationName": null,"locationCoordinate": "40.7128,-74.0060,500","languageCode": "en","device": "desktop","depth": 100,"businessName": "Acme Dental","targetDomain": "acmedental.com","placeId": null,"cid": null,"localPackRank": 2,"organicRank": null,"localPackFound": true,"organicFound": false,"rankStatus": "local_pack","targetMatchMethod": "domain","localPackSize": 3,"localPackResults": [{ "name": "Acme Dental", "domain": "acmedental.com", "rank": 2 }],"competitorRanks": [{ "name": "Rival Dental", "rank": 1, "rankType": "local_pack" }],"provider": "dataforseo","providerMode": "standard","providerCostUsd": 0.01,"checkUrl": "https://www.google.com/search?q=dentist+near+me&hl=en","serpItemTypes": ["maps_search"],"warnings": []}
The provider snapshot is the provenance boundary: Google results vary by location, device, language, personalization, and time. OUTPUT, RUN_SUMMARY, and LAST_RUN_SUMMARY are written for every terminal outcome. COMPLETE means every requested check persisted; PARTIAL preserves useful rows when some checks fail; VALID_EMPTY represents a functioning provider response with no persisted rows; INVALID_INPUT, CONFIG_ERROR, and UPSTREAM_FAILED contain actionable diagnostics.
Pricing
The Actor uses Pay per event + usage with Apify platform usage passed through. One local-rank-check event represents one persisted keyword/location snapshot; the Actor prints the maximum event-charge cap before work begins. The default Standard provider mode targets about $0.0006 per Maps task, while Live targets about $0.002; both are below the $0.006 guardrail at the current $0.06 event price. The DataForSEO provider cost is reported in each row and in RUN_SUMMARY and is billed to the supplied DataForSEO account. The live Pricing tab is the source of truth for current event prices and platform usage.
API and dataset readback
curl "https://api.apify.com/v2/acts/khadinakbar~local-rank-tracker/runs?token=$APIFY_TOKEN" \-H 'content-type: application/json' \-d '{"businessName":"Acme Dental","targetDomain":"acmedental.com","keywords":["dentist near me"],"locations":[{"label":"Downtown","locationCoordinate":"40.7128,-74.0060,500"}]}'
Read the completed execution's default dataset from the API result or https://api.apify.com/v2/datasets/{DATASET_ID}/items. Read OUTPUT and RUN_SUMMARY from the execution's default key-value store. For large matrices, page the dataset and join records by keyword + locationLabel; each record is already bounded to a compact local-pack preview.
MCP / agent prompt
Check Acme Dental for
dentist near meat the supplied coordinate. Return the Google Maps local-pack rank, rank status, match method, top local competitors, check URL, and timestamp. Keep the exact location and device in the explanation, and report partial or empty outcomes clearly.
For lowest cost, leave providerMode as standard; request live only when the workflow needs a realtime provider response.
MCP clients can use this read-only, no-side-effect snapshot tool when they have a business name, one keyword, and one location; a domain, place ID, or CID improves matching. The result is one row per check, with provider provenance, terminal outcome records, bounded output, and dataset readback through get-actor-output or the Apify dataset API. Cost is the per-check event plus Apify platform usage; provider usage is separate, and a matrix can be paged by dataset item ranges. Inspect the terminal outcome before summarizing rows.
Results guidance
- Keep the same coordinate grid and keyword spelling across scheduled runs so comparisons remain meaningful.
- Prefer
placeIdorcid, thentargetDomain, before relying on normalized business-name matching. - Use
mobilewhen the reporting question is specifically mobile local visibility. - Treat
not_foundas “not found in this returned snapshot and depth,” then inspectcheckUrland location settings before drawing a conclusion. - Keep batches bounded so provider spend and dataset readback remain predictable.
Builder's note
I built the implementation with local-pack parsing and rank matching separate from the provider request layer. I found that this makes the dataset useful even when DataForSEO changes whether local-pack businesses arrive as direct items or nested items, while targetMatchMethod tells an operator how much confidence to place in each match.
Boundary and responsible use
Use public search-result evidence and credentials you are authorized to operate. Follow DataForSEO and Google terms, applicable law, and privacy obligations. Present the output as a dated provider snapshot, preserve the independent Google affiliation boundary, and support profile recommendations with the recorded evidence.