GET/api/v4/locations/{locationId}/listings/premium

Get premium listings for a location

Returns the sync status of every publisher directory in a location's plan.

Requires an API key. See Authentication for header format and key rotation.

Parameters

Path

NameTypeRequiredDescription
locationIdstringrequiredLocation to read. Accepts a base64-encoded Relay ID (e.g. `TG9jYXRpb246MTgwMDI4OQ==`) or a raw numeric location ID.

Query

NameTypeRequiredDescriptionDefault
listingTypestringrequiredWhich listing tier to return: `premium` for the plan's premium directory listings, or `additional` for additional/free listings.

Responses

200Array of listings with per-directory sync status.
{
  "data": {
    "listingsForLocation": [
      {
        "id": "TGlzdGluZzoxMDQ0Njg3MjM=",
        "databaseId": "104468723",
        "site": { "id": "U2l0ZTox", "databaseId": "1", "name": "Google Maps", "url": "maps.google.com", "syScore": "100" },
        "syncStatus": "REQUIRING_ACTION",
        "displayStatus": "Connect your account to sync the listing",
        "actionRequired": true,
        "listingUrl": null,
        "connectedAccountId": null,
        "lastUpdate": "2026-07-06T18:33:28Z",
        "indexStatus": false,
        "syncIssue": null,
        "verified": false
      },
      {
        "id": "TGlzdGluZzoxMDQ0Njg3MTQ=",
        "databaseId": "104468714",
        "site": { "id": "U2l0ZToxODA=", "databaseId": "180", "name": "Bing", "url": "www.bing.com", "syScore": "97" },
        "syncStatus": "IN_PROGRESS",
        "displayStatus": "Information submitted to partner; awaiting response",
        "actionRequired": false,
        "listingUrl": null,
        "connectedAccountId": null,
        "lastUpdate": "2026-07-06T18:33:35Z",
        "indexStatus": false,
        "syncIssue": null,
        "verified": false
      },
      {
        "id": "TGlzdGluZzoxMDQ0Njg3Mjc=",
        "databaseId": "104468727",
        "site": { "id": "U2l0ZTozODc=", "databaseId": "387", "name": "BeLocalFocussed", "url": "belocalfocussed.com", "syScore": "80" },
        "syncStatus": "SYNCED",
        "displayStatus": "Synced",
        "actionRequired": false,
        "listingUrl": "https://belocalfocussed.com/jenny-home-26x0ffkd0e",
        "connectedAccountId": null,
        "lastUpdate": "2026-07-06T18:33:30Z",
        "indexStatus": false,
        "syncIssue": null,
        "verified": false
      },
      {
        "id": "TGlzdGluZzoxMDQ0Njg3MDk=",
        "databaseId": "104468709",
        "site": { "id": "U2l0ZTozMDE=", "databaseId": "301", "name": "Local Mint", "url": "localmint.com", "syScore": "69" },
        "syncStatus": "FAILED",
        "displayStatus": "Partner experiencing issues; awaiting response",
        "actionRequired": false,
        "listingUrl": null,
        "connectedAccountId": null,
        "lastUpdate": "2026-07-06T18:34:03Z",
        "indexStatus": false,
        "syncIssue": "Publisher requires website URL",
        "verified": false
      }
    ]
  }
}
401Unauthenticated — missing or invalid API key.
429Rate limit exceeded. Retry after the `Retry-After` header value.

Returns the sync status of every publisher directory included in a location's plan. Each record pairs a site (directory metadata) with a syncStatus and a human-readable displayStatus. The example above is trimmed from the live response for Jenny Home (which returns 30+ directories) to show one record in each of the common states.

The listingType query parameter is required: pass listingType=premium for the plan's premium directories (shown here) or listingType=additional for additional/free listings.

Use case: a listings health dashboard

Fetch the premium listings for a location and group by syncStatus to show coverage at a glance — how many directories are live, in flight, or blocked. Surface listingUrl for SYNCED rows so users can click through to the live listing, and read displayStatus/syncIssue for anything that isn't synced (e.g. Publisher requires website URL).

Use case: surface the "connect your account" blockers

Filter for actionRequired: true to build the owner's to-do list. In the live data, Google Maps, Facebook, and Waze come back REQUIRING_ACTION with displayStatus: "Connect your account to sync the listing" — these need an OAuth connection before they can sync. Route the owner to the corresponding connect flow, then re-poll this endpoint to watch the status advance.

syncStatus values: AVAILABLE (ready to sync, not started), IN_PROGRESS (submitted to partner, awaiting response), PENDING_APPROVAL (awaiting partner approval), SYNCED / COMPLETED (live; listingUrl populated), REQUIRING_ACTION (owner action needed — see displayStatus), FAILED (sync failed; see syncIssue), CANNOT_SUBMIT (submission not possible).

This is a per-location list subject to the account rate limit — on 429, retry after the Retry-After header rather than re-polling immediately.

curl -X GET 'https://listingsapi.com/api/v4/locations/<locationId>/listings/premium?listingType=<listingType>' \
  -H "Authorization: API $LISTINGSAPI_KEY"