---
title: "Retrieve Campaign Stats"
method: GET
path: "/v1/campaigns/{id}/stats"
tags: ["Campaigns", "v1"]
---

# Retrieve Campaign Stats

`GET /v1/campaigns/{id}/stats`

Retrieve statistics for a specific campaign over a defined time period. Use frequency, start_period, and end_period to control how the campaign performance data is grouped and returned.

:::info
Requires the `campaigns:read` OAuth2 scope.
:::

## Path parameters

- `id` string, required

## Query parameters

- `account_id` string, required
- `frequency` 'day' | 'week' | 'month', required
- `start_period` string, date, required
- `end_period` string, date, required
- `page[num]` integer
- `page[size]` integer

## Response `200`

Success

- object
  - `data` CampaignStatsV1[], required
    - `type` 'campaign_stats', required — The type of the object.
    - `id` string, required — Opaque, stable identifier for the stats bucket. Treat it as an opaque string; it is a Base64-encoded token derived from the campaign id and the bucket's date range.
    - `attributes` object, required
      - `date` string, date, required — Start date of the stats bucket. For `frequency=week` this is the first day of the week, for `frequency=month` it is the first day of the month.
      - `impressions` integer, required — Ad impressions delivered within the bucket.
      - `visits` integer, required — Website visits attributed to the campaign within the bucket.
      - `reached_count` integer, required — Distinct companies reached within the bucket.
      - `influenced_count` integer, required — Distinct companies influenced within the bucket.
      - `ecpm` number, float, required — Effective cost per mille (per 1000 impressions) within the bucket.
      - `total_cost` number, float, required — Total spend within the bucket.
      - `ecpv` number, float, required — Effective cost per attributed visit within the bucket.
      - `vtr` number, float, required — Visit-through rate (`visits / impressions`) within the bucket, expressed as a decimal ratio. Multiply by 100 to convert to a percentage: `0.23` means 23%.
      - `currency` string, required — ISO 4217 currency code in which monetary values are reported.
  - `meta` object, required
    - `pagination` object, required
      - `page_num` integer, required
      - `page_count` integer, required
      - `total_count` integer, required
    - `request_id` string, required — A unique identifier assigned to each API request for end-to-end traceability.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized. The request was rejected because the credentials are missing, invalid, expired, or have been revoked. The client must re-authenticate before retrying. Clients can differentiate via the `code` value of the first item in `errors`.
- `403` — Forbidden. The credentials are valid but the caller is not authorized to perform the request — typically because the user lacks the required permission, the OAuth scope is insufficient, the subscription plan does not include the required entitlement, the `account_id` does not belong to the authenticated user, or the target list is read-only and its members cannot be modified. Clients can differentiate via the `code` value of the first item in `errors`.
- `404` — Not found
- `422` — Unprocessable entity
- `429` — Too many requests. Either the per-second rate limit or the monthly quota configured for the API key / OAuth application has been exceeded. Clients can differentiate via the `code` value of the first item in `errors`.
- `500` — Internal server error
- `504` — Server timeout

---

[API](https://skmtc.net/leadfeeder/apis/leadfeeder-public-api.md) · [All operations](https://skmtc.net/leadfeeder/apis/leadfeeder-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/leadfeeder/leadfeeder-public-api/revisions/9e2e63ba2a4e/schema)
