Amazon Ads API 8 min read

Amazon Ads Dayparting: Schedule Bid Rules Only Raise Bids, So You Build the Rest

You want campaigns to bid harder at 7pm and go quiet at 3am. The Amazon Ads API's only native schedules are Sponsored Products schedule bid rules and schedule-based budget rules, and both can only raise bids or budgets. Going quiet at 3am, pausing, and reacting to each hour's numbers is something you implement, not something you configure. Here's the shape that works, and the guardrails that stop an hourly writer from doing real damage.

•
Updated Oct 2026
Amazon Ads Dayparting: Schedule Bid Rules Only Raise Bids, So You Build the Rest

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 you find one that only does half the job.

In one line

The Amazon Ads API can raise bids on a schedule, but it can't lower them. For bidding down in dead hours, pausing, or reacting to each hour's actual numbers, you get the ability to read and write bids, budgets and state — right now. That kind of dayparting is a worker of yours that runs every hour and makes those writes on a schedule you keep.

Correction, October 2026: an earlier version of this post said the Ads API has no schedule object at all. That was wrong. Amazon documents schedule bid rules for Sponsored Products: you create an optimization rule with POST /sp/rules/optimization (ruleSubCategory SCHEDULE, a DAILY or WEEKLY recurrence with timesOfDay), then attach it to a campaign. The limits are why the rest of this post still applies: the action is an INCREMENT by a percentage, so a rule can push bids up at 7pm but can't bring them down at 3am; Amazon says changes take effect within 24 hours; a campaign takes at most 20 schedule rules; and the schedule is fixed rather than driven by each hour's performance. Schedule-based budget rules work the same way for budgets: they raise a budget by a percentage for a date range, and only some campaigns get time-of-day windows.

That reframing matters, because it changes the project from "configure a schedule" into "operate a system that mutates live campaigns unattended" — which is a different and considerably more dangerous thing, and a fair moment to weigh building it yourself against buying Pacvue or Perpetua.

An alarm clock, representing hourly scheduling of advertising changes
Amazon's schedule rules only push bids up. For everything else, your worker is the clock.

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.

An hourly worker reads the 7 by 24 schedule grid, computes the target state, compares with current state and writes only the differences 7 × 24 grid stored intent hourly worker what should be true now? diff vs live skip if already correct write + log audited, reversible the schedule is data, not code — editable without a deploy

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:

ClockWhy it matters
The marketplace's timezoneWhat "7pm" means to the buyer — the only one that matters commercially
The advertising profile's timezoneWhat Amazon's own reporting day boundary uses
Your server's timezoneWhat 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:

  1. 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.

  2. 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.

  3. Diff before writing

    If the live value already matches the target, do nothing. This cuts API calls enormously and makes reruns free.

  4. 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.

  5. 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 — if you would rather not own that layer, I build these Ads API automations.

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 same feed behind bid rules that react to the hour's actual numbers. The v3 reporting API is daily, and Amazon's new reporting API v1 keeps hour-level data for only 14 days. 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. On V1 it only accrues from the moment you enrol — there is no backfill.

Update, October 2026: Amazon has deprecated Marketing Stream V1 — it stops delivering on 30 June 2027 — and replaced it with Stream V2, which delivers 70 days of history when you subscribe. Amazon's V2 FAQ adds that the history "may arrive at a coarser grain (for example, daily)" than the hourly data that follows, and nothing older than 70 days is delivered. So if hourly dayparting is anywhere on your roadmap, subscribe to V2 now even if you build the rest later: the backfill softens a late start, but it may not be hourly and it never reaches past 70 days.

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?

Partly. Sponsored Products has schedule bid rules (POST /sp/rules/optimization with the SCHEDULE sub-category), but they can only increase bids by a percentage at set times, Amazon says changes take up to 24 hours to apply, and a campaign takes at most 20 of them. Lowering bids in dead hours, pausing, or adjusting from each hour's performance still means 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. Hourly patterns cannot be derived from daily totals, and Amazon's new reporting API v1 keeps hour-level data for only 14 days. Marketing Stream V2 delivers 70 days of history when you subscribe, though Amazon says it can arrive at a coarser grain than hourly, so subscribe before you need the history. V1, which had no backfill, stops delivering on 30 June 2027.

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.

Running PPC across several accounts?

I built a dayparting control room that runs hourly across a PPC manager's client accounts: rules, dry runs, approvals and an audit log. Tell me what your tooling can't do and I'll quote the build at a fixed price.

Found this helpful? Share it: