# Sponsored Products Search Term Report Grain

Canonical page: https://www.kuudo.com/guides/amazon-ads-search-term-report-grain/

Check Sponsored Products search term report grain, prevent inflated totals after joins, and reconcile campaign metrics with matched scope and attribution.

Author: Kuudo

## Summary

- Aggregate search-term and campaign reports independently to the same campaign/day/account/marketplace/currency key. Check one row per comparison key on both sides before joining.
- A $100 campaign total attached to two search-term rows becomes $200 if summed after the join. The illustrative increase is duplicated data, not additional spend.
- Matching grain does not guarantee matching impressions: Amazon’s search-term report includes terms associated with ad clicks. Check scope, attribution and retrieval timing for other residual differences.
- Return an analysis report with source totals, uniqueness findings, aligned totals, unmatched keys and unresolved gaps. Campaign changes belong to a separate workflow.


A Sponsored Products search term report grain mismatch can inflate campaign spend: joining one campaign total to several search-term rows repeats that total. Aggregate each report separately to the same scoped campaign-and-day key, check uniqueness, then compare. Kuudo’s Reporting Skill supplies the field-validation workflow; the agent performs the reconciliation.

Your team’s daily dashboard may group by campaign while its search-term review keeps ad groups and individual queries. Those choices belong in the comparison, along with your account, marketplace, and currency. The [Amazon Ads Reporting Skill](/features/skills/amazon-ads/reporting/) makes the requested dimensions explicit so an agent can distinguish duplicated campaign spend from a genuine reporting difference.

The practical question is: “Why did my campaign total grow after I joined the search-term report?” Start with the join. A reporting discrepancy and a duplicated metric require different repairs.

## A report’s grain is the meaning of one row

Report grain is the complete set of dimensions that identifies a row, including its time unit. A campaign total for a day is coarser than separate search-term rows within that campaign. The Explorer recipe analyzes daily rows by campaign, ad group, and search term within the resolved account scope. Adding target, placement, or another dimension changes the row contract again; verify actual uniqueness rather than treating that tuple as a universal server key.

Use [Amazon Ads MCP](/features/amazon-ads-mcp/) to retrieve the authorized account’s reports, with the Reporting Skill’s ad-hoc workflow defining the intended grain first. The Skill checks current field definitions and compatibility rather than assuming that a familiar report name establishes the dimensions.

| Contract item | What the comparison must retain |
|---|---|
| Scope | Advertiser account, marketplace, Sponsored Products, currency |
| Time | Matching dates and daily or summary time grain |
| Detail | Stable campaign IDs and every selected grouping dimension |
| Metrics | Matching definitions, attribution basis, and product scope |
| Provenance | Report IDs, retrieval time, filters, and original row counts |

Use IDs for relationships; retain names for readers. A renamed campaign should not become a new campaign in the comparison. If one report is daily and the other summarizes the whole period, regenerate or aggregate to a shared time grain before comparing them.

## Joining finer rows can multiply campaign spend

A campaign metric repeats when one campaign row matches several search-term rows. Summing the repeated campaign column inflates the total even though neither source report changed. This is join fan-out: the relationship adds rows, and a subsequent sum counts the same coarser metric again.

Consider this illustrative single-account, single-marketplace, USD example for one day. Campaign A has $100 of spend. Its search-term report contains two rows, with $60 and $40 of spend.

| Search-term row | Search-term spend | Campaign spend attached by the join |
|---|---|---|
| Query one | $60 | $100 |
| Query two | $40 | $100 |
| Sum after the join | $100 | $200 |

The campaign did not spend $200. The join copied its $100 onto two rows. Keeping a campaign-total column on detailed rows can be useful for context, but that column is no longer additive across those rows.

The Reporting Skill explicitly requires a split-report workflow to state whether its join repeats coarser metrics. For a reconciliation, instruct the agent to aggregate each report independently to account, marketplace, currency, campaign ID, and day. Then require one row per comparison key on each side before joining. Additional scope needed to distinguish your accounts belongs in the key too.

Apply three checks before accepting the comparison:

- Compare source totals with aggregated totals before the join and corresponding columns afterward.
- If the intended key is not unique, inspect remaining dimensions or duplicate inputs.
- Preserve real activity: dropping duplicate-looking rows without understanding their grain can discard it.

Recompute rates from additive totals rather than averaging row percentages:

- Cost per click is total cost divided by total clicks.
- Advertising cost of sales (ACoS) is total cost divided by total sales.
- A zero denominator makes the rate unavailable.
- Budgets, rates, and amounts in different currencies are not additive.

## Matching grain does not make every metric equal

