GET/api/v4/locations

List all locations

Returns a cursor-paginated list of locations in your account.

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

Parameters

Query

NameTypeRequiredDescriptionDefault
firstintegeroptionalNumber of records to fetch from the start of the connection (forward pagination). Combine with `after`.50
lastintegeroptionalNumber of records to fetch from the end of the connection (backward pagination). Combine with `before`.
afterstringoptionalCursor to fetch records after. Pass `pageInfo.endCursor` from the previous page.
beforestringoptionalCursor to fetch records before. Pass `pageInfo.startCursor` to page backwards.
filterstringoptionalJSON-encoded filter object to narrow the result set (e.g. by tag, folder, or approval status).

Responses

200Cursor-paginated connection of locations. Each edge exposes a `cursor` and a `node` (the full location).
{
  "data": {
    "allLocations": {
      "edges": [
        {
          "cursor": "TG9jYXRpb246MTgwMDI4OQ==",
          "node": {
            "id": "TG9jYXRpb246MTgwMDI4OQ==",
            "databaseId": 1800289,
            "accountId": 62670,
            "accountName": "owner@brightsmile-dental.com",
            "name": "Jenny Home",
            "approved": "APPROVED",
            "archived": false,
            "archivalScheduledAt": null,
            "archivedAt": null,
            "street": "19 east, 5th B cross road, Trinity Enclave Main Rd, Banjara Layout",
            "city": "Bengaluru",
            "stateIso": "KA",
            "stateName": "Karnataka",
            "postalCode": "560043",
            "countryIso": "IN",
            "countryCode": "91",
            "latitude": "13.0334524",
            "longitude": "77.6669171",
            "phone": "8073326913",
            "additionalPhones": [],
            "bizUrl": null,
            "hideAddress": false,
            "storeId": null,
            "categoryId": 15,
            "subCategoryId": 1432,
            "subCategoryName": "Restaurants",
            "additionalCategoryIds": [],
            "additionalCategoryNames": [],
            "description": "This is a standalone duplex house. A comfortable, private villa located in the Banjara Layout neighbourhood of Bengaluru, offering spacious duplex living with easy access to the surrounding Trinity Enclave area and central Bengaluru.",
            "businessHours": [],
            "package": "PREMIUM",
            "planId": 3797,
            "planName": "Launch",
            "folderId": "d90630a7-7af0-450f-bdfe-6457eb438b1f",
            "folderName": "root",
            "tags": ["all"],
            "temporarilyClosed": false,
            "ownerEmail": null,
            "ownerName": null,
            "googleVerificationStatus": { "status": "NOT_CONNECTED", "message": null },
            "voiceStatus": 3,
            "uid": "3c92283c-6145-4a43-8a62-0c15fd712021",
            "createdDate": "July 06, 2026",
            "lastUpdatedDate": "July 06, 2026",
            "updatedAt": "2026-07-06T18:33:29.664Z",
            "placeActionLinks": [
              {
                "placeActionType": "FOOD_ORDERING",
                "uri": "https://order.example.com",
                "isPreferred": true,
                "name": "locations/1944.../placeActionLinks/54ada85bc246058a",
                "submissionStatus": "success",
                "submissionMessage": "Already up to date on Google.",
                "lastSubmittedAt": "2026-07-08T12:14:36Z"
              }
            ],
            "discoveredPlaceActionLinks": [
              {
                "placeActionType": "APPOINTMENT",
                "uri": "https://book.example.com",
                "isPreferred": false,
                "name": "locations/1944.../placeActionLinks/abc123",
                "providerType": "MERCHANT",
                "isEditable": true
              }
            ]
          }
        }
      ],
      "pageInfo": {
        "hasNextPage": false,
        "hasPreviousPage": false,
        "endCursor": "TG9jYXRpb246MTgwMDI4OQ==",
        "total": 1
      }
    }
  }
}
401Unauthenticated — missing or invalid API key.
429Rate limit exceeded. Retry after the `Retry-After` header value.

Pages through every location in your account. Results are ordered by creation date (newest first). Each edge carries a cursor (an opaque base64 token — for a location it decodes to Location:<databaseId>) and a node holding the full location record.

Use case — sync every location into your own system. Start with ?first=50, read pageInfo.hasNextPage, and if true request the next page with ?first=50&after=<pageInfo.endCursor>. Repeat until hasNextPage is false. To resume a backfill from the other end, use last + before with pageInfo.startCursor. The node's base64 id is the identifier every other endpoint expects — feed it to get locations by IDs, voice assistants, or update location.

Use case — a filtered slice. Pass a JSON-encoded object in filter to scope the connection server-side (for example by folder, tag, or approval status) instead of pulling every page and filtering client-side. This keeps large accounts within rate limits.

Pagination + rate-limit gotcha: cursors are opaque — never build one by hand; always echo back the endCursor/startCursor the API returned. Use either first/after (forward) or last/before (backward), not both directions at once. Tight paginate loops are the most common source of 429 responses; honor the Retry-After header and avoid requesting more than one page in flight at a time.

Each 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 for how to read, adopt, and manage them.

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