アプリキーワードリサーチ は何をしますか?
Appleの公開App Storeデータ(アカウントやAPIキー不要)を使用して、アプリのアイデアに関する3つの質問に答えます。
- トラフィック: 人々はこれを検索していますか?どのような言葉で検索していますか?
- 難易度: その言葉でランクインするのはどの程度難しいですか?
- 市場: この分野を所有しているアプリはどれですか?それらの規模は?どのように収益を上げていますか?
最終的には、勝訴、ターゲットとするキーワード、App Storeのタイトル、サブタイトル、キーワードフィールドが出力されます。
ワークフロー
1. アイデアを10〜20のシードフレーズに変換する
シードとは、検索の開始点です。スクリプトはオートコンプリートを通じて各シードを拡張します。以下をカバーします。
- ユーザーの言葉でのコアジョブ: 「暗算」、「習慣トラッカー」(「計算力向上」ではなく)。
- 同義語と代替名: 「数学ゲーム」、「算術」、「九九」。
- ターゲットオーディエンス: 「大人向け数学ゲーム」、「…向け子供」。オーディエンスが異なれば、市場も異なります。
- 競合する隣接カテゴリ: 数学アプリの場合「脳トレ」。
- 成果フレーズ: 「クイック計算」、「数学ワークアウト」。
競合他社のブランド名をシードに含めないでください。それらは結果に自動的に表示されるため、市場マップに役立ちます。
他の国の場合は、その言語でシードを作成します。 ドイツ人はドイツ語で入力するもの(「kalorienzähler」であって「kalorien tracker」ではない)を検索するため、各市場のシードは現地のユーザーが入力するものから作成し、オートコンプリートで確認してください。英語の勝者を翻訳してそれが通用すると想定しないでください。
既存アプリのタイトルからのセカンドパス。 最初の実行後、市場マップのトップアプリにあるブランド名以外の単語(例:「Mental Math Cards Games & Tips」の「cards」、「tips」)を読み取ります。開発者は効果的な単語に収束するため、あなたがカバーしていない単語が2番目のシードバッチとなり、同じ --out に対して実行されます。
2. リサーチを実行する
python3 -I scripts/keyword_research.py \
--seeds "暗算, 数学ゲーム, 大人向け数学ゲーム, 脳トレ, 九九" \
--country jp --max-terms 120 --out research/<idea>-jp-<yyyy-mm-dd>
- 実行時間: 実行開始時はフレーズあたり約6秒ですが、同じアプリがランクインし続けるにつれて短縮されます(アプリの詳細はキャッシュされます)。120フレーズで約8〜10分かかるため、大規模なバッチはバックグラウンドで実行してください。
- 進捗状況: 結果は実行中に保存されます。
report.mdは実行中でも読み取り可能で、同じ--outに対して再実行すると中断から再開します。 - その他のオプション:
--seeds-file seeds.txt: 1行に1フレーズ。--no-expand: 指定したシードのみをスコアリングします。--country gb|de|jp|…: 52の主要なストアフロント。国によってオートコンプリートとランキングが異なるため、各ローンチ市場をリサーチしてください。--app-id <trackId>: 公開済みアプリの場合、すべてのフレーズに対して「当社の順位」列(1〜200、または200+)を追加コストなしで入力します。日付付きフォルダに再実行することで、メタデータ変更後のランキングを追跡できます。
- 出力:
report.md: 以下の2つのテーブル。keywords.jsonおよびapps.json: フォローアップの質問用の生データ。
- テスト:
python3 -I scripts/test_keyword_research.pyおよびpython3 -I scripts/test_check_metadata.pyはオフラインで実行されます。
3. キーワードテーブルを読む
各フレーズには、0〜100のヒューリスティックスコアが3つ付けられます。
| スコア | 測定方法 | 解釈 |
|---|---|---|
| 需要 | App Storeがフレーズを提案するまでに入力する文字数が少ないほど、またそのスロットが高いほど、検索されていることを示します。Appleは検索ボリュームで提案を順序付けます。 | 文字数 ≤ 4: 高。5〜7: 中。≥ 8: 低。提案なし(スコア0): 不明、オートコンプリートで測定できる範囲外。 |
| 競合 | 現在のトップ10の評価数の中央値(対数スケール)に、トップ10アプリのうち名前またはサブタイトルにフレーズ全体が含まれているもの1つにつき2ポイントを加算(複数形、アクセント、「kalorienzähler」=「Kalorien Zähler」のような複合語はカウントされます。サブタイトルは上位約8つまでしか判別できません)。 | 中央値 < 1k: 弱い。1k〜20k: 中程度。20k〜100k: 強い。> 100k: 大手ブランドに所有されている。5つ以上の完全一致タイトルは、多くのアプリがそのフレーズを直接ターゲットにしていることを意味します。 |
| 機会 | 需要 × (1 − 競合 / 100) | 並び替え順序。需要 ≥ 60 かつ 競合 ≤ 55 がスイートスポットです。 |
勝訴列はこれらを1つの単語に変換します。target(需要 ≥ 40、競合 ≤ 55: 新規アプリでも勝ち目がある)、hard(競合 > 55)、low(需要 < 40)、floor(需要 0)、brand(下記参照)、そして --app-id を使用している場合、own(あなたのアプリがトップ3)または push(トップ10: 僅差、リスティングで強化する価値あり)。これは一次的な分類であり、決定ではありません。下記の意図カットは引き続き適用されます。
指摘すべきパターン:
- 高需要、低競合: 好機。 例:「暗算」(4文字入力後に提案、トップ10中央値609評価)。
- 高需要で、トップ10アプリの名前やサブタイトルにフレーズ全体が含まれていない場合: タイトル好機。 競合が強い場合でも。例:「大人向け数学ゲーム」、中央値112k評価だが0/10が完全一致タイトル。
- ブランド名であるオートコンプリートフレーズ(「かけ算九九ロックスター」、「インパルス脳トレ」)は競合他社に属します。市場マップにリストアップし、キーワードには決して含めないでください。Appleは他社の商標を使用したメタデータを拒否します。スクリプトは、フレーズがトップ10アプリの完全なタイトルである場合にそれを (brand) とマークし、最後にリストします(小さなアプリの名前自体は競合がほぼゼロとスコアリングされ、テーブルのトップに来てしまうため)。タイトルと部分的に一致するブランドフレーズ(「インパルス脳トレ」)はキャッチできず、また、あるアプリが正確なタイトルとして採用した一般的なフレーズ(「パーセンテージ計算機」)をマークする可能性があるため、リストは依然として読む必要があります。
- オーディエンス分割フレーズ(「3年生向け…」、「大人向け…」)は異なる製品です。アイデアがどのセグメントにサービスを提供するかを明確にしてください。
- 高需要だが0/10の完全一致タイトルは怪しい兆候でもあります。 本当のギャップであるか(稀)、またはフレーズが漠然しすぎて誰もアプリを構築できない(一般的)かのどちらかです。これを好機と呼ぶ前に、以下に示す意図テストを適用してください。
ランク付けの前に意図でカットする。 スクリプトはこれを判断できません。あなたが行う必要があります。キーワードは、それを入力した人がこのようなアプリを期待している場合にのみカウントされます。それぞれについて自問してください。これを入力している人のうち、何人がこのアプリを欲しがっているか? 見かけよりも良いスコアを出す2つのクラスをカットします。
- 曖昧すぎる: カロリートラッカーにおける「トラッカー」。需要は莫大ですが、検索ユーザーは睡眠、予算、またはフライトトラッカーを望んでいる可能性があります。
- 隣接しているが意図が異なる: カロリートラッカーにおける「筋肉成長」。アイデアとは関連していますが、検索ユーザーはワークアウトアプリを望んでいます。ランクインできたとしても、インストールは発生せず、たとえインストールがあっても定着しません。
需要0はゼロを意味するのではなく、不明を意味します。 提案がないということは、オートコンプリートで測定できる範囲を下回っていることを意味します(Apple Search Adsにおける人気度5、最低値と同じ)。キーワードフィールドにそのようなフレーズが1つあるのは、宝くじのようなものです。タイトルとサブタイトルのキーワードは明確に測定可能な需要がなければなりません。実証済みのフレーズを配置した後の、埋め草としてのみフロアフレーズを使用してください。
アプリのステージに照らして競合を判断する。
- 新規アプリ: 現在のランキングでは、競合 ≤ 55 をターゲットにします。タイトルにあるより強いフレーズは将来への賭けであるため、キーワードフィールドには現時点で勝ち目のあるフレーズを含める必要があります。
- 確立されたアプリ(数千の評価): 競合が約70までであれば対抗可能になります。なぜなら、ランキング権威はインストールと評価によって構築されるからです。
- 公開アプリが自身のタイトルまたはサブタイトルのフレーズで約100位以上にランクインしている場合(
--app-id参照)は、キーワードの問題ではなく、権威の問題です。より多くのキーワードでは解決できません。インストールと評価が必要です。
4. 市場マップを読む
2番目のテーブルは、最も多くのフレーズでトップ10に表示されるアプリ、すなわち既存アプリをリストします。トップ5〜10については:
- 規模: 評価数が数十万ということは資金提供を受けたリーダーを意味し、数千はインディーズ規模で打ち負かせる可能性があります。
- 新鮮さ: 最終更新が1年以上前ということは、停滞したリーダーを意味し、好機です。
- 品質: 平均評価が約4.3未満は、ユーザーが不満を持っていることを意味します。彼らのレビューはあなたへの機能リストです。
- ビジネスモデル: 価格はテーブルに表示されます。アプリ内購入とサブスクリプション価格はAPIにはありませんが、ストアページに埋め込まれています。
https://apps.apple.com/jp/app/id<trackId>をcurlで取得し、HTMLアンエスケープして、"title":"In-App Purchases"の後のJSONを読み取ってください。各textPairは製品とその価格です(例:King of Mathの"Full Game"/"$3.99")。すべてのリーダーがサブスクリプションを課金しているカテゴリは、人々が支払うことを証明しています。強力な一回払いの競合は、あなたが比較される価格アンカーを設定します。 - 検索支配力 vs 知名度: 各アプリがすべてのフレーズでトップ3に表示される回数をカウントします(
keywords.json→top)。有名な競合他社が検索に表示されないことがあります。例えば、King of Math(3k評価、15年)は178の算数フレーズのうち0回しかトップ3に表示されませんでしたが、Mental Math Cards Games & Tipsは41回トップ3に表示されました。
5. 勝訴を伝える
この構造を使用してください:
- 勝訴: go / go for a niche / avoid を1文で、その理由とともに。
- スイートスポットキーワード: 機会でトップ5〜10、それぞれ需要、競合、選択理由を添えて。
- セグメント: 需要、競合、およびそれぞれの意味を持つキーワードクラスターのテーブル(下記の例のように)。
- 市場の支配者: トップの既存アプリ、その規模、新しさ、ビジネスモデル。
- App Storeのメタデータ:
- タイトル: 最大30文字。キーワードを先に、ブランドを後に:「カロリートラッカー — Glow Up」は「Glow Up — カロリートラッカー」よりも優れています。なぜなら、人々は未知のブランドではなくキーワードを検索し、最初の単語の重みが大きいからです。ブランドファーストは、ユーザーが意識的に選択する場合のみであり、デフォルトではありません。
- サブタイトル: 最大30文字。2番目に強いキーワードを、説明的に書きます:「マクロを追跡して体重を減らす」はサブタイトルですが、「毎日素晴らしい気分を」は30文字を無駄にします。
- キーワードフィールド: 最大100文字、カンマ区切り、スペースなし。タイトルやサブタイトルに既にある単語は繰り返さないでください(Appleはそれらを結合します)。単数形を使用し、ブランド名やアプリのカテゴリ名は除外してください。
- Apple製品名(iPhone、iPad、Apple Watch)をタイトルやサブタイトルに使用するとリジェクトされます(ガイドライン5.2.5)。キーワードフィールドでは問題なく、アプリに例えばWatchアプリが本当にあれば価値があります。
- チェック:
python3 -I scripts/check_metadata.py --title "…" --subtitle "…" --keywords "…"は制限やApple名に違反していると失敗し、無駄な文字があると警告します。 - テーブルとして提示します: キーワード、割り当てられたサーフェス(タイトル、サブタイトル、キーワードフィールド)、需要、競合、および1行の意図の根拠。リスティングを作成したりローカライズしたりする前に、タイトルとサブタイトルのキーワードについてユーザーの明示的な承認を得てください。
- タイトル、サブタイトル、キーワードフィールドは新しいアプリバージョンでのみ変更できます(プロモーションテキストのみがライブで編集可能なフィールドです)。そのため、次のリリースに合わせてキーワード変更を計画してください。
- 制限事項: 該当する以下の制限事項。
制限事項(常に関連するものを明記すること)
- 需要は相対的なものであり、絶対的なものではありません。 オートコンプリートの位置はフレーズを互いにランク付けします。ダウンロード数は示しません。真の指標はApple Search Adsの人気度(5〜100)であり、Apple Search AdsアカウントまたはAstroなどの有料ツールを通じて利用可能です。
- 競合は評価数をダウンロードの代理として使用します。 相関はありますが、同じではありません。
- 結果はスナップショットです。 日付付きフォルダに再実行してトレンドを確認してください。
- デフォルトはUS App Storeです。 他の国は独自の実行が必要です。
Astro(有料キーワードツール)(インストールされている場合)
Astro(/Applications/Astro.app、バンドル matteospada.it.ASO)は、実際のSearch Ads人気度と独自の難易度スコアを提供します。それについて判明したこと(2026年10月時点):
- デモ制限: デモ版ではアプリあたり10キーワードまでで、人気度、難易度、提案にはライセンスが必要です。
- MCPサーバー: Astroには独自のMCPサーバーがあり、tryastro.app/docs/mcp で文書化されています。ホーム画面から有効にできます。ライセンスが必要です。ライセンスが付与され実行されている場合は、ここのヒューリスティックスよりもAstroのツールを優先して使用してください。ワークフローは次のようにマッピングされます:
- 未リリースアプリのリサーチは、一時フォルダまたはタグに保存し、ライブ追跡から分離してください。
- シード:
get_keyword_suggestions、さらに最も近い競合3〜5社に対してextract_competitors_keywords(search_app_storeで見つけます)。 - 市場ごと: 現地のストアフロントで
search_rankingsを実行すると、そこで誰が勝っているかがわかります。 - また、何個のアプリが名前やサブタイトルでキーワードを使用しているかも報告します。多数はフレーズが検索されている証拠であり、人気フレーズで0は上記の怪しい兆候です。
- ローカルデータ:
~/Library/Containers/matteospada.it.ASO/Data/Library/Application Support/Astro/Model.sqlite(Core Data)に保存されています。読み取る前に、常にファイルとその-walおよび-shmファイルをコピーしてください。 - キーワードは
ZKEYWORDにあります:ZTEXT、ZSTORE、ZPOPULARITY、ZDIFFICULTY、ZAPPSCOUNT、ZCURRENTRANKING。 - タイムスタンプは2001年からの秒数ですので、Unix時間にするには978307200を加算してください。
- Astroのサーバー(
api.tryastro.app)を直接呼び出さないでください。 その人気度データはライセンス製品です。アプリ、そのMCPサーバーを使用するか、ユーザーにAstroでキーワードを追加してもらい、ローカルデータベースを読み取ってください。 - スクリプトから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(1つのフレーズを説明、トップ10とその関連性を表示)、keywords_brainstorm。 - 引き継ぎ:
app_addでアプリを追加し、keywords_addで承認されたキーワード(タイトル、サブタイトル、キーワードフィールド)を追加し、keywords_localizeで各現地市場向けにローカライズされたキーワードセットを生成します。また、app_addで主要な競合アプリを追加して、それらの動きを監視します。
テスト
python3 -I scripts/test_keyword_research.py
python3 -I scripts/test_check_metadata.py
これらのテストはオフラインで実行され、App Storeへのネットワーク呼び出しを行いません。