Community研究与数据分析github.com

应用关键词研究

在动手开发前,利用 App Store 公开数据验证应用创意。将创意转化为搜索短语,测量需求(App Store 自动补全)和竞争(当前排名前 10 的应用),按机会对关键词排序,并绘制市场地图。用户想进行关键词研究、ASO、验证“是否有需求”、“谁是竞争对手”、“该叫什么名字/用什么关键词”,或比较应用创意时使用。

应用关键词研究 是什么?

该技能专为开发者、产品经理和 ASO 专家设计,用于在开发前通过 Apple 公开的 App Store 数据验证应用创意。其核心工作流程将创意转化为 10-20 个种子短语,通过自动补全展开以测量需求,并通过分析排名前十的应用(以评分数量为竞争代理指标)来评估难度。最终输出包括:按机会得分排序的关键词表(结合需求与竞争)、市场地图(显示市场主导者及其规模、更新频率和商业模式),以及包含标题、副标题和关键词字段的 App Store 元数据建议。该技能支持 52 个主要 App Store 国家的搜索,可处理多语言种子短语,并提供可通过 --app-id 参数让已上线的应用跟踪自有排名的功能。其关键启发式评分系统(需求、竞争、机会)帮助识别可竞争的“甜点”关键词,同时自动标记品牌短语和低需求短语。此外,它还支持与 Astro(付费关键词工具)和 RankPilot(自有跟踪器)集成,分别用于更精确的流行度数据和发布后排名跟踪。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jamesisbuilding/App-Building-Skills/tree/main/skills/app-keyword-research

Installed? Explore more 研究与数据分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

应用关键词研究 是做什么的?

针对一个应用创意,基于 Apple 公开的 App Store 数据回答三个问题,无需账号或 API 密钥:

  1. 流量: 人们是否在搜索这个?用哪些词搜?
  2. 难度: 为这些词排名有多难?
  3. 市场: 哪些应用占据这个领域?它们有多大?如何盈利?

最终给出结论、要瞄准的关键词,以及 App Store 标题、副标题和关键词字段。

工作流程

1. 将创意转化为 10–20 个种子短语

种子短语是起始搜索词;脚本会通过自动补全展开每一个词。覆盖以下内容:

  • 核心任务,用用户的语言表达: "心算"、"习惯追踪器"(而不是"计算能力提升")。
  • 同义词和替代名称: "数学游戏"、"算术"、"乘法表"。
  • 目标受众: "成人数学游戏"、"儿童数学游戏"。不同的受众就是不同的市场。
  • 它可能竞争的相邻类别: 对于一个数学应用,可以是"脑力训练"。
  • 结果短语: "快速计算"、"数学练习"。

不要使用竞争对手的品牌名称作为种子。它们无论如何都会出现在结果中,这对于绘制市场地图很有用。

其他国家/地区应使用其本地语言写种子。德国人搜索德国人输入的内容("kalorienzähler",而不是"kalorien tracker"),所以要根据当地用户的输入为每个市场写种子,并通过自动补全验证。切勿直接翻译英文赢家短语并假定它们仍然有效。

第二轮:从现有竞品的标题中获取种子。第一轮运行后,阅读市场地图中排名靠前应用的非品牌词(例如 "Mental Math Cards Games & Tips" 中的 "cards"、"tips")。开发者会趋同于有效的词汇,因此你没有覆盖到的词会成为第二批种子,并运行到相同的 --out 目录中。

2. 执行研究

