Skip to content
<- Guides
AMC · Advanced

Find Your Optimal DSP Frequency Cap in AMC

The agent buckets impressions and conversions by frequency through the Amazon Ads MCP, computes cumulative cost and return the way Amazon's Optimal Frequency Analysis prescribes, finds the bucket where Percent Change crosses zero, and hands you the cap to set in DSP, grounded by Amazon Agent Atlas.

Find your optimal Amazon DSP frequency cap in AMC: bucket impressions and conversions, then cap where cumulative cost outruns cumulative return.

Kuudo
Reviewed by Kuudo Engineering
The cap is not the best-converting bucket; it is the last bucket where cumulative return still outruns cumulative cost.
TL;DR

The highest-purchase-rate bucket is the wrong cap: purchase rate rises monotonically with frequency (0.48% at one impression to 5.10% at four), so it always says never cap. The optimum lives on the cost side. Bucket impressions and conversions from amazon_attributed_events_by_traffic_time, compute cumulative cost % and cumulative return %, and set the cap at the last bucket where their difference (Percent Change) is still above zero. In the AMC playbook's worked example that lands at frequency 4; pushing to 9 dropped cumulative ROAS from $1.17 to $0.95.

Your optimal Amazon demand-side platform (DSP) frequency cap is not the bucket with the highest purchase rate. That rate climbs forever (0.48% at one impression, 1.10% at two, 3.86% at three, 5.10% at four), so it always says never cap. The cap is the frequency bucket where cumulative return % stops outrunning cumulative cost %. The Amazon Marketing Cloud (AMC) Optimal Frequency Analysis method finds it, the agent runs it on your amazon_attributed_events_by_traffic_time conversions through the Amazon Ads MCP, and hands you a single number to set in DSP, grounded by Amazon Agent Atlas.

That sequence came out of one Slack question: "What's our optimal DSP frequency cap, and at what impression count are we paying for ad fatigue instead of conversions?" It is easy to ask and easy to answer wrong. I trusted the best-converting bucket until the cost column flipped it. So I handed it to our agent with one instruction: don't read the cap off the rate column, run the cumulative cost-and-return method and show me where it crosses.

A plain ChatGPT or Claude chat hits the same three walls on this job. It has no access to your data, so it can't read your DSP impression logs or your attributed conversions, and has no per-user frequency distribution to bucket. It has no way to take action, so it can't run the AMC query and can't push a cap to your DSP line item or campaign; the most it does is hand you a number to type in by hand. And it runs on generic knowledge, not Amazon's, so it doesn't know the cumulative cost-and-return method or that AMC's aggregation thresholds quietly suppress your sparse high-frequency tail. The platform pieces get past each wall: the Amazon Ads MCP is your impression-and-conversion data plus the query runner, Amazon Agent Atlas is the Optimal Frequency Analysis rule book, Skills are the recurring re-check, and the Amazon Agent Data layer unifies it all into one grounded surface.

Optimal frequency analysis starts by bucketing every user by impression count, not by reading one average

The raw shape every later step reads from is a per-bucket table, not a single average frequency. The Amazon Ads MCP runs the bucketing query and the agent grades the columns against the rules Atlas retrieves. Frequencies group into buckets frequency_01 through frequency_25+, where 25+ means exposed 25 or more times. The output schema is the AMC convention verbatim: frequency_bucket, users_in_bucket, impressions_in_bucket, purchases, and purchase rate. Conversions attach through amazon_attributed_events_by_traffic_time, the corpus-backed source for attributed purchases and product sales. This step is the "Measuring Optimal Impression Frequency for Amazon DSP Campaigns" playbook joined to the bucketing schema, with the reach distribution from "Calculating Reach and Impression Frequency in AMC."

The data pull below is an illustrative scaffold, not a query retrieved from Atlas. The corpus guarantees the output schema and the method, not these exact table and column names, so it carries the skip marker and ships unverified by design (the canonical runnable query is the linked Amazon instructional query).

WITH impressions AS (
  SELECT user_id,
         SUM(impressions) AS impressions,
         SUM(total_cost)  AS cost
  FROM dsp_impressions_by_user_segments
  GROUP BY 1
),
conversions AS (
  SELECT user_id,
         SUM(purchases)           AS purchases,
         SUM(total_product_sales) AS product_sales
  FROM amazon_attributed_events_by_traffic_time
  GROUP BY 1
),
by_user AS (
  SELECT i.user_id,
         i.impressions,
         i.cost,
         LEAST(i.impressions, 25)     AS frequency,
         COALESCE(c.purchases, 0)     AS purchases,
         COALESCE(c.product_sales, 0) AS product_sales
  FROM impressions i
  LEFT JOIN conversions c USING (user_id)
)
SELECT CONCAT('frequency_',
              LPAD(CAST(frequency AS VARCHAR), 2, '0'),
              IF(frequency = 25, '+', '')) AS frequency_bucket,
       COUNT(user_id)     AS users_in_bucket,
       SUM(impressions)   AS impressions_in_bucket,
       SUM(cost)          AS cost,
       SUM(purchases)     AS purchases,
       SUM(product_sales) AS product_sales
FROM by_user
GROUP BY 1
ORDER BY 1

The highest purchase-rate bucket is the wrong cap, because it always tells you to never cap

Purchase rate rises monotonically with frequency: 0.48% at one impression, 1.10% at two, 3.86% at three, 5.10% at four across the first four buckets. Cap at the highest-rate bucket and you would cap at the top, which is the same as never capping at all. Atlas surfaces the "Measuring Optimal Impression Frequency for Amazon DSP Campaigns" result table that shows the climb, and the playbook's own warning that optimal frequency on Amazon may not be optimal across all advertising channels. The agent flags the trap unprompted rather than chasing the best-looking number.

The cap is the last bucket where Percent Change is still above zero

Set the cap at the last frequency bucket where Percent Change (cumulative return % minus cumulative cost %, differenced bucket-over-bucket) is still above zero. Past that bucket, each added impression costs more than it returns. This is the "Optimal Frequency Analysis in Amazon Marketing Cloud" method, and it is the analysis report the agent produces. Per bucket it computes cumulative cost, cumulative return, cumulative cost %, cumulative return %, Percent Difference (cumulative return % minus cumulative cost %), and Percent Change (this bucket's Percent Difference minus the prior bucket's). The cap is the last bucket where Percent Change is above zero. You can gloss it as the inflection point where the curve of added value goes flat, but the mechanical rule is the zero-crossing, not a fitted curve.

The post-processing table is the artifact. Here is the playbook's worked example, with the cap read off where Percent Change first goes negative:

frequency_bucketconversionscumul. conversionscostcumul. costcumul. return %cumul. cost %Pct DifferencePct Change
19,2039,203$7,801$7,80119%9%9.90%n/a
26,53215,735$7,933$15,73432%18%14.18%4.28%
35,02420,759$7,492$23,22643%27%15.87%1.69%
44,15724,916$7,060$30,28651%35%16.28%0.41% (last >0)
53,56928,485$6,621$36,90758%42%15.99%-0.29% (crosses)

Bucket 5's -0.29% is the first negative, so the cap is frequency 4. The ROAS (return on ad spend) sanity check confirms it: at this cap cumulative ROAS is about $1.17, and a looser cap of 9 dropped cumulative ROAS to $0.95, where overall spend exceeded sales.

Your high-frequency tail is too thin to trust

Roughly 90% of users are exposed three times or fewer, so the high-frequency buckets thin out fast and fall below AMC's aggregation thresholds. Read the cap off where the data is dense, not off a noisy tail. This is where the "Calculating Reach and Impression Frequency in AMC" distribution and the prerequisites from "Optimal Frequency Analysis in Amazon Marketing Cloud" land. The prerequisites are an AMC instance, at least 7 days of backfilled data, and 4 or more active campaigns, plus the AMC concept of data aggregation thresholds. Atlas carries both, and the agent surfaces them unprompted along with the caveat that optimal frequency is not one size fits all: it depends on the goal (awareness versus conversion), campaign length, audience size, and whether the campaign is a new launch or steady state.

What happens next

