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, used with `last`. Pass the `cursor` of the first edge of the page you are moving back from. `pageInfo` carries no `startCursor` field, so the edge cursor is the value to use.
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": "600 Congress Ave, Suite 200",
            "city": "Austin",
            "stateIso": "TX",
            "stateName": "Texas",
            "postalCode": "78701",
            "countryIso": "US",
            "countryCode": "1",
            "latitude": "30.2711286",
            "longitude": "-97.7436995",
            "phone": "5125550142",
            "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 residence located in the Bouldin Creek neighborhood of Austin, offering spacious duplex living with easy access to the surrounding South Congress area and downtown Austin.",
            "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 the cursor of the first edge of the page you are moving back from. 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 a cursor the API returned, either pageInfo.endCursor going forward or an edge's own cursor going backward (pageInfo has no startCursor). 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 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 for how to read, adopt, and manage them.

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