Find high-performing keywords and product targeting
On this page you can find keywords and products that are driving sales but aren’t registered in your ads yet, and build candidates for cleaning up targeting that isn’t selling well relative to its ad spend. Use it when you take a weekly-to-monthly stocktake of what’s inside your ads.
About this page
Section titled “About this page”| Item | Details |
|---|---|
| What you can do | List, from your performance data, the keyword / product-targeting candidates to add and the targeting candidates to clean up (exclude or swap out) |
| Applies to | Mainly Sponsored Products (SP). Some prompts also apply to Sponsored Brands (SB) and Sponsored Display (SD) |
| Data & connection needed | The search-term, targeting, and product-ad performance data of your connected account (no extra setup needed) |
| Scope | Read-only (analysis & proposals only). The prompts on this page only build candidate lists; they don’t change any ad settings. The actual additions and exclusions happen through the approval flows on the related pages |
When to use this
Section titled “When to use this”- You want to find search terms that are driving sales but that you haven’t registered as ad keywords yet
- You want to check product targeting that is spending ad budget but not selling
- You want to look for search terms / products that are getting clicks but that you haven’t added to your ads yet
- You want to surface search terms / products that get impressions but few clicks, as exclusion candidates
- You want to find keywords that sell well at the top of search results and decide whether to bid on them more strongly
- You want to find best-selling products that you haven’t advertised yet
Before you run
Section titled “Before you run”- Connected account … if you handle multiple accounts, confirm the target account is correct first.
- Target period … e.g. “past 30 days”. Same-day and previous-day data may not be final, so a recently finalized period is safest.
- Target brand / ASIN (optional) … specify these if you want to narrow to a particular brand or product. If you don’t, the whole account is covered.
- If you register your target ACoS / ROAS in Set targets for sales, ad spend, and ACoS, the “efficient / inefficient” judgment criteria are applied automatically and you can omit them from the prompt.
Quick reference
Section titled “Quick reference”| Goal | What you get | Changes | Prompt |
|---|---|---|---|
| Find untargeted search terms and products that are driving sales | A list of addition candidates with their performance | No change | Prompt 1 |
| Check high-converting competitor products and low-performing product targeting | A list with high- / low-efficiency judgments | No change | Prompt 2 |
| Find high-CTR search terms and products you haven’t targeted yet | A list of addition candidates with where they’re served | No change | Prompt 3 |
| Compare low-performing targets with new addition candidates | A list of swap candidates (swap-out and swap-in) | No change | Prompt 4 |
| Find product ads that get fewer clicks than others | A list of the products and recommended actions | No change | Prompt 5 |
| Turn low-CTR search terms and products into exclusion candidates | A list of exclusion candidates | No change | Prompt 6 |
| Find keywords that perform well at the top of search and can take stronger bids | A list of reinforcement candidates with headroom judgments | No change | Prompt 7 |
| Find best-selling products you haven’t advertised yet | A list of addition plans (with recommended settings) | No change | Prompt 8 |
Prompt 1: Find high-potential search terms and products you haven’t targeted yet
Section titled “Prompt 1: Find high-potential search terms and products you haven’t targeted yet”Surface promising candidates that are already generating sales but that you haven’t registered as keywords or product targeting yet.
When to use — when you want to bring the best-selling search terms / products you’re missing into your ads.
What you need — the target period (default is the past 30 days) and the number of items to show (default is the top 5).
From the past 30 days of the search term report / ASIN target report, extract the high-potential candidates that are not individually registered as existing targets, and present the top 5.
Purpose: to carve out the search terms/ASINs that already have delivery history but are not registered as individual targets, so their bids can be controlled independently and ad-attributed sales can be grown.
Target period- Check the last finalized date with get_data_ingestion_status and take the 30 days ending on that date. Do not include fully_missed days.- The number of unfinalized days is not fixed, so do not hard-code a day count. Always state the start and end dates you actually used.- Do not use rollup_status to judge whether a day is finalized (a single ad type with no delivery drops the whole day to no_data). Look at the per-report status.
The definition of "untargeted" (always follow this procedure)1. The search term report is a set of "search term × the target that actually matched," and every row has already been delivered. New terms that have never been delivered cannot be discovered from this report. Limit "untargeted" here to mean "not registered as an individual target," and write it that way in the report too.2. Do not judge from a single row. The same search term can be split across several rows, and a keyword of the same name can exist in another campaign (measured: the same term came back on several rows as an Exact keyword of a different campaign). Aggregate all rows per search term, and exclude a term as already registered if even one EXACT/PHRASE/BROAD row whose targeting matches that term, or one asin="<that ASIN>" row, exists. Normalize notation differences (full-width/half-width, upper/lower case, whitespace) before comparing.3. Always re-fetch the remaining candidates one at a time by passing them to the search_key of list_search_term_performance, and check the rows. 🔴 search_key is a partial match. Do not treat total_results > 0 as evidence that "the term is registered." Rows for other terms that contain the candidate term as a substring are mixed into the same result. Raise limit, fetch the rows, and judge by whether a row exists whose search_term matches the candidate term exactly. search_key is an upstream filter, so it can narrow the population for that term separately from the truncation of the list as a whole. Do not use aggregated values from a truncated pool directly for ranking.4. For each candidate, always also state "which target it is currently delivered through and how much it is spending." Not registered does not mean not delivered.
On the ASIN target side- list_top_asins_by_metric is a ranking of ASINs that are already targeted, so it cannot be used to discover untargeted ASINs. Extract from the ASIN-format rows of the search term report those with no asin="<that ASIN>" specification.
Filtering and ranking- Limit to impressions of {{THRESHOLD (e.g., 100 or more)}} to remove noise. This tool's filter arguments are min_clicks / max_sales / zero_sales_only / search_key; there is no impressions filter. Apply it yourself after fetching and state that you did.- Rank primarily by sales, with CVR as the secondary axis. Also state each candidate's ACoS alongside the account-average ACoS, and flag candidates above the average with a caution.- Use the CVR from this source, and verify and state the basis (units-sold-based or order-based) by checking it against the row's units_sold / purchases and clicks.
Stating the coverage rate (mandatory)- Transcribe total_results / fetched_row_count / search_term_fetch_truncated / search_term_fetched_pages / search_term_total_pages_available as they are (these 5 are fields that actually exist).- Compute coverage rate = fetched_row_count ÷ total_results, stating both numerator and denominator.- The upstream sort order is ad spend (cost) descending (if you specify a filter, it changes to clicks descending). State the sort order you used.- The cap for max_pages is 100 (100 rows per page, so 10,000 rows at most), and the default is 20. Even at the maximum you will not reach full coverage, so do not write "I checked everything." Measured example (30 days, no filters): against total_results of about 23,000 rows, max_pages=30 gave 3,000 rows = about 13% coverage, and search_term_total_pages_available was 227. Even max_pages=100 only reaches 10,000 rows = about 44%.- Because it is ad spend descending, terms with high sales but small ad spend are structurally missed. State the result explicitly as "the top 5 within the fetched range."
Proposal- For each candidate, present the destination campaign for the addition and the initial bid. Choose and state explicitly whether the destination is "the campaign it currently matches in" or "a manual campaign for the same product."- Base the initial bid on the account-average CPC (ad spend ÷ clicks from analyze_ad_type_performance), and state both that value and how you derived it. For reference, keyword_bid (the bid of the target currently matching) is returned on the same search term row, so you may state it alongside.- Estimated added budget impact = that term's actual clicks ÷ the number of days in the period × the initial bid. MCP has no volume forecast for new keywords, so state explicitly that this is an estimate.
Guardrail: the added budget impact per item must not exceed {{CAP (e.g., 5%)}} of the destination campaign's daily budget (daily_budget / budget_amount from list_existing_sp_campaigns). When carving a term already being delivered via PHRASE / auto / category out into EXACT, always also state that this is a reassignment of existing spend, not a net increase.
Before executing, always: present a list of the changes (target, destination, initial bid, current spend, expected impact) and do not apply anything to the platform until you have approval.
After executing: apply it only once the user has reviewed and approved the proposal, then use "measure the effect of an initiative" to fetch CVR and ACoS 7 days after the addition, and judge Pause if it falls short of target and Keep if it looks good.
Execution conditions- Always state the number of rows fetched, the total, whether there was truncation, and the coverage rate, and make explicit that this is "the top 5 within the fetched range"- Match candidates one at a time with search_key, and judge by whether an exact-match row exists, before presenting them- State the date on which you checked the finalized-data boundaryWhat you can change — the target period (e.g. past 30 days) / the number of items (e.g. top 5) / the ranking basis (sales, clicks, conversion rate, and so on).
What you get back — a table of untargeted search terms / products × sales × clicks × conversion rate × recommended match type.
Changes — analysis and proposal only. Does not change ad settings.
Next steps — once you’ve decided which candidates to add, add them to your ads through the approval flow in Create Sponsored Products (SP) campaigns. To carve search terms out of an Auto campaign, use Move search terms from Auto to Manual.
Prompt 2: Check high-converting competitor products and low-performing product targeting
Section titled “Prompt 2: Check high-converting competitor products and low-performing product targeting”Among product targeting aimed at competitor products (other companies’ ASINs), check both the ones that convert well and the ones that aren’t selling relative to their ad spend.
When to use — when you want to sort competitor-product targeting into what to grow and what to rein in.
What you need — the target period (default is last month) and the number of top / bottom items (default is 5 each).
Among {{TARGET_PERIOD (e.g., 2026-07-01–2026-07-31; state last month as explicit dates)}} product targeting aimed at competitor ASINs, take the ones meeting impressions of {{MIN_IMPRESSIONS (e.g., 500 or more)}} and clicks of {{MIN_CLICKS (e.g., 50 or more)}}, and sort them by conversion rate.Purpose: to exclude inefficient competitor-ASIN targets and reallocate ad spend to more efficient targets.
■ Fetching (always do this in this order)1. 🔴 Use the server-side filters. Call the per-target performance list with both target_types=["TARGET"] (product/category targeting) and min_clicks={{MIN_CLICKS (e.g., 50)}}. These two filter upstream on the server, and the sort order also changes to clicks descending. Confirm that server_filter_applied is true and state it. ※ The premise that "fetching is truncated by sales descending, so the lower-sales, lower-efficiency targets get missed" applies when min_clicks is not passed. This prompt's condition is "N clicks or more," so it converts directly into a server-side filter. Measured (verified on KEYWORD): min_clicks=10 gave total_results 295 / fetched_row_count 295 = 100% coverage. The low-efficiency tier (ACoS 1578%, sales ¥800) and rows with zero sales were all included.2. Limit the scope to ASIN-specified rows: keep only rows whose expression_type is ASIN_SAME_AS, or whose target_name is in asin="..." form. The ASIN is in expression_value, so use that. Category targeting and auto (Close match / Loose match / Substitutes) are out of scope.3. Apply the impressions floor yourself after fetching (there is no server-side impressions filter). State that you applied it and how many rows it excluded.4. Always exclude your own ASINs. Fetch the population of your own ASINs from the FBA inventory list or the listing SKU list, and drop rows whose target ASIN is in it. If you want to check registration per ASIN, the SKU reverse-lookup tool also works (a SKU is returned if it is your own listing). For ASINs you are unsure about, check the brand name via the catalog lookup. Do not surface defensive targeting against your own products as competitor exclusion candidates.5. Transcribe total_results / fetched_row_count / filtered_row_count / returned_row_count from the response as they are, and compute coverage rate = fetched_row_count ÷ total_results. When you pass filters, total_results is "the total number of rows matching the conditions." If coverage is 100%, you may write "all rows under these conditions"; if it is below 100%, raise max_pages (cap 100 pages = 10,000 rows, default 20) and re-fetch, and only if it still falls short, state explicitly that "the bottom 5 are the bottom within the fetched range." Check duplicate_rows_folded and report how many rows the tool folded (if it is returned, you don't need to de-duplicate yourself).
■ The definition of conversion rate (always use this definition)- Conversion rate = purchases (orders) ÷ clicks. Both are on the same row, so no separate tool is needed.- 🔴 Do not use the response's cvr column as is. cvr has been confirmed arithmetically to be units (units sold) ÷ clicks (measured: on a row with clicks 2,242 / units 409 / purchases 398, cvr = 18.24, which matches 409÷2,242 = 18.24% and does not match 398÷2,242 = 17.75%). When one order sells several units, it comes out higher than the order-based figure. Put both units and purchases in the table, and state in the column name which one you used as the numerator.- After recomputing, exclude as anomalies any rows whose conversion rate exceeds 100%, and state how many in the report.- ※ The acos / roas columns are also in percentage notation, not multiples (measured: on a row with sales 2,540 / ad spend 5,160.09, roas = 49.22).
■ OutputList the top 5 and bottom 5 by conversion rate together with the target ASIN (expression_value), campaign name, impressions, clicks, orders (purchases), units sold (units), conversion rate, ad spend, ACoS, and suggested_bid, and flag the bottom 5 as exclusion candidates.For each one, add the expected sales and orders you would lose by excluding it, and the ad spend you would save (= the actual spend within the period). Do not present this as a forecast of future savings.If the same ASIN exists in several campaigns, handle it at the {{AGGREGATION_UNIT (e.g., per target / per ASIN)}} level and state which one you aggregated by.To prepare for a Revert, always record and present the ad_group_id and target_id of each item (both are on the same row).
■ Always state alongside- The four count fields above and the coverage rate (with numerator and denominator).- The numerator, denominator, and number of days for the conversion rate. Check in the data ingestion status whether the target period includes unfinalized days, and aggregate over finalized days only (do not hard-code the number of unfinalized days; fetch and count it every time). Look at the per-report status, not rollup_status.- Upstream aggregation is cached for about 4 hours, so recent bid changes or delivery may not be reflected.
■ Before executing, alwaysPresent the list of exclusion candidates (target, current impressions, clicks, orders, conversion rate, ad spend, expected impact) and do not apply anything to the platform until you have approval.
Guardrail: the exclusion must not worsen account-wide Orders by more than {{TOLERANCE (e.g., -5%)}} compared with the same number of days immediately before the exclusion.
After executing: apply the exclusions only once the user has reviewed and approved the proposal (stating explicitly whether the exclusion is in practice "pausing the target" or "adding negative product targeting"), then use "measure the effect of an initiative" to fetch account-wide ACoS and Orders 7 days after the exclusion, and Revert if it has worsened past the Guardrail.Measure at the ad group level too, not just the excluded target on its own (the excluded target on its own will always be -100%).
Execution conditions- Targets below the floor on either impressions or clicks are statistically insufficient, so drop them from the exclusion candidates- Do not make targeting against your own ASINs an exclusion candidate- Rows whose conversion rate exceeds 100% are anomalies and go into neither the exclusion candidates nor the top listWhat you can change — the target period / the number of top / bottom items / the definition of “low performance” (conversion rate, ACoS, ROAS, and so on).
What you get back — a table of competitor products (other companies’ ASINs) × conversion rate × ad spend × ROAS × high- / low-efficiency judgment (with an exclusion recommendation for the low-efficiency ones).
Changes — analysis and proposal only. Does not change ad settings.
Next steps — exclude the exclusion candidates through the approval flow in Add negative keywords. To tidy up how competitor products are classified, see Classify ads with labels and naming rules.
Prompt 3: Find high-CTR search terms and products you haven’t targeted yet
Section titled “Prompt 3: Find high-CTR search terms and products you haven’t targeted yet”Find search terms / products that have a high click-through rate and are already being served in other campaigns, but that you haven’t registered as keywords or product targeting yet.
When to use — when you want to pick up search terms / products that are already getting a good response but aren’t in your ad settings yet.
What you need — the target period (default is the past 30 days).
Using finalized data only, identify the search terms/ASINs that are being delivered via other targets, where the term itself is not registered as a keyword/product target, and whose click-through rate is high.Purpose: to add high-CTR but unregistered KWs/ASINs and prevent opportunity loss.
Target period- First check the ingestion status and count the unfinalized days (fully_missed / in_progress), then take {{TARGET_DAYS (e.g., 30 days)}} going back from the last finalized date as the target period. Do not include unfinalized days.- Do not use rollup_status to judge whether a day is finalized (a single ad type with no delivery drops the whole day to no_data). Look at the per-report status.- Always state the start and end dates you actually used and the number of unfinalized days you excluded. Do not hard-code the day count.
🔴 Securing the fetch volume (do this first)- The search term report's max_pages is capped at 100 (100 rows per page = 10,000 rows at most), and defaults to 20 (2,000 rows) when omitted. Always raise max_pages to the cap. Left at the default, the fetch rate looks an order of magnitude lower. Measured (14 days, no filters): upstream total 11,692 rows / 117 total pages. max_pages=10 gives 1,000 rows (8.6%); max_pages=100 gives 10,000 rows (about 85%).- ※ 🔴 On the search term report, min_clicks is not a server-side filter (it is applied after fetching). Measured: passing min_clicks=20 left total_results at 11,692 and only made filtered_row_count 346. In other words, passing a clicks floor does not increase the upstream fetch volume. Only max_pages increases it. (min_clicks does work server-side on the per-target performance list, but its behavior differs from the search term report. Do not conflate them.)
Extraction conditions (only treat rows meeting all of them as candidates)- Impressions of {{THRESHOLD (e.g., 100 or more)}}- Clicks of {{MIN_CLICKS (e.g., 20 or more)}} (to exclude outliers where the CTR numerator and denominator are small)- Neither sales nor CVR within the period is 0 (adding terms with no conversion history only increases ad spend)- The report row's targeting (the target string) and search_term do not match (terms delivered via broad match, phrase match, product targeting, or automatic targeting)
Confirming that it is unregistered (do not skip)- For each candidate, match the term and check one at a time that no already-registered target exists.- 🔴 The search_key used for matching is a partial match. Other terms containing the candidate term as a substring will hit too. Do not treat total_results > 0 as evidence of "registered." Fetch the rows and judge by whether a row exists whose targeting matches the candidate term exactly. Note that search_key is an upstream filter, so using it makes the population for that term small enough (the fetch-rate problem does not arise at the matching stage).- Exclude any candidate for which even one exact-match registered row is found, and record the reason for the exclusion, the number of campaigns it is registered in, and its spend over the period. Registered is registered regardless of the delivery state (enabled / paused / archived).- 🔴 The fact that a row was "delivered via a different target" does not mean "the term is unregistered." Even when the same term is registered as an exact match in another campaign, a different target wins the auction depending on the bidding situation, so in the report it looks like it was served via a non-matching target. Always judge by the matching result, not by the look of the report row. (Measured too: the same term was confirmed to come back on several rows as an Exact keyword of several campaigns.)- If matching was truncated, you may assert "registered" but do not assert "unregistered." Write the number matched and the total per candidate.
Handling click-through rate- CTR = clicks ÷ impressions. Always take the numerator and denominator from the same row (clicks_p2 and impressions_p2).- The response's ctr_p2 is in percentage notation (measured: on a row with clicks 2,509 / impressions 172,296, ctr_p2 = 1.46). Align your own computed value to the same unit.- CTR units differ by source, so always check the unit, fix on one source, and compare within it. Do not put CTRs from different sources in the same table.- ※ Row values all come back in 3 series: _p1 (comparison period) / _p2 (specified period) / _delta. Always use _p2 (_p1 is the immediately preceding period of the same length). The actual two periods are stated in the response's comparison_period, so treat that as authoritative and record it in the output.
Stating the coverage rate (do not skip)- Before the candidate list, transcribe the following values from the response as they are: total_results (the upstream total) / fetched_row_count (rows fetched) / filtered_row_count (after filtering) / search_term_fetch_truncated / search_term_fetched_pages / search_term_total_pages_available.- Coverage rate = fetched_row_count ÷ total_results. State both numerator and denominator.- The upstream fetch order is ad spend (cost) descending, and there is no way to fetch sorted by CTR. It therefore skews toward structurally missing terms with small ad spend and high CTR. State that and the actual fetch order, and note that this is "the top within the fetched range" before presenting. Do not write that you saw everything.- If the fetch rate is insufficient, supplement with a re-fetch narrowed by term (search_key is an upstream filter), and state the supplemented range too.
Output- Per candidate: term/ASIN, impressions, clicks, CTR, CVR, sales, actual CPC (cpc_p2), the campaign/ad group currently delivering it (campaign_id / ad_group_id are included on the row), and the matching result- Default the destination for the addition to the same ad group that actually delivered the term. If you propose a different ad group, write the grounds that the products match.- Base the initial bid on that term's actual CPC and write how you derived it. For reference, you may also state the row's keyword_bid (the bid of the target currently matching).- If there are 0 candidates, state "0" explicitly. If there is a possibility of misses due to fetch truncation, state that alongside, and do not write 0 as "no opportunity loss."
Before executing, always: present a list of the changes (target, destination, initial bid, expected impact) and do not apply anything to the platform until you have approval.Guardrail: the added budget impact per item must not exceed {{CAP (e.g., 5%)}} of the destination campaign's daily budget. Compute the added budget impact as a daily estimate of "initial bid × that term's clicks within the period ÷ the number of days in the period," and state explicitly that it is an actuals-based estimate, not a forecast. Fetch the destination campaign's configured daily budget and use it as the denominator.After executing: apply it only once the user has reviewed and approved the proposal, then use "measure the effect of an initiative" to fetch CVR and ACoS 7 days after the addition, and Pause if it falls short of target.
Execution conditions- Candidates below the impressions/clicks thresholds carry a false-positive risk, so drop them from scope- Do not present candidates for which you have not run the unregistered check- Keep the scope to a single ad type (fix sponsored_type so that ad types are not mixed between the search term report and the target list)- This line overlaps in intent with "extracting high-potential untargeted KWs / ASINs." If you run both, state at the top of the output that this line uses the CTR axis while "extracting high-potential untargeted KWs / ASINs" uses the sales axis, and if the same candidate appears in both, treat it as a duplicate and keep it on one sideWhat you can change — the target period / the click-through-rate threshold / the ad types to cover.
What you get back — a table of untargeted search terms / products × click-through rate × the campaign currently serving them × recommended destination for the addition.
Changes — analysis and proposal only. Does not change ad settings.
Next steps — add them through the approval flow in Create Sponsored Products (SP) campaigns.
Prompt 4: Compare low-performing targets with new addition candidates
Section titled “Prompt 4: Compare low-performing targets with new addition candidates”Line up targets whose performance has dropped recently against candidates you should add, compare them, and build a swap plan.
When to use — when you want to replace poor-performing targets with promising candidates while keeping your budget footprint the same.
What you need — the target period (default is the past 30 days) and the number of swaps (default is 2 each).
For the keywords of {{TARGET_CAMPAIGN_NAME_OR_CAMPAIGN_ID}}, please build a proposal that swapslow-performing targets for high-potential untargeted candidates. Do not apply anything to Amazon Ads.
[How to decide the target period]1. First check the ingestion status and identify the last finalized date (fully_missed / in_progress days are not finalized. There is not necessarily only one unfinalized day). Do not use rollup_status to judge whether a day is finalized (a single ad type with no delivery drops the whole day to no_data).2. Take the 30 days going back from the last finalized date as the target period, and always state "how many days that effectively is."
[Fetching the data (fix on a single source)]- Fetch the keyword performance with the asynchronous job with campaign_id specified, and confirm status=complete and truncated=false before reading the result. Running it account-wide without specifying campaign_id may not run to completion.- 🔴 There are two families of page-count fields. total_pages in the response is the result-side page count, while fetched_pages / total_pages_available are the upstream page counts (measured: total_pages=1 while fetched_pages=2 / total_pages_available=2). What you use to judge full coverage is truncated and the agreement of fetched_pages / total_pages_available — not total_pages. State both.- 🔴 After fetching, always de-duplicate by keywordId. Duplicate rows get into even a completed result with status=complete and truncated=false. Measured: of 332 rows, distinct keywordId was 298, so 34 keywords came back twice (+10.2% in rows). Duplicate rows are completely identical in every field, so de-duplicating loses no data. Conversely, do not sum them (that would double-count). Adding matchType to the key does not change the count, so keywordId alone is enough. ⚠ Duplicate rows are not necessarily zero-performance rows. Measured, 18 of 68 duplicate rows had impressions>0 and 6 had clicks>0, so the "exclude ad spend 0 / clicks 0" step below will not catch them. De-duplicate first. Measured impact: rows with impressions of 200 or more were 49 before de-duplication and 46 after, so 3 ghost rows enter the candidate pool. Since you then pick the 2 lowest by ROAS, one keyword can occupy 2 slots and you end up "intending to swap 2 but actually swapping 1."- Always state "rows fetched / count after de-duplication / page counts (both families) / truncated."- Use the values from that single source only for ROAS, ACoS, and orders. Compared with the per-target performance list or the search term report, ROAS can differ by around 10% even for the same keyword and the same requested period. Units are also a mix of percentages and ratios. Do not mix them.- This source has keywordId / keyword / matchType / campaignId / adGroupId / adGroupName / currentBid / suggestedBid / impressions / clicks / spend / sales / orders / acos / roas / targetKind / targetingType all together (confirmed by measurement). There is no need to supplement it with another tool.- Cross-check one item with another tool to see whether the aggregation period returned matches the requested period, and state it if it is off (some tools snap to calendar-week boundaries).
[Selecting the swap-out targets (low performers)]- Narrow to rows meeting impressions of {{IMPRESSIONS_THRESHOLD (e.g., 200 or more)}} (applied to the de-duplicated set).- Among those, pick the rows with the lowest ROAS. Because ROAS 0 produces many ties, rank ties by "largest ad spend first" and take the top 2 as the swap-out targets.- Exclude rows with ad spend 0 / clicks 0: pausing them saves nothing and frees no budget, so there is no improvement.- Always state for each candidate "the ad spend (actual amount) you would save by pausing it."
[Exclusion conditions (Guardrail)]- Drop from the candidates any swap-out target that generated new orders within the target period.- Judging "continuously" requires a daily trend, but some tools only return a single period-aggregate row and return no trend. If you cannot fetch a daily trend, state "continuity unverified" and uniformly drop rows with orders>0 from the candidates.
[Selecting the swap-in targets (untargeted candidates)]- Every row of the search term report is linked to an existing target. "It appears in the report" does not mean "it is untargeted."- Choose candidates from "rows where the search term text does not match that row's targeting string" (terms picked up via broad match, phrase match, or product targeting).- Always match each chosen candidate one at a time with a partial-match search on the per-target performance list, and confirm that no target for the same term already exists. 🔴 Because it is a partial match, other targets containing the candidate term as a substring will hit too. Fetch the rows and judge by whether a row exists whose target_name / keyword matches the candidate term exactly. If the matching result is truncated, drop the candidate as "cannot be asserted to be untargeted."- Targets with 0 impressions or paused that are already registered appear neither in the performance list nor in the search term report. Do not use absence from the performance list as grounds for being untargeted. (For reference: this campaign's keyword performance did actually contain registered rows with impressions=0 / clicks=0, so within the same campaign you can pick up registered items from this source. You cannot pick up registered items in other campaigns.)- Among the candidates you confirmed, take the top 2 by click-through rate and CVR as the swap-ins. Align the click-through rate and CVR to the same source and the same units as the swap-out targets.
[Output]Present a list of swap-out target × swap-in × current values (impressions, clicks, orders, ad spend, ROAS) ×ad spend saved × expected ROAS improvement.Compute the expected ROAS improvement after stating the assumptions (that the swap-in wins clicks equivalent to the swap-out target,that the candidate's CVR is maintained, and so on), and if you cannot set the assumptions, write "cannot be computed."Always record and present the swap-out targets' ad_group_id and keyword_id so you can revert later(both are included in the source above as adGroupId / keywordId).
[Approval]Present the list above, and do not apply anything to Amazon Ads until I have reviewed and approved it.Execution after approval should only happen once the user has reviewed and approved the target and the change contents.Note, however, that the bid-change procedure does not cover pausing or adding targets, so those have to be done separately.Check that the execution procedure covers the operation in question before connecting to it.
[Measuring the effect]7 days after execution, fetch ROAS and Orders with "measure the effect of an initiative."Use as the comparison baseline "the 7 days (finalized days only) immediately before execution, for the ad group where the swap was made," andjudge Revert if Orders have worsened against that baseline by more than {{TOLERANCE (e.g., -10%)}}, andKeep if they have improved.Measuring the swapped-out keyword on its own will always be -100% because it was paused, soalways measure at the ad group level.A Revert requires the ad_group_id you recorded beforehand.What you can change — the target period / the number of swaps / the definition of “low performance” (ROAS, orders, ACoS, and so on).
What you get back — a comparison table of current target (exclusion / pause candidate) × swap-in (addition candidate) × expected ROAS improvement.
Changes — analysis and proposal only. Does not change ad settings. The actual pausing / exclusion and additions are done through the approval flows on separate pages.
Next steps — exclude and pause through Add negative keywords, and add through the approval flow in Create Sponsored Products (SP) campaigns.
Prompt 5: Find product ads that get fewer clicks than others
Section titled “Prompt 5: Find product ads that get fewer clicks than others”Find Sponsored Products whose click-through rate is well below the brand average. Because an SP product ad’s surface is the product page’s main image, title, price, and reviews as they are, a low click-through rate can be used as a signal to revisit the product page.
When to use — when you want to surface products that are advertised but not getting clicks, and consider improving the product page or pausing delivery.
What you need — the decline threshold (default is 25% or more below the brand average).
Among Sponsored Products,find the ones whose click-through rate is 25% or more below the brand average.Include the number of days since delivery started.What you can change — the decline threshold (e.g. 25%) / the range of brands / products to cover.
What you get back — a table of product ad × current click-through rate × brand-average click-through rate × days running × recommended action (revisit the product page — main image, title, etc. — or consider pausing delivery).
Changes — analysis and proposal only. Does not change ad settings.
Next steps — you can build product-page improvement ideas in Diagnose your catalog and build improvement proposals (apply them manually in Seller Central / Vendor Central). To revisit bids, use Adjust bids.
Prompt 6: Turn low-CTR search terms and products into exclusion candidates
Section titled “Prompt 6: Turn low-CTR search terms and products into exclusion candidates”Surface search terms / products that get plenty of impressions but few clicks, and gather them as exclusion candidates.
When to use — when you want to clean up search terms / products that only rack up impressions without clicks and drag down your ad efficiency.
What you need — the minimum impressions (default is 1,000 or more) and the low-CTR cutoff (default is 50% or less of the account average).
Analyze the search terms / product targeting in SP campaigns with 1,000 or more impressions,and gather the ones whose click-through rate is 50% or less of the account averageas exclusion candidates.What you can change — the minimum impressions (e.g. 1,000) / the low-CTR cutoff (e.g. 50% or less of the account average).
What you get back — a table of exclusion-candidate search terms / products × impressions × click-through rate × ratio to the account average × recommended match type.
Changes — analysis and proposal only. Does not change ad settings.
Next steps — carry out the exclusions through the approval flow in Add negative keywords.
Prompt 7: Find keywords that perform well at the top of search and can take stronger bids
Section titled “Prompt 7: Find keywords that perform well at the top of search and can take stronger bids”Find keywords that appear often at the top of search results (Top of Search) and also perform well (low ACoS, high ROAS), and judge whether there is room to bid on them more strongly.
When to use — when you want to identify keywords that are already strong and decide whether to push for even more top placement.
What you need — the target is your active SP campaigns. If you’ve registered a target ACoS / ROAS, that becomes the judgment basis.
In my active SP campaigns, identify the keywords with a high top-of-search impression sharethat also have a low ACoS and a high ROAS.Also judge whether there is room to raise their bids further.What you can change — the range of campaigns to cover / the definition of “good performance” (ACoS / ROAS thresholds).
What you get back — a table of keyword × top-of-search impression share × ACoS × ROAS × bid-raise headroom judgment. A share above 95% is judged “near the ceiling”; anything below that is judged “room to raise”.
Changes — analysis and proposal only. Does not change ad settings.
Next steps — raise bids through the approval flow in Adjust bids.
Prompt 8: Find best-selling products you haven’t advertised yet
Section titled “Prompt 8: Find best-selling products you haven’t advertised yet”Among your top-selling products, find the ones you sell but haven’t put into Sponsored Products, and build a plan to add them to your ads.
When to use — when you want to grow products that are selling well but aren’t advertised, by advertising them.
What you need — the number of top-selling products to cover (default is the top 10 products).
Check the top 10 products by sales, and build a plan to add the ones that areon sale but not running in Sponsored Products.Also include the recommended destination campaign, the initial bid, and the initial daily budget.What you can change — the number of items (e.g. top 10 products) / the assumptions behind the recommended bid and daily budget.
What you get back — a table of product (ASIN) × sales × recommended destination campaign × initial bid × initial daily budget.
Changes — analysis and proposal only. Does not change ad settings.
Next steps — add them to your ads through the approval flow in Create Sponsored Products (SP) campaigns.
Related
Section titled “Related”- Add negative keywords — execute the exclusion candidates you surfaced through the approval flow
- Move search terms from Auto to Manual — carve high-potential search terms out into Manual campaigns
- Adjust bids — raise or lower bids based on top-of-search impression share
- Create Sponsored Products (SP) campaigns — build the addition candidates into campaigns
- Diagnose your catalog and build improvement proposals — revisit the product pages of products that aren’t getting clicks
- Analyze Amazon DSP delivery performance — DSP creative-fatigue and order / line-item analysis
- Manage inventory and sales opportunities — consider ad emphasis based on inventory status