The Missing Primitive #
Dayparting is simple to describe: spend more when your buyers convert, less when they don't. Every ads platform conversation eventually arrives at it.
So you look for the scheduling feature in the Amazon Ads API and find that there isn't one.
In one line
There is no day-part or schedule object in the Amazon Ads API. You get the ability to read and write bids, budgets and state — right now. Dayparting is a worker of yours that runs every hour and makes those writes on a schedule you keep.
That reframing matters, because it changes the project from "call the scheduling endpoint" into "operate a system that mutates live campaigns unattended" — which is a different and considerably more dangerous thing.
The Shape That Works #
A 7×24 grid per target — seven days, twenty-four hours, one multiplier or state per cell. Store the intent; let an hourly job apply it.
Three properties make this survivable:
- The schedule is data. An operator edits a grid; nobody deploys to change a bid at 6pm.
- The worker is idempotent. Running it twice in an hour changes nothing the second time, because it diffs against live state before writing.
- Every write is logged with what changed, why, and which rule caused it. When someone asks why a campaign was paused at 2am, that log is the answer.
Apply it at more than one level if you can — campaign, keyword and target are all separately controllable, and the useful strategies usually live below campaign level.
Timezones Are the Actual Hard Part #
An hour is not an hour. Three clocks are in play, and confusing them produces a schedule that is quietly wrong by several hours:
| Clock | Why it matters |
|---|---|
| The marketplace's timezone | What "7pm" means to the buyer — the only one that matters commercially |
| The advertising profile's timezone | What Amazon's own reporting day boundary uses |
| Your server's timezone | What your cron actually fires on |
Store schedules against the marketplace clock, convert at execution time, and run your worker in UTC. Then handle daylight saving explicitly — twice a year one local hour occurs twice and another never occurs at all, and a worker that assumes 24 distinct hours will either double-apply or skip.
A multi-marketplace account has several of these at once. The same campaign structure across US and EU profiles needs its schedule evaluated per profile, not once globally. This is where a naive implementation silently drifts.
The Guardrails That Make It Safe #
You are running unattended writes against live spend. The rules that matter are less about dayparting and more about not causing damage:
- Dry run by default
Log the intended change without sending it. Watch it for a few days. Enabling live writes should be a deliberate act, not the default state of a new deployment.
- Bound every change
Floor and ceiling on bids, maximum percentage change per run. A rule that computes a nonsensical multiplier should hit a cap, not a campaign.
- Diff before writing
If the live value already matches the target, do nothing. This cuts API calls enormously and makes reruns free.
- Fail safe, not open
If the worker cannot read current state, it must not write. A missed hour is recoverable; a write based on stale state is not.
- Alert when a run is skipped
Silence must not be indistinguishable from success. A dayparting worker that quietly stopped is a campaign stuck at 3am bids all week.
Do You Have the Data to Justify It? #
Worth asking before building, because the answer is often no.
Dayparting decisions need hourly performance data. The standard reporting API is daily. Deriving an hourly pattern from daily totals is not possible — you are guessing.
Hourly data on Amazon means Marketing Stream, which pushes into your own AWS and has its own setup sharp edges. It also only accrues from the moment you enrol — there is no backfill — so if hourly dayparting is anywhere on your roadmap, enrol now even if you build the rest later. Every week you wait is a week of hourly history you can never recover.
Without it, you can still daypart on judgement and known business patterns, which is genuinely better than nothing. Just be honest that it is a hypothesis rather than a measurement.
Related: Ads API rate limits matter here — an hourly worker across many accounts is exactly the burst pattern that drains a token bucket.
FAQ #
Does the Amazon Ads API support dayparting?
Not as a feature. There is no schedule or day-part object. You implement dayparting by running your own hourly job that updates bids, budgets or campaign state through the normal endpoints.
How do I schedule Amazon ad changes by hour?
Store a 7×24 schedule per campaign, keyword or target, run a worker every hour that computes what should be true now, diff that against live state, and write only the differences. Log every change.
Which timezone should dayparting schedules use?
Store them against the marketplace's local time, since that is what "7pm" means to a buyer, and convert at execution. Run the worker itself in UTC and handle daylight-saving transitions explicitly, because one local hour repeats and another disappears twice a year.
Do I need Amazon Marketing Stream for dayparting?
To justify a schedule with data, effectively yes — the standard reporting API is daily and hourly patterns cannot be derived from daily totals. Marketing Stream has no backfill, so enrol before you need the history.
How do I stop an hourly worker from causing damage?
Default to dry run, bound bid changes with floors, ceilings and a maximum change per run, skip writes when live state already matches, refuse to write if current state cannot be read, and alert when a scheduled run does not happen.
Related guides
Amazon Ads API
Amazon Ads API Rate Limits Explained (And How to Stop Hitting Them)
A 429 storm from the Amazon Ads API almost always means your retry logic is wrong, not that your limits are too low. Here's how the per-endpoint token buckets actually work, what the response headers tell you, and the request patterns that keep you comfortably under the limit.
Read guide →Amazon Ads API
AMS vs AMC: Which Amazon Ad Data Tool to Use, and When
Amazon Marketing Stream and Amazon Marketing Cloud both start with “Amazon Marketing” and both deal with ad data — so they get mixed up constantly. They actually solve opposite problems. One pushes you hourly data for real-time action; the other runs SQL over years of history for attribution. Here's the difference, side by side, and how to pick.
Read guide →Amazon Ads API
Amazon Marketing Stream Setup: Hourly Ad Data via Firehose in Python
Stop polling the Reports API. Amazon Marketing Stream pushes hourly Sponsored Products, Sponsored Brands, and Sponsored Display data directly into your AWS infrastructure — no cron jobs, no throttling. Here's the full setup: Firehose stream, IAM roles, the subscription API call, and what the data looks like when it lands.
Read guide →Don't want to build this yourself?
I set this up for sellers and agencies every week. Book a free 30-minute audit of your Amazon data & PPC setup — you'll leave with a plan either way, whether we work together or not.