Google Maps Business Profile Rank Checker avatar

Google Maps Business Profile Rank Checker

Pricing

from $60.00 / 1,000 local rank checks

Go to Apify Store
Google Maps Business Profile Rank Checker

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

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

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.

FieldMeaning
localPackRankTarget position in the returned local pack, or null
rankStatuslocal_pack when matched, otherwise not_found for this Maps-only check
targetMatchMethodplace_id, cid, domain, or normalized business-name match
localPackResultsCompact businesses returned in the local pack
competitorRanksRequested competitor names found in the snapshot
checkUrlProvider verification URL when available
checkedAtISO 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 me at 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 placeId or cid, then targetDomain, before relying on normalized business-name matching.
  • Use mobile when the reporting question is specifically mobile local visibility.
  • Treat not_found as “not found in this returned snapshot and depth,” then inspect checkUrl and 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.