python3 -I scripts/keyword_research.py \
  --seeds "心算, 数学游戏, 成人数学游戏, 脑力训练, 乘法表" \
  --country us --max-terms 120 --out research/<idea>-us-<yyyy-mm-dd>
  • 运行时间: 每个短语开始时约 6 秒,随着相同的应用重复排名(其详情已缓存),时间会下降。120 个短语大约需要 8–10 分钟,因此大的批次应在后台运行。
  • 进度: 结果会随时保存。report.md 在运行中途即可阅读,重新运行到同一个 --out 目录会从中断处继续。
  • 其他选项:
    • --seeds-file seeds.txt:每行一个短语。
    • --no-expand:仅对提供的种子短语进行评分,不展开。
    • --country gb|de|jp|…:52 个主要商店前端。自动补全和排名因国家而异,因此请为每个上线市场分别进行研究。
    • --app-id <trackId>:对于已上线的应用,为每个短语填充“我们的排名”列(1–200,或 200+),无需额外成本。在元数据更改后,重新运行到带日期的文件夹以跟踪排名变化。
  • 输出:
    • report.md:包含下面两个表格。
    • keywords.json 和 apps.json:原始数据,用于后续提问。
  • 测试: python3 -I scripts/test_keyword_research.py 和 python3 -I scripts/test_check_metadata.py 离线运行。

3. 阅读关键词表格

每个短语获得三个 0–100 的启发式评分:

评分测量方式解读
需求 (Demand)输入越少字母 App Store 就建议该短语,且建议位置越高,搜索量越大。Apple 按搜索量对建议进行排序。字母数 ≤ 4:高。5–7:中。≥ 8:低。从未被建议(评分 0):未知,低于自动补全的测量下限。
竞争 (Competition)当前排名前 10 应用的中位数评分数量(对数刻度),加上每个排名前 10 应用在其名称或副标题中包含完整短语的加 2 分(复数、变音符号和复合词如 "kalorienzähler" = "Kalorien Zähler" 算在内;副标题仅对大约前 8 名可知)。中位数 < 1k:弱。1k–20k:中等。20k–100k:强。> 100k:被大品牌占据。5 个或更多精确标题意味着许多应用直接瞄准该短语。
机会 (Opportunity)需求 × (1 − 竞争 / 100)排序依据。理想区间是需求 ≥ 60 且竞争 ≤ 55。

结论 (Verdict) 列将这些转化为一个词:target(需求 ≥ 40,竞争 ≤ 55:新应用有望获胜)、hard(竞争 > 55)、low(需求 < 40)、floor(需求为 0)、brand(见下文),以及在使用 --app-id 时的 own(你的应用排名前三)或 push(排名前十:接近,值得在列表页中加强)。这是一个初步排序,而非最终决定:下面的意图筛选仍然适用。

需要指出的模式:

  • 高需求,弱竞争:机会窗口。 例如:"心算"(输入 4 个字母后被建议,前 10 名评分中位数 609)。
  • 高需求,但排名前十的应用没有在其名称或副标题中包含完整短语:标题机会窗口,即使竞争很强。例如:"成人数学游戏",评分中位数 112k,但精确标题匹配数为 0/10。
  • 自动补全短语是品牌名称(例如 "times tables rock stars"、"impulse brain training")属于竞争对手。将其列在市场地图中,永远不要放入你的关键词;Apple 会拒绝使用其他应用商标的元数据。当该短语是排名前十应用的整体标题时,脚本会将其标记为 (brand) 并放在列表末尾,因为小应用自身的名称会得到接近零的竞争评分并排到表格顶部。它无法捕捉仅部分匹配标题的品牌短语(例如 "impulse brain training"),也可能将某个应用作为其精确标题的通用短语(例如 "百分比计算器")错误标记,因此仍需通读列表。
  • 受众细分短语("… 三年级"、"… 成人")是不同的产品。说明你的创意服务于哪个细分市场。
  • 高需求但 0/10 精确标题也是一个可疑信号。要么是真正的空白(罕见),要么是该短语过于模糊以至于没人愿意据此构建应用(常见)。在将其称为机会窗口之前,应用下面的意图测试。

在排名之前进行意图筛选。 脚本无法判断这一点,你必须自己判断。只有当输入该短语的人期望的是一个像你这样类型的应用时,该关键词才算有效。针对每个短语问:有多少输入这个短语的人想要的是你这个应用? 砍掉两类可能评分虚高的短语:

  • 过于通用: 对于卡路里追踪器来说,"追踪器"。需求巨大,但搜索者可能想要睡眠、预算或航班追踪器。
  • 相邻但意图错误: 对于卡路里追踪器来说,"肌肉增长"。与创意相关,但搜索者想要的是健身应用。你甚至可能获得排名;但不会带来安装,而那些偶然安装的用户也不会留存。

需求为 0 意味着未知,而非零。 从未被建议意味着低于自动补全的测量下限(与 Apple Search Ads 中的最低流行度 5 相同)。在关键词字段中放入一个这样的短语就像一张彩票。标题和副标题关键词必须有可明确测量的需求;只有在已有经证明的关键词后,才可用最低评分的短语作为补充。

根据应用所处阶段判断竞争。

  • 新应用: 针对当前排名,目标竞争得分 ≤ 55。在标题中放入一个更强的短语是对未来的赌注,因此关键词字段现在必须包含可获胜的短语。
  • 成熟应用(数千评分):竞争得分最高约 70 开始变得有竞争力,因为排名权威会随着安装量和评分数量而建立。
  • 一个已上线应用如果在其自身标题或副标题短语中排名约 100+(参见 --app-id)则存在权威性问题,而非关键词问题。更多的关键词无法修复它;安装量和评分可以。

4. 阅读市场地图

第二个表格列出了在最多短语中排进前十的应用:即现有竞争者。对于前 5–10 名:

  • 规模: 数十万的评分数量意味着拥有资金支持的领先者,而数千则意味着独立开发者规模且可以击败。
  • 新鲜度: 上次更新超过一年意味着一个过时的领先者,这是机会窗口。
  • 质量: 平均评分低于约 4.3 意味着用户不满意。他们的评论就是你的功能列表。
  • 商业模式: 表格中有价格。应用内购买和订阅价格不在 API 中,但商店页面包含它们。使用 curl 获取 https://apps.apple.com/us/app/id<trackId>,对其进行 HTML 反转义,然后读取 "title":"In-App Purchases" 之后的 JSON:每个 textPair 是一个产品及其价格,例如 King of Math 的 "Full Game" / "$3.99"。一个类别中如果每个领先者都收费订阅,证明人们愿意付费。一个强大的、一次性解锁的竞争对手会设定你将被比较的价格锚点。
  • 搜索主导地位与知名度: 统计每个应用在所有短语中进入前三的次数(keywords.json → top)。一个知名的竞争对手可能不在搜索结果中。例如,King of Math(3k 评分,15 年历史)在 178 个数学短语中从未进入前三,而 Mental Math Cards Games & Tips 进入了 41 次前三。

5. 给出结论

使用以下结构:

  1. 结论: 一句话说清:可行 / 瞄准细分市场 / 避免,并说明原因。
  2. 最佳机会关键词: 按机会得分排序的前 5–10 个关键词,每个附带需求、竞争和选择理由。
  3. 细分市场: 一个表格,列出关键词群组及其需求、竞争和含义(如下例)。
  4. 市场拥有者: 主要现有竞争者,其规模、新鲜度和商业模式。
  5. App Store 元数据:
    • 标题: 最多 30 个字符。关键词在前,品牌在后:"Calorie Tracker — Glow Up" 优于 "Glow Up — Calorie Tracker",因为人们搜索的是关键词,不是未知的品牌,且靠前的词权重更高。品牌在前是用户明确知晓的选择,绝不是默认项。
    • 副标题: 最多 30 个字符。第二强的关键词,以描述性方式写出:"Track macros & lose weight" 是副标题,"Feel amazing every day" 则浪费了 30 个字符。
    • 关键词字段: 最多 100 个字符,以逗号分隔,不留空格。不要重复标题或副标题中已有的词(Apple 会合并它们),使用单数形式,并排除品牌名称和应用所属类别名称。
    • Apple 产品名称(iPhone、iPad、Apple Watch)放在标题或副标题中会导致被拒(指南 5.2.5)。放在关键词字段中没问题,如果应用确实有例如 Watch 应用,则值得放入。
    • 检查它: python3 -I scripts/check_metadata.py --title "…" --subtitle "…" --keywords "…" 会在超出限制或包含 Apple 名称时报错,并在浪费字符时发出警告。
    • 以表格形式呈现:关键词、其分配的表面(标题、副标题或关键词字段)、需求、竞争,以及一行意图论证。在根据这些内容撰写列表页或进行本地化之前,务必获得用户对标题和副标题关键词的明确批准。
    • 标题、副标题和关键词字段只能随新应用版本更改(推广文本是唯一可实时编辑的字段),因此要规划好关键词变更以配合下一次发布。
  6. 局限性: 下方适用的限制条件。

