GET/api/v4/locations/search

Search locations

Returns a cursor-paginated list of locations matching a keyword, searchable by name, address, or store ID.

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

Parameters

Query

NameTypeRequiredDescriptionDefault
querystringoptionalSearch keyword matched against location name, street address, city, and store ID. Omit to page through every location.
filterstringoptionalJSON-encoded filter object to narrow results (for example by folder or approval status).
firstintegeroptionalNumber of records to fetch, starting from the most recent.50
afterstringoptionalCursor to fetch records after (forward pagination). Pass the previous page's `pageInfo.endCursor`.

Responses

200Cursor-paginated list of matching locations.
{
  "data": {
    "searchLocations": {
      "edges": [
        {
          "cursor": "TG9jYXRpb246MTgwMDI4OQ==",
          "node": {
            "accountId": 62670,
            "accountName": "owner@brightsmile-dental.com",
            "addOns": [],
            "additionalCategoryIds": [],
            "additionalCategoryNames": [],
            "additionalGbpSiteCategoryIds": [],
            "additionalGbpSiteCategoryNames": [],
            "additionalInfo": null,
            "additionalPhones": [],
            "aiAnalyticsEnabled": false,
            "approved": "APPROVED",
            "archivalScheduledAt": null,
            "archived": false,
            "archivedAt": null,
            "bizUrl": null,
            "bizUrlUtm": false,
            "bookingUrl": null,
            "businessHours": [],
            "cancellationScheduledAt": null,
            "categoryId": 15,
            "city": "Bengaluru",
            "clientName": "owner@brightsmile-dental.com",
            "contentPreferredLanguage": "ENGLISH",
            "countryCode": "91",
            "countryIso": "IN",
            "createErrors": [],
            "createdDate": "July 06, 2026",
            "customAttributes": [],
            "databaseId": 1800289,
            "defaultAgencyTag": "ownerbrightsmiledentalcom",
            "description": "This is a standalone duplex house. A comfortable, private villa located in the Banjara Layout neighbourhood of Bengaluru.",
            "discoveredPlaceActionLinks": [],
            "enabledSiteIds": [],
            "facebookUrl": null,
            "folderId": "d90630a7-7af0-450f-bdfe-6457eb438b1f",
            "folderName": "root",
            "franchise": false,
            "googleAdsPhone": null,
            "googleVerificationStatus": { "message": null, "status": "NOT_CONNECTED" },
            "googleplusUrl": null,
            "hideAddress": false,
            "id": "TG9jYXRpb246MTgwMDI4OQ==",
            "instagramUrl": null,
            "isRestaurant": true,
            "lastUpdatedDate": "July 06, 2026",
            "latitude": "13.0334524",
            "linkedinUrl": null,
            "locationPhotos": [],
            "longitude": "77.6669171",
            "managedServiceSiteBuckets": [],
            "managedServiceSites": [],
            "moreHours": [],
            "name": "Jenny Home",
            "offeringsUrl": null,
            "ownerEmail": null,
            "ownerName": null,
            "package": "PREMIUM",
            "paymentMethods": [],
            "phone": "8073326913",
            "pinterestUrl": null,
            "placeActionLinks": [],
            "planId": 3797,
            "planName": "Launch",
            "postalCode": "560043",
            "primaryGbpSiteCategoryId": null,
            "primaryGbpSiteCategoryName": null,
            "publisherAttributes": [],
            "reservationUrl": null,
            "serviceArea": null,
            "serviceItems": [],
            "stateIso": "KA",
            "stateName": "Karnataka",
            "storeId": null,
            "street": "19 east, 5th B cross road, Trinity Enclave Main Rd, Banjara Layout",
            "street1": null,
            "subCategoryId": 1432,
            "subCategoryName": "Restaurants",
            "tagline": null,
            "tags": ["all"],
            "temporarilyClosed": false,
            "tiktokUrl": null,
            "toplineMessage": null,
            "twitterUrl": null,
            "uid": "3c92283c-6145-4a43-8a62-0c15fd712021",
            "updatedAt": "2026-07-06T18:33:29.664Z",
            "videos": [],
            "voiceStatus": 3,
            "yearOfIncorporation": null,
            "youtubeUrl": null
          }
        }
      ],
      "pageInfo": {
        "endCursor": "TG9jYXRpb246MTgwMDI4OQ==",
        "hasNextPage": false,
        "hasPreviousPage": false,
        "total": 1
      }
    }
  }
}
401Unauthenticated — missing or invalid API key.
429Rate limit exceeded. Retry after the `Retry-After` header value.

Use this endpoint to find locations by a free-text keyword. The keyword is matched against the location name, street address, city, and store ID, so a single query like ?query=Jenny surfaces "Jenny Home" whether the user typed the brand, a street, or an internal store code.

Use case — type-ahead location picker. Backing a "search your locations" box in a dashboard, call GET /locations/search?query=<term>&first=10 on each keystroke (debounced) and render edges[].node.name with databaseId. Because the node carries the full address, category, and approved status, you can show a rich result row without a second lookup.

Use case — reconcile against your own system. To confirm a store exists in listingsAPI before pushing an update, search by your storeId value; an empty edges array means the location has not been created yet.

Pagination and gotchas.

  • Results are cursor-paginated. Pass the previous response's pageInfo.endCursor as after to fetch the next page, and stop when hasNextPage is false. Note the page-level count is pageInfo.total, not totalCount.
  • Omitting query returns your locations unfiltered (subject to first), which is a convenient way to page the whole account.
  • Search shares the account rate limit. On a 429, back off using the Retry-After header before retrying.

Each matching location returns placeActionLinks (the Google action links listingsAPI manages) and discoveredPlaceActionLinks (links found directly on the business's Google profile that aren't managed yet). See the Place Action Links guide.

curl -X GET 'https://listingsapi.com/api/v4/locations/search' \
  -H "Authorization: API $LISTINGSAPI_KEY"