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": "Austin",
            "clientName": "owner@brightsmile-dental.com",
            "contentPreferredLanguage": "ENGLISH",
            "countryCode": "1",
            "countryIso": "US",
            "createErrors": [],
            "createdDate": "July 06, 2026",
            "customAttributes": [],
            "databaseId": 1800289,
            "defaultAgencyTag": "ownerbrightsmiledentalcom",
            "description": "This is a standalone duplex house. A comfortable, private residence located in the Bouldin Creek neighborhood of Austin.",
            "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": "30.2711286",
            "linkedinUrl": null,
            "locationPhotos": [],
            "longitude": "-97.7436995",
            "managedServiceSiteBuckets": [],
            "managedServiceSites": [],
            "moreHours": [],
            "name": "Jenny Home",
            "offeringsUrl": null,
            "ownerEmail": null,
            "ownerName": null,
            "package": "PREMIUM",
            "paymentMethods": [],
            "phone": "5125550142",
            "pinterestUrl": null,
            "placeActionLinks": [],
            "planId": 3797,
            "planName": "Launch",
            "postalCode": "78701",
            "primaryGbpSiteCategoryId": null,
            "primaryGbpSiteCategoryName": null,
            "publisherAttributes": [],
            "reservationUrl": null,
            "serviceArea": null,
            "serviceItems": [],
            "stateIso": "TX",
            "stateName": "Texas",
            "storeId": null,
            "street": "600 Congress Ave, Suite 200",
            "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 Listings API 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 Listings API 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"