---
title: "Google Local Services Ads leads"
method: GET
path: "/v1/ads/local-services/leads"
tags: ["Ad Insights"]
---

# Google Local Services Ads leads

`GET /v1/ads/local-services/leads`

Leads generated by Local Services Ads (phone calls, messages, bookings),
read live from Google's `local_services_lead` resource, newest first.
No persistence: Google is the source of truth and lead/credit statuses
keep changing server-side. Google never returns healthcare-category
leads, and `WIPED_OUT` leads arrive with contact erased (`contact` is
null). Draws on the shared Google Ads operations budget.

## Query parameters

- `accountId` string, required
- `customerId` string
- `fromDate` string, date
- `toDate` string, date
- `leadType` 'PHONE_CALL' | 'MESSAGE' | 'BOOKING'
- `leadStatus` string
- `chargedOnly` boolean
- `pageToken` string

## Response `200`

Local Services leads

- object
  - `customerId` string
  - `data` object[]
    - `id` string, nullable — Lead id; pass to /v1/ads/local-services/leads/{leadId}/conversations.
    - `leadType` string, nullable — PHONE_CALL / MESSAGE / BOOKING.
    - `categoryId` string, nullable
    - `serviceId` string, nullable
    - `contact` object, nullable — Null for WIPED_OUT leads (contact erased by Google).
      - `consumerName` string, nullable
      - `email` string, nullable
      - `phoneNumber` string, nullable
    - `status` string, nullable
    - `createdTime` string, nullable — Google datetime in the customer's timezone (YYYY-MM-DD HH:MM:SS).
    - `locale` string, nullable
    - `charged` boolean
    - `creditState` string, nullable
    - `creditStateLastUpdate` string, nullable
  - `paging` object
    - `nextPageToken` string, nullable — Null when the last page was returned.

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `404` — The account or requested resource was not found or is not accessible. An account ID may have been disconnected and removed. Read GET /v1/accounts for current account IDs.
- `409` — The account exists but is inactive or needs reconnection. Reconnect it, then read GET /v1/accounts for its current account ID before retrying. Code: ads_connection_required.
- `429` — Google Ads operations budget exhausted; retry later.
- `501` — Only available on Google Ads accounts

## Changes

- **2026-09-16** `3e6ddf2a99ea` — 3 info
  - added the optional property `details/budgetScope` to the response with the `400` status
  - added the optional property `details/budgetScope` to the response with the `404` status
  - added the optional property `details/budgetScope` to the response with the `409` status
- **2026-09-15** `0dba7d004d75` — 6 info
  - added the optional property `details/quotaExhausted` to the response with the `400` status
  - added the optional property `details/quotaExhausted` to the response with the `404` status
  - added the optional property `details/quotaExhausted` to the response with the `409` status
  - added the optional property `details/quotaScope` to the response with the `400` status
  - …2 more
- **2026-09-10** `e70ed06e7150` — 2 info
  - added the non-success response with the status `404`
  - added the non-success response with the status `409`
- **2026-08-13** `e0cd92070858` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/ads/local-services/leads/get.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/fdaf9a9fb1a7?raw)