The Sponsored Products search-term report covers terms associated with at least one ad click. Amazon states that its impression totals can therefore differ from Campaign Manager. A unique, correctly aggregated join cannot restore impressions excluded by the report’s scope. [Amazon’s search-term documentation](https://advertising.amazon.com/help/G3HEFZYWZF84NPS9) also notes inferred terms in some non-search contexts and ASIN-valued entries.

[Amazon Agent Atlas](/features/agent-atlas/) grounds that distinction in Amazon’s report guidance. The agent should classify the remaining difference rather than force a match: first coverage and filters, then metric definitions and attribution, then report timing. Use [Amazon’s campaign-report reference](https://advertising.amazon.com/API/docs/en-us/guides/reporting/v3/report-types/campaign) to check the selected grouping, not as a substitute for the current v1 field contract.

For monetary comparisons, ask the agent to confirm:

- The same currency and sales scope.
- The attribution basis, separately from the calendar date range.
- Any unknown attribution; an unsuffixed sales field does not establish a window.

[Amazon’s attribution guidance](https://advertising.amazon.com/help/G22MA5YPN9KKT7TM) explains that conversions can arrive later and a report date remains incomplete until its lookback window ends. Reports retrieved at different times may consequently disagree even when the join is sound. Record retrieval times and rerun comparable periods before treating the residual as an error.

## A reconciliation report needs a validated field contract

The reconciliation deliverable is an analysis report with source totals, duplicate-key findings, aligned totals, and explained or unresolved differences. The Amazon Ads Reporting Skill supplies the ad-hoc reporting method; the reconciliation checks below are the agent request, rather than a named, bundled Sponsored Products reconciliation template.

The documented v1 search-term field set includes `date.value`, `campaign.id`, `campaign.name`, `adGroup.id`, `adGroup.name`, `searchTerm.value`, `metric.impressions`, `metric.clicks`, `metric.totalCost`, `metric.sales`, `metric.purchases`, and `budgetCurrency.value`. Cost and currency belong together. Validate the entire selected set for the comparison’s current reporting path, including the campaign-side fields; do not substitute legacy Console headers or assume a v3 field name works in v1.

With the Reporting Skill installed and Amazon Ads MCP connected, use this request:

```text
Reconcile my Sponsored Products search-term and campaign reports.
Confirm the advertiser account, marketplace, currency, dates,
metrics, attribution basis, filters, and time grain with me.
Use the Reporting Skill's ad-hoc path and validate the fields.
Retain report IDs, retrieval times, and source totals.
Aggregate each report separately to the same campaign/day key,
including account, marketplace, currency, and other required scope.
Check key uniqueness before joining. Preserve unmatched rows.
Return source totals, aligned totals, duplicate-key findings,
and residual differences with their evidence or unresolved cause.
Do not change campaigns, budgets, bids, or targets.
```

Report creation starts an asynchronous read job. The agent checks its status through MCP; the client downloads the completed file from the returned signed URL. Access, compatible fields, and a client able to download and process the report are prerequisites. This guide documents the workflow; it does not report a customer-account execution.

## What happens next: approve the comparison before mining terms

Review the reconciliation report before trusting search-term recommendations. Resolve fan-out first. Keep coverage differences and uncertain attribution visible. Only then move to the [search-term mining workflow](/guides/amazon-ads-sponsored-search-term-mining/), whose Explorer Skill aggregates and segments terms for candidate review rather than performing this campaign reconciliation.

Retain the accepted grain contract and reports in the [Amazon Agent Data layer](/features/amazon-agent-flow/). Reuse your comparison rules through [Skills](/features/skills/) so the next review tests the same boundaries. [Selling Partner MCP](/features/amazon-selling-partner-mcp/) supplies seller-side operational and eligible reporting data; that is a different data context from these paid Sponsored Products reports.

*Next, turn reconciled data into [search-term candidates you can trace to their evidence](/guides/amazon-ads-sponsored-search-term-mining/).*



## Sources

- [Amazon: Search term report for Sponsored Products](https://advertising.amazon.com/help/G3HEFZYWZF84NPS9)

- [Amazon: Search term reports and legacy grouping reference](https://advertising.amazon.com/API/docs/en-us/guides/reporting/v3/report-types/search-term)

- [Amazon: Campaign reports and legacy grouping reference](https://advertising.amazon.com/API/docs/en-us/guides/reporting/v3/report-types/campaign)

- [Amazon: Ad campaign attribution](https://advertising.amazon.com/help/G22MA5YPN9KKT7TM)

- [Kuudo: Ad-hoc reporting grain and join rules, pinned source](https://github.com/KuudoAI/skills/blob/b1ef5fbc6fd97377dc475792ec4974134860a585/skills/amazon-ads-reporting/references/ad-hoc-reporting.md)

- [Kuudo: Sponsored Products search-term field recipe, pinned source](https://github.com/KuudoAI/skills/blob/b1ef5fbc6fd97377dc475792ec4974134860a585/skills/amazon-ads-sp-search-term-explorer/references/mcp-workflow.md)

