# Join Search Query Performance and AMC Aggregates

Canonical page: https://www.kuudo.com/guides/amc-search-query-funnel-sqp/

Search Query Performance and AMC join on search query and week, not shopper: pull SQP, run AMC's search-term queries for that week, join the aggregates.

Author: Thomas Spicer
Updated: Oct 19, 2026

## Summary

- Search Query Performance (SQP) is the GET_BRAND_ANALYTICS_SEARCH_QUERY_PERFORMANCE_REPORT: impressions, clicks, cart adds and purchases per query for the ASINs you request, in WEEK, MONTH or QUARTER periods. It needs the Brand Analytics role and Brand Registry, and can only be requested.
- Amazon Marketing Cloud (AMC) carries the search term behind your sponsored ads as customer_search_term in sponsored_ads_traffic and amazon_attributed_events_by_traffic_time.
- SQP has no shopper-level rows and AMC returns aggregates, so the only join key is the query text plus the reporting week.
- Run AMC's instructional search-term queries with an EXPLICIT time window that matches the SQP week, then join both aggregates in your own lake, or upload SQP to AMC as an advertiser dataset.

Search Query Performance and AMC join on one key: the search query plus the reporting week. Search Query Performance (SQP) is an aggregated Brand Analytics report, and [Amazon Marketing Cloud](/features/amc/) (AMC) records your sponsored ads by `customer_search_term`. So the agent requests SQP, runs AMC's search-term queries for that same week, and joins the two aggregates.

The request came in from a brand manager on a Monday: *"Brand Analytics shows what people search for. AMC shows what they did after. Can we join them?"* The honest answer starts with what each side can't do. SQP has no shopper-level rows. AMC returns aggregates, and it only sees traffic your ads touched. A join on shoppers was never on the table.

The decision behind the join is whether a query's sponsored clicks add coverage or only buy clicks the search funnel already delivers. That takes many weeks of your own history. Amazon lists the SQP report as request-only, one period per request, so the trend exists only if every week is requested and kept. [Amazon Agent Flow](/features/amazon-agent-flow/) lands each week's SQP report in your private lake, so the join reads the account's own trend, not one request.

## SQP counts the search funnel for a query; AMC counts only your sponsored ads on it

SQP and AMC answer different questions about the same search query. SQP describes the whole search results page for a query. AMC describes what happened to the shoppers your sponsored ads reached on a search term. [Amazon Agent Atlas](/features/agent-atlas/) holds Amazon's documentation for both, so the agent requests the exact sources below.

| Source | Read through | What a row is | Access |
| --- | --- | --- | --- |
| SQP report | Selling Partner MCP | One query, one requested ASIN, one period | Brand Analytics role, Brand Registry |
| `sponsored_ads_traffic` | Amazon Ads MCP (AMC) | Ad impressions and clicks by search term | Your AMC instance |
| `amazon_attributed_events_by_traffic_time` | Amazon Ads MCP (AMC) | Ad-attributed views and purchases by search term | Your AMC instance |

The SQP report is `GET_BRAND_ANALYTICS_SEARCH_QUERY_PERFORMANCE_REPORT`. The [Selling Partner MCP](/features/amazon-selling-partner-mcp/) requests it with `Reports_createReport` and reads it back with `Reports_getReport` and `Reports_getReportDocument`. Amazon lists it as request-only, in JSON, for `WEEK`, `MONTH` or `QUARTER` periods, and a request cannot span two periods.

Each SQP row carries `searchQueryVolume`, the query's total impressions, clicks, cart adds and purchases, and your ASIN's share of each stage. Nothing in the schema splits sponsored from organic, and nothing holds ad spend. The [Search Query Performance vs. Search Terms guide](/guides/amazon-ads-sqp-ppc-keyword-signals/) covers those fields and the two other search reports that share the name.

> **The asin option is the first thing that breaks**
> The SQP request requires `asin`: a space-separated list of ASINs with a 200-character limit. A neighboring Brand Analytics report, `GET_BRAND_ANALYTICS_SEARCH_CATALOG_PERFORMANCE_REPORT`, takes an optional `asins` instead. Atlas keeps the two entries apart, so the agent sends the option the SQP report accepts.

## Amazon's instructional AMC queries return the ad side of the funnel by search term

AMC's half of the join comes straight from Amazon's playbook *Use case: How to query sponsored ads keywords*. The first query counts ad traffic by keyword and the search term the shopper typed:

```sql
/* Instructional Query: Traffic by keyword and search term */
SELECT
  targeting AS keyword,
  customer_search_term,
  match_type,
  campaign,
  ad_product_type,
  SUM(impressions) AS impressions,
  SUM(clicks) AS clicks
FROM
  sponsored_ads_traffic
WHERE
  match_type IN ('PHRASE', 'BROAD', 'EXACT')
GROUP BY
  1,
  2,
  3,
  4,
  5
```

The second counts what those ad-attributed shoppers did next, by the same keys:

```sql
/* Instructional Query: Attributed conversions by keyword and search term */
SELECT
  targeting AS keyword,
  customer_search_term,
  match_type,
  campaign,
  ad_product_type,
  SUM(total_detail_page_view) AS total_dpv,
  SUM(total_purchases) AS total_purchases
FROM
  amazon_attributed_events_by_traffic_time
WHERE
  match_type IN ('PHRASE', 'BROAD', 'EXACT')
GROUP BY
  1,
  2,
  3,
  4,
  5
```

The [Amazon Ads MCP](/features/amazon-ads-mcp/) runs both with `AMCWorkflow_createWorkflowExecution`, setting `timeWindowType` to `EXPLICIT` with `timeWindowStart` and `timeWindowEnd` on the SQP week. `AMCWorkflow_getWorkflowExecutionDownloadUrls` returns the result files. The [Amazon Marketing Cloud Skill](/features/skills/amazon-ads/marketing-cloud/) reads the matching playbook before it writes or adapts any SQL.

Both queries keep only `PHRASE`, `BROAD` and `EXACT` match types. Automatic and product-targeted ad traffic is left out, so a query SQP shows as busy can have no AMC row at all.

## The join key is the search query and the reporting week, never a shopper

The join key is the query text and the week, because neither source exposes anything finer. SQP rows are per query and ASIN, so a multi-ASIN request repeats each query's totals on every ASIN row. The agent first collapses SQP to one row per query and week, keeping the ASIN shares in their own table. Otherwise an AMC total joined to each ASIN row is counted once per ASIN.

Before matching, the agent normalizes both sides to lower case with single spaces, then sums AMC's campaign rows per search term.

| Joined column | From | What it tells you |
| --- | --- | --- |
| Query volume, total clicks | SQP | How much demand the query had |
| Total cart adds, total purchases | SQP | How the whole funnel converted |
| Ad impressions, ad clicks | AMC traffic query | What your ads collected |
| Detail page views, purchases | AMC conversions query | What ad-touched shoppers did |

Reading the joined row is your team's call, not Amazon's. Dividing your AMC ad clicks by SQP's total query clicks is a ratio you compute yourself, a rough view of how much of the query's click volume your ads collected. SQP counts every click on the results page, sponsored or organic, so the ratio stays an indicator rather than an attribution.

> **A join on shoppers was never possible**
> SQP has no shopper-level rows, and AMC applies aggregation thresholds to every query output. A plan that promises "which searchers bought after an ad" from these two sources is promising a join neither one supports.

## The join runs in your own lake, or inside AMC with SQP uploaded

The join can run in two places, and the documented Kuudo route is outside AMC. [Amazon Agent Flow](/features/amazon-agent-flow/), the Amazon Agent Data layer, keeps the weekly SQP history in your private lake, where Snowflake, Athena, DuckDB or Databricks can read it. The agent pulls each AMC run's result files from the download URLs and joins them against the matching SQP week.

The other route brings SQP into AMC. AMC's advertiser data upload supports two dataset types:

- **FACT** datasets need a `TIMESTAMP` or `DATE` column, and queries evaluate only the rows inside the query's time range. A weekly SQP table fits here.
- **DIMENSION** datasets hold static tables with no event time. Each upload fully replaces the last, and AMC always reads the most recent file.

The upload itself runs through AMC's advertiser data upload API. Kuudo's documented MCP tools don't include it, so this guide's workflow keeps the join outside AMC.

## What happens next: schedule the weekly SQP and AMC pulls {#what-happens-next}

The agent schedules both sides on the same week. Agent Flow runs the SQP request for your brand's ASINs through the Selling Partner MCP, and `AMCWorkflow_createSchedule` repeats both AMC queries through the Amazon Ads MCP. Each week, the agent joins the new AMC results to that week's SQP query totals, one row per query.

No published Kuudo [Skill](/features/skills/) joins SQP to AMC, so the join is one the agent runs on request, or a Skill your team writes. The [SQP ASIN N-gram Skill](/features/skills/amazon-seller/sqp-asin-ngram/) ranks the SQP gaps worth joining first.

*Next: what ad-touched shoppers did before they bought, across Amazon DSP (demand-side platform) and sponsored ads, in [Amazon Marketing Cloud Path to Conversion: Sankey](/guides/amc-path-to-conversion-sankey/).*


## Frequently asked questions

### Can I join Search Query Performance with Amazon Marketing Cloud?

Yes, at the grain both share: search query plus reporting week. SQP is an aggregated Brand Analytics report with no shopper-level rows, and AMC returns aggregates, so collapse SQP to one row per query and week, then match its query text to AMC's customer_search_term for the same week rather than joining on users.

### Where is the search term in AMC?

In the customer_search_term column. Amazon's instructional queries read it from sponsored_ads_traffic for impressions and clicks and from amazon_attributed_events_by_traffic_time for detail page views and purchases, filtered to PHRASE, BROAD and EXACT match types.

### Is Search Query Performance data available inside AMC?

SQP is a Brand Analytics report, delivered through the Selling Partner API as GET_BRAND_ANALYTICS_SEARCH_QUERY_PERFORMANCE_REPORT. To query it inside AMC, upload it as an advertiser dataset; otherwise join the two outside AMC on search query and week.

### How do I match the AMC date range to an SQP week?

Execute the AMC workflow with timeWindowType EXPLICIT and set timeWindowStart and timeWindowEnd to the same week the SQP request covered. An SQP request cannot span two reporting periods, so one week of SQP lines up with one AMC run.

### Why does my SQP report request fail?

The most common causes are the asin option, which is required, space-separated, and capped at 200 characters, and access: the account needs the Brand Analytics Selling Partner API role and Brand Registry. The report is request-only, so a report schedule for it is not available.

### Should I upload SQP to AMC as a fact or a dimension dataset?

A FACT dataset needs a TIMESTAMP or DATE column and is evaluated only within the query's time range, which suits a weekly SQP table. A DIMENSION dataset is a static table with no event time, and each upload fully replaces the last one.


## Sources

- [Use case: How to query sponsored ads keywords (Amazon Marketing Cloud)](https://advertising.amazon.com/marketing-cloud/use-cases/d0318a42-d23b-4b8d-a8fb-eb5c46661b2e)

- [Sponsored ads traffic data source (Amazon Marketing Cloud)](https://advertising.amazon.com/API/docs/en-us/guides/amazon-marketing-cloud/datasources/sponsored_ads_traffic)

- [Prepare data for advertiser data upload (Amazon Marketing Cloud)](https://advertising.amazon.com/API/docs/en-us/guides/amazon-marketing-cloud/advertiser-data-upload/advertiser-data-prepare-data)

- [Execute a workflow (Amazon Marketing Cloud)](https://advertising.amazon.com/API/docs/en-us/guides/amazon-marketing-cloud/reporting/execute-workflow)

- [Analytics report type values (Selling Partner API)](https://developer-docs.amazon.com/sp-api/docs/report-type-values-analytics)

- [Search Query Performance report schema](https://github.com/amzn/selling-partner-api-models/blob/main/schemas/reports/sellingPartnerSearchQueryPerformanceReport.json)

