Why do keyword research in a spreadsheet with Gemini?
Keyword research is a spreadsheet job: hundreds of candidates, a few scores, a lot of sorting. Gemini now runs inside Google Sheets, so the brainstorming, clustering and translation can happen in the same sheet where you score and pick.
The .xlsx template download is coming soon. Until then, you can rebuild it in Google Sheets from the tab-by-tab layout below. The counters, duplicate checks and scoring formulas work in Sheets, Excel and LibreOffice. The Gemini prompts are written out in each tab, ready to paste.
What you need
- The AI function in Google Sheets (
=AI("prompt", range), also available as=Gemini(...)). Google offers it on eligible Workspace plans (Business/Enterprise Standard and Plus) and Google AI Pro/Ultra accounts. If you don't have it, paste the same prompts into the Gemini side panel in Sheets or into gemini.google.com, and paste the answers back. - A real volume signal. Gemini can't see App Store search volume. Use Apple Ads keyword search popularity, or your ASO tool's volume and difficulty scores.
Two limits of the AI function to know about (from Google's help page): it returns text only, and it can't be nested inside another formula. So the template puts the AI output in one column and splits it with an ordinary formula in the next column.
The workflow (about 45 minutes for your first app)
- Seeds (5 min): write 10 seed keywords that describe the job your app does.
- Expansion (10 min): Gemini turns each seed into 15 long-tail search phrases. Paste them into the Keywords tab (one per row).
- Clusters (5 min): Gemini groups the keywords by search intent.
- Scoring (15 min): add relevance, volume and difficulty (1–5 each). The sheet calculates the score and tier.
- Metadata Builder (10 min): your top cluster goes into the title, the next into the subtitle, the rest into the 100-character keyword field. Live counters and a duplicate check tell you when it's right.
- Localization (optional, about 10 min per storefront): Gemini adapts your keywords for other storefronts, with an intent check.
The template: tab by tab
Tab 1: Start Here
Instructions, the scoring rubric and links between tabs.
Tab 2: Seeds
| Column | Contents |
|---|---|
| A: Seed keyword | 10 seeds, e.g. calorie counter, macro tracker, food diary |
| B: Where it came from | Your listing, a competitor title, a review phrase |
| C: Gemini expansion | The AI prompt (Prompt 2 below). The result is 15 phrases separated by semicolons |
| D: Split helper | =IFERROR(SPLIT(C2,";"),"") spreads the phrases across the row, ready to copy into the Keywords tab (Sheets) |
Tab 3: Keywords (the master list)
| Column | Contents | Formula |
|---|---|---|
| A: Keyword | One phrase or word per row | |
| B: Seed | Which seed it came from | |
| C: Cluster | Filled from Prompt 4 | |
| D: Relevance (1–5) | How well your app satisfies this search | |
| E: Volume (1–5) | From Apple Ads popularity or your ASO tool, mapped to 1–5 | |
| F: Difficulty (1–5) | 5 = dominated by big brands | |
| G: Score | Relevance × Volume × (6 − Difficulty), max 125 | =IF(COUNT(D2:F2)=3,D2*E2*(6-F2),"") |
| H: Tier | A / B / C | =IF(G2="","",IF(G2>=60,"A",IF(G2>=30,"B","C"))) |
| I: Assign to | Title / Subtitle / Keyword field / Test later / Drop | Dropdown |
| J: Characters | Length of the keyword | =LEN(A2) |
| K: Times in metadata | How often this word appears across title + subtitle + keyword field (single words) | Counts against the Metadata Builder |
| L: Status | Duplicate / Used / Unused | =IF(A2="","",IF(K2>1,"DUPLICATE",IF(K2=1,"Used","Unused"))) |
Tab 4: Clusters
| Column | Contents | Formula |
|---|---|---|
| A: Cluster | Cluster name | |
| B: User intent | One sentence from Prompt 4 | |
| C: # Keywords | =COUNTIF(Keywords!C:C,A2) |
|
| D: Average score | =IFERROR(AVERAGEIF(Keywords!C:C,A2,Keywords!G:G),"") |
|
| E: Best score | =IFERROR(MAXIFS(Keywords!G:G,Keywords!C:C,A2),"") |
|
| F: Recommended field | Highest average → Title, next → Subtitle, rest → Keyword field |
Tab 5: Metadata Builder
| Field | Limit | Live counter | Status |
|---|---|---|---|
| Title | 30 | =LEN(B3) |
=IF(C3>30,"OVER by "&(C3-30),"OK, "&(30-C3)&" left") |
| Subtitle | 30 | =LEN(B4) |
same pattern |
| Keyword field | 100 | =LEN(B5) |
same pattern, plus a spaces check: =IF(ISNUMBER(SEARCH(" ",B5)),"Remove spaces","No spaces ✓") |
| Promotional text | 170 | =LEN(B6) |
same pattern |
A helper cell normalises all indexed text (title + subtitle + keyword field), lowercases it and strips punctuation. The Keywords tab counts each word against it, so any word used twice is flagged DUPLICATE.
Bonus Sheets-only formula that lists every duplicated word in one cell (put the normalised text in B10):
=JOIN(", ",UNIQUE(FILTER(FLATTEN(SPLIT(TRIM(B10)," ")),COUNTIF(FLATTEN(SPLIT(TRIM(B10)," ")),FLATTEN(SPLIT(TRIM(B10)," ")))>1)))
Tab 6: Localization
| Column | Contents |
|---|---|
| A: Storefront | e.g. United Kingdom |
| B: Locale | e.g. English (UK) |
| C: Local keyword ideas | Gemini output (Prompt 9) |
| D: Local title / E: length | =LEN(D2) |
| F: Local subtitle / G: length | =LEN(F2) |
| H: Local keyword field / I: length | =LEN(H2) |
| J: Native speaker checked? | Yes / No |
Tab 7: Prompts
All 12 prompts below, ready to paste.
The scoring rubric
| Score | Relevance | Volume | Difficulty |
|---|---|---|---|
| 1 | Barely related | Almost no searches | Easy: few strong apps |
| 2 | Related, but not your core use | Low | |
| 3 | Partly satisfies the search | Medium | Mixed results |
| 4 | Strong match | High | |
| 5 | Exactly what your app does | Very high | Top results are big brands with huge rating counts |
Score = Relevance × Volume × (6 − Difficulty). Difficulty is inverted so easier keywords score higher. Relevance multiplies everything: a high-volume keyword your app doesn't satisfy still scores low, and it would hurt conversion anyway.
The tier cut-offs (A ≥ 60, B ≥ 30) are a starting point, not a law. Adjust them once you see your own distribution.
The 12 prompts
Each prompt works in an =AI() cell (with the range shown) or pasted into the Gemini side panel.
Prompt 1: Seed keywords (Seeds tab, run once)
=AI("I'm doing App Store keyword research for an iOS app. App description: [ONE SENTENCE]. Target user: [WHO]. List 10 seed search terms (1–3 words each) a real iPhone user would type to find an app like this. Focus on the problem and the outcome, not feature jargon. Return them separated by semicolons, lowercase, no numbering.")
Prompt 2: Long-tail expansion (Seeds tab, column C, one per seed)
=AI("Give 15 App Store search phrases (2–4 words, lowercase) that a US iPhone user might type, closely related to the seed keyword in the cell. Include problem-based and outcome-based phrasing. No brand names. Return only the phrases separated by semicolons.", A2)
Prompt 3: Clean and de-duplicate (side panel, after pasting all phrases into the Keywords tab)
Look at the keywords in column A of the Keywords tab. Remove exact duplicates, near-duplicates that differ only by plural or word order, and anything containing a brand name or trademark. Return the cleaned list.
Prompt 4: Intent clusters (Keywords tab, column C)
=AI("Assign this App Store keyword to exactly one of these intent clusters: [CLUSTER 1], [CLUSTER 2], [CLUSTER 3], [CLUSTER 4], [CLUSTER 5]. Return only the cluster name.", A2)
Not sure what your clusters are yet? Ask the side panel first: "Suggest 4–6 intent clusters for the keywords in column A, each with a one-sentence user intent."
Prompt 5: Relevance first pass (Keywords tab, column D; you review it afterwards)
=AI("My app: [ONE SENTENCE]. On a scale of 1–5, how well would this app satisfy someone who searches the keyword in the cell? 5 = exactly what they want, 1 = barely related. Return only the number.", A2)
Always review these by hand. You know your app better than the model does.
Prompt 6: Title options (Metadata Builder)
=AI("Write 5 App Store title options, each 30 characters or fewer including spaces, that start with the brand '[BRAND]' and include the most important keyword from this list. Show the character count after each. Separate options with semicolons.", Clusters!A2:B2)
Prompt 7: Subtitle options
=AI("My App Store title is in the first cell. Write 5 subtitles, each 30 characters or fewer, that do not repeat any word from the title, use keywords from the second cell, and state a user benefit. Show the character count after each. Separate with semicolons.", B3:B4)
(Put your title in B3 and paste your second-cluster keywords into B4 temporarily, or point the range at any two cells holding them.)
Prompt 8: Keyword field packing
Using the Keywords tab rows where "Assign to" = Keyword field, sorted by Score, build a 100-character App Store keyword field: single words, comma-separated, no spaces, no word that already appears in the title "[TITLE]" or subtitle "[SUBTITLE]", no plurals of words already present. Show the string and its character count.
Paste the result into B5 of the Metadata Builder and check that the counter and DUPLICATE flags agree.
Prompt 9: Localize with intent (Localization tab, column C)
=AI("Act as a native App Store user in [COUNTRY], speaking [LANGUAGE]. For an app that [ONE SENTENCE], list the 15 search terms locals would most likely type, in [LANGUAGE]. Do not just translate English terms: if locals use an English loanword or a different concept, use that. After each term add a literal English back-translation in brackets. Separate with semicolons.")
Prompt 10: Cultural intent check
=AI("For the App Store in [COUNTRY], check this keyword list for: words that mean something different locally, terms that are offensive or awkward, and literal translations locals wouldn't search. Return only the problem keywords with a one-line reason each, or 'No issues'.", C2)
Prompt 11: Google Trends sanity check (side panel or gemini.google.com)
I'm comparing these App Store keyword candidates: [5 KEYWORDS]. Using Google Search and Google Trends data you can access, tell me which have rising, stable or declining interest over the past 12 months in [COUNTRY], and any seasonal pattern. Say clearly where you are unsure. I'll verify in Google Trends myself.
Then verify in Google Trends (trends.google.com). Compare up to 5 terms, set the country, and look at "Related queries" for rising phrases. Web search interest is not App Store search volume, so use it as a direction signal (rising, seasonal, dying), not a volume score. YouTube search suggestions (start typing in YouTube's search bar) are another quick source of real user phrasing, especially for how-to and problem queries.
Prompt 12: Final review
Review my final App Store metadata. Title: [B3]. Subtitle: [B4]. Keyword field: [B5]. Check: limits (30/30/100), duplicate words across fields, spaces in the keyword field, filler words (app, free, iphone, category name), trademarks, and whether the title and subtitle read naturally to a human. Return a pass/fail list and a corrected version if needed.
Localizing for 10 storefronts
A practical first set for an English-language app, with what to check in each. Pick based on your own App Store Connect impressions by territory, not this list.
| # | Storefront | Locale(s) to fill | What to check |
|---|---|---|---|
| 1 | United States | English (US) + Spanish (Mexico) | Use the Spanish (Mexico) keyword field for extra English keywords only if you're confident about cross-locale indexing (practitioner-reported, not Apple-documented) |
| 2 | United Kingdom | English (UK) | Spelling (colour, organise), different terms (mobile vs cell, "slimming" vs "diet") |
| 3 | Canada | English (CA) + French (CA) | Quebec French terms differ from France French |
| 4 | Australia | English (AU) | Local terms and spelling |
| 5 | Germany | German | Compound words (Kalorienzähler); Germans often search English loanwords too |
| 6 | France | French | Formal vs informal tone in the subtitle |
| 7 | Japan | Japanese | Katakana loanwords vs kanji; have a native speaker check |
| 8 | Brazil | Portuguese (Brazil) | Not the same as Portugal Portuguese |
| 9 | Mexico | Spanish (Mexico) | Not the same as Spain Spanish |
| 10 | South Korea | Korean | Native check essential |
Rules for every storefront
- Translate the intent, not the words (Prompts 9 and 10).
- Re-check limits. Translations often run longer, and the counters in the Localization tab will flag it.
- Never ship an unchecked machine translation in a market you care about. Mark column J "No" until a native speaker has looked.
Try GROWNX free: Free plan available
Track your ASO in GROWNX. GROWNX is one ASO dashboard for keywords, listing audits and competitors, built by an indie developer with multiple live iOS apps.
Free plan available. Start free.
Start free →