The artifact is a decision: one cap number. You set it in Amazon DSP at the line-item or campaign level, the lever the playbook names as the actionable output. Then schedule the analysis as a recurring Skill so the cap re-checks itself as spend shifts and campaigns evolve, rather than going stale after one run. Amazon's point-and-click Optimal Frequency solution is a fine quick read, but the AMC SQL path wins on campaign-level control and custom KPIs (key performance indicators). The whole thing rides the Amazon Agent Data layer / Agent Flow that unifies the Amazon Ads MCP and the Amazon Selling Partner MCP under one grounded surface, so the conversions you join here come from the same place the rest of your Amazon work reads from.

A frequency cap is one number, but it only means anything when it sits on the cost side of the math instead of the rate side. Set it there and you stop paying for impressions past the point where added cost outruns added return.

Next in the series: where that capped DSP impression actually sits in the full conversion path, mapped end to end in the path-to-conversion Sankey.

Private beta

Find your optimal frequency cap on your own DSP data

Bring us the DSP frequency workflow you want your agent to run. We'll map the Amazon Ads MCP, reusable Skills, Atlas grounding, and private-beta setup with you.

Run this workflow in beta

What you need to run this

tables
amazon_attributed_events_by_traffic_time, dsp_impressions_by_user_segments
subscriptions
AMC instance with Amazon DSP data and attributed conversions enabled
Lookback window
At least 7 days of backfilled data; 4 or more active campaigns
API compatibility
AMC SQL
Schema version
AMC schema as indexed 2026-06
Last verified
"2026-06-13T00:00:00.000Z"

What success and failure look like

resultinterpretation
Percent Change goes negative at a low bucket (frequency 4-5)Healthy. The bucket before the crossing is your cap; impressions past it cost more than they return.
Percent Change never goes negative across all bucketsWindow or campaign set is too small, or the cost column is not loading. Widen the date range and confirm cost before trusting it.
High-frequency buckets are empty or missing rowsExpected. About 90% of users sit at three impressions or fewer and AMC suppresses sub-threshold buckets. Read the cap off the dense low-frequency buckets.
Related reading

Keep exploring this topic

Use these companion guides to understand the inputs, follow-on analysis, and adjacent workflows behind this playbook.

Start here
Next step
Also useful

FAQ

What's the optimal DSP frequency cap and how do I find it?

Don't read it off the highest-converting bucket. Purchase rate keeps rising with frequency (0.48% at one impression to 5.10% at four), which would tell you to never cap. Bucket impressions and conversions, compute cumulative cost % and cumulative return %, and set the cap at the last bucket where their difference (Percent Change) is still above zero.

Why does my highest-frequency bucket have the best conversion rate but it's still the wrong cap?

Conversion rate rises monotonically with frequency, so the top bucket always looks best. That is a trap that means never cap. The optimum is on the cost side: past a certain frequency each added impression costs more than it returns, even though the rate is still climbing.

What is the Percent Change column in AMC optimal frequency analysis?

Percent Difference is cumulative return % minus cumulative cost % at each bucket. Percent Change is that difference minus the prior bucket's. The recommended cap is the last bucket where Percent Change is above zero. In Amazon's worked example it crosses negative at bucket 5, so the cap is 4.

Why are my high-frequency buckets empty or missing in AMC?

About 90% of users are exposed three times or fewer, so high-frequency buckets thin out fast, and AMC's aggregation thresholds suppress buckets with too few users. Read the cap off the dense low-frequency buckets, not the sparse tail, and confirm you have at least 7 days of backfilled data and 4 active campaigns.

Which AMC table has the conversions for frequency analysis?

amazon_attributed_events_by_traffic_time carries the attributed purchases and product sales you join to your impression buckets. The impression side comes from the DSP impressions or impressions-by-segment tables.

Where do I actually set the frequency cap once I have the number?

In Amazon DSP, at the line-item or campaign level. The AMC analysis produces the number; you apply it as the cap. Amazon also offers a point-and-click Optimal Frequency solution, but the AMC SQL path gives you campaign-level control and custom KPIs.

Is the optimal frequency the same for every campaign?

No. It depends on the goal (brand awareness versus conversion), campaign length, audience size, and whether it's a new launch or steady state. Re-run the analysis per campaign rather than reusing one cap everywhere.

Sources