Google Local Pack Results API avatar

Google Local Pack Results API

Pricing

from $30.00 / 1,000 local pack serp snapshots

Go to Apify Store
Google Local Pack Results API

Google Local Pack Results API

Return the businesses shown in Google's local pack for each keyword and location snapshot. Results include position, rating, reviews, address, phone, website, Google IDs, verification URL, timestamp, and provider cost. DataForSEO credentials remain owner-managed environment secrets.

Pricing

from $30.00 / 1,000 local pack serp snapshots

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

6 days ago

Last modified

Share

Get the businesses shown in Google's Local Pack for a keyword and location. Each dataset row is one dated Google SERP snapshot and includes the returned local businesses, their pack position, rating, review count, address, phone, website, Google identifiers, a verification URL, and provider-cost provenance.

It is designed for local SEO agencies, multi-location brands, and automation builders that need a compact record of who Google showed in the Local Pack at a particular point and time.

Best fit

Use this Actor when the question is: “Which businesses did Google show in the Local Pack for this search here?” It accepts keyword lists and city, country, or coordinate-based locations, then returns one snapshot for every keyword/location combination.

  • Start with a precise coordinate and radius when neighborhood-level variation matters.
  • Use locationCode or locationName for country, city, or regional comparisons.
  • Schedule the same input to form a time series of comparable snapshots.
  • Read localPackFound before treating an empty localPack array as a competitor absence: Google displays Local Packs selectively by query and location.

For tracking one known business's position against a target name, domain, CID, or Place ID, use a dedicated local-rank workflow. This Actor instead returns the whole Local Pack block Google displayed.

What one record means

One dataset record represents one completed Google organic SERP request for one query at one input location. It is a bounded SERP observation focused on the visible Local Pack; broad Google Maps and Google Local Finder inventories are a separate collection workflow.

The common Google “3-pack” is a Local Pack. The provider can return a different number of businesses or omit the Local Pack block, so the record always includes both localPackFound and localPackSize.

Focused standalone workflow

This Actor is designed as a focused standalone workflow when a decision depends on the visible Google Local Pack for a keyword and location. Start with a precise query and location, then pass the returned business identifiers and source snapshots into your reporting, monitoring, or local SEO analysis process.

Quick start

Use a local-intent query and one precise location:

{
"queries": ["dentist near me"],
"locations": [
{
"label": "Downtown New York",
"locationCoordinate": "40.7128,-74.0060,500"
}
],
"languageCode": "en",
"device": "desktop",
"seDomain": "google.com",
"maxLocalPackResults": 3
}

locationCoordinate uses latitude,longitude,radius in metres. Its radius must be 199–199999 metres. Set exactly one location selector per object:

SelectorGood forExample
locationCoordinateA neighborhood or geo-grid point40.7128,-74.0060,500
locationNameA named city or regionNew York,New York,United States
locationCodeA known DataForSEO location2840

Duplicate queries and locations are collapsed before requests are made. The maximum is 500 unique query/location snapshots per run.

Output fields

FieldMeaning
queryThe exact Google search term evaluated.
locationLabelYour human-readable location label.
localPackFoundWhether Google returned a Local Pack block.
localPackSizeValid businesses parsed before the output cap.
localPackReturned businesses in Local Pack order.
localPack[].positionThe provider's position within the Local Pack.
localPack[].nameBusiness name as returned by Google.
localPack[].rating / reviewCountPublic rating signals when Google returned them.
localPack[].address, phone, websitePublic business information when returned.
localPack[].businessProfileUrl, bookingUrlGoogle profile and booking links when returned.
localPack[].distance, openStatus, serviceOptionsPublic local context parsed from the displayed Local Pack description.
localPack[].cid / placeIdGoogle identifiers when returned.
checkUrlProvider verification URL when available, otherwise a reconstructed Google search URL.
snapshotAtWhen this snapshot was processed.
providerCostUsdCost reported by the SERP provider for that request.

Example dataset item:

{
"runId": "abc123",
"snapshotAt": "ISO-8601 collection timestamp",
"query": "dentist near me",
"locationLabel": "Downtown New York",
"locationCoordinate": "40.7128,-74.0060,500",
"languageCode": "en",
"device": "desktop",
"seDomain": "google.com",
"localPackFound": true,
"localPackSize": 3,
"returnedLocalPackSize": 3,
"localPack": [
{
"position": 1,
"name": "Example Dental",
"category": "Dentist",
"address": "123 Example Street, New York, NY",
"phone": "+1 212 555 0100",
"website": "https://example-dental.invalid",
"domain": "example-dental.invalid",
"businessProfileUrl": "https://www.google.com/maps?cid=123456789",
"bookingUrl": null,
"cid": "123456789",
"placeId": "ChIJexample",
"rating": 4.8,
"reviewCount": 120,
"latitude": 40.7128,
"longitude": -74.006,
"isPaid": false,
"description": "0.2 mi · 123 Example Street, New York, NY · +1 212 555 0100",
"distance": "0.2 mi",
"openStatus": "Open · Closes 6 PM",
"serviceOptions": ["Onsite services"]
}
],
"providerNoResults": false,
"serpItemTypes": ["local_pack", "organic"],
"provider": "dataforseo",
"providerCostUsd": 0.01,
"checkUrl": "https://www.google.com/search?q=dentist+near+me&hl=en",
"warnings": []
}

Fields other than the documented required keys can be absent when Google or the provider does not return them. Preserve snapshotAt, the location selectors, and checkUrl when comparing datasets across time.

API call and dataset readback

Run the Actor through the Apify API, then read its default dataset:

curl "https://api.apify.com/v2/acts/khadinakbar~google-local-pack-api/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"queries": ["dentist near me"],
"locations": [{"label": "Downtown New York", "locationCoordinate": "40.7128,-74.0060,500"}],
"languageCode": "en",
"device": "desktop",
"maxLocalPackResults": 3
}'

The response includes a run ID. After it completes, export the records:

$curl "https://api.apify.com/v2/actor-runs/RUN_ID/dataset/items?token=$APIFY_TOKEN"

For automation, OUTPUT is a compact terminal record and RUN_SUMMARY includes provider attempts, persisted snapshot count, safe errors, provider cost, and billing diagnostics. Possible outcomes are COMPLETE, PARTIAL, VALID_EMPTY, INVALID_INPUT, UPSTREAM_FAILED, and CONFIG_ERROR.

Credentials and data provenance

The Actor uses DataForSEO's Google Organic Live Advanced endpoint. DataForSEO credentials are configured only as owner-managed DATAFORSEO_LOGIN and DATAFORSEO_PASSWORD environment secrets. They are never accepted through the input, stored in the dataset, written to terminal records, or placed in logs.

Every row reports provider: "dataforseo", providerCostUsd, and checkUrl so a consumer can retain the source and timing of the snapshot. Google SERPs are dynamic; a row states what the configured provider returned for the requested query, device, language, and location at snapshotAt.

Pricing and cost controls

This Actor uses Pay per event plus Apify platform usage. The billable unit is one persisted keyword/location Local Pack snapshot, including an explicit Local-Pack-absent snapshot when Google omits that block. Apify platform compute and any configured proxy usage are additional; see the Actor's live Pricing tab for current event pricing and platform-usage details.

Cost grows with the number of unique query/location pairs. Start with one query and one location to verify that the geography and language match your workflow, then expand in controlled batches. The Actor caps a run at 500 unique snapshots and stops requesting new snapshots if the configured Apify event-charge cap is reached.

AI Agent and MCP prompt card

For each keyword in my list, capture the Google Local Pack at these exact coordinate points. Return each business's pack position, name, category, rating, review count, address, phone, website, CID, Place ID, source URL, and collection time. Keep an explicit Local-Pack-absent snapshot when Google omits the block so I can distinguish the SERP result from a missing run.

This is a read-only data collection operation. An agent should supply local-intent queries plus one unambiguous location selector per point, then read the dataset and RUN_SUMMARY after processing completes.

Workflow example

A local SEO analyst wants to compare the visible dentist competitors across several neighborhoods. They provide the same query and coordinate points for each neighborhood, receive one comparable snapshot per point, and group localPack[].domain, rating, reviewCount, and position by snapshotAt. Repeating the same saved input later yields a time-stamped evidence trail that supports a location-aware visibility review.

Builder's note

I designed this Actor to return the Google organic SERP's local_pack block as its own product surface. That distinction preserves the SERP surface a local SEO workflow evaluates, while keeping each record small enough to compare by query, location, device, and time.

Responsible use

Use this Actor only for public or otherwise authorized search data, and comply with applicable law, Google terms, DataForSEO terms, and privacy obligations. Treat business contact fields as public business data and handle any personal information appropriately for your use case.