v1Resources/Duplicate Listings/getGet the duplicate-listings rollup
Get the duplicate-listings rollup
Returns an aggregated duplicate-listings summary and a paginated queue across every location of a client, or the whole agency when clientId is omitted. A key scoped to specific clients must always pass a clientId — there is no safe agency-wide default for it.
get
listings:read/api/v1/listings/duplicates/rollupQuery parameters
clientIdstringoptional
Restrict the rollup to one client. Required when your key is scoped to specific clients.
filterstring (potential | flagged | deleted | failed)optional
Restrict the queue to one status: potential, flagged, deleted, or failed.
bandstring (high | med | low)optional
Restrict the queue to one confidence band: high, med, or low.
publisherSiteIdintegeroptional
Restrict the queue to one publisher, by its numeric site id (see publisherSites in the response).
locationIdstringoptional
Restrict the queue to one location.
tagsstringoptional
Comma-separated list of internal location tags. Only duplicates on locations carrying at least one of these tags are included.
searchstringoptional
Free-text search across the queue's business name, address, and phone.
sortstring (confidence | detected | lastSynced)optional
Sort order for the queue: confidence (highest match score first), detected (most recently detected first), or lastSynced (most recently seen first). Defaults to confidence.
pageintegeroptional
Page number for the queue, starting at 1. Defaults to 1.
perPageintegeroptional
Rows per page for the queue, 1–100. Defaults to 25.
Response
dataobjectoptional
summaryobjectoptional
Aggregated duplicate-listings summary across the requested scope.
potentialTotalnumberoptional
Total number of potential (not yet resolved) duplicates in scope.
locationsAffectednumberoptional
Number of distinct locations with at least one potential duplicate.
bandsobjectoptional
Potential-duplicate counts broken out by confidence band.
highnumberoptional
Count of potential duplicates with a high-confidence match score.
mednumberoptional
Count of potential duplicates with a medium-confidence match score.
lownumberoptional
Count of potential duplicates with a low or unscored match score.
topPublishersarray of objectoptional
Up to 5 publishers with the most potential duplicates, worst offenders first.
publisherIdstringoptional
Identifier of the directory/publisher (its site URL).
publisherNamestringoptional
Display name of the publisher.
countnumberoptional
Number of potential duplicates on this publisher.
publisherSitesarray of objectoptional
Every publisher with a visible duplicate in this scope — the full option list, unlike topPublishers which is capped at 5.
siteIdnumberoptional
Numeric site id for this publisher, usable as the rollup's or resolve's publisherSiteId filter.
publisherIdstringoptional
Identifier of the directory/publisher (its site URL).
publisherNamestringoptional
Display name of the publisher.
queueobjectoptional
The paginated, filterable list of individual duplicate rows across the scope's locations.
rowsarray of objectoptional
The duplicate rows on the current page.
idstringoptional
Unique identifier for this duplicate listing row.
locationIdstringoptional
ID of the location this duplicate belongs to.
locationNamestringoptional
Name of the location this duplicate belongs to.
citystringoptional
City of the location this duplicate belongs to, or null.
locationStreetstringoptional
Street address of the location this duplicate belongs to.
locationStatestringoptional
State or region of the location this duplicate belongs to.
locationPostalCodestringoptional
Postal code of the location this duplicate belongs to.
publisherIdstringoptional
Identifier of the directory/publisher (its site URL).
publisherNamestringoptional
Display name of the publisher.
businessNamestringoptional
Business name as it appears on the duplicate listing.
businessNameMatchesbooleanoptional
Whether the duplicate's business name matches this location's own name.
addressstringoptional
Street, city, and postal code of the duplicate listing, joined into one string.
addressMatchesbooleanoptional
Whether the duplicate's address matches this location's own address.
phonestringoptional
Phone number as it appears on the duplicate listing.
phoneMatchesbooleanoptional
Whether the duplicate's phone number matches this location's own phone number.
matchScorenumberoptional
Model confidence, 0–1, that this is the same business as the real listing, or null if unscored.
bandstring (high | med | low)optional
Confidence band for this row's match score: high, med, or low.
statusstring (potential | flagged | deleted | failed)optional
One of: potential, flagged, deleted, failed.
duplicateUrlstringoptional
Live URL of the duplicate listing, or null.
originalUrlstringoptional
Live URL of this location's own real listing on this publisher, or null.
detectedAtstringoptional
When this duplicate was first detected, as an ISO 8601 timestamp.
lastSyncedAtstringoptional
When this duplicate was last seen during a scan, as an ISO 8601 timestamp.
yourNamestringoptional
The owning location's own business name, for comparison.
yourAddressstringoptional
The owning location's own address, for comparison.
yourPhonestringoptional
The owning location's own phone number, for comparison.
tagsarray of stringoptional
The owning location's internal tags.
totalnumberoptional
Total number of rows matching the current filter, across all pages.
pagenumberoptional
Current page number.
perPagenumberoptional
Rows per page.
Errors
401Missing, invalid, expired, or revoked API key.
403The key lacks the required scope, or isn't authorized for this client/location.
429Too many requests. Retry after the number of seconds in the Retry-After header.
get/api/v1/listings/duplicates/rollup
Your API key
clientId
filter
band
publisherSiteId
locationId
tags
search
sort
page
perPage
{
"data": {
"summary": {
"potentialTotal": 14,
"locationsAffected": 6,
"bands": {
"high": 4,
"med": 7,
"low": 3
},
"topPublishers": [
{
"publisherId": "yelp",
"publisherName": "Yelp",
"count": 6
}
],
"publisherSites": [
{
"id": "yelp",
"name": "Yelp"
}
]
},
"queue": {
"rows": [
{
"id": "dup_1",
"locationId": "loc_456",
"locationName": "Acme Dental — Downtown",
"publisherId": "yelp",
"publisherName": "Yelp",
"name": "Acme Dental Downtown",
"matchScore": 0.92,
"status": "potential"
}
],
"total": 14,
"page": 1,
"perPage": 25
}
}
}Guides that use this endpoint
- 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 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 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.
- Detect Duplicate Business Listings via APIRead the duplicate queue across a client with the Synup API, sort by confidence, and know why the match score beats the individual match flags.
- 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.
- Suppress a Duplicate Listing via APIFlag a duplicate listing for removal with one Synup API call, by explicit ids or by filter, and what the flagged, deleted and failed states mean.