Find app ideas
Finds underserved App Store / Google Play niches with live AppGoat data – search demand (keyword popularity) against weak supply (low ratings, abandoned incumbents, few strong apps) – and returns a ranked shortlist of app ideas with evidence and user pain points.
Turns "what should I build?" into a ranked shortlist of niches where people search a lot and the existing apps are weak. Each pick comes with the numbers behind it and what users of the current apps complain about, so the idea has a wedge.
A paid GET /v1/opportunities endpoint (an opportunity score over the whole catalog) is coming;
when it exists, steps 1–3 become one call and this playbook only does steps 4–6.
Install
The appgoat/skills repository is private until its public release, so the plugin and git commands below are coming soon. Today, run the playbooks as prompts of the AppGoat MCP server (Claude, Cursor, ChatGPT) or download the SKILL.md from this page.
Install the AppGoat plugin (all playbooks plus the AppGoat MCP server), then run /mcp to sign in.
/plugin marketplace add appgoat/skills
/plugin install appgoat-playbooks@appgoatRun it by asking for it in plain words, or by name:
/find-app-ideas [niche] [store] [country]Add the connector: Settings → Connectors → Add custom connector → https://api.appgoat.ai/mcp.
Pick find-app-ideas from the “+” menu → AppGoat (it is served as a prompt), or upload the skill folder as a zip in Settings → Capabilities → Skills.
Add the MCP server to .cursor/mcp.json:
{ "mcpServers": { "appgoat": { "url": "https://api.appgoat.ai/mcp" } } }Type / in the chat and pick find-app-ideas, or save the SKILL.md as .cursor/rules/find-app-ideas.mdc.
In developer mode (Settings → Apps & Connectors → Advanced), add a connector with https://api.appgoat.ai/mcp and sign in. Then ask:
Use the AppGoat list_playbooks tool and run the find-app-ideas playbook.Copy the skill folder into your agent’s skills directory and add the MCP server:
git clone https://github.com/appgoat/skills /tmp/appgoat-skills
cp -r /tmp/appgoat-skills/skills/find-app-ideas ~/.claude/skills/
claude mcp add --transport http appgoat https://api.appgoat.ai/mcpWhen to use
- The user has no idea yet, or a broad area ("health", "something for teachers").
- The user has an idea and wants to know if there is demand and room ("validate a habit tracker for ADHD").
- Not for improving an existing app (use
app-audit-liteoraso-keywords-metadata-rewrite).
Inputs
niche(optional): a seed area or idea, e.g.habit tracker,plant care,finance for couples. Without it, start from the charts (step 1).store(optional, defaultapple):appleorplay. Run once per store; demand differs.country(optional, defaultus).
Ask at most one question before starting: whether the user has constraints (solo dev, no backend, paid vs free). Otherwise assume a solo developer shipping in 4–8 weeks.
Steps
Costs in AppGoat credits; watch the footer of each tool result. Without the MCP, use the REST equivalents in the REST calls below.
- Seeds.
- With
niche: write 8–10 seed terms a user would type into the store (2–3 words, no brand names). - Without
niche:get_charts{store, country, chart: "free", category} and {chart: "grossing"} for 4 categories (Apple genre ids: 6013 Health & Fitness, 6007 Productivity, 6017 Education, 6012 Lifestyle; Play: HEALTH_AND_FITNESS, PRODUCTIVITY, EDUCATION, LIFESTYLE) - 8 calls, 8 credits. Take apps withis_newordelta≥ 10 and the grossing apps outside the top 20 free; derive 8–10 seed terms from what they do.
- With
- Expand.
keyword_research{terms: 5 seeds, store, country, include: ["related", "suggestions"]}, twice for 10 seeds - 5 per seed, 50 credits. Collect related terms and suggestions. - Measure candidates. Pick the 25 most specific candidate terms (prefer 2–4 words that describe
a job, e.g. "adhd planner", not "planner").
keyword_research{terms: 25 terms, store, country, include: ["top_apps"]} - 1 per keyword, 25 credits. Terms that come backpendingare being measured: call again with just those after a minute (charged again only for those). - Check supply. For the 8 best terms by the demand rule below:
get_app{app: <app_id>, store, country} for the top 3top_appsof each - ~24 credits - to readupdated_at, rating, ratings_count, price, has_iap. Optionallysearch_apps{q: term, store, limit: 20} - 1 each - to count how many apps target it directly by title. - Find the wedge. For the 5 best niches:
get_reviews{app: <top incumbent>, store, country, rating: "1-2", limit: 100} for the top 2 incumbents - ~10 credits. Group complaints into themes. - Rank and write up (no calls).
Budget: about 150–200 credits per run (up to ~250 with refreshes and re-measured pending terms).
Stop early if credits_remaining falls below the remaining budget and tell the user.
Decision rules
- Demand: popularity ≥ 30 (5–100 scale). Popularity ≥ 50 with difficulty ≥ 70 is a "big but crowded" market: keep it only if supply is weak.
- Difficulty: ≤ 55 to be a candidate; ≤ 35 is "easy".
- Weak supply (at least one must hold):
- median rating of the top 10 < 4.3, or
- ≥ 3 of the top 10 not updated in 12 months, or
- ≤ 2 of the top 10 have the term (or a close variant) in their title, or
- the top 3 average < 5,000 ratings (Apple) / < 100k installs (Play).
- Monetization signal: at least one top-10 app has IAP or is paid, or the term's apps appear in the grossing chart. Without it, label the idea "hobby / growth only".
- Opportunity score (rank by it):
popularity × (1 − difficulty/100) × supply_weakness, wheresupply_weakness= 1 + 0.25 per weak-supply condition met (max 2). - Wedge: a pick needs a complaint theme mentioned in ≥ 5 of the incumbents' 1–2★ reviews, or a missing feature named in ≥ 3. No wedge: drop it to the "watch" list.
- Exclude: regulated or high-liability niches (medical diagnosis, lending, gambling), anything that depends on another company's private API, and terms that are mostly a brand name.
- Return 3–5 picks. If fewer qualify, say so and show the near misses with the rule they failed.
Output format
# App ideas: <niche or "chart scan"> (<store>, <country>) - <date>
| # | Idea | Key term | Popularity | Difficulty | Top-10 median ★ | Stale incumbents | Score |
|---|---|---|---|---|---|---|---|
| 1 | ADHD-friendly habit tracker | adhd habit tracker | 41 | 28 | 4.1 | 4 of 10 | 39.4 |
## 1. <Idea>
- **Demand:** <term> (pop 41), <term 2> (pop 33), related: <terms>
- **Supply:** top apps <name (4.0★, updated 2024-11)>, …; only 1 of 10 has the term in its title.
- **Wedge:** users complain about <theme> ("<≤ 120-char quote>", 2★) and <theme>.
- **Money:** <who charges what>.
- **MVP in one line:** <scope a solo dev can ship in 4-8 weeks>.
- **Launch keywords:** title "<≤ 30 chars>", subtitle "<≤ 30 chars>".
## Near misses
- <term>: popularity 58 but difficulty 81 and top apps average 4.7★.
_Credits used: <sum of the footers>._
**Automate this →** re-run monthly to see new movers; once you pick one, track its keywords with
`track_keywords` and run `aso-keywords-metadata-rewrite` before launch.
Automate it
A monthly scan that opens an issue with new picks.
GitHub Action (.github/workflows/appgoat-ideas.yml, secrets ANTHROPIC_API_KEY, APPGOAT_API_KEY):
name: AppGoat app ideas
on:
schedule:
- cron: "0 8 1 * *"
workflow_dispatch:
inputs:
niche:
description: Seed niche (optional)
required: false
permissions:
contents: read
issues: write
jobs:
ideas:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install AppGoat playbooks
run: |
git clone --depth 1 https://github.com/appgoat/skills /tmp/appgoat-skills
mkdir -p .claude/skills
cp -r /tmp/appgoat-skills/skills/* .claude/skills/
- uses: anthropics/claude-code-action@v1
env:
GH_TOKEN: ${{ github.token }}
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: |
Use the find-app-ideas skill with niche "${{ inputs.niche }}" (empty = chart scan), store apple, country us.
Open one GitHub issue titled "App ideas <YYYY-MM>" with the report as the body (gh issue create).
claude_args: |
--mcp-config '{"mcpServers":{"appgoat":{"command":"npx","args":["-y","@appgoat/mcp"],"env":{"APPGOAT_API_KEY":"${{ secrets.APPGOAT_API_KEY }}"}}}}'
--allowedTools mcp__appgoat__get_charts,mcp__appgoat__keyword_research,mcp__appgoat__get_app,mcp__appgoat__search_apps,mcp__appgoat__get_reviews,mcp__appgoat__get_job,Bash(gh issue create:*)
Claude Code routine:
/schedule monthly on the 1st at 09:00 - Run the find-app-ideas playbook for the niche "<niche>" on the App Store, US. Compare with last month's picks (in ideas/), highlight new entries and dropped ones, and save the report as ideas/<YYYY-MM>.md.
Without MCP: the REST calls
Without the AppGoat MCP server, call the API directly. Base URL https://api.appgoat.ai/v1,
header x-api-key: $APPGOAT_API_KEY (create a key at https://dash.appgoat.ai). Responses are
{ "data": …, "meta": { "credits_used", "credits_remaining", … } }; errors carry error.hint.
| MCP tool | REST call |
|---|---|
get_charts | GET /charts?store=apple&country=us&chart=free&category=6013 |
keyword_research (expand) | GET /keywords?qs=habit tracker,adhd planner&store=apple&country=us&include=related,suggestions |
keyword_research (measure) | GET /keywords?qs=term1,term2,…&store=apple&country=us&include=top_apps (≤ 25 terms) |
get_app | GET /apps/{app}?store=apple&country=us |
search_apps | GET /search?q=habit tracker&store=apple&limit=20 |
get_reviews | GET /apps/{app}/reviews?country=us&rating=1-2&limit=100 |
get_job | GET /jobs/{id} (free) |
curl -s -G -H "x-api-key: $APPGOAT_API_KEY" https://api.appgoat.ai/v1/keywords \
--data-urlencode "qs=habit tracker,adhd planner" -d store=apple -d country=us -d include=top_apps
More playbooks
/app-audit-lite~25–40 credits a runApp audit (lite)
Runs a quick App Store / Google Play audit of one app with live AppGoat data – listing quality, ratings trend, recent complaints, keyword rankings, competitors and their recent changes – and ends with a prioritized fix list.
/aso-keywords-metadata-rewrite~40–80 credits a runASO keywords → metadata rewrite
Researches App Store / Google Play keywords for one app with live AppGoat data (current ranks, competitor keyword gaps, popularity, difficulty, relevance) and rewrites the title, subtitle, keyword field and description within the store character limits.
/competitor-digest~15–55 credits a runCompetitor digest
Writes a weekly competitor digest for one App Store / Google Play app from an AppGoat competitor watch – what each competitor changed (title, subtitle, description, screenshots, icon), price and in-app purchase changes, new versions with release-note summaries, rating and chart moves, keyword gains and losses against the user's app, keyword gaps and review themes – and ends with 3 recommended actions linked to other playbooks. Sets up or reuses the competitor_set watch.
/reviews-to-github-issues~2–10 credits a runReviews → GitHub issues
Turns recent negative App Store / Google Play reviews into deduplicated GitHub issues – one issue per problem topic, with linked and quoted reviews, new reviews added as comments to the existing issue instead of duplicates. Uses AppGoat review data and the gh CLI (or the GitHub MCP server).
/reply-to-every-review~1–3 + 1 per posted reply credits a runReply to every review
Drafts a reply to every unanswered App Store and Google Play review of the user's own app, in the app's voice, through their connected App Store Connect / Play Console account – each reply is a dry run with a before/after diff and AppGoat guardrail scores (policy, tone, claims), and only the replies the user approves are posted.
/apple-ads-optimizer~5–8 per campaign + 1 per applied change credits a runApple Ads optimizer
Optimizes the user's Apple Ads (Search Ads) campaigns through their connected Apple Ads account – reads the last 14 days of keyword and search term reports, raises bids on keywords that convert under the target CPA (capped +30% per run), lowers or pauses keywords that spend without installs, adds converting search terms as exact keywords and wasteful ones as negatives – every change a dry run with a diff the user approves.
/localization-push~35–60 per locale + 1 per applied change credits a runLocalization push
Localizes the user's own App Store / Google Play listing into new languages through their connected App Store Connect or Play Console account – picks target locales from markets with demand, researches the keywords people actually search in each country with AppGoat, writes a localized name, subtitle, keyword field and promotional text (Play title, short and full description) within the store limits, and pushes each locale as a dry run with a before/after diff the user approves.