限制(始终说明相关的限制)

  • 需求是相对的,而非绝对的。 自动补全位置对短语进行相互比较;它不提供下载量。真实的指标是 Apple Search Ads 流行度(5–100),可通过 Apple Search Ads 账户或付费工具(如 Astro)获得。
  • 竞争使用评分数量作为下载量的代理指标。 两者相关,但并不等同。
  • 结果仅为快照。 重新运行到带日期的文件夹以查看趋势。
  • 美国 App Store 为默认。 其他国家/地区需要单独运行。

Astro(付费关键词工具),如果已安装

Astro(/Applications/Astro.app,包名 matteospada.it.ASO)提供真实的 Search Ads 流行度及其自身难度评分。目前已知的情况(2026 年 10 月):

  • 演示限制: 演示版每个应用最多 10 个关键词,流行度、难度和建议需要许可证。
  • MCP 服务器: Astro 有自己的 MCP 服务器,文档位于 tryastro.app/docs/mcp,可从其主屏幕开启。需要许可证。当它已获得许可并运行时,优先使用其工具而不是这里的启发式评分。工作流程可映射如下:
    • 将尚未发布的应用的研究放在一个临时文件夹或标签中,使其与实时跟踪分开。
    • 种子:get_keyword_suggestions,加上对 3–5 个最接近竞争对手的 extract_competitors_keywords(使用 search_app_store 找到它们)。
    • 按市场:对本地商店前端运行 search_rankings 可显示谁在那里胜出。
    • 它还报告有多少应用在其名称或副标题中使用了一个关键词。数量多表明该短语确实被搜索;对于一个热门短语,数量为零则表明存在前述的可疑信号。
  • 本地数据: 存储在 ~/Library/Containers/matteospada.it.ASO/Data/Library/Application Support/Astro/Model.sqlite (Core Data)。在读取之前,务必复制该文件及其 -wal 和 -shm 文件。
    • 关键词在 ZKEYWORD 表中:ZTEXT、ZSTORE、ZPOPULARITY、ZDIFFICULTY、ZAPPSCOUNT、ZCURRENTRANKING。
    • 时间戳是自 2001 年以来的秒数,因此要加上 978307200 以转换为 Unix 时间。
  • 不要直接调用 Astro 的服务器 (api.tryastro.app)。 其流行度数据是许可产品。请使用应用本身、其 MCP 服务器,或要求用户在 Astro 中添加关键词然后读取本地数据库。
  • 通过脚本驱动其窗口不可靠。 这是一个 SwiftUI 应用,其侧边栏会忽略脚本化的点击,并且屏幕截图需要终端通常没有的权限。

RankPilot(我们的自有跟踪器),应用上线后

