v1Resources/Listings Published/getGet listing issues
Get listing issues
The issues shown on the Listings Overview, as data. Each issue is one fix (an edit, a sign-in or a step outside the app) and lists the publisher listings that fix would unblock. With locationId, returns that location's issues in full. Without it, returns a roll-up across your key's locations, optionally narrowed to one client and one tag, read in pages of locations: repeat the call with cursor set to page.nextCursor and the same other parameters until page.nextCursor is null. Read-only.
get
listings:read/api/v1/listings/issuesQuery parameters
locationIdstringoptional
Read one location's issues, by its id or public loc_ id. Omit for a roll-up across locations.
clientIdstringoptional
Limit the read to one client's locations.
tagstringoptional
Limit the roll-up to locations carrying this tag name. Ignored when locationId is set.
problemstringoptional
Comma-separated problem keys to include, for example phone,hours. An unknown key returns 400 with code invalid_problem.
familystringoptional
Comma-separated issue families to include: access, identity, hours, content, media, map or other. An unknown family returns 400 with code invalid_family.
qstringoptional
Search the roll-up by location name, case-insensitive, up to 100 characters.
cursorstringoptional
The page.nextCursor from the previous response, to continue a roll-up. Send it with the same other parameters: a cursor issued for a different scope or filter returns 400 with code cursor_scope_mismatch.
Response
dataobjectoptional
scopeobjectrequired
kindstring (location | rollup)optional
keystringoptional
clientIdstringoptional
tagstringoptional
locationIdstringoptional
requestedLocationIdstringoptional
filtersobjectoptional
problemsarray of stringoptional
familiesarray of stringoptional
qstringoptional
generatedAtstringrequired
completebooleanrequired
True only when this one response covered every location in scope. Then totals is exact; otherwise totals is null.
totalsobjectrequired
fixesintegerrequired
Distinct fixes. One shared-account reconnect counts once, however many locations it covers.
affectedListingsintegerrequired
locationsWithIssuesintegerrequired
pageCountsobjectrequired
fixesintegerrequired
Distinct fixes. One shared-account reconnect counts once, however many locations it covers.
affectedListingsintegerrequired
locationsWithIssuesintegerrequired
pageobjectrequired
scopeLocationsintegeroptional
scannedLocationsintegeroptional
previouslyScannedintegeroptional
nextCursorstringoptional
Pass this as cursor, with the same other parameters, to read the next page of locations. Null when there are no more pages.
lastPagebooleanoptional
noticestring (archived | not_a_listing_location)required
issuesarray of objectrequired
idstringrequired
fixKeystringrequired
groupKeystringrequired
locationIdstringrequired
locationPublicIdstringoptional
locationNamestringoptional
locationCitystringoptional
clientIdstringoptional
clientNamestringoptional
problemstringrequired
What is wrong, as a stable problem key, for example phone or reconnect_google.
familystring (access | identity | hours | content | media | map | other)required
tierinteger (1 | 2 | 3)required
statestring (open | update_in_flight | update_saved)required
reasonKeystringoptional
fixobjectrequired
The action that clears this issue. kind says which: edit (a field in the location editor), connect, account (renew the same account), verify (on Google), external (a step on another site) or explain (no in-app fix).
kindstring (edit | connect | account | verify | external | explain)required
sectionstring (identity | hours | description | social | media | businessDetails | openStatus | actionLinks | serviceArea | services | attributes | relationships | pin)optional
fieldstring (name | address | phone | website | primaryCategory | publisherCategory | hours | openingDate | openStatus | description | socialLinks | menuUrl | photos | serviceArea | services | attributes | relationships | coordinates)optional
tabstring (master | google | facebook | apple | bing)optional
providerstring (google | facebook | apple)optional
flowstring (renew)optional
accountobjectoptional
launchobjectoptional
targetobjectoptional
nextstring (contact_support | review_details | no_in_app_fix)optional
capabilityobjectrequired
allowedbooleanrequired
reasonstring (write_not_permitted | portal_not_permitted | field_not_portal_editable | clients_module_denied | agency_credential_requires_unrestricted_member | credential_serves_other_clients | account_unresolved | missing_api_scope)required
alternativesarray of objectoptional
fixobjectoptional
The action that clears this issue. kind says which: edit (a field in the location editor), connect, account (renew the same account), verify (on Google), external (a step on another site) or explain (no in-app fix).
capabilityobjectoptional
publishersarray of objectrequired
publisherIdstringoptional
publisherNamestringoptional
siteIdintegeroptional
affectedListingsintegerrequired
evidenceAtstringoptional
groupsarray of objectrequired
groupKeystringoptional
problemstringoptional
familystringoptional
tierintegeroptional
accountobjectoptional
keystringrequired
An opaque, stable key for the account's credential. Group by this, never by the label.
labelstringrequired
agencyManagedbooleanrequired
locationsarray of objectoptional
locationIdstringoptional
locationPublicIdstringoptional
locationNamestringoptional
locationCitystringoptional
clientIdstringoptional
clientNamestringoptional
issueIdstringoptional
problemstringoptional
statestring (open | update_in_flight | update_saved)optional
affectedListingsintegeroptional
fixesintegeroptional
affectedListingsintegeroptional
affectedLocationsintegeroptional
Errors
400The query is invalid. code says why: invalid_cursor, cursor_scope_mismatch, invalid_problem, invalid_family or search_too_long.
401Missing, invalid, expired, or revoked API key.
403The key lacks the required scope, or isn't authorized for this client/location.
404The resource wasn't found, or doesn't belong to your agency.
429Too many requests. Retry after the number of seconds in the Retry-After header.
get/api/v1/listings/issues
Your API key
locationId
clientId
tag
problem
family
q
cursor
{}Guides that use this resource
- What Is a Business Listings API?A business listings API manages a business's name, address, hours and more across many publishers at once, with sync status and duplicate detection built in.
- Business Listings API: Complete Developer GuideHow a business listings API works and how to create, update, sync and monitor locations across Google, Apple, Bing and directories with the Synup API.
- Google Business Profile API vs a Listings Management APIHow Google's Business Profile API compares with a listings management API on scope, access, sync status, duplicates and reviews, and when to use each.
- How to Add Local Marketing Features to Your SaaSAdd listings management, reviews, Google posts, profile analytics, rank tracking and AI visibility to a SaaS product with the Synup API, tenant by tenant.
- How to Manage Business Listings ProgrammaticallyKeep business listings accurate from your own system with the Synup API. Covers change detection, idempotent updates, hours, photos and sync reporting.
- What Is an AEO API?An AEO API measures how AI answer engines like ChatGPT, Gemini and Perplexity describe and recommend a business, and tracks that visibility over time.
- How to Update Business Information Across Google, Apple, Bing and DirectoriesPush one business-information change to Google, Apple, Bing and the directory network through a single API call, and verify it reached each publisher.
- How Listing Syndication WorksListing syndication takes one business record, translates it into each publisher's format, and pushes it out asynchronously, which is why sync status matters.
- How to Build an AI Agent for Local SEOBuild an AI agent that audits and fixes listings, tracks local rankings, checks AI visibility and drafts review replies with Synup's MCP server or REST tools.
- How to Manage Thousands of Business Locations via APIDesign a sync job for thousands of locations on the Synup API with cursor pagination, tags, rate-limit handling, an id map and rollup health checks.
- How to Find and Remove Duplicate Business ListingsDetect duplicate business listings across publishers, review them by confidence, and flag them for removal or dismiss them with the Synup API.
- How Duplicate Listing Suppression WorksDuplicate suppression detects listings that look like the same business, scores them by confidence, and requests removal from the publisher that controls them.
- How to Build a Multi-Location Marketing DashboardBuild a multi-location marketing dashboard from the API's rollup endpoints, one call per panel, covering listings, reviews, rank, AI visibility and duplicates.
- How to Connect and Manage Google Business Profiles via APIConnect a Google Business Profile to a location, match the account's listings, keep the profile in sync and handle reconnects with the Synup API.
- Building Publisher Integrations Directly vs Using SynupWhat it really costs to integrate Google, Apple, Bing and directories yourself, versus one API, and how to decide between them or combine both.
- Local SEO APIs: What Developers Actually NeedA practical checklist of what a local SEO API must cover, from listings and sync status to reviews, rank tracking and AI visibility, mapped to endpoints.
- How to Track Local Rankings with an APITrack local search rankings on a geo grid through an API, add keywords, read the grid and trend, and compare against competitors and citation coverage.
- How to Monitor Local SEO Across Multiple LocationsMonitor local SEO across hundreds of locations through rollup endpoints, with rank and AI visibility per location and the weakest surfaced first.