---
title: "Read a campaign's ad schedule (dayparting)"
method: GET
path: "/v1/ads/campaigns/{campaignId}/ad-schedule"
tags: ["Ad Campaigns"]
---

# Read a campaign's ad schedule (dayparting)

`GET /v1/ads/campaigns/{campaignId}/ad-schedule`

The windows a Google campaign serves in, with the bid modifier on each, plus the
criterion ids Google minted for them.

An EMPTY `schedule` is meaningful and is not a failed lookup: Google has no
"all day" criterion, so a campaign with no ad schedule serves around the clock.
`servesAroundTheClock` states that explicitly.

Set `includePerformance=true` to also get delivery split by day of week and by hour,
which is the evidence for deciding what the schedule should be. It is one extra
Google call segmented by both dimensions at once, so the two views always agree.

Google Ads only. The response carries `cachedAt` and `stale`, set when a
quota-exhausted call falls back to the last-good copy instead of a live read.

## Path parameters

- `campaignId` string, required

## Query parameters

- `platform` 'google'
- `includePerformance` boolean
- `windowDays` integer
- `fromDate` string, date
- `toDate` string, date

## Response `200`

The campaign's ad schedule

- object
  - `campaignId` string
  - `schedule` AdScheduleWindow[]
    - `criterionId` string — Google campaign criterion id. Changes whenever the window is rewritten, because Google cannot edit a schedule in place.
    - `resourceName` string
    - `dayOfWeek` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY'
    - `startHour` integer
    - `startMinute` 0 | 15 | 30 | 45
    - `endHour` integer — 24 means midnight at the end of the day.
    - `endMinute` 0 | 15 | 30 | 45
    - `bidModifier` number, nullable — Bid adjustment for this window, 0.1-10.0. Null when the window runs at the campaign bid.
  - `servesAroundTheClock` boolean — True when the campaign carries no ad schedule at all, so it can serve at any time.
  - `cachedAt` string, date-time, nullable
  - `stale` boolean — True when a quota-exhausted read served the last-good copy.
  - `performance` object — Only present when includePerformance=true.
    - `windowDays` integer, nullable — The trailing window used, or null when an explicit fromDate/toDate range was given.
    - `byDayOfWeek` object[] — One entry per day that delivered, Monday first.
      - `dayOfWeek` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY'
      - `impressions` integer
      - `clicks` integer
      - `cost` number — Account currency, not USD-normalized.
      - `conversions` number
    - `byHour` object[] — One entry per hour that delivered, 0-23 in the account time zone.
      - `hour` integer
      - `impressions` integer
      - `clicks` integer
      - `cost` number — Account currency, not USD-normalized.
      - `conversions` number

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `403` — Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
- `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.
- `501` — Not a Google Ads campaign: ad schedules are a Google criterion.

## Changes

- **2026-09-16** `3e6ddf2a99ea` — 2 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
- **2026-09-15** `0dba7d004d75` — 4 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/quotaScope` to the response with the `400` status
  - added the optional property `details/quotaScope` to the response with the `404` status
- **2026-09-14** `a23eb241746a` — 1 info
  - endpoint added

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