RankPilot 是我们的本地 App Store 关键词跟踪器(Node 22.5+,无依赖,数据存储在 ~/.rankpilot/rankpilot.db)。该技能决定在发布前和发布时要瞄准什么;然后 RankPilot 跟踪它:每个关键词和国家的排名历史、自上次检查以来的变化,以及哪些应用击败了你。一旦列表页上线,就移交过去。

  • 其 MCP 工具(node bin/rp.js mcp install 注册它们):status、app_add(你的或竞争对手的应用)、keywords_add、keywords_localize(AI 为每个市场写入本地短语)、check_run、board_get(关键词 × 国家,包含排名、上次排名、流量、难度、结论,以及每个国家最多 5 个击败你的应用)、term_get(对一个短语进行说明,包含排名前 10 及其相关性)、keywords_brainstorm。
  • 移交: 使用 app_add 添加应用,使用 keywords_add 添加已批准的关键词(标题、副标题和关键词字段),设置本地…

…[按需截断]

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

app-icon-design

Create, revise, and audit app icons using Apple's Human Interface Guidelines, with a clear visual identity and production-ready deliverables.

app-offer

Designs one opinionated "Grand Slam Offer" for any app idea, new or already shipped, by running Alex Hormozi's $100M Offers method adapted to app stores. It covers the market and niche, the commodity check, a value-equation audit, the problem inventory, delivery vehicles, the trimmed value stack, pricing and tiers, scarcity, urgency, bonuses, the guarantee, naming, the paywall per placement, the onboarding fast win, a test plan and a ship plan. It works within App Store and Google Play rules. For a shipped app it reads the code and notes first and produces a before/after. Use it when the user says "/app-offer", "run app-offer on <idea>", "make a grand slam offer for my app", "Hormozi my app", "price my app" or "design my paywall offer", or asks how to package, price, name, guarantee or paywall an app. It writes offer/grand-slam-offer.md (or ./<app-slug>-grand-slam-offer.md for a new idea).

brand-reference-pack

Build or refresh a shortform brand reference pack for any app from its real surfaces — website, App Store listing and reviews, socials, the live app (driven end to end on the simulator) and its code tokens — plus a status check of the upstream foundations (ICP, voice of customer, brand voice). Produces the context that content formats and design decisions are made from, as markdown, tokens.json and a PDF. Use for "build a brand pack for <app>", "refresh the brand pack", "capture the site/app/socials for shortform", "/brand-reference-pack".

deep-work

Timekeeper and scribe for the user's own timeboxed build session, default 90 min, also 1h / 1.5h / 2h (Orient, Build, Verify, Harden, Close, scaled to the block). Use when the user says "start a session", "deep work", "90 min block", "work block", or invokes /deep-work. Subcommands: status, park <note>, close, abort.

new-app-info

Builds the information pack Apple asks for when App Review replies "We need additional information to better understand the app". It covers all six required items: (1) a screen recording on a physical device, as a shot list the user records; (2) the app's purpose and target audience; (3) setup and main features, with any login credentials or sample files; (4) the external services the app uses; (5) regional differences; (6) regulated industry or protected third-party material. It also runs Apple's "Prevent common issues" checks. Every answer comes from the app's own code (accounts, user-generated content, in-app purchases, SDKs, locales, screen-capture blocking, data deletion). It reads the connected iPhone's iOS version and checks it is the latest. It ends by telling the user to paste the reply into App Review Information → Notes. Use it when the user pastes that App Review message, says "/new-app-info", "we got rejected, they want more info", "answer App Review", or "make the App Store review pack". It w...

reel-motion-graphics

Turn a script or concept into an on-brand 9:16 explainer reel (luxury tech, warm sand on near-black, glassmorphism, CSS 3D, Bodoni + Instrument Sans) built in HyperFrames, with the animation above the fold and the presenter's talking head below. Use when the user gives a script, transcript, paper summary or concept and asks for a reel, motion graphics, an animated explainer or "the same style as the upcycling reel". Produces a HyperFrames project, a rendered MP4 and a live artifact player.

相关技能