Local SEO Analytics API
Pricing
Pay per usage
Local SEO Analytics API
Pull Google, Facebook and Bing performance for every business location, plus live listing coverage across 80 plus directories, duplicate listings and voice assistant presence.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Local Business Listings Submission API
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
Pull Google, Facebook and Bing performance data for every business location you manage, plus live listing coverage, duplicate suppression status and voice assistant presence.
This Actor wraps the analytics and listing endpoints of the Listings API. It answers the two questions a local SEO report has to answer: where are we listed, and what did those listings actually do.
What this Actor does
Performance
- Google performance for a location: views, searches, direction requests, calls, website clicks
- Facebook performance for a location
- Bing performance for a location
Listing coverage
- Live listings for a location, so you can see which of the 80 plus directories are publishing your data
- Duplicate listings for a location, or every duplicate across the account in one run
- Voice assistant listings, covering the assistants your data reaches
- Mark a listing as a duplicate, or clear that flag
Reference data
- Sites included in your plan
- Subcategories and supported countries and states
Run one operation per location and the dataset becomes a per location report you can pivot in a sheet or load into a warehouse.
Who this is for
- Agencies producing monthly local SEO reports across a client portfolio
- Multi location brands tracking map pack visibility store by store
- Anyone auditing citation coverage and cleaning up duplicate listings
- Teams feeding local performance into an internal dashboard instead of screenshotting a vendor UI
What you need
A Listings API account and an API key. Create one at listingsapi.com.
| Access level | Covers |
|---|---|
| Read | Every analytics, listing and reference operation |
| Write | markAsDuplicate, markAsNotDuplicate |
Publisher analytics need the matching profile connected and matched to the location. Google performance requires a connected Google account, Facebook performance a connected Facebook account. Use the Create Google Listing API Actor to link them and to check that nothing has dropped its connection.
Input
| Field | Type | Required | Description |
|---|---|---|---|
apiKey | string | Yes | Your Listings API key. Stored as a secret. |
operation | string | Yes | Which endpoint to call. See the operations table. |
pathParams | object | No | Values for placeholders in the path, for example { "locationId": "123" }. |
query | object | No | Query string values such as limit, after, startDate or endDate. |
body | object | No | JSON payload for the duplicate marking operations. |
paginate | boolean | No | Keep requesting pages while pageInfo.hasNextPage is true. Default false. |
maxItems | integer | No | Stop after this many dataset items. 0 means no limit. |
Operations
| Operation | Method and path | Returns |
|---|---|---|
allLocations | GET /locations | Your locations, used to look up location IDs |
searchLocations | GET /locations/search | Locations matching a search term |
locationsByIds | GET /locations-by-ids | A specific set of locations |
locationsByStoreCodes | GET /locations-by-store-codes | Locations matched on your own store codes |
googleAnalyticsOfLocation | GET /locations/{locationId}/google-analytics | Google performance for a location |
facebookAnalyticsOfLocation | GET /locations/{locationId}/facebook-analytics | Facebook performance for a location |
bingAnalyticsOfLocation | GET /locations/{locationId}/bing-analytics | Bing performance for a location |
premiumListingsOfLocation | GET /locations/{locationId}/listings/premium | Live listings and their status per site |
duplicateListingsOfLocation | GET /locations/{locationId}/listings/duplicates | Duplicates found for one location |
allDuplicateListings | GET /locations/listings/duplicates | Every duplicate across the account |
voiceAssistantsOfLocation | GET /locations/{locationId}/voice-assistants | Voice assistant listings for a location |
markAsDuplicate | POST /locations/listings/mark-as-duplicate | Flags a listing for suppression |
markAsNotDuplicate | POST /locations/listings/mark-as-not-duplicate | Clears the duplicate flag |
planSites | GET /plan-sites | Directories included in your plan |
subCategories | GET /sub-categories | Category IDs used when creating locations |
countries | GET /countries | Supported countries and states |
Field level detail is at docs.listingsapi.com/docs/analytics and docs.listingsapi.com/docs/listings.
Examples
Google performance for one location over a date range:
{"apiKey": "<your key>","operation": "googleAnalyticsOfLocation","pathParams": { "locationId": "123" },"query": { "startDate": "2026-08-01", "endDate": "2026-08-31" }}
Check where a location is live across the citation network:
{"apiKey": "<your key>","operation": "premiumListingsOfLocation","pathParams": { "locationId": "123" }}
Audit every duplicate in the account in one run:
{"apiKey": "<your key>","operation": "allDuplicateListings","query": { "limit": 50 },"paginate": true}
Suppress a duplicate you have confirmed:
{"apiKey": "<your key>","operation": "markAsDuplicate","body": {"input": {"locationId": "123","listingId": "yelp-4471"}}}
Confirm which directories your plan covers before you promise a client a number:
{"apiKey": "<your key>","operation": "planSites"}
Output
Each item becomes one dataset row. A Google performance row looks roughly like this:
{"locationId": "123","site": "GOOGLE","periodStart": "2026-08-01","periodEnd": "2026-08-31","searchViews": 4821,"mapViews": 3117,"directionRequests": 288,"phoneCalls": 141,"websiteClicks": 402}
A listing coverage row carries the site, the live URL, the publish status and the last sync time, which is what you need to compute a coverage percentage per location.
Exact fields follow the API response. Download the dataset as JSON, CSV, Excel or XML, or read it from the Apify API. The run also writes a SUMMARY record to the key value store.
Running it on a schedule
Set a monthly schedule on the first of the month with googleAnalyticsOfLocation and a fixed date range to build a rolling performance history in one dataset. Run allDuplicateListings weekly and send the output to a webhook so new duplicates get triaged instead of accumulating.
For a portfolio, run one task per location using the same Actor with different pathParams, or chain runs from your own script using the Apify API.
Rate limits and pagination
Requests go out one at a time. The Actor reads pageInfo.hasNextPage before fetching the next page, waits out a 429 using retry_after_seconds, and retries server errors with a backoff. Plan limits are 10 requests per minute on Launch and 50 on Growth. See rate limits.
Errors
A non success response stops the run and logs the status, the URL and the response body including the correlation_id. Codes are listed at docs.listingsapi.com/docs/error-codes.
If a publisher analytics call returns empty, the usual cause is that the profile is not connected rather than that traffic was zero. Run connectedAccounts in the Create Google Listing API Actor to confirm before you report a zero to a client.
Cost
You pay Apify for platform usage of the run. Analytics and listing data are billed by your Listings API plan, which starts at 99 dollars a month with a 14 day trial.
Related Actors
- Create Google Listing API for linking Google and Facebook profiles to your locations, which publisher analytics depend on
- Local Business Listings Submission API for creating and syncing locations
- Create Bulk GBP Listings API for creating Google listings across hundreds of locations in one run
- Local Business Reviews API for reading and replying to reviews
- Local Business Posts API for publishing to Google, Facebook, Instagram and X
Links
- Documentation: docs.listingsapi.com
- Analytics endpoints: docs.listingsapi.com/docs/analytics
- Listing endpoints: docs.listingsapi.com/docs/listings
- SDKs: docs.listingsapi.com/sdks
- MCP server: listingsapi.com/mcp
- Support: support@listingsapi.com