Analyze high-performing search patterns with N-grams
On this page you can break the words shoppers actually searched into single-word and multi-word units and find which phrases lead to sales and purchases. You can also surface opportunity keywords that the market searches for but you aren’t delivering against yet, and keywords that already convert well and have room for wider exposure.
About this page
Section titled “About this page”| Item | Details |
|---|---|
| What you can do | Break search terms into single-word and multi-word units and list which phrases contribute to sales and efficiency. Also build candidate lists of opportunity keywords you aren’t delivering yet and keywords with room to expand exposure |
| Applies to | Mainly Sponsored Products (SP) search terms. Both Auto and Manual campaigns can be covered |
| Data & connection needed | The search-term performance data of your connected account (no extra setup needed). Prompt 2 also combines Amazon’s market search data |
| Scope | Read-only (analysis & proposals only). Even the prompts that surface exclusion or promotion candidates only build the candidate lists; they don’t change any ad settings. The actual additions, exclusions, and bid changes happen through the approval flows on the related pages |
When to use this
Section titled “When to use this”- You want to check which words and phrasings drive sales, by phrase length
- You want to find keywords the market searches for but that you aren’t delivering against yet
- You want to check whether keywords that already convert well have room for wider exposure
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. “the most recent finalized week” or “the past 30 days”. Same-day and previous-day data may not be final, so a recently finalized period is safest.
- Number of entries … the default is the top 20 for each phrase length. You can reword the number, e.g. “top 30”. For products with a lot of data, adding “read up to 10 pages” (200 rows per page) helps avoid missing entries.
Quick reference
Section titled “Quick reference”| Goal | What you get | Changes | Prompt |
|---|---|---|---|
| Find the phrases that drive sales, by length | A performance list by phrase length (with DuPont decomposition) | No change | Prompt 1 |
| Surface keywords with market search volume that you aren’t delivering yet | A list of undelivered keywords × market search volume × sales potential | No change | Prompt 2 |
| See scaling room for high-converting keywords | A list of current bid, recommended bid, impression share, and expansion-room judgment | No change | Prompt 3 |
Analyze search terms by phrase
Section titled “Analyze search terms by phrase”Prompt 1: Find the search-term phrases that drive sales
Section titled “Prompt 1: Find the search-term phrases that drive sales”Break search terms into 1-, 2-, 3-, and 4-word phrases and identify, from the top down, the phrases with the highest sales contribution and display efficiency.
When to use — when you want to grasp which words and phrasings drive sales, by phrase length.
What you need — the target period (default is the most recent finalized week) and the number of entries (default is the top 20 for each phrase length).
Using the most recent finalized week of data, break search terms into phrasesof 1, 2, 3, and 4 words, and analyze them by splitting sales intoImpressions × Click-through rate × Conversion rate × Average order value.For each phrase length, show the top 20, ordered by sales contribution anddisplay efficiency (Click-through rate × Conversion rate), highest first.What you can change — the target period / the number of entries (e.g. “top 30”). For products with a lot of data, adding “read up to 10 pages” (200 rows per page) helps avoid missing entries.
What you get back — for each phrase length, a table listing each phrase with its sales, ad spend, ACoS, click-through rate, conversion rate, average order value, cost per click, and display efficiency, plus the median and total for each.
Changes — analysis only. Does not change ad settings.
Next steps — to carve high-performing phrases out into a Manual campaign, use Move search terms from Auto to Manual; to feed them into the product page, use Diagnose the catalog and draft improvements.
Find ad opportunities from search terms
Section titled “Find ad opportunities from search terms”Prompt 2: Find keywords searched in the market but not delivered
Section titled “Prompt 2: Find keywords searched in the market but not delivered”Surface keyword opportunities the market searches for but that you aren’t delivering against yet. Rather than phrase decomposition, this combines Amazon’s market search data with your search-term data to surface “demand you’re missing”.
When to use — when you want to find keywords that have market demand but that your ads aren’t picking up yet.
What you need — the target period (default is the past 30 days) and the number of entries (default is the top 20).
From the SQP (Search Query Performance) data for {{TARGET_PERIOD}}, extract the search terms that have search demand in the market but where your own exposure is thin, and present only the ones you are "truly not delivering against yet" as candidates for new keywords.
■ Scope- Products: {{TARGET_ASINS}} (if omitted, every SQP-eligible product that list_sqp_products returns)- Period: {{TARGET_PERIOD}}. Always pick it as-is from the candidates that list_sqp_date_ranges returns. SQP can only be retrieved on a weekly / monthly grid, so an arbitrary window such as "the last 30 days" cannot be specified. The available candidates may cover only a few months, so list the returned candidates as they are, and if the grid does not line up with the requested period, state the period you actually used and the gap (in days) versus the request.
■ Steps (always run them in this order)1. Confirm the target products and their product_id with list_sqp_products. 🔴 Do not use crawl_status to judge "SQP not supported". SQP data comes back normally even when it is not_monitor (in observation every row was not_monitor, yet analyze_sqp returned 100 rows). Judge by actually calling analyze_sqp.2. Confirm the available periods with list_sqp_date_ranges and decide the date_range to use. The candidates change with frequency (weekly / monthly), so state which one you used.3. Run analyze_sqp for each target product and retrieve the market-side search terms, queryVolume, totalCvr, and impressionShare. Call it once per product (there is no account-wide market view).4. Extract terms whose impressionShare is below {{EXPOSURE_THRESHOLD}} (default 1%) as "candidates with thin exposure".5. 🔴 For each candidate, cross-check with list_search_term_performance using search_key=<candidate term> and always confirm whether you already have delivery there. - ⚠️ search_key is a partial match. Do not treat total_results > 0 as proof that "you are delivering against that term". In observation, when searching with search_key = a given term, rows for other terms that contain it as a substring were mixed into the same result. For a short term (a single common noun, for example) almost everything matches, so judging by the count alone wipes out candidates unfairly. - The correct procedure: raise limit (up to 1000) to fetch the rows, and judge by whether there is a row whose search_term is an exact match for the candidate term. total_results / fetched_row_count / returned_row_count are returned separately, so confirm that you fetched enough rows to see the exact-match rows. - Exact-match row exists → it is not "new". Exclude it, and list its existing match_type, impressions, cost (spend), and ACoS separately as "already delivering". - No exact-match row → a genuine undelivered candidate. If there were partial-match rows, note alongside it that "neighboring terms are being delivered" (phrase and broad match may already be picking it up). - A candidate for which you skipped this cross-check must not be put into the recommendations. An impressionShare close to 0 in SQP does not mean "you are not delivering" (it is just a low share of a huge market; in most cases delivery is in fact running). Observed example: a term with 0.3% impressionShare was in fact an existing delivered term with tens of thousands of impressions, tens of thousands of yen of ad spend, and double-digit purchases in the same period.6. Order only the genuine undelivered candidates by estimated sales impact = queryVolume × market totalCvr × {{ASSUMED_AVERAGE_PRICE}}, descending, up to the top 20. If {{ASSUMED_AVERAGE_PRICE}} is not given, state "cannot be converted to money because the unit price is unknown" and stop at queryVolume × totalCvr (estimated number of purchases). SQP does not include a unit price.
■ Guardrail- Exclude terms with low relevance to your own products. The criteria are {{RELEVANCE_CRITERIA}} (default: exclude terms containing a competitor brand name and terms outside your own category). Competitor brand terms have large market volume and tend to rise to the top, so always state explicitly whether each one is allowed. (Competitor brand terms may also already be picked up by phrase match, so run the cross-check in step 5 here as well.)- Exclude aggregated placeholders (such as "non-branded goods") and terms that are nothing but a product code such as an ASIN / JAN from the candidates.
■ Always include in the output (not optional)- Market side: the number of rows retrieved per product, and the fact that SQP tops out at the top 100 rows per product per period (top_n has an upper limit of 100, and in observation both rawRowCount and normalizedRowCount stuck at 100). 🔴 The totalQueryVolume in the response is the total of the 100 rows that came back, not the total query volume of the market. Do not compute a share using it as the denominator. State that the market-side coverage rate cannot be calculated because the denominator (the total number of queries) is not returned.- Your own side: the period used for the cross-check, and how many search_key cross-checks you ran (the number of candidates and the number run must match). Also, for each candidate, list "whether an exact-match row exists" and "the number of partial-match rows" separately.- Out of scope: Sponsored Display delivery cannot be cross-checked. For Sponsored Brands, state whether or not you cross-checked separately with sponsored_type=sponsored_brand.- Data finalization: if get_data_ingestion_status shows today as fully_missed, the period silently shortens by one day. State the effective period.- If there are 0 genuine undelivered candidates, report that there are 0, exactly as it is. Do not force candidates into existence. In that case you may instead present "terms that are already delivered but have a low impressionShare" as candidates for bid raises / exposure expansion (write them in a separate section from new keywords).
■ Finally, output these three things.1. Recommended actions — state the recommended keywords, the reason (demand and relevance), the priority (in order of estimated sales impact), the confidence level, and the risks (the uncertainty of the demand estimate, and the fact that the market-side coverage rate is unknown)2. How to execute — after approval, add them with create_sp_keywords and the like, once the user has reviewed and approved the proposal (this prompt goes only as far as the proposal and performs no writes)3. Measurement — 2 weeks after the addition, retrieve impressions and ACoS again under "measuring the impact of an action" and check whether the demand was actually there
■ When the premises cannot be metIf list_sqp_products returns 0 rows, or analyze_sqp returns no data, state "SQP not supported" anddo not run the remaining steps. (Do not enter this branch on the value of crawl_status alone.)What you can change — the target period / the number of entries.
What you get back — for each undelivered keyword, a table with its market search volume, expected conversion rate, and an estimate of its sales potential. Because it combines Amazon’s market search data with your search-term data to estimate, accuracy is higher when you have products covered by the market search data.
Changes — analysis and proposal only. Does not change ad settings.
Next steps — to add the keywords you surfaced to your ads, use Create Sponsored Products (SP) campaigns; to see the whole-market funnel and your own share, use Analyze where shoppers drop off between search and purchase (SQP).
Prompt 3: Check scaling room for high-converting keywords
Section titled “Prompt 3: Check scaling room for high-converting keywords”For the top 20 existing high-converting keywords, check the recommended bid and the share of top-of-search placements, and report whether there’s room to expand exposure.
When to use — when you want to judge whether keywords that already lead to purchases can capture even more exposure.
What you need — the target is your existing high-converting keywords (default is the top 20).
Fetch the keyword performance for the past {{FINALIZED_PERIOD (e.g. the most recent finalized 14 days; today is unfinalized, so always exclude it)}} with the per-target performance list tool, in a single call (type = keyword, minimum clicks = {{MIN_CLICKS (e.g. 30)}}). Take ACoS, conversion rate, impression share, and recommended bid all from this one source, and do not mix them with values from other tools. The recommended bid is included on the rows of this list as suggested_bid, so there is no need to call a separate bid-optimization tool to fill it in.
1. At the top, state "rows fetched / upstream total / coverage rate" and "the upstream sort order". The response returns four separate counts (upstream total / rows fetched / rows after filtering / rows returned). Compute the coverage rate as "rows returned ÷ rows after filtering" and write which fields you used as the numerator and the denominator. If you applied the minimum-clicks filter, the upstream total is not "all targets in the period" but "the total that matches the condition", so note that. If the coverage rate is below 100%, state explicitly that "this is not the top 20 of all keywords, but the top 20 within the range that could be retrieved".2. Verify the definition of conversion rate arithmetically. Clicks, units sold, and orders are all returned on the same row, so compute both "units sold ÷ clicks" and "orders ÷ clicks" and determine which one the returned conversion rate matches (in observation it matched the units-sold basis). If it is not order-based, state that in a footnote to the table. Exclude rows whose conversion rate is physically impossible against the clicks (over 100%) and rows that fall short of the minimum clicks.3. For the top 20 by conversion rate, build a table of "current bid / recommended bid / top-of-search impression share / current ACoS / sales". Sales are often the total of the same SKU plus other SKUs, so if the breakdown is returned, include it alongside.4. Judge a row as "room to expand exposure" when its impression share is {{THRESHOLD (e.g. below 20%; always check the range in the real data before setting it, and do not pick a value that nearly every row would meet)}} and its recommended bid is above its current bid. Exclude rows whose recommended bid is at or below the current bid as having no room to raise, even if their impression share is low. 🔴 Before deciding the threshold, output the minimum, median, and maximum impression share across all fetched rows. In observation, most rows were distributed well below 20%, so using 20% as-is makes nearly every row "has room" and the prioritization loses its meaning. Decide the threshold after looking at the distribution, and state the value you chose and why.5. Order the priority by "how low the impression share is × current sales". Do not produce a numeric estimate of the expected increase in impressions or sales (the data needed to predict the increment does not exist). If an expected increase is requested, state "cannot be predicted".6. Guardrail: exclude keywords whose current ACoS already exceeds {{ACOS_CEILING (e.g. within 1.2x current, and within X% in absolute terms)}}, even if their impression share is low. For the baseline "current ACoS", use only the value from the source fixed in step 1.7. If you also use a bid-optimization tool for reference, always specify the target ACoS explicitly. If it is unspecified, it is automatically replaced with the observed actual for the whole account and switches to "decreases and holds only", so not a single increase proposal comes out. State the target ACoS value you specified in the output. Note that the bid-optimization tool's response may not include a recommended bid, so keep the source of the recommended bid fixed to suggested_bid in the list from step 1.
Before executing, always: present the list of changes (target, current value, new value, rationale) and do not apply anything to the platform until you have approval.Guardrail: exclude from the proposal any change that would breach {{METRIC_TO_PROTECT (e.g. keep ACoS within 1.2x current)}}.After executing: on {{EVALUATION_DATE (e.g. 2 weeks later)}}, re-fetch ACoS and impression share from the same source over the same period length, compare them, and give one of Keep / Expand / Adjust / Pause / Revert / Investigate. The impression-share time series has missing weeks, so on re-fetch treat a week with an empty value as "could not retrieve", not as "deterioration". The upstream caches aggregation results for about 4 hours, so a very recent bid change is not reflected immediately.Execution: reflect it as a bid change only after the user has reviewed and approved the proposal, and use "measuring the impact of an action" for the effect measurement.What you can change — the number of items to cover (e.g. the top 20).
What you get back — for each keyword, a table with its current bid, recommended bid, share of top-of-search placements, and a judgment on the room to expand exposure. A share above 95% means you’ve hit the ceiling (little room left); below that, there’s room to raise.
Changes — analysis and proposal only. Does not change ad settings.
Next steps — raise bids through the approval flow in Adjust bids, and raise daily budgets through Adjust budgets.
Related
Section titled “Related”- Add negative keywords — exclude low-performing search terms
- Move search terms from Auto to Manual — process the promotion candidates found with N-grams
- Analyze where shoppers drop off between search and purchase (SQP) — look at Amazon’s market search data instead of Picaro’s ad data
- Find high-performing keywords and product targeting — turn the search terms you surfaced into targeting
- Diagnose the catalog and draft improvements — feed high-performing search terms into the product page
- Create Sponsored Products (SP) campaigns — build the extracted keywords into Manual campaigns