---
title: "List submitted leads"
method: GET
path: "/v1/ads/leads"
tags: ["Lead Gen"]
---

# List submitted leads

`GET /v1/ads/leads`

Returns submitted Lead Gen leads for your team, newest-first, with keyset pagination on `cursor`. For Meta (default) leads are served from the persisted cache, ingested in real time from the `leadgen` webhook. When `accountId` is a LinkedIn ads account, leads are fetched live from LinkedIn's `leadFormResponses` (LinkedIn has no webhook and enforces 90-day retention, so nothing is persisted) and `adAccountId` is required. Reading LinkedIn responses needs the `r_marketing_leadgen_automation` permission; accounts connected before it was added must reconnect. Requires the Ads add-on.

## Query parameters

- `formId` string
- `accountId` string
- `adAccountId` string
- `limit` integer
- `since` integer
- `cursor` string

## Response `200`

Lead list.

- object
  - `status` string
  - `leads` object[]
    - `id` string — Zernio lead id.
    - `leadgenId` string — Meta lead id. On LinkedIn, the leadFormResponse id.
    - `formId` string
    - `formName` string, nullable
    - `accountId` string
    - `adId` string, nullable
    - `adsetId` string, nullable
    - `campaignId` string, nullable — On LinkedIn, this is the LinkedIn Campaign id, which corresponds to platformAdSetId on GET /v1/ads (LinkedIn's Campaign Group is Zernio's campaign).
    - `isOrganic` boolean
    - `createdTime` string, nullable — ISO 8601.
    - `fields` object — Question key → answer. On LinkedIn, the key is the lowercased predefinedField, else the question name, else the numeric questionId; multiple-choice values are option labels (unlike Meta, which returns the option key).
    - `fieldData` object[] — Raw Meta field_data.
  - `pagination` object
    - `hasMore` boolean
    - `cursor` string, nullable

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `403` — Ads add-on required.
- `502` — The platform returned a server error.
- `503` — An upstream service or database is temporarily unavailable. Retry after the indicated delay. A timed-out write may have completed upstream; check its outcome before resubmitting.

## 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 `502` status
  - added the optional property `details/budgetScope` to the response with the `503` 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 `502` status
  - added the optional property `details/quotaExhausted` to the response with the `503` status
  - added the optional property `details/quotaScope` to the response with the `400` status
  - …2 more
- **2026-09-10** `e70ed06e7150` — 2 warning, 2 info
  - for the `query` request parameter `since`, the max was set to `253402300799.00`
  - for the `query` request parameter `since`, the min was set to `1.00`
  - added the non-success response with the status `502`
  - added the non-success response with the status `503`

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/ads/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/eded32b62823?raw)
