
App Store Optimization
- 138 installs
- 451 repo stars
- Updated July 21, 2026
- borghei/claude-skills
Optimize iOS and Android store listings with keyword research, title and subtitle copy, screenshot narratives, review responses, and conversion-focused metadata for app launches.
About
App Store Optimization skill from borghei/claude-skills that improves iOS and Android listings through keyword research, metadata copy, screenshot narratives, and review responses to raise discoverability, conversion, and install velocity at launch.
- iOS and Android keyword research
- Title, subtitle, and description copy
- Screenshot and preview messaging guidance
- Review response and conversion tuning
App Store Optimization by the numbers
- 138 all-time installs (skills.sh)
- Ranked #1,070 of 1,879 Marketing & SEO skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/borghei/claude-skills --skill app-store-optimizationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 138 |
|---|---|
| repo stars | ★ 451 |
| Last updated | July 21, 2026 |
| Repository | borghei/claude-skills ↗ |
What it does
Optimize iOS and Android store listings with keyword research, title and subtitle copy, screenshot narratives, review responses, and conversion-focused metadata for app launches.
Files
App Store Optimization (ASO)
ASO tools for researching keywords, optimizing metadata, analyzing competitors, and improving app store visibility on Apple App Store and Google Play Store. This file is a lean map — execute a task by loading the matching reference below.
Core Capabilities
- Keyword research — seed/expand/score keywords by relevance, volume, competition, and conversion intent; map to metadata placements
- Metadata optimization — title, subtitle/short description, iOS keyword field, and full description against platform character limits and density targets
- Competitor analysis — keyword matrices, gap analysis, visual and ratings benchmarking across the top 10 competitors
- Launch & A/B testing — structured launch checklists, timing, and conversion experiments with sample-size and significance math
- Reviews & localization — sentiment/theme/issue extraction and multi-market metadata adaptation
- 8 Python tools —
keyword_analyzer,metadata_optimizer,competitor_analyzer,aso_scorer,ab_test_planner,review_analyzer,launch_checklist,localization_helper(stdlib only, analyze data you provide)
When to Use
- Researching or scoring keywords for an app store listing
- Optimizing a title/subtitle/description/keyword field for ranking and conversion
- Auditing competitors for keyword gaps and positioning opportunities
- Planning an app launch or running a store-listing A/B test
- Analyzing reviews or planning multi-market localization
Clarify First
Before generating, confirm these inputs. If any is unknown or vague, ASK — do not assume:
- [ ] Platform — Apple App Store vs Google Play (different character limits, keyword field vs description indexing, ranking factors)
- [ ] App category + seed keywords — the app's space and starting terms (drives keyword research + scoring)
- [ ] Primary goal — ranking visibility vs conversion rate (shapes metadata, title/subtitle, and screenshot priorities)
- [ ] Target market/locale — which storefronts (drives localization + keyword volume estimates)
Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions at the top of the artifact.
Quick Start
python scripts/keyword_analyzer.py --keywords "todo,task,planner"
python scripts/metadata_optimizer.py --platform ios --title "App Title"
python scripts/aso_scorer.py --app-id com.example.appNote: the scripts are importable Python libraries — see the Tool Reference for classes, methods, and convenience functions.
References
Load the reference that matches the task — keep this file lean and pull detail on demand:
- [references/aso-workflows.md](references/aso-workflows.md) — step-by-step procedures, scoring criteria, placement tables, structure diagrams, templates, and before/after examples for all five workflows. Read when executing keyword research, metadata optimization, competitor analysis, launch, or A/B testing.
- [references/tool-reference.md](references/tool-reference.md) — full usage for the 8 Python scripts: classes, methods, parameters, returns, convenience functions, plus the scripts and assets tables. Read before invoking a tool.
- [references/operations-and-benchmarks.md](references/operations-and-benchmarks.md) — troubleshooting table, success criteria/targets, platform limitations, proactive triggers, output artifacts, communication standards, related skills, and the full integration matrix. Read when diagnosing issues, setting targets, or wiring into other tools.
- [references/keyword-research-guide.md](references/keyword-research-guide.md) — research methodology, evaluation framework, and tracking. Read for deep keyword discovery and selection.
- [references/platform-requirements.md](references/platform-requirements.md) — iOS and Android metadata specs and visual asset requirements. Read when validating fields against platform rules.
- [references/aso-best-practices.md](references/aso-best-practices.md) — optimization strategies, rating management, and launch tactics. Read for proven tactics and playbooks.
Scope & Limitations
In scope: keyword research, metadata optimization and character-limit validation, competitor ASO analysis (public data), A/B test planning with significance math, launch/seasonal/localization planning, and review sentiment analysis for Apple App Store and Google Play Store.
Out of scope: real-time store data fetching (scripts analyze static data you provide), Apple Search Ads / Google Ads campaign management, creative asset design, cross-device attribution (use an MMP), in-app analytics/retention, and revenue/subscription pricing.
Data constraints: no official search-volume API exists for either store (estimates use third-party tools or heuristics); competitor and review data are limited to public info; historical ranking data needs external tools (AppTweak, Sensor Tower, data.ai); Apple's June 2025 update indexes screenshot text, which these scripts do not yet analyze. See references/operations-and-benchmarks.md for details.
Integration Points
Connects to Apple App Store Connect and Google Play Console (metadata submission, Product Page Optimization / Store Listing Experiments), Apple Search Ads (keyword discovery), ASO tools (AppTweak, Sensor Tower, data.ai for volume/ranking data), analytics (Firebase/Mixpanel/Amplitude for engagement signals), and the campaign-analytics and content-creator skills. Full connection details and data flows: references/operations-and-benchmarks.md.
ASO Audit Template
Use this template to conduct a systematic App Store Optimization audit.
---
App Information
| Field | Value |
|---|---|
| App Name | |
| Platform | [ ] iOS [ ] Android |
| Category | |
| Current Downloads | |
| Current Rating | |
| Audit Date |
---
Metadata Audit
Title Analysis
| Criterion | iOS (30 chars) | Android (50 chars) |
|---|---|---|
| Current Title | ||
| Character Count | /30 | /50 |
| Primary Keyword Present | [ ] Yes [ ] No | [ ] Yes [ ] No |
| Brand Name Position |
Title Score: ___/10
Recommendations:
- [ ]
- [ ]
Subtitle / Short Description
| Criterion | iOS Subtitle (30 chars) | Android Short Desc (80 chars) |
|---|---|---|
| Current Text | ||
| Character Count | /30 | /80 |
| Keywords Included | ||
| Benefit-Focused | [ ] Yes [ ] No | [ ] Yes [ ] No |
Score: ___/10
Recommendations:
- [ ]
- [ ]
Keyword Field (iOS Only)
| Criterion | Status |
|---|---|
| Current Keywords | |
| Character Count | /100 |
| Duplicates Present | [ ] Yes [ ] No |
| Plurals Included | [ ] Yes [ ] No |
| Brand Names Included | [ ] Yes [ ] No |
Score: ___/10
Recommendations:
- [ ]
- [ ]
Full Description
| Criterion | iOS | Android |
|---|---|---|
| Character Count | /4000 | /4000 |
| Primary Keyword Density | % | % |
| Secondary Keywords (count) | ||
| Feature Bullets Present | [ ] Yes [ ] No | [ ] Yes [ ] No |
| Social Proof Included | [ ] Yes [ ] No | [ ] Yes [ ] No |
| CTA Present | [ ] Yes [ ] No | [ ] Yes [ ] No |
Score: ___/10
Recommendations:
- [ ]
- [ ]
---
Visual Asset Audit
App Icon
| Criterion | Status |
|---|---|
| Recognizable at 60x60px | [ ] Yes [ ] No |
| Distinct from competitors | [ ] Yes [ ] No |
| Matches app design | [ ] Yes [ ] No |
| No text/words | [ ] Yes [ ] No |
Score: ___/10
Recommendations:
- [ ]
- [ ]
Screenshots
| Screenshot | Caption | Feature Shown | Score |
|---|---|---|---|
| 1 (Hero) | /10 | ||
| 2 | /10 | ||
| 3 | /10 | ||
| 4 | /10 | ||
| 5 | /10 |
| Criterion | Status |
|---|---|
| Total Screenshots | /10 (iOS) or /8 (Android) |
| Captions Present | [ ] Yes [ ] No |
| Consistent Style | [ ] Yes [ ] No |
| First 3 Show Value | [ ] Yes [ ] No |
| Device Frames Used | [ ] Yes [ ] No |
Overall Screenshot Score: ___/10
Recommendations:
- [ ]
- [ ]
App Preview Video
| Criterion | Status |
|---|---|
| Video Present | [ ] Yes [ ] No |
| Duration | seconds |
| Shows Core Features | [ ] Yes [ ] No |
| Hook in First 5 Seconds | [ ] Yes [ ] No |
| CTA at End | [ ] Yes [ ] No |
Score: ___/10
---
Keyword Performance Audit
Current Keyword Rankings
| Keyword | Current Rank | Volume | Competition | Score |
|---|---|---|---|---|
Keyword Opportunities
| Keyword | Current Rank | Potential | Action |
|---|---|---|---|
---
Rating & Review Audit
Rating Summary
| Metric | Value |
|---|---|
| Current Average Rating | /5.0 |
| Total Ratings | |
| Ratings (Last 30 Days) | |
| 5-Star Percentage | % |
| 1-Star Percentage | % |
Review Analysis
| Category | Count | Common Themes |
|---|---|---|
| Positive (4-5 stars) | ||
| Neutral (3 stars) | ||
| Negative (1-2 stars) |
Response Rate
| Metric | Value |
|---|---|
| Reviews Responded | % |
| Avg Response Time | hours |
Rating Score: ___/10
Recommendations:
- [ ]
- [ ]
---
Competitor Comparison
Top 3 Competitors
| Metric | Your App | Competitor 1 | Competitor 2 | Competitor 3 |
|---|---|---|---|---|
| Name | ||||
| Rating | ||||
| Total Ratings | ||||
| Downloads | ||||
| Title Keywords | ||||
| Screenshot Count |
Competitive Gaps
| Gap Identified | Opportunity |
|---|---|
---
Overall ASO Score
| Category | Weight | Score | Weighted |
|---|---|---|---|
| Title/Metadata | 25% | /10 | |
| Keywords | 25% | /10 | |
| Visual Assets | 25% | /10 | |
| Ratings/Reviews | 25% | /10 | |
| TOTAL | 100% | /100 |
---
Priority Action Items
High Priority (This Week)
1. [ ] 2. [ ] 3. [ ]
Medium Priority (This Month)
1. [ ] 2. [ ] 3. [ ]
Low Priority (This Quarter)
1. [ ] 2. [ ] 3. [ ]
---
Audit Sign-Off
| Role | Name | Date |
|---|---|---|
| Auditor | ||
| Reviewer | ||
| App Owner |
---
Notes
_Additional observations and context:_
{
"request_type": "keyword_research",
"app_name": "TaskFlow Pro",
"keyword_analysis": {
"total_keywords_analyzed": 25,
"primary_keywords": [
{
"keyword": "task manager",
"search_volume": 45000,
"competition_level": "high",
"relevance_score": 0.95,
"difficulty_score": 72.5,
"potential_score": 78.3,
"recommendation": "High priority - target immediately"
},
{
"keyword": "productivity app",
"search_volume": 38000,
"competition_level": "high",
"relevance_score": 0.90,
"difficulty_score": 68.2,
"potential_score": 75.1,
"recommendation": "High priority - target immediately"
},
{
"keyword": "todo list",
"search_volume": 52000,
"competition_level": "very_high",
"relevance_score": 0.85,
"difficulty_score": 78.9,
"potential_score": 71.4,
"recommendation": "High priority - target immediately"
}
],
"secondary_keywords": [
{
"keyword": "team task manager",
"search_volume": 8500,
"competition_level": "medium",
"relevance_score": 0.88,
"difficulty_score": 42.3,
"potential_score": 68.7,
"recommendation": "Good opportunity - include in metadata"
},
{
"keyword": "project planning app",
"search_volume": 12000,
"competition_level": "medium",
"relevance_score": 0.75,
"difficulty_score": 48.1,
"potential_score": 64.2,
"recommendation": "Good opportunity - include in metadata"
}
],
"long_tail_keywords": [
{
"keyword": "ai task prioritization",
"search_volume": 2800,
"competition_level": "low",
"relevance_score": 0.95,
"difficulty_score": 25.4,
"potential_score": 82.6,
"recommendation": "Excellent long-tail opportunity"
},
{
"keyword": "team productivity tool",
"search_volume": 3500,
"competition_level": "low",
"relevance_score": 0.85,
"difficulty_score": 28.7,
"potential_score": 79.3,
"recommendation": "Excellent long-tail opportunity"
}
]
},
"competitor_insights": {
"competitors_analyzed": 4,
"common_keywords": [
"task",
"todo",
"list",
"productivity",
"organize",
"manage"
],
"keyword_gaps": [
{
"keyword": "ai prioritization",
"used_by": ["None of the major competitors"],
"opportunity": "Unique positioning opportunity"
},
{
"keyword": "smart task manager",
"used_by": ["Things 3"],
"opportunity": "Underutilized by most competitors"
}
]
},
"metadata_recommendations": {
"apple_app_store": {
"title_options": [
{
"title": "TaskFlow - AI Task Manager",
"length": 26,
"keywords_included": ["task manager", "ai"],
"strategy": "brand_plus_primary"
},
{
"title": "TaskFlow: Smart Todo & Tasks",
"length": 29,
"keywords_included": ["todo", "tasks"],
"strategy": "brand_plus_multiple"
}
],
"subtitle_recommendation": "AI-Powered Team Productivity",
"keyword_field": "productivity,organize,planner,schedule,workflow,reminders,collaboration,calendar,sync,priorities",
"description_focus": "Lead with AI differentiation, emphasize team features"
},
"google_play_store": {
"title_options": [
{
"title": "TaskFlow - AI Task Manager & Team Productivity",
"length": 48,
"keywords_included": ["task manager", "ai", "team", "productivity"],
"strategy": "keyword_rich"
}
],
"short_description_recommendation": "AI task manager - Organize, prioritize, and collaborate with your team",
"description_focus": "Keywords naturally integrated throughout 4000 character description"
}
},
"strategic_recommendations": [
"Focus on 'AI prioritization' as unique differentiator - low competition, high relevance",
"Target 'team task manager' and 'team productivity' keywords - good search volume, lower competition than generic terms",
"Include long-tail keywords in description for additional discovery opportunities",
"Test title variations with A/B testing after launch",
"Monitor competitor keyword changes quarterly"
],
"priority_actions": [
{
"action": "Optimize app title with primary keyword",
"priority": "high",
"expected_impact": "15-25% improvement in search visibility"
},
{
"action": "Create description highlighting AI features with natural keyword integration",
"priority": "high",
"expected_impact": "10-15% improvement in conversion rate"
},
{
"action": "Plan A/B tests for icon and screenshots post-launch",
"priority": "medium",
"expected_impact": "5-10% improvement in conversion rate"
}
],
"aso_health_estimate": {
"current_score": "N/A (pre-launch)",
"potential_score_with_optimizations": "75-80/100",
"key_strengths": [
"Unique AI differentiation",
"Clear target audience",
"Strong feature set"
],
"areas_to_develop": [
"Build rating volume post-launch",
"Monitor and respond to reviews",
"Continuous keyword optimization"
]
}
}
How to Use the App Store Optimization Skill
Hey Claude—I just added the "app-store-optimization" skill. Can you help me optimize my app's presence on the App Store and Google Play?
Example Invocations
Keyword Research
Example 1: Basic Keyword Research
Hey Claude—I just added the "app-store-optimization" skill. Can you research the best keywords for my productivity app? I'm targeting professionals who need task management and team collaboration features.Example 2: Competitive Keyword Analysis
Hey Claude—I just added the "app-store-optimization" skill. Can you analyze keywords that Todoist, Asana, and Monday.com are using? I want to find gaps and opportunities for my project management app.Metadata Optimization
Example 3: Optimize App Title
Hey Claude—I just added the "app-store-optimization" skill. Can you optimize my app title for the Apple App Store? My app is called "TaskFlow" and I want to rank for "task manager", "productivity", and "team collaboration". The title needs to be under 30 characters.Example 4: Full Metadata Package
Hey Claude—I just added the "app-store-optimization" skill. Can you create optimized metadata for both Apple App Store and Google Play Store? Here's my app info:
- Name: TaskFlow
- Category: Productivity
- Key features: AI task prioritization, team collaboration, calendar integration
- Target keywords: task manager, productivity app, team tasksCompetitor Analysis
Example 5: Analyze Top Competitors
Hey Claude—I just added the "app-store-optimization" skill. Can you analyze the ASO strategies of the top 5 productivity apps in the App Store? I want to understand their title strategies, keyword usage, and visual asset approaches.Example 6: Identify Competitive Gaps
Hey Claude—I just added the "app-store-optimization" skill. Can you compare my app's ASO performance against competitors and identify what I'm missing? Here's my current metadata: [paste metadata]ASO Score Calculation
Example 7: Calculate Overall ASO Health
Hey Claude—I just added the "app-store-optimization" skill. Can you calculate my app's ASO health score? Here are my metrics:
- Average rating: 4.2 stars
- Total ratings: 3,500
- Keywords in top 10: 3
- Keywords in top 50: 12
- Conversion rate: 4.5%Example 8: Identify Improvement Areas
Hey Claude—I just added the "app-store-optimization" skill. My ASO score is 62/100. Can you tell me which areas I should focus on first to improve my rankings and downloads?A/B Testing
Example 9: Plan Icon Test
Hey Claude—I just added the "app-store-optimization" skill. I want to A/B test two different app icons. My current conversion rate is 5%. Can you help me plan the test, calculate required sample size, and determine how long to run it?Example 10: Analyze Test Results
Hey Claude—I just added the "app-store-optimization" skill. Can you analyze my A/B test results?
- Variant A (control): 2,500 visitors, 125 installs
- Variant B (new icon): 2,500 visitors, 150 installs
Is this statistically significant? Should I implement variant B?Localization
Example 11: Plan Localization Strategy
Hey Claude—I just added the "app-store-optimization" skill. I currently only have English metadata. Which markets should I localize for first? I'm a bootstrapped startup with moderate budget.Example 12: Translate Metadata
Hey Claude—I just added the "app-store-optimization" skill. Can you help me translate my app metadata to Spanish for the Mexico market? Here's my English metadata: [paste metadata]. Check if it fits within character limits.Review Analysis
Example 13: Analyze User Reviews
Hey Claude—I just added the "app-store-optimization" skill. Can you analyze my recent reviews and tell me:
- Overall sentiment (positive/negative ratio)
- Most common complaints
- Most requested features
- Bugs that need immediate fixingExample 14: Generate Review Response Templates
Hey Claude—I just added the "app-store-optimization" skill. Can you create professional response templates for:
- Users reporting crashes
- Feature requests
- Positive 5-star reviews
- General complaintsLaunch Planning
Example 15: Pre-Launch Checklist
Hey Claude—I just added the "app-store-optimization" skill. Can you generate a comprehensive pre-launch checklist for both Apple App Store and Google Play Store? My launch date is December 1, 2025.Example 16: Optimize Launch Timing
Hey Claude—I just added the "app-store-optimization" skill. What's the best day and time to launch my fitness app? I want to maximize visibility and downloads in the first week.Example 17: Plan Seasonal Campaign
Hey Claude—I just added the "app-store-optimization" skill. Can you identify seasonal opportunities for my fitness app? It's currently October—what campaigns should I run for the next 6 months?What to Provide
For Keyword Research
- App name and category
- Target audience description
- Key features and unique value proposition
- Competitor apps (optional)
- Geographic markets to target
For Metadata Optimization
- Current app name
- Platform (Apple, Google, or both)
- Target keywords (prioritized list)
- Key features and benefits
- Target audience
- Current metadata (for optimization)
For Competitor Analysis
- Your app category
- List of competitor app names or IDs
- Platform (Apple or Google)
- Specific aspects to analyze (keywords, visuals, ratings)
For ASO Score Calculation
- Metadata quality metrics (title length, description length, keyword density)
- Rating data (average rating, total ratings, recent ratings)
- Keyword rankings (top 10, top 50, top 100 counts)
- Conversion metrics (impression-to-install rate, downloads)
For A/B Testing
- Test type (icon, screenshot, title, description)
- Control variant details
- Test variant details
- Baseline conversion rate
- For results analysis: visitor and conversion counts for both variants
For Localization
- Current market and language
- Budget level (low, medium, high)
- Target number of markets
- Current metadata text for translation
For Review Analysis
- Recent reviews (text, rating, date)
- Platform (Apple or Google)
- Time period to analyze
- Specific focus (bugs, features, sentiment)
For Launch Planning
- Platform (Apple, Google, or both)
- Target launch date
- App category
- App information (name, features, target audience)
What You'll Get
Keyword Research Output
- Prioritized keyword list with search volume estimates
- Competition level analysis
- Relevance scores
- Long-tail keyword opportunities
- Strategic recommendations
Metadata Optimization Output
- Optimized titles (multiple options)
- Optimized descriptions (short and full)
- Keyword field optimization (Apple)
- Character count validation
- Keyword density analysis
- Before/after comparison
Competitor Analysis Output
- Ranked competitors by ASO strength
- Common keyword patterns
- Keyword gaps and opportunities
- Visual asset assessment
- Best practices identified
- Actionable recommendations
ASO Score Output
- Overall score (0-100)
- Breakdown by category (metadata, ratings, keywords, conversion)
- Strengths and weaknesses
- Prioritized action items
- Expected impact of improvements
A/B Test Output
- Test design with hypothesis
- Required sample size calculation
- Duration estimates
- Statistical significance analysis
- Implementation recommendations
- Learnings and insights
Localization Output
- Prioritized target markets
- Estimated translation costs
- ROI projections
- Character limit validation for each language
- Cultural adaptation recommendations
- Phased implementation plan
Review Analysis Output
- Sentiment distribution (positive/neutral/negative)
- Common themes and topics
- Top issues requiring fixes
- Most requested features
- Response templates
- Trend analysis over time
Launch Planning Output
- Platform-specific checklists (Apple, Google, Universal)
- Timeline with milestones
- Compliance validation
- Optimal launch timing recommendations
- Seasonal campaign opportunities
- Update cadence planning
Tips for Best Results
1. Be Specific: Provide as much detail about your app as possible 2. Include Context: Share your goals (increase downloads, improve ranking, boost conversion) 3. Provide Data: Real metrics enable more accurate analysis 4. Iterate: Start with keyword research, then optimize metadata, then test 5. Track Results: Monitor changes after implementing recommendations 6. Stay Compliant: Always verify recommendations against current App Store/Play Store guidelines 7. Test First: Use A/B testing before making major metadata changes 8. Localize Strategically: Start with highest-ROI markets first 9. Respond to Reviews: Use provided templates to engage with users 10. Plan Ahead: Use launch checklists and timelines to avoid last-minute rushes
Common Workflows
New App Launch
1. Keyword research → Competitor analysis → Metadata optimization → Pre-launch checklist → Launch timing optimization
Improving Existing App
1. ASO score calculation → Identify gaps → Metadata optimization → A/B testing → Review analysis → Implement changes
International Expansion
1. Localization planning → Market prioritization → Metadata translation → ROI analysis → Phased rollout
Ongoing Optimization
1. Monthly keyword ranking tracking → Quarterly metadata updates → Continuous A/B testing → Review monitoring → Seasonal campaigns
Need Help?
If you need clarification on any aspect of ASO or want to combine multiple analyses, just ask! For example:
Hey Claude—I just added the "app-store-optimization" skill. Can you create a complete ASO strategy for my new productivity app? I need keyword research, optimized metadata for both stores, a pre-launch checklist, and launch timing recommendations.The skill can handle comprehensive, multi-phase ASO projects as well as specific tactical optimizations.
App Store Optimization (ASO) Skill
Version: 1.0.0 Last Updated: November 7, 2025 Author: Claude Skills Factory
Overview
A comprehensive App Store Optimization (ASO) skill that provides complete capabilities for researching, optimizing, and tracking mobile app performance on the Apple App Store and Google Play Store. This skill empowers app developers and marketers to maximize their app's visibility, downloads, and success in competitive app marketplaces.
What This Skill Does
This skill provides end-to-end ASO capabilities across seven key areas:
1. Research & Analysis: Keyword research, competitor analysis, market trends, review sentiment 2. Metadata Optimization: Title, description, keywords with platform-specific character limits 3. Conversion Optimization: A/B testing framework, visual asset optimization 4. Rating & Review Management: Sentiment analysis, response strategies, issue identification 5. Launch & Update Strategies: Pre-launch checklists, timing optimization, update planning 6. Analytics & Tracking: ASO scoring, keyword rankings, performance benchmarking 7. Localization: Multi-language strategy, translation management, ROI analysis
Key Features
Comprehensive Keyword Research
- Search volume and competition analysis
- Long-tail keyword discovery
- Competitor keyword extraction
- Keyword difficulty scoring
- Strategic prioritization
Platform-Specific Metadata Optimization
- Apple App Store:
- Title (30 chars)
- Subtitle (30 chars)
- Promotional Text (170 chars)
- Description (4000 chars)
- Keywords field (100 chars)
- Google Play Store:
- Title (50 chars)
- Short Description (80 chars)
- Full Description (4000 chars)
- Character limit validation
- Keyword density analysis
- Multiple optimization strategies
Competitor Intelligence
- Automated competitor discovery
- Metadata strategy analysis
- Visual asset assessment
- Gap identification
- Competitive positioning
ASO Health Scoring
- 0-100 overall score
- Four-category breakdown (Metadata, Ratings, Keywords, Conversion)
- Strengths and weaknesses identification
- Prioritized action recommendations
- Expected impact estimates
Scientific A/B Testing
- Test design and hypothesis formulation
- Sample size calculation
- Statistical significance analysis
- Duration estimation
- Implementation recommendations
Global Localization
- Market prioritization (Tier 1/2/3)
- Translation cost estimation
- Character limit adaptation by language
- Cultural keyword considerations
- ROI analysis
Review Intelligence
- Sentiment analysis
- Common theme extraction
- Bug and issue identification
- Feature request clustering
- Professional response templates
Launch Planning
- Platform-specific checklists
- Timeline generation
- Compliance validation
- Optimal timing recommendations
- Seasonal campaign planning
Python Modules
This skill includes 8 powerful Python modules:
1. keyword_analyzer.py
Purpose: Analyzes keywords for search volume, competition, and relevance
Key Functions:
analyze_keyword(): Single keyword analysiscompare_keywords(): Multi-keyword comparison and rankingfind_long_tail_opportunities(): Generate long-tail variationscalculate_keyword_density(): Analyze keyword usage in textextract_keywords_from_text(): Extract keywords from reviews/descriptions
2. metadata_optimizer.py
Purpose: Optimizes titles, descriptions, keywords with character limit validation
Key Functions:
optimize_title(): Generate optimal title optionsoptimize_description(): Create conversion-focused descriptionsoptimize_keyword_field(): Maximize Apple's 100-char keyword fieldvalidate_character_limits(): Ensure platform compliancecalculate_keyword_density(): Analyze keyword integration
3. competitor_analyzer.py
Purpose: Analyzes competitor ASO strategies
Key Functions:
analyze_competitor(): Single competitor deep-divecompare_competitors(): Multi-competitor analysisidentify_gaps(): Find competitive opportunities_calculate_competitive_strength(): Score competitor ASO quality
4. aso_scorer.py
Purpose: Calculates comprehensive ASO health score
Key Functions:
calculate_overall_score(): 0-100 ASO health scorescore_metadata_quality(): Evaluate metadata optimizationscore_ratings_reviews(): Assess rating quality and volumescore_keyword_performance(): Analyze ranking positionsscore_conversion_metrics(): Evaluate conversion ratesgenerate_recommendations(): Prioritized improvement actions
5. ab_test_planner.py
Purpose: Plans and tracks A/B tests for ASO elements
Key Functions:
design_test(): Create test hypothesis and structurecalculate_sample_size(): Determine required visitorscalculate_significance(): Assess statistical validitytrack_test_results(): Monitor ongoing testsgenerate_test_report(): Create comprehensive test reports
6. localization_helper.py
Purpose: Manages multi-language ASO optimization
Key Functions:
identify_target_markets(): Prioritize localization marketstranslate_metadata(): Adapt metadata for languagesadapt_keywords(): Cultural keyword adaptationvalidate_translations(): Character limit validationcalculate_localization_roi(): Estimate investment returns
7. review_analyzer.py
Purpose: Analyzes user reviews for actionable insights
Key Functions:
analyze_sentiment(): Calculate sentiment distributionextract_common_themes(): Identify frequent topicsidentify_issues(): Surface bugs and problemsfind_feature_requests(): Extract desired featurestrack_sentiment_trends(): Monitor changes over timegenerate_response_templates(): Create review responses
8. launch_checklist.py
Purpose: Generates comprehensive launch and update checklists
Key Functions:
generate_prelaunch_checklist(): Complete submission validationvalidate_app_store_compliance(): Check guidelines compliancecreate_update_plan(): Plan update cadenceoptimize_launch_timing(): Recommend launch datesplan_seasonal_campaigns(): Identify seasonal opportunities
Installation
For Claude Code (Desktop/CLI)
Project-Level Installation
# Copy skill folder to project
cp -r app-store-optimization /path/to/your/project/.claude/skills/
# Claude will auto-load the skill when working in this projectUser-Level Installation (Available in All Projects)
# Copy skill folder to user-level skills
cp -r app-store-optimization ~/.claude/skills/
# Claude will load this skill in all your projectsFor Claude Apps (Browser)
1. Use the skill-creator skill to import the skill 2. Or manually import via Claude Apps interface
Verification
To verify installation:
# Check if skill folder exists
ls ~/.claude/skills/app-store-optimization/
# You should see:
# SKILL.md
# keyword_analyzer.py
# metadata_optimizer.py
# competitor_analyzer.py
# aso_scorer.py
# ab_test_planner.py
# localization_helper.py
# review_analyzer.py
# launch_checklist.py
# sample_input.json
# expected_output.json
# HOW_TO_USE.md
# README.mdUsage Examples
Example 1: Complete Keyword Research
Hey Claude—I just added the "app-store-optimization" skill. Can you research keywords for my fitness app? I'm targeting people who want home workouts, yoga, and meal planning. Analyze top competitors like Nike Training Club and Peloton.What Claude will do:
- Use
keyword_analyzer.pyto research keywords - Use
competitor_analyzer.pyto analyze Nike Training Club and Peloton - Provide prioritized keyword list with search volumes, competition levels
- Identify gaps and long-tail opportunities
- Recommend primary keywords for title and secondary keywords for description
Example 2: Optimize App Store Metadata
Hey Claude—I just added the "app-store-optimization" skill. Optimize my app's metadata for both Apple App Store and Google Play Store:
- App: FitFlow
- Category: Health & Fitness
- Features: AI workout plans, nutrition tracking, progress photos
- Keywords: fitness app, workout planner, home fitnessWhat Claude will do:
- Use
metadata_optimizer.pyto create optimized titles (multiple options) - Generate platform-specific descriptions (short and full)
- Optimize Apple's 100-character keyword field
- Validate all character limits
- Calculate keyword density
- Provide before/after comparison
Example 3: Calculate ASO Health Score
Hey Claude—I just added the "app-store-optimization" skill. Calculate my app's ASO score:
- Average rating: 4.3 stars (8,200 ratings)
- Keywords in top 10: 4
- Keywords in top 50: 15
- Conversion rate: 3.8%
- Title: "FitFlow - Home Workouts"
- Description: 1,500 characters with 3 keyword mentionsWhat Claude will do:
- Use
aso_scorer.pyto calculate overall score (0-100) - Break down by category (Metadata: X/25, Ratings: X/25, Keywords: X/25, Conversion: X/25)
- Identify strengths and weaknesses
- Generate prioritized recommendations
- Estimate impact of improvements
Example 4: A/B Test Planning
Hey Claude—I just added the "app-store-optimization" skill. I want to A/B test my app icon. My current conversion rate is 4.2%. How many visitors do I need and how long should I run the test?What Claude will do:
- Use
ab_test_planner.pyto design test - Calculate required sample size (based on minimum detectable effect)
- Estimate test duration for low/medium/high traffic scenarios
- Provide test structure and success metrics
- Explain how to analyze results
Example 5: Review Sentiment Analysis
Hey Claude—I just added the "app-store-optimization" skill. Analyze my last 500 reviews and tell me:
- Overall sentiment
- Most common complaints
- Top feature requests
- Bugs needing immediate fixesWhat Claude will do:
- Use
review_analyzer.pyto process reviews - Calculate sentiment distribution
- Extract common themes
- Identify and prioritize issues
- Cluster feature requests
- Generate response templates
Example 6: Pre-Launch Checklist
Hey Claude—I just added the "app-store-optimization" skill. Generate a complete pre-launch checklist for both app stores. My launch date is March 15, 2026.What Claude will do:
- Use
launch_checklist.pyto generate checklists - Create Apple App Store checklist (metadata, assets, technical, legal)
- Create Google Play Store checklist (metadata, assets, technical, legal)
- Add universal checklist (marketing, QA, support)
- Generate timeline with milestones
- Calculate completion percentage
Best Practices
Keyword Research
1. Start with 20-30 seed keywords 2. Analyze top 5 competitors in your category 3. Balance high-volume and long-tail keywords 4. Prioritize relevance over search volume 5. Update keyword research quarterly
Metadata Optimization
1. Front-load keywords in title (first 15 characters most important) 2. Use every available character (don't waste space) 3. Write for humans first, search engines second 4. A/B test major changes before committing 5. Update descriptions with each major release
A/B Testing
1. Test one element at a time (icon vs. screenshots vs. title) 2. Run tests to statistical significance (90%+ confidence) 3. Test high-impact elements first (icon has biggest impact) 4. Allow sufficient duration (at least 1 week, preferably 2-3) 5. Document learnings for future tests
Localization
1. Start with top 5 revenue markets (US, China, Japan, Germany, UK) 2. Use professional translators, not machine translation 3. Test translations with native speakers 4. Adapt keywords for cultural context 5. Monitor ROI by market
Review Management
1. Respond to reviews within 24-48 hours 2. Always be professional, even with negative reviews 3. Address specific issues raised 4. Thank users for positive feedback 5. Use insights to prioritize product improvements
Technical Requirements
- Python: 3.7+ (for Python modules)
- Platform Support: Apple App Store, Google Play Store
- Data Formats: JSON input/output
- Dependencies: Standard library only (no external packages required)
Limitations
Data Dependencies
- Keyword search volumes are estimates (no official Apple/Google data)
- Competitor data limited to publicly available information
- Review analysis requires access to public reviews
- Historical data may not be available for new apps
Platform Constraints
- Apple: Metadata changes require app submission (except Promotional Text)
- Google: Metadata changes take 1-2 hours to index
- A/B testing requires significant traffic for statistical significance
- Store algorithms are proprietary and change without notice
Scope
- Does not include paid user acquisition (Apple Search Ads, Google Ads)
- Does not cover in-app analytics implementation
- Does not handle technical app development
- Focuses on organic discovery and conversion optimization
Troubleshooting
Issue: Python modules not found
Solution: Ensure all .py files are in the same directory as SKILL.md
Issue: Character limit validation failing
Solution: Check that you're using the correct platform ('apple' or 'google')
Issue: Keyword research returning limited results
Solution: Provide more context about your app, features, and target audience
Issue: ASO score seems inaccurate
Solution: Ensure you're providing accurate metrics (ratings, keyword rankings, conversion rate)
Version History
Version 1.0.0 (November 7, 2025)
- Initial release
- 8 Python modules with comprehensive ASO capabilities
- Support for both Apple App Store and Google Play Store
- Keyword research, metadata optimization, competitor analysis
- ASO scoring, A/B testing, localization, review analysis
- Launch planning and seasonal campaign tools
Support & Feedback
This skill is designed to help app developers and marketers succeed in competitive app marketplaces. For the best results:
1. Provide detailed context about your app 2. Include specific metrics when available 3. Ask follow-up questions for clarification 4. Iterate based on results
Credits
Developed by Claude Skills Factory Based on industry-standard ASO best practices Platform requirements current as of November 2025
License
This skill is provided as-is for use with Claude Code and Claude Apps. Customize and extend as needed for your specific use cases.
---
Ready to optimize your app? Start with keyword research, then move to metadata optimization, and finally implement A/B testing for continuous improvement. The skill handles everything from pre-launch planning to ongoing optimization.
For detailed usage examples, see HOW_TO_USE.md.
ASO Best Practices Reference
Optimization strategies for improving app store visibility, conversion, and rankings.
---
Table of Contents
- Keyword Optimization
- Metadata Optimization
- Visual Asset Optimization
- Rating and Review Management
- Launch Strategy
- A/B Testing Framework
- Conversion Optimization
- Common Mistakes to Avoid
---
Keyword Optimization
Keyword Research Process
1. Brainstorm seed keywords - Core terms users search for 2. Expand with variations - Synonyms, related terms, long-tail 3. Analyze competition - Check difficulty scores 4. Evaluate search volume - Prioritize high-volume terms 5. Test and iterate - Monitor rankings and adjust
Keyword Selection Criteria
| Factor | Weight | Evaluation Method |
|---|---|---|
| Relevance | 40% | Does it describe app function? |
| Search Volume | 30% | Monthly search estimates |
| Competition | 20% | Number of ranking apps |
| Conversion Potential | 10% | User intent alignment |
Keyword Placement Priority
| Location | Search Weight | Example |
|---|---|---|
| App Title | Highest | "TaskMaster - Todo List Manager" |
| Subtitle (iOS) | High | "Organize Your Daily Tasks" |
| Keyword Field (iOS) | High | "planner,reminder,checklist" |
| Short Description (Android) | High | "Simple task manager for busy professionals" |
| Full Description | Medium | Natural keyword usage throughout |
Long-Tail Keyword Strategy
Long-tail keywords have lower volume but higher conversion:
| Type | Example | Volume | Competition | Conversion |
|---|---|---|---|---|
| Short-tail | "todo app" | High | High | Low |
| Mid-tail | "daily task manager" | Medium | Medium | Medium |
| Long-tail | "free todo list with reminders" | Low | Low | High |
Formula for keyword priority:
Score = (Volume × 0.3) + (1/Competition × 0.3) + (Relevance × 0.4)---
Metadata Optimization
Title Optimization
Structure Formula:
[Brand Name] - [Primary Keyword] [Secondary Keyword/Benefit]Examples by category:
| Category | Before | After |
|---|---|---|
| Productivity | "MyTasks" | "MyTasks - Todo List & Planner" |
| Fitness | "FitTrack" | "FitTrack: Workout & Gym Log" |
| Finance | "MoneyApp" | "MoneyApp - Budget Tracker" |
| Photo | "SnapEdit" | "SnapEdit: Photo Editor & AI" |
Title Optimization Checklist:
- [ ] Primary keyword within first 3 words
- [ ] Brand name is memorable and unique
- [ ] Character count matches platform limit
- [ ] No keyword stuffing
- [ ] Readable and natural sounding
Description Optimization
Full Description Structure:
PARAGRAPH 1: Hook + Primary Benefit (50-100 words)
- Address user pain point
- State main value proposition
- Include primary keyword naturally
PARAGRAPH 2-3: Feature Highlights (100-150 words)
- Top 3-5 features with benefits
- Use bullet points or emojis for scanability
- Include secondary keywords
PARAGRAPH 4: Social Proof (50-75 words)
- Download numbers or ratings
- Press mentions or awards
- User testimonials (summarized)
PARAGRAPH 5: Call to Action (25-50 words)
- Clear next step
- Urgency or incentive
- Reassurance (free trial, no credit card)Keyword Density Target:
- Primary keyword: 2-3% (8-12 mentions in 4000 chars)
- Secondary keywords: 1-2% each (4-8 mentions each)
Subtitle Optimization (iOS)
Effective Subtitle Formulas:
| Formula | Example |
|---|---|
| [Verb] + [Benefit] | "Organize Your Life" |
| [Adjective] + [Category] | "Smart Task Manager" |
| [Feature] + [Feature] | "Lists, Reminders & Notes" |
| [Audience] + [Solution] | "For Busy Professionals" |
---
Visual Asset Optimization
App Icon Best Practices
| Principle | Do | Don't |
|---|---|---|
| Simplicity | Single focal element | Multiple competing elements |
| Recognizability | Works at 60x60px | Requires large size to read |
| Uniqueness | Distinct from competitors | Generic category icon |
| Color | Bold, contrasting colors | Muted or similar to background |
| Text | None or single letter | Full words or app name |
Icon Testing Questions: 1. Is it recognizable at 29x29px (smallest iOS size)? 2. Does it stand out in search results? 3. Does it communicate app function? 4. Is it distinct from top 10 category competitors?
Screenshot Optimization
Screenshot Hierarchy:
| Position | Purpose | Content Strategy |
|---|---|---|
| Screenshot 1 | Hook/Hero | Main value proposition + key UI |
| Screenshot 2 | Primary Feature | Most-used feature demonstration |
| Screenshot 3 | Secondary Feature | Differentiating capability |
| Screenshot 4 | Social Proof | Ratings, awards, user count |
| Screenshot 5+ | Additional Features | Supporting functionality |
Caption Best Practices:
- Maximum 5-7 words per caption
- Action-oriented verbs ("Track", "Organize", "Discover")
- Benefit-focused, not feature-focused
- Consistent typography and style
Example Caption Evolution:
| Weak | Better | Best |
|---|---|---|
| "Task List Feature" | "Create Task Lists" | "Never Forget a Task Again" |
| "Calendar View" | "See Your Schedule" | "Plan Your Week in Seconds" |
| "Notifications" | "Get Reminders" | "Stay on Top of Deadlines" |
Video Preview Strategy
Video Structure (30 seconds):
| Seconds | Content |
|---|---|
| 0-5 | Hook: Show end result or main benefit |
| 5-15 | Demo: Core feature in action |
| 15-25 | Features: Quick feature montage |
| 25-30 | CTA: Logo and download prompt |
---
Rating and Review Management
Review Response Framework
For Negative Reviews (1-2 stars):
Structure:
1. Acknowledge the issue (1 sentence)
2. Apologize without making excuses (1 sentence)
3. Offer solution or next step (1-2 sentences)
4. Invite direct contact (1 sentence)
Example:
"We're sorry the syncing issues are affecting your experience.
Our team is actively working on a fix for the next update.
In the meantime, please try logging out and back in, which
resolves this for most users. If issues persist, email us at
support@app.com and we'll prioritize your case."For Positive Reviews (4-5 stars):
Structure:
1. Thank sincerely (1 sentence)
2. Acknowledge specific praise (1 sentence)
3. Encourage continued use or sharing (1 sentence)
Example:
"Thank you for the kind words! We're thrilled the reminder
feature helps you stay organized. If you're enjoying the app,
we'd love if you'd share it with friends who might benefit."Rating Improvement Tactics
| Tactic | Implementation | Expected Impact |
|---|---|---|
| In-app prompt timing | After positive action (task completed, milestone reached) | +0.3 stars |
| Bug fix velocity | Address 1-star issues within 7 days | +0.2 stars |
| Response rate | Reply to 80%+ of reviews | +0.1 stars |
| Feature requests | Implement top-requested features | +0.2 stars |
Review Prompt Best Practices
When to prompt:
- After user completes 5+ successful sessions
- After milestone achievement (first task completed, 7-day streak)
- After positive in-app feedback ("Was this helpful? Yes")
When NOT to prompt:
- First session
- After error or crash
- During critical workflow
- More than once per 30 days
---
Launch Strategy
Pre-Launch Checklist
4 Weeks Before Launch:
- [ ] Finalize app name and keywords
- [ ] Complete all metadata fields
- [ ] Prepare all visual assets
- [ ] Set up analytics (Firebase, Mixpanel)
- [ ] Create press kit and media assets
- [ ] Build email list for launch notification
2 Weeks Before Launch:
- [ ] Submit for app review
- [ ] Prepare social media content
- [ ] Brief press and influencers
- [ ] Set up review response templates
- [ ] Configure in-app rating prompts
Launch Day:
- [ ] Verify app is live in stores
- [ ] Announce across all channels
- [ ] Monitor reviews and respond quickly
- [ ] Track download velocity
- [ ] Document any issues for Day 2 fix
Update Cadence
| Update Type | Frequency | ASO Impact |
|---|---|---|
| Bug fixes | As needed | Prevents rating drops |
| Minor features | Every 2-4 weeks | Maintains freshness signal |
| Major features | Every 4-8 weeks | Opportunity for "What's New" |
| Metadata refresh | Every 4-6 weeks | Keyword optimization cycle |
Seasonal Optimization
| Season | Optimization Focus | Example Categories |
|---|---|---|
| Jan (New Year) | Resolutions, goals | Fitness, Productivity |
| Feb (Valentine's) | Dating, relationships | Dating, Photo |
| Mar-Apr (Tax) | Finance, organization | Finance, Productivity |
| May-Jun (Summer) | Travel, fitness | Travel, Health |
| Aug-Sep (Back to School) | Education, organization | Education, Productivity |
| Nov-Dec (Holidays) | Shopping, social | Shopping, Social |
---
A/B Testing Framework
Test Prioritization Matrix
| Element | Impact | Ease | Priority |
|---|---|---|---|
| App Icon | High | Medium | 1 |
| Screenshot 1 | High | Medium | 2 |
| Title | High | Easy | 3 |
| Short Description | Medium | Easy | 4 |
| Screenshots 2-5 | Medium | Medium | 5 |
| Video | Medium | Hard | 6 |
Sample Size Calculator
Formula:
Sample Size = (2 × (Z² × p × (1-p))) / E²
Where:
Z = 1.96 (for 95% confidence)
p = baseline conversion rate
E = minimum detectable effect (usually 0.05)Quick Reference:
| Baseline CVR | Min. Impressions for 5% Lift |
|---|---|
| 1% | 31,000 per variant |
| 2% | 15,500 per variant |
| 5% | 6,200 per variant |
| 10% | 3,100 per variant |
Test Duration Guidelines
| Daily Impressions | Minimum Test Duration |
|---|---|
| 1,000+ | 7 days |
| 500-1,000 | 14 days |
| 100-500 | 30 days |
| <100 | Not recommended |
---
Conversion Optimization
Conversion Funnel Metrics
| Stage | Metric | Benchmark |
|---|---|---|
| Discovery | Impressions | Category dependent |
| Consideration | Page Views | 30-50% of impressions |
| Conversion | Installs | 3-8% of page views |
| Activation | First Open | 70-90% of installs |
Conversion Optimization Levers
| Lever | Typical Lift | Effort |
|---|---|---|
| Icon redesign | 10-25% | High |
| Screenshot optimization | 15-35% | Medium |
| Title keyword optimization | 5-15% | Low |
| Description rewrite | 5-10% | Low |
| Video addition | 10-20% | High |
| Localization | 20-50% per market | Medium |
---
Common Mistakes to Avoid
Keyword Mistakes
| Mistake | Problem | Solution |
|---|---|---|
| Keyword stuffing | Spam detection, rejection | Natural usage, 2-3% density |
| Competitor names | Guideline violation | Focus on category terms |
| Duplicate keywords | Wasted character space | Remove duplicates from keyword field |
| Ignoring long-tail | Missing conversion | Include specific phrases |
Metadata Mistakes
| Mistake | Problem | Solution |
|---|---|---|
| Vague descriptions | Low conversion | Specific benefits and features |
| Feature-focused copy | Doesn't resonate | Benefit-focused messaging |
| Outdated information | Misleading users | Update with each release |
| Missing localization | Lost global revenue | Prioritize top 5 markets |
Visual Asset Mistakes
| Mistake | Problem | Solution |
|---|---|---|
| Text-heavy screenshots | Unreadable on phones | Minimal text, clear UI focus |
| Inconsistent style | Unprofessional appearance | Design system for all assets |
| Portrait-only screenshots | Missed tablet users | Include landscape variants |
| No social proof | Lower trust | Add ratings, awards, press |
Launch Mistakes
| Mistake | Problem | Solution |
|---|---|---|
| Launching on Friday | No support over weekend | Launch Tuesday-Wednesday |
| No analytics setup | Can't measure success | Firebase/Mixpanel before launch |
| Immediate rating prompt | Negative ratings | Wait for positive experience |
| Ignoring reviews | Declining ratings | Respond within 24-48 hours |
ASO Workflows
Read this when executing a specific ASO task end to end — keyword research, metadata optimization, competitor analysis, app launch, or A/B testing — including the step-by-step procedures, scoring criteria, placement tables, structure diagrams, and worked before/after examples.
---
Keyword Research Workflow
Discover and evaluate keywords that drive app store visibility.
Workflow: Conduct Keyword Research
1. Define target audience and core app functions:
- Primary use case (what problem does the app solve)
- Target user demographics
- Competitive category
2. Generate seed keywords from:
- App features and benefits
- User language (not developer terminology)
- App store autocomplete suggestions
3. Expand keyword list using:
- Modifiers (free, best, simple)
- Actions (create, track, organize)
- Audiences (for students, for teams, for business)
4. Evaluate each keyword:
- Search volume (estimated monthly searches)
- Competition (number and quality of ranking apps)
- Relevance (alignment with app function)
5. Score and prioritize keywords:
- Primary: Title and keyword field (iOS)
- Secondary: Subtitle and short description
- Tertiary: Full description only
6. Map keywords to metadata locations 7. Document keyword strategy for tracking 8. Validation: Keywords scored; placement mapped; no competitor brand names included; no plurals in iOS keyword field
Keyword Evaluation Criteria
| Factor | Weight | High Score Indicators |
|---|---|---|
| Relevance | 35% | Describes core app function |
| Volume | 25% | 10,000+ monthly searches |
| Competition | 25% | Top 10 apps have <4.5 avg rating |
| Conversion | 15% | Transactional intent ("best X app") |
Keyword Placement Priority
| Location | Search Weight | Character Limit |
|---|---|---|
| App Title | Highest | 30 (iOS) / 50 (Android) |
| Subtitle (iOS) | High | 30 |
| Keyword Field (iOS) | High | 100 |
| Short Description (Android) | High | 80 |
| Full Description | Medium | 4,000 |
See: references/keyword-research-guide.md
---
Metadata Optimization Workflow
Optimize app store listing elements for search ranking and conversion.
Workflow: Optimize App Metadata
1. Audit current metadata against platform limits:
- Title character count and keyword presence
- Subtitle/short description usage
- Keyword field efficiency (iOS)
- Description keyword density
2. Optimize title following formula:
[Brand Name] - [Primary Keyword] [Secondary Keyword]3. Write subtitle (iOS) or short description (Android):
- Focus on primary benefit
- Include secondary keyword
- Use action verbs
4. Optimize keyword field (iOS only):
- Remove duplicates from title
- Remove plurals (Apple indexes both forms)
- No spaces after commas
- Prioritize by score
5. Rewrite full description:
- Hook paragraph with value proposition
- Feature bullets with keywords
- Social proof section
- Call to action
6. Validate character counts for each field 7. Calculate keyword density (target 2-3% primary) 8. Validation: All fields within character limits; primary keyword in title; no keyword stuffing (>5%); natural language preserved
Platform Character Limits
| Field | Apple App Store | Google Play Store |
|---|---|---|
| Title | 30 characters | 50 characters |
| Subtitle | 30 characters | N/A |
| Short Description | N/A | 80 characters |
| Keywords | 100 characters | N/A |
| Promotional Text | 170 characters | N/A |
| Full Description | 4,000 characters | 4,000 characters |
| What's New | 4,000 characters | 500 characters |
Description Structure
PARAGRAPH 1: Hook (50-100 words)
├── Address user pain point
├── State main value proposition
└── Include primary keyword
PARAGRAPH 2-3: Features (100-150 words)
├── Top 5 features with benefits
├── Bullet points for scanability
└── Secondary keywords naturally integrated
PARAGRAPH 4: Social Proof (50-75 words)
├── Download count or rating
├── Press mentions or awards
└── Summary of user testimonials
PARAGRAPH 5: Call to Action (25-50 words)
├── Clear next step
└── Reassurance (free trial, no signup)See: references/platform-requirements.md
---
Competitor Analysis Workflow
Analyze top competitors to identify keyword gaps and positioning opportunities.
Workflow: Analyze Competitor ASO Strategy
1. Identify top 10 competitors:
- Direct competitors (same core function)
- Indirect competitors (overlapping audience)
- Category leaders (top downloads)
2. Extract competitor keywords from:
- App titles and subtitles
- First 100 words of descriptions
- Visible metadata patterns
3. Build competitor keyword matrix:
- Map which keywords each competitor targets
- Calculate coverage percentage per keyword
4. Identify keyword gaps:
- Keywords with <40% competitor coverage
- High volume terms competitors miss
- Long-tail opportunities
5. Analyze competitor visual assets:
- Icon design patterns
- Screenshot messaging and style
- Video presence and quality
6. Compare ratings and review patterns:
- Average rating by competitor
- Common praise themes
- Common complaint themes
7. Document positioning opportunities 8. Validation: 10+ competitors analyzed; keyword matrix complete; gaps identified with volume estimates; visual audit documented
Competitor Analysis Matrix
| Analysis Area | Data Points |
|---|---|
| Keywords | Title keywords, description frequency |
| Metadata | Character utilization, keyword density |
| Visuals | Icon style, screenshot count/style |
| Ratings | Average rating, total count, velocity |
| Reviews | Top praise, top complaints |
Gap Analysis Template
| Opportunity Type | Example | Action |
|---|---|---|
| Keyword gap | "habit tracker" (40% coverage) | Add to keyword field |
| Feature gap | Competitor lacks widget | Highlight in screenshots |
| Visual gap | No videos in top 5 | Create app preview |
| Messaging gap | None mention "free" | Test free positioning |
---
App Launch Workflow
Execute a structured launch for maximum initial visibility.
Workflow: Launch App to Stores
1. Complete pre-launch preparation (4 weeks before):
- Finalize keywords and metadata
- Prepare all visual assets
- Set up analytics (Firebase, Mixpanel)
- Build press kit and media list
2. Submit for review (2 weeks before):
- Complete all store requirements
- Verify compliance with guidelines
- Prepare launch communications
3. Configure post-launch systems:
- Set up review monitoring
- Prepare response templates
- Configure rating prompt timing
4. Execute launch day:
- Verify app is live in both stores
- Announce across all channels
- Begin review response cycle
5. Monitor initial performance (days 1-7):
- Track download velocity hourly
- Monitor reviews and respond within 24 hours
- Document any issues for quick fixes
6. Conduct 7-day retrospective:
- Compare performance to projections
- Identify quick optimization wins
- Plan first metadata update
7. Schedule first update (2 weeks post-launch) 8. Validation: App live in stores; analytics tracking; review responses within 24h; download velocity documented; first update scheduled
Pre-Launch Checklist
| Category | Items |
|---|---|
| Metadata | Title, subtitle, description, keywords |
| Visual Assets | Icon, screenshots (all sizes), video |
| Compliance | Age rating, privacy policy, content rights |
| Technical | App binary, signing certificates |
| Analytics | SDK integration, event tracking |
| Marketing | Press kit, social content, email ready |
Launch Timing Considerations
| Factor | Recommendation |
|---|---|
| Day of week | Tuesday-Wednesday (avoid weekends) |
| Time of day | Morning in target market timezone |
| Seasonal | Align with relevant category seasons |
| Competition | Avoid major competitor launch dates |
See: references/aso-best-practices.md
---
A/B Testing Workflow
Test metadata and visual elements to improve conversion rates.
Workflow: Run A/B Test
1. Select test element (prioritize by impact):
- Icon (highest impact)
- Screenshot 1 (high impact)
- Title (high impact)
- Short description (medium impact)
2. Form hypothesis:
If we [change], then [metric] will [improve/increase] by [amount]
because [rationale].3. Create variants:
- Control: Current version
- Treatment: Single variable change
4. Calculate required sample size:
- Baseline conversion rate
- Minimum detectable effect (usually 5%)
- Statistical significance (95%)
5. Launch test:
- Apple: Use Product Page Optimization
- Android: Use Store Listing Experiments
6. Run test for minimum duration:
- At least 7 days
- Until statistical significance reached
7. Analyze results:
- Compare conversion rates
- Check statistical significance
- Document learnings
8. Validation: Single variable tested; sample size sufficient; significance reached (95%); results documented; winner implemented
A/B Test Prioritization
| Element | Conversion Impact | Test Complexity |
|---|---|---|
| App Icon | 10-25% lift possible | Medium (design needed) |
| Screenshot 1 | 15-35% lift possible | Medium |
| Title | 5-15% lift possible | Low |
| Short Description | 5-10% lift possible | Low |
| Video | 10-20% lift possible | High |
Sample Size Quick Reference
| Baseline CVR | Impressions Needed (per variant) |
|---|---|
| 1% | 31,000 |
| 2% | 15,500 |
| 5% | 6,200 |
| 10% | 3,100 |
Test Documentation Template
TEST ID: ASO-2025-001
ELEMENT: App Icon
HYPOTHESIS: A bolder color icon will increase conversion by 10%
START DATE: [Date]
END DATE: [Date]
RESULTS:
├── Control CVR: 4.2%
├── Treatment CVR: 4.8%
├── Lift: +14.3%
├── Significance: 97%
└── Decision: Implement treatment
LEARNINGS:
- Bold colors outperform muted tones in this category
- Apply to screenshot backgrounds for next test---
Before/After Examples
Title Optimization
Productivity App:
| Version | Title | Analysis |
|---|---|---|
| Before | "MyTasks" | No keywords, brand only (8 chars) |
| After | "MyTasks - Todo List & Planner" | Primary + secondary keywords (29 chars) |
Fitness App:
| Version | Title | Analysis |
|---|---|---|
| Before | "FitTrack Pro" | Generic modifier (12 chars) |
| After | "FitTrack: Workout Log & Gym" | Category keywords (27 chars) |
Subtitle Optimization (iOS)
| Version | Subtitle | Analysis |
|---|---|---|
| Before | "Get Things Done" | Vague, no keywords |
| After | "Daily Task Manager & Planner" | Two keywords, benefit clear |
Keyword Field Optimization (iOS)
Before (Inefficient - 89 chars, 8 keywords):
task manager, todo list, productivity app, daily planner, reminder appAfter (Optimized - 97 chars, 14 keywords):
task,todo,checklist,reminder,organize,daily,planner,schedule,deadline,goals,habit,widget,sync,teamImprovements:
- Removed spaces after commas (+8 chars)
- Removed duplicates (task manager → task)
- Removed plurals (reminders → reminder)
- Removed words in title
- Added more relevant keywords
Description Opening
Before:
MyTasks is a comprehensive task management solution designed
to help busy professionals organize their daily activities
and boost productivity.After:
Forget missed deadlines. MyTasks keeps every task, reminder,
and project in one place—so you focus on doing, not remembering.
Trusted by 500,000+ professionals.Improvements:
- Leads with user pain point
- Specific benefit (not generic "boost productivity")
- Social proof included
- Keywords natural, not stuffed
Screenshot Caption Evolution
| Version | Caption | Issue |
|---|---|---|
| Before | "Task List Feature" | Feature-focused, passive |
| Better | "Create Task Lists" | Action verb, but still feature |
| Best | "Never Miss a Deadline" | Benefit-focused, emotional |
Keyword Research Guide
Systematic approach to discovering, evaluating, and selecting keywords for app store optimization.
---
Table of Contents
- Keyword Research Methodology
- Keyword Evaluation Framework
- Competitor Keyword Analysis
- Keyword Mapping Strategy
- Keyword Tracking and Iteration
---
Keyword Research Methodology
Phase 1: Seed Keyword Generation
Start by generating initial keyword ideas from multiple sources.
Source 1: Core App Functions
List every action or problem the app solves:
Example for a task management app:
- Create tasks
- Set reminders
- Track deadlines
- Organize projects
- Collaborate with team
- Plan daily scheduleSource 2: User Language Mapping
Match developer terminology to user searches:
| Developer Term | User Search Terms |
|---|---|
| Task management | todo list, task app, tasks |
| Project organization | project planner, project tracker |
| Deadline tracking | due date reminder, deadline app |
| Time blocking | schedule planner, calendar app |
| GTD methodology | getting things done, productivity system |
Source 3: App Store Autocomplete
Type seed keywords into App Store/Play Store search and record suggestions:
"todo" → todo list, todo app, todo list app, todolist widget
"task" → task manager, task planner, task list, tasks to do
"remind" → reminder app, reminder, reminders widget, remind meSource 4: Competitor Analysis
Extract keywords from top 10 competitors in category (detailed in section below).
Phase 2: Keyword Expansion
Expansion Techniques:
| Technique | Example (seed: "todo") |
|---|---|
| Add modifiers | free todo, best todo, simple todo |
| Add actions | make todo list, create todo, organize todo |
| Add platforms | todo app iphone, todo for mac, todo widget |
| Add audiences | todo for students, business todo, family todo |
| Add features | todo with reminders, todo calendar, todo sync |
| Add problems | forgot tasks todo, procrastination todo |
Keyword Matrix Template:
| Core Term | Modifier 1 | Modifier 2 | Full Keyword |
|---|---|---|---|
| todo | free | app | free todo app |
| todo | best | iphone | best todo iphone |
| task | manager | simple | simple task manager |
| reminder | daily | widget | daily reminder widget |
| planner | weekly | calendar | weekly planner calendar |
Phase 3: Keyword Filtering
Remove irrelevant or low-quality keywords:
Exclusion Criteria:
| Criterion | Reason | Example |
|---|---|---|
| Competitor brand names | Policy violation | "todoist alternative" |
| Unrelated categories | Low conversion | "todo games" |
| Plural duplicates (iOS) | Wasted space | "tasks" when "task" exists |
| Single characters | No search value | "to do" vs "todo" |
---
Keyword Evaluation Framework
Keyword Scoring Model
Evaluate each keyword on four dimensions:
1. Search Volume (0-100)
| Volume Level | Score | Monthly Searches |
|---|---|---|
| Very High | 80-100 | 50,000+ |
| High | 60-79 | 10,000-49,999 |
| Medium | 40-59 | 1,000-9,999 |
| Low | 20-39 | 100-999 |
| Very Low | 0-19 | <100 |
2. Competition (0-100, inverted)
| Competition | Score | Top 10 App Ratings |
|---|---|---|
| Very Low | 80-100 | Average <4.0 stars |
| Low | 60-79 | Average 4.0-4.2 stars |
| Medium | 40-59 | Average 4.3-4.5 stars |
| High | 20-39 | Average 4.6-4.8 stars |
| Very High | 0-19 | Average 4.9+ stars |
3. Relevance (0-100)
| Relevance | Score | Criteria |
|---|---|---|
| Exact Match | 90-100 | Keyword describes core function |
| Strong Match | 70-89 | Keyword describes major feature |
| Moderate Match | 50-69 | Keyword describes secondary feature |
| Weak Match | 30-49 | Keyword tangentially related |
| No Match | 0-29 | Keyword unrelated to app |
4. Conversion Potential (0-100)
| Intent | Score | User Query Type |
|---|---|---|
| Transactional | 80-100 | "best [app type]", "[app type] app" |
| Commercial | 60-79 | "free [app type]", "[app type] for [use]" |
| Informational | 40-59 | "how to [action]", "what is [concept]" |
| Navigational | 20-39 | "[brand name]", "[specific app]" |
Composite Score Calculation
Keyword Score = (Volume × 0.25) + (Competition × 0.25) +
(Relevance × 0.35) + (Conversion × 0.15)Score Interpretation:
| Score Range | Priority | Action |
|---|---|---|
| 80-100 | Primary | Target in title and keyword field |
| 60-79 | Secondary | Include in subtitle/description |
| 40-59 | Tertiary | Use in long description only |
| 0-39 | Deprioritize | Do not target |
Keyword Evaluation Worksheet
KEYWORD EVALUATION
Keyword: "task manager app"
Date: [Date]
SCORES:
├── Search Volume: 72/100 (High - ~25,000/month)
├── Competition: 45/100 (Medium - 4.4 avg rating in top 10)
├── Relevance: 95/100 (Exact match to core function)
└── Conversion: 85/100 (Transactional intent)
COMPOSITE SCORE: 74.5/100
RECOMMENDATION: Secondary Priority
- Include in subtitle or short description
- Not competitive enough for title (dominated by Todoist, Any.do)
- Consider long-tail variant: "simple task manager app"---
Competitor Keyword Analysis
Competitor Identification
Step 1: Direct Competitors Apps solving the same problem for the same audience.
Step 2: Indirect Competitors Apps solving related problems or targeting overlapping audiences.
Step 3: Category Leaders Top 10-20 apps by downloads in primary category.
Competitor Keyword Extraction
From App Title:
Competitor: "Todoist: To-Do List & Tasks"
Keywords: todoist, to-do list, tasks, to doFrom Subtitle (iOS):
Competitor subtitle: "Task Manager & Planner"
Keywords: task manager, plannerFrom Description (First 100 words): Identify frequently used terms:
"Todoist is the world's favorite task manager and to-do list app.
Organize work and life, hit your goals, and find productivity..."
Extracted: task manager, to-do list, organize, goals, productivityCompetitor Keyword Matrix
| Keyword | Comp 1 | Comp 2 | Comp 3 | Comp 4 | Comp 5 | Coverage |
|---|---|---|---|---|---|---|
| task manager | ✓ | ✓ | ✓ | ✓ | ✓ | 100% |
| to-do list | ✓ | ✓ | ✓ | ✓ | 80% | |
| planner | ✓ | ✓ | ✓ | ✓ | 80% | |
| reminder | ✓ | ✓ | ✓ | 60% | ||
| productivity | ✓ | ✓ | ✓ | 60% | ||
| checklist | ✓ | ✓ | ✓ | 60% | ||
| project | ✓ | ✓ | 40% | |||
| habit | ✓ | ✓ | 40% |
Analysis:
- 100% coverage = Highly competitive, essential keyword
- 60-80% coverage = Important category term
- 40% coverage = Potential differentiator
- <40% coverage = Unique opportunity or irrelevant
Keyword Gap Analysis
Identify keywords competitors miss:
KEYWORD GAP ANALYSIS
Underserved Keywords (Low competitor coverage, decent volume):
1. "daily planner widget" - 2/10 competitors, 5,000 searches
2. "task list for teams" - 3/10 competitors, 3,500 searches
3. "todo with calendar sync" - 1/10 competitors, 2,800 searches
Opportunity Assessment:
- "daily planner widget" → Add widget feature, target keyword
- "task list for teams" → Already have feature, update metadata
- "todo with calendar sync" → Feature gap, add to roadmap---
Keyword Mapping Strategy
Keyword Placement Map
Assign each keyword to specific metadata locations:
KEYWORD PLACEMENT MAP
PRIMARY (Title + Keyword Field):
├── task manager (Score: 82)
├── todo list (Score: 78)
└── planner (Score: 75)
SECONDARY (Subtitle + Short Description):
├── reminder app (Score: 68)
├── daily tasks (Score: 65)
└── organize (Score: 62)
TERTIARY (Full Description):
├── checklist (Score: 55)
├── productivity (Score: 52)
├── schedule (Score: 48)
├── deadline (Score: 45)
└── project management (Score: 42)iOS Keyword Field Strategy
100 Character Optimization:
STEP 1: List all target keywords
task,manager,todo,list,planner,reminder,organize,daily,checklist,
productivity,schedule,deadline,project,goals,habit,widget,sync,
team,collaborate,notes,calendar
STEP 2: Remove duplicates from title
Title: "TaskFlow - Todo List Manager"
Remove: task, todo, list, manager
STEP 3: Remove plurals
Keep: reminder (not reminders)
Keep: goal (not goals)
STEP 4: Prioritize by score and fit
Final 100 chars:
planner,reminder,organize,daily,checklist,productivity,schedule,
deadline,project,goals,habit,widget,sync,team,collaborate
Character count: 98/100Android Description Keyword Integration
Natural keyword placement in 4,000 characters:
PARAGRAPH 1 (Hook - 300 chars):
Keywords: task manager, todo list, organize
"TaskFlow is the task manager trusted by 2 million users. Create
your perfect todo list and organize everything that matters..."
PARAGRAPH 2 (Features - 800 chars):
Keywords: reminder, checklist, deadline, project
"Set smart reminders that notify you at the right time. Build
checklists for any project. Never miss a deadline with..."
PARAGRAPH 3 (Benefits - 600 chars):
Keywords: productivity, schedule, goals
"Boost your productivity with proven planning methods. Schedule
your day in minutes. Track goals and celebrate..."
PARAGRAPH 4 (Differentiators - 500 chars):
Keywords: widget, sync, team, collaborate
"Beautiful widgets keep tasks visible. Sync across all devices
instantly. Invite your team to collaborate on..."
Total keyword coverage: 14 keywords naturally integrated---
Keyword Tracking and Iteration
Ranking Tracking Cadence
| Frequency | Action |
|---|---|
| Daily | Track top 5-10 primary keywords |
| Weekly | Full keyword set review |
| Monthly | Competitor keyword comparison |
| Quarterly | Full keyword research refresh |
Keyword Performance Metrics
| Metric | Target | Action if Below |
|---|---|---|
| Top 10 ranking | 3+ keywords | Increase keyword weight |
| Top 50 ranking | 10+ keywords | Maintain current strategy |
| Ranking velocity | Improving trend | Continue optimization |
| Conversion rate | >5% | Review relevance alignment |
Iteration Process
Monthly Keyword Audit:
1. EXPORT current rankings
- List all tracked keywords
- Record current position
- Note 30-day trend (up/down/stable)
2. IDENTIFY opportunities
- Keywords improving but not top 10
- Keywords declining from previous position
- New high-volume keywords in category
3. PRIORITIZE changes
- Boost: Keywords at position 11-20
- Maintain: Keywords at position 1-10
- Replace: Keywords at position 50+ with no improvement
4. IMPLEMENT updates
- Adjust keyword field (iOS)
- Update description (Android)
- Modify subtitle if needed
5. DOCUMENT changes
- Record what changed and why
- Set reminder for 2-week check-inKeyword Testing Log Template
KEYWORD TEST LOG
Test ID: KW-2025-001
Date Started: [Date]
Keywords Changed:
- Added: "habit tracker" (replacing "goals app")
- Added: "daily routine" (replacing "schedule planner")
Rationale:
- "habit tracker" has 3x volume of "goals app"
- "daily routine" trending up 40% in category
Baseline Rankings:
- "habit tracker": Not ranked
- "daily routine": Position 87
30-Day Results:
- "habit tracker": Position 34 (+53)
- "daily routine": Position 28 (+59)
Conclusion: Test successful - retain new keywords
Next Action: Target subtitle position for "habit tracker"Operations & Benchmarks
Read this when diagnosing ASO problems, setting performance targets, understanding platform/data constraints, or wiring this skill into App Store Connect, Google Play Console, ASO tools, and analytics platforms. Contains the troubleshooting table, success criteria, platform limitations, proactive triggers, output artifacts, communication standards, related skills, and the full integration matrix.
---
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| Keywords not indexing after metadata update | Apple requires app submission for keyword changes; Google indexes in 1-2 hours | For iOS, submit an app update or use promotional text (editable without submission). For Google Play, wait 24-48 hours and verify via Google Play Console search analytics |
| Conversion rate dropped after metadata change | Title or screenshot change reduced clarity or trust signals | Revert to previous version immediately, then A/B test the change using Apple Product Page Optimization or Google Store Listing Experiments before rolling out again |
| App not appearing in search results | Metadata lacks relevant keywords, or app has low engagement signals | Audit title and keyword field for target terms. Check that the app is not suppressed for guideline violations. Improve ratings above 4.0 to boost ranking signals |
| Ratings declining after update | New bugs introduced, or rating prompt timing is poor | Analyze recent negative reviews for patterns. Fix critical bugs in a hotfix release. Adjust in-app rating prompt to trigger after positive user actions (e.g., completing a task), not on app launch |
| Competitor outranking despite weaker metadata | Competitor has stronger engagement metrics (installs, retention, rating velocity) | Focus on improving post-install engagement and retention. Apple and Google now weight behavioral signals (session length, uninstall rate, rating velocity) alongside metadata relevance |
| Localized listing underperforming | Direct translation without cultural keyword adaptation | Use native speakers for keyword research in each market. Adapt keywords to local search behavior rather than translating English terms. German compound words and Japanese katakana/kanji mixing require specialized ASO |
| Apple Search Ads not delivering impressions | Bid too low, relevance score poor, or audience too narrow | Increase bid to match category benchmarks. Improve metadata relevance for target keywords (Apple will not show irrelevant ads regardless of bid). Broaden audience targeting or enable Search Match |
---
Success Criteria
- Conversion Rate (Impression-to-Install): Target 25-30% on iOS and 27-33% on Google Play (2026 cross-category median: 25% iOS, 27.3% Google Play). Productivity and utility apps should aim for 40%+ given category norms
- Keyword Rankings: Maintain 10+ keywords in top-10 positions and 20+ keywords in top-50 positions within your primary market. Track ranking improvements week-over-week after each metadata update
- Rating Quality: Sustain an average rating of 4.5+ stars with 100+ ratings per month. Apps below 4.0 stars experience measurable conversion drops. Aim for 99%+ crash-free rate to protect ratings
- Metadata Utilization: Use 90%+ of available character space in title, subtitle (iOS), short description (Android), and keyword field (iOS). Under-utilized metadata is wasted ranking potential
- A/B Test Velocity: Run at least one store listing experiment per month. Achieve statistical significance (95% confidence) before implementing winners. Target 5-15% conversion lift per successful test cycle
- Localization Coverage: Localize metadata for at least 5 priority markets (US, China, Japan, Germany, UK) with native-speaker keyword research. Localized apps see 15-30% download increases in target markets
- Apple Search Ads Efficiency: Maintain a tap-through rate (TTR) above 5% and cost-per-acquisition (CPA) below category median. In 2026, Apple is expanding search ad inventory with additional inline placements -- optimize for the new Maximize Conversions bidding option
---
Platform Limitations
Data Constraints
| Constraint | Impact |
|---|---|
| No official keyword volume data | Estimates based on third-party tools |
| Competitor data limited to public info | Cannot see internal metrics |
| Review access limited to public reviews | No access to private feedback |
| Historical data unavailable for new apps | Cannot compare to past performance |
Platform Behavior
| Platform | Behavior |
|---|---|
| iOS | Keyword changes require app submission |
| iOS | Promotional text editable without update |
| Android | Metadata changes index in 1-2 hours |
| Android | No separate keyword field (use description) |
| Both | Algorithm changes without notice |
When Not to Use This Skill
| Scenario | Alternative |
|---|---|
| Web apps | Use web SEO skills |
| Enterprise apps (not public) | Internal distribution tools |
| Beta/TestFlight only | Focus on feedback, not ASO |
| Paid advertising strategy | Use paid acquisition skills |
---
Proactive Triggers
- No keyword optimization in title -- App title is the #1 ranking factor. Include top keyword in title.
- Screenshots don't show value -- Screenshots should tell a benefit story, not just show UI.
- No ratings strategy -- Below 4.0 stars kills conversion. Implement in-app rating prompts at positive moments.
- Description keyword-stuffed -- Natural language with keywords beats keyword stuffing. Target 2-3% density.
---
Output Artifacts
| When you ask for... | You get... |
|---|---|
| "ASO audit" | Full app store listing audit with prioritized fixes |
| "Keyword research" | Keyword list with search volume and difficulty scores |
| "Optimize my listing" | Rewritten title, subtitle, description, keyword field |
| "Competitor analysis" | Competitive keyword matrix with gap opportunities |
---
Communication
All output passes quality verification:
- Self-verify: source attribution, assumption audit, confidence scoring
- Output format: Bottom Line first, then What (with confidence), Why, How to Act
- Every finding tagged with confidence level: verified, medium confidence, or assumed
---
Related Skills
| Skill | Integration Point |
|---|---|
| content-creator | App description copywriting |
| marketing-demand-acquisition | Launch promotion campaigns |
| marketing-strategy-pmm | Go-to-market planning |
---
Integration Points
| Integration | Purpose | How to Connect |
|---|---|---|
| Apple App Store Connect | Metadata submission, Product Page Optimization A/B tests, analytics | Upload optimized metadata from this skill's output directly into App Store Connect. Use Product Page Optimization for A/B tests planned by ab_test_planner.py |
| Google Play Console | Metadata submission, Store Listing Experiments, performance reports | Apply metadata recommendations in Play Console. Use Store Listing Experiments for A/B tests. Export conversion data for aso_scorer.py input |
| Apple Search Ads | Paid keyword discovery, Search Match insights | Use keyword data from keyword_analyzer.py to build Search Ads campaigns. Import Search Ads search term reports back into keyword research workflow. In 2026, leverage new inline ad placements and Maximize Conversions bidding |
| ASO Tools (AppTweak, Sensor Tower, data.ai) | Search volume data, ranking tracking, competitor intelligence | Export keyword volume and competitor data from ASO tools as input for keyword_analyzer.py and competitor_analyzer.py. Feed ranking history into aso_scorer.py |
| Firebase / Mixpanel / Amplitude | Post-install analytics, retention metrics | Use retention and engagement data to inform ASO scoring (engagement signals affect store rankings). Feed conversion funnel data into aso_scorer.py conversion metrics |
| campaign-analytics skill | Attribution modeling for app install campaigns | Combine ASO organic data with paid campaign attribution from attribution_analyzer.py to understand full acquisition picture |
| content-creator skill | App description copywriting and SEO optimization | Use seo_optimizer.py principles for app description writing. Apply brand voice consistency from brand_voice_analyzer.py across store listings |
Platform Requirements Reference
Technical specifications and metadata requirements for Apple App Store and Google Play Store.
---
Table of Contents
- Apple App Store Requirements
- Google Play Store Requirements
- Visual Asset Specifications
- Localization Requirements
- Compliance Guidelines
---
Apple App Store Requirements
Metadata Character Limits
| Field | Character Limit | Notes |
|---|---|---|
| App Name (Title) | 30 characters | Visible in search results |
| Subtitle | 30 characters | iOS 11+ only, appears below title |
| Promotional Text | 170 characters | Editable without app update |
| Description | 4,000 characters | Not indexed for search |
| Keywords Field | 100 characters | Comma-separated, no spaces after commas |
| What's New | 4,000 characters | Release notes for updates |
| Developer Name | 255 characters | Company or individual name |
| Support URL | Required | Must be valid HTTPS URL |
| Privacy Policy URL | Required | Must be valid HTTPS URL |
Keyword Field Optimization Rules
1. No duplicates - Words in title are already indexed 2. No plurals - Apple indexes both singular and plural forms 3. No spaces after commas - Wastes character space 4. No brand names - Violates App Store guidelines 5. No category names - Already indexed via category selection
Example - Efficient keyword field:
task,todo,checklist,reminder,productivity,organize,schedule,planner,goals,habitExample - Inefficient keyword field (avoid):
task manager, todo list, productivity app, task trackingApp Store Connect Metadata Fields
| Category | Field | Required |
|---|---|---|
| App Information | Name | Yes |
| Subtitle | No | |
| Category | Yes | |
| Secondary Category | No | |
| Content Rights | Yes | |
| Age Rating | Yes | |
| Version Information | Description | Yes |
| Keywords | Yes | |
| Promotional Text | No | |
| What's New | Yes (for updates) | |
| Support URL | Yes | |
| Marketing URL | No | |
| Pricing | Price Tier | Yes |
| Availability | Yes |
Age Rating Content Descriptors
| Content Type | None | Infrequent | Frequent |
|---|---|---|---|
| Cartoon Violence | 4+ | 9+ | 12+ |
| Realistic Violence | 9+ | 12+ | 17+ |
| Sexual Content | 12+ | 17+ | 17+ |
| Profanity | 4+ | 12+ | 17+ |
| Alcohol/Drug Reference | 12+ | 17+ | 17+ |
| Gambling | 12+ | 17+ | 17+ |
| Horror/Fear | 9+ | 12+ | 17+ |
---
Google Play Store Requirements
Metadata Character Limits
| Field | Character Limit | Notes |
|---|---|---|
| App Title | 50 characters | Increased from 30 in 2021 |
| Short Description | 80 characters | Visible on store listing |
| Full Description | 4,000 characters | Indexed for search keywords |
| Developer Name | 64 characters | Organization or individual |
| Developer Email | Required | Public support contact |
| Privacy Policy URL | Required | Must be valid HTTPS URL |
Description Keyword Strategy
Google Play has no separate keyword field. Keywords are extracted from:
1. App Title - Highest weight, most important 2. Short Description - High weight, visible in search 3. Full Description - Medium weight, use naturally throughout 4. Developer Name - Low weight but indexed
Keyword Density Guidelines:
- Primary keyword: 2-3% density in full description
- Secondary keywords: 1-2% each
- Avoid keyword stuffing (>5% triggers spam detection)
Google Play Console Metadata
| Category | Field | Required |
|---|---|---|
| Store Listing | Title | Yes |
| Short Description | Yes | |
| Full Description | Yes | |
| App Icon | Yes | |
| Feature Graphic | Yes | |
| Screenshots | Yes (min 2) | |
| Video | No | |
| Store Settings | App Category | Yes |
| Tags | No | |
| Contact Email | Yes | |
| Privacy Policy | Yes | |
| Content Rating | IARC Questionnaire | Yes |
Content Rating (IARC)
| Rating | Age | Description |
|---|---|---|
| PEGI 3 / Everyone | 3+ | Suitable for all ages |
| PEGI 7 / Everyone 10+ | 7+ | Mild violence, comic mischief |
| PEGI 12 / Teen | 12+ | Moderate violence, mild language |
| PEGI 16 / Mature 17+ | 16+ | Intense violence, strong language |
| PEGI 18 / Adults Only | 18+ | Extreme content |
---
Visual Asset Specifications
App Icon Requirements
Apple App Store:
| Device | Size | Format |
|---|---|---|
| iPhone | 1024x1024 px | PNG, no alpha |
| iPad | 1024x1024 px | PNG, no alpha |
| App Store | 1024x1024 px | PNG, no alpha |
| Spotlight | 120x120 px | PNG |
| Settings | 87x87 px | PNG |
Google Play Store:
| Asset | Size | Format |
|---|---|---|
| App Icon | 512x512 px | PNG, 32-bit |
| Feature Graphic | 1024x500 px | PNG or JPG |
| Promo Graphic | 180x120 px | PNG or JPG |
| TV Banner | 1280x720 px | PNG or JPG |
Screenshot Requirements
Apple App Store:
| Device | Portrait | Landscape |
|---|---|---|
| iPhone 6.9" | 1320x2868 px | 2868x1320 px |
| iPhone 6.5" | 1290x2796 px | 2796x1290 px |
| iPhone 5.5" | 1242x2208 px | 2208x1242 px |
| iPad Pro 12.9" | 2048x2732 px | 2732x2048 px |
| iPad 10.5" | 1668x2224 px | 2224x1668 px |
- Minimum: 2 screenshots per device
- Maximum: 10 screenshots per device
- Format: PNG or JPG, no alpha channel
- First 3 screenshots are critical (most users don't scroll)
Google Play Store:
| Device | Dimensions | Notes |
|---|---|---|
| Phone | 320-3840 px | Min 2:1 aspect ratio |
| 7" Tablet | 320-3840 px | Min 2:1 aspect ratio |
| 10" Tablet | 320-3840 px | Min 2:1 aspect ratio |
| Chromebook | 320-3840 px | Optional |
| TV | 320-3840 px | For TV apps only |
- Minimum: 2 screenshots
- Maximum: 8 screenshots
- Format: PNG or JPG
- No transparency or borders
App Preview Video
Apple App Store:
- Duration: 15-30 seconds
- Resolution: Match device screenshot size
- Format: M4V, MP4, MOV
- Frame rate: 30 fps
- Audio: Optional but recommended
Google Play Store:
- YouTube video link only
- No duration limit (recommend under 2 minutes)
- Landscape orientation preferred
- Must not contain age-restricted content
---
Localization Requirements
Priority Markets by Revenue
| Rank | Market | Language Code |
|---|---|---|
| 1 | United States | en-US |
| 2 | Japan | ja |
| 3 | United Kingdom | en-GB |
| 4 | Germany | de-DE |
| 5 | China | zh-Hans (iOS), zh-CN (Android) |
| 6 | South Korea | ko |
| 7 | France | fr-FR |
| 8 | Canada | en-CA, fr-CA |
| 9 | Australia | en-AU |
| 10 | Russia | ru |
Apple App Store Localization
Supported localizations: 40+ languages
| Language | Locale Code |
|---|---|
| English (US) | en-US |
| English (UK) | en-GB |
| Spanish | es-ES |
| Spanish (Mexico) | es-MX |
| French | fr-FR |
| German | de-DE |
| Japanese | ja |
| Korean | ko |
| Simplified Chinese | zh-Hans |
| Traditional Chinese | zh-Hant |
Google Play Store Localization
Supported localizations: 75+ languages
Each locale requires:
- Title (50 chars)
- Short description (80 chars)
- Full description (4,000 chars)
- Screenshots (can reuse or localize)
---
Compliance Guidelines
Apple App Store Review Guidelines Summary
| Category | Key Requirements |
|---|---|
| Safety | No objectionable content, privacy protection |
| Performance | App must work as described, no crashes |
| Business | Accurate app description, clear pricing |
| Design | Follow Human Interface Guidelines |
| Legal | Comply with local laws, proper licensing |
Common Rejection Reasons: 1. Bugs and crashes (50%+ of rejections) 2. Broken links or placeholder content 3. Misleading app descriptions 4. Privacy policy missing or incomplete 5. In-app purchase issues
Google Play Developer Policies
| Policy Area | Requirements |
|---|---|
| Restricted Content | No hate speech, violence, gambling (without license) |
| Privacy | Data collection disclosure, privacy policy |
| Monetization | Clear pricing, compliant IAPs |
| Ads | No deceptive ads, proper disclosure |
| Store Listing | Accurate description, no keyword stuffing |
Common Suspension Reasons: 1. Policy violation (content, ads, permissions) 2. Repetitive content (clone apps) 3. Impersonation (fake apps) 4. Intellectual property infringement 5. Malicious behavior
Privacy Requirements
Apple (App Tracking Transparency):
- ATT prompt required for tracking
- Privacy nutrition labels mandatory
- Data collection disclosure required
Google (Data Safety):
- Data safety section mandatory
- Data collection and sharing disclosure
- Security practices declaration
---
Quick Reference Card
Apple vs Google Comparison
| Attribute | Apple App Store | Google Play Store |
|---|---|---|
| Title Length | 30 chars | 50 chars |
| Subtitle | 30 chars | N/A |
| Short Description | N/A | 80 chars |
| Full Description | 4,000 chars | 4,000 chars |
| Keywords Field | 100 chars | N/A (in description) |
| Promotional Text | 170 chars | N/A |
| Icon Size | 1024x1024 px | 512x512 px |
| Min Screenshots | 2 | 2 |
| Max Screenshots | 10 | 8 |
| Review Time | 24-48 hours | 1-7 days |
| Metadata Update | Requires review | 1-2 hours to index |
Tool Reference
Read this when invoking the skill's Python scripts — full CLI/library usage, classes, methods, parameters, returns, and convenience functions for all eight ASO tools.
---
Scripts
| Script | Purpose | Usage |
|---|---|---|
| keyword_analyzer.py | Analyze keywords for volume and competition | python keyword_analyzer.py --keywords "todo,task,planner" |
| metadata_optimizer.py | Validate metadata character limits and density | python metadata_optimizer.py --platform ios --title "App Title" |
| competitor_analyzer.py | Extract and compare competitor keywords | python competitor_analyzer.py --competitors "App1,App2,App3" |
| aso_scorer.py | Calculate overall ASO health score | python aso_scorer.py --app-id com.example.app |
| ab_test_planner.py | Plan tests and calculate sample sizes | python ab_test_planner.py --cvr 0.05 --lift 0.10 |
| review_analyzer.py | Analyze review sentiment and themes | python review_analyzer.py --app-id com.example.app |
| launch_checklist.py | Generate platform-specific launch checklists | python launch_checklist.py --platform ios |
| localization_helper.py | Manage multi-language metadata | python localization_helper.py --locales "en,es,de,ja" |
Assets
| Template | Purpose |
|---|---|
| aso-audit-template.md | Structured audit checklist for app store listings |
---
keyword_analyzer.py
Type: Python library (imported, not CLI)
Classes:
KeywordAnalyzer-- Core analysis class
Key Methods:
| Method | Parameters | Returns |
|---|---|---|
analyze_keyword() | keyword: str, search_volume: int = 0, competing_apps: int = 0, relevance_score: float = 0.0 | Dict with keyword analysis (potential score 0-100, difficulty score 0-100, recommendation) |
compare_keywords() | keywords_data: List[Dict] (each dict: keyword, search_volume, competing_apps, relevance_score) | Ranked keywords with primary/secondary/long-tail categorization |
find_long_tail_opportunities() | base_keyword: str, modifiers: List[str] | Long-tail keyword variations with competition estimates |
extract_keywords_from_text() | text: str, min_word_length: int = 3 | Top 50 keywords/phrases by frequency |
calculate_keyword_density() | text: str, target_keywords: List[str] | Dict of keyword: density percentage |
Convenience Function: analyze_keyword_set(keywords_data) -- Analyzes and ranks a full keyword set in one call.
metadata_optimizer.py
Type: Python library (imported, not CLI)
Classes:
MetadataOptimizer(platform: str = 'apple')-- Platform must be'apple'or'google'
Key Methods:
| Method | Parameters | Returns |
|---|---|---|
optimize_title() | app_name: str, target_keywords: List[str], include_brand: bool = True | Title options with length, keywords included, pros/cons, recommendation |
optimize_description() | app_info: Dict (name, key_features, unique_value, target_audience), target_keywords: List[str], description_type: str = 'full' | Optimized description with keyword density analysis. Types: 'full', 'short' (Google), 'subtitle' (Apple) |
optimize_keyword_field() | target_keywords: List[str], app_title: str = "", app_description: str = "" | Apple-only. Optimized 100-char keyword field (no spaces, no plurals, no title duplicates) |
validate_character_limits() | metadata: Dict[str, str] | Validation report with errors, warnings, usage percentages |
calculate_keyword_density() | text: str, target_keywords: List[str] | Per-keyword density with status (too_low / optimal / too_high) |
Convenience Function: optimize_app_metadata(platform, app_info, target_keywords) -- Optimizes title, description, and keyword field in one call.
competitor_analyzer.py
Type: Python library (imported, not CLI)
Classes:
CompetitorAnalyzer(category: str, platform: str = 'apple')
Key Methods:
| Method | Parameters | Returns |
|---|---|---|
analyze_competitor() | app_data: Dict (app_name, title, description, rating, ratings_count, keywords) | Title analysis, description analysis, keyword strategy, competitive strength score (0-100) |
compare_competitors() | competitors_data: List[Dict] | Ranked competitors, common keywords, keyword gaps, best practices, opportunities |
identify_gaps() | your_app_data: Dict, competitors_data: List[Dict] | Keyword gaps, rating gaps, content gaps, competitive positioning assessment |
Convenience Function: analyze_competitor_set(category, competitors_data, platform='apple') -- Full competitive analysis in one call.
aso_scorer.py
Type: Python library (imported, not CLI)
Classes:
ASOScorer-- Calculates weighted ASO health score (0-100)
Key Methods:
| Method | Parameters | Returns |
|---|---|---|
calculate_overall_score() | metadata: Dict, ratings: Dict, keyword_performance: Dict, conversion: Dict | Overall score, health status, breakdown by component, prioritized recommendations, strengths, weaknesses |
score_metadata_quality() | metadata: Dict (title_keyword_count, title_length, description_length, description_quality, keyword_density) | Score 0-100 |
score_ratings_reviews() | ratings: Dict (average_rating, total_ratings, recent_ratings_30d) | Score 0-100 |
score_keyword_performance() | keyword_performance: Dict (top_10, top_50, top_100, improving_keywords) | Score 0-100 |
score_conversion_metrics() | conversion: Dict (impression_to_install, downloads_last_30_days, downloads_trend) | Score 0-100 |
Weights: metadata_quality 25%, ratings_reviews 25%, keyword_performance 25%, conversion_metrics 25%.
Convenience Function: calculate_aso_score(metadata, ratings, keyword_performance, conversion)
ab_test_planner.py
Type: Python library (imported, not CLI)
Classes:
ABTestPlanner
Key Methods:
| Method | Parameters | Returns |
|---|---|---|
design_test() | test_type: str ('icon', 'screenshot', 'title', 'description'), variant_a: Dict, variant_b: Dict, hypothesis: str, success_metric: str = 'conversion_rate' | Test design with ID, variants, secondary metrics, best practices |
calculate_sample_size() | baseline_conversion: float, minimum_detectable_effect: float, confidence_level: str = 'standard' ('high'/'standard'/'exploratory'), power: float = 0.80 | Sample size per variant, duration estimates for low/medium/high traffic |
calculate_significance() | variant_a_conversions: int, variant_a_visitors: int, variant_b_conversions: int, variant_b_visitors: int | Z-score, p-value, significance at 90%/95%, decision recommendation |
track_test_results() | test_id: str, results_data: Dict | Progress tracking, current significance, next steps |
generate_test_report() | test_id: str, final_results: Dict | Complete report with insights, implementation plan, learnings |
Convenience Function: plan_ab_test(test_type, variant_a, variant_b, hypothesis, baseline_conversion)
review_analyzer.py
Type: Python library (imported, not CLI)
Classes:
ReviewAnalyzer(app_name: str)
Key Methods:
| Method | Parameters | Returns |
|---|---|---|
analyze_sentiment() | reviews: List[Dict] (each: text, rating, date) | Sentiment distribution (positive/neutral/negative %), average rating, detailed sentiments |
extract_common_themes() | reviews: List[Dict], min_mentions: int = 3 | Common words, phrases, categorized themes (features, performance, usability, support, pricing) |
identify_issues() | reviews: List[Dict], rating_threshold: int = 3 | Categorized issues (crashes, bugs, performance, compatibility) with severity scores and priority |
find_feature_requests() | reviews: List[Dict] | Clustered and prioritized feature requests |
track_sentiment_trends() | reviews_by_period: Dict[str, List[Dict]] | Trend direction (improving/declining/stable), period-over-period comparison |
generate_response_templates() | issue_category: str ('crash', 'bug', 'feature_request', 'positive', 'negative_general') | Response templates for review management |
Convenience Function: analyze_reviews(app_name, reviews) -- Runs sentiment, themes, issues, and feature requests in one call.
launch_checklist.py
Type: Python library (imported, not CLI)
Classes:
LaunchChecklistGenerator(platform: str = 'both')-- Platform:'apple','google', or'both'
Key Methods:
| Method | Parameters | Returns |
|---|---|---|
generate_prelaunch_checklist() | app_info: Dict (name, category, target_audience), launch_date: Optional[str] (YYYY-MM-DD) | Platform-specific checklists, universal checklist, timeline with milestones, completion summary |
validate_app_store_compliance() | app_data: Dict, platform: str = 'apple' | Compliance validation with errors, warnings, recommendations |
create_update_plan() | current_version: str, planned_features: List[str], update_frequency: str = 'monthly' | Version schedule, feature distribution, What's New templates |
optimize_launch_timing() | app_category: str, target_audience: str, current_date: Optional[str] | Optimal dates, day-of-week recommendation, seasonal considerations |
plan_seasonal_campaigns() | app_category: str, current_month: int = None | Seasonal opportunities, campaign ideas, implementation timeline |
Convenience Function: generate_launch_checklist(platform, app_info, launch_date)
localization_helper.py
Type: Python library (imported, not CLI)
Classes:
LocalizationHelper(app_category: str = 'general')
Key Methods:
| Method | Parameters | Returns |
|---|---|---|
identify_target_markets() | current_market: str = 'en-US', budget_level: str = 'medium' ('low'/'medium'/'high'), target_market_count: int = 5 | Prioritized markets (tier 1/2/3), estimated costs, phased implementation plan |
translate_metadata() | source_metadata: Dict[str, str], source_language: str, target_language: str, platform: str = 'apple' | Character limit validation per field with language-specific multipliers, translation notes |
adapt_keywords() | source_keywords: List[str], source_language: str, target_language: str, target_market: str | Adaptation strategy per keyword (full_localization / adapt_and_translate / direct_translation), cultural considerations |
validate_translations() | translated_metadata: Dict[str, str], target_language: str, platform: str = 'apple' | Character limit validation, quality checks (placeholders, excessive punctuation) |
calculate_localization_roi() | target_markets: List[str], current_monthly_downloads: int, localization_cost: float, expected_lift_percentage: float = 0.15 | Market breakdown, expected monthly lift, payback period, annual ROI |
Convenience Function: plan_localization_strategy(current_market, budget_level, monthly_downloads)
{
"request_type": "keyword_research",
"app_info": {
"name": "TaskFlow Pro",
"category": "Productivity",
"target_audience": "Professionals aged 25-45 working in teams",
"key_features": [
"AI-powered task prioritization",
"Team collaboration tools",
"Calendar integration",
"Cross-platform sync"
],
"unique_value": "AI automatically prioritizes your tasks based on deadlines and importance"
},
"target_keywords": [
"task manager",
"productivity app",
"todo list",
"team collaboration",
"project management"
],
"competitors": [
"Todoist",
"Any.do",
"Microsoft To Do",
"Things 3"
],
"platform": "both",
"language": "en-US"
}
"""
ASO scoring module for App Store Optimization.
Calculates comprehensive ASO health score across multiple dimensions.
"""
from typing import Dict, List, Any, Optional
class ASOScorer:
"""Calculates overall ASO health score and provides recommendations."""
# Score weights for different components (total = 100)
WEIGHTS = {
'metadata_quality': 25,
'ratings_reviews': 25,
'keyword_performance': 25,
'conversion_metrics': 25
}
# Benchmarks for scoring
BENCHMARKS = {
'title_keyword_usage': {'min': 1, 'target': 2},
'description_length': {'min': 500, 'target': 2000},
'keyword_density': {'min': 2, 'optimal': 5, 'max': 8},
'average_rating': {'min': 3.5, 'target': 4.5},
'ratings_count': {'min': 100, 'target': 5000},
'keywords_top_10': {'min': 2, 'target': 10},
'keywords_top_50': {'min': 5, 'target': 20},
'conversion_rate': {'min': 0.02, 'target': 0.10}
}
def __init__(self):
"""Initialize ASO scorer."""
self.score_breakdown = {}
def calculate_overall_score(
self,
metadata: Dict[str, Any],
ratings: Dict[str, Any],
keyword_performance: Dict[str, Any],
conversion: Dict[str, Any]
) -> Dict[str, Any]:
"""
Calculate comprehensive ASO score (0-100).
Args:
metadata: Title, description quality metrics
ratings: Rating average and count
keyword_performance: Keyword ranking data
conversion: Impression-to-install metrics
Returns:
Overall score with detailed breakdown
"""
# Calculate component scores
metadata_score = self.score_metadata_quality(metadata)
ratings_score = self.score_ratings_reviews(ratings)
keyword_score = self.score_keyword_performance(keyword_performance)
conversion_score = self.score_conversion_metrics(conversion)
# Calculate weighted overall score
overall_score = (
metadata_score * (self.WEIGHTS['metadata_quality'] / 100) +
ratings_score * (self.WEIGHTS['ratings_reviews'] / 100) +
keyword_score * (self.WEIGHTS['keyword_performance'] / 100) +
conversion_score * (self.WEIGHTS['conversion_metrics'] / 100)
)
# Store breakdown
self.score_breakdown = {
'metadata_quality': {
'score': metadata_score,
'weight': self.WEIGHTS['metadata_quality'],
'weighted_contribution': round(metadata_score * (self.WEIGHTS['metadata_quality'] / 100), 1)
},
'ratings_reviews': {
'score': ratings_score,
'weight': self.WEIGHTS['ratings_reviews'],
'weighted_contribution': round(ratings_score * (self.WEIGHTS['ratings_reviews'] / 100), 1)
},
'keyword_performance': {
'score': keyword_score,
'weight': self.WEIGHTS['keyword_performance'],
'weighted_contribution': round(keyword_score * (self.WEIGHTS['keyword_performance'] / 100), 1)
},
'conversion_metrics': {
'score': conversion_score,
'weight': self.WEIGHTS['conversion_metrics'],
'weighted_contribution': round(conversion_score * (self.WEIGHTS['conversion_metrics'] / 100), 1)
}
}
# Generate recommendations
recommendations = self.generate_recommendations(
metadata_score,
ratings_score,
keyword_score,
conversion_score
)
# Assess overall health
health_status = self._assess_health_status(overall_score)
return {
'overall_score': round(overall_score, 1),
'health_status': health_status,
'score_breakdown': self.score_breakdown,
'recommendations': recommendations,
'priority_actions': self._prioritize_actions(recommendations),
'strengths': self._identify_strengths(self.score_breakdown),
'weaknesses': self._identify_weaknesses(self.score_breakdown)
}
def score_metadata_quality(self, metadata: Dict[str, Any]) -> float:
"""
Score metadata quality (0-100).
Evaluates:
- Title optimization
- Description quality
- Keyword usage
"""
scores = []
# Title score (0-35 points)
title_keywords = metadata.get('title_keyword_count', 0)
title_length = metadata.get('title_length', 0)
title_score = 0
if title_keywords >= self.BENCHMARKS['title_keyword_usage']['target']:
title_score = 35
elif title_keywords >= self.BENCHMARKS['title_keyword_usage']['min']:
title_score = 25
else:
title_score = 10
# Adjust for title length usage
if title_length > 25: # Using most of available space
title_score += 0
else:
title_score -= 5
scores.append(min(title_score, 35))
# Description score (0-35 points)
desc_length = metadata.get('description_length', 0)
desc_quality = metadata.get('description_quality', 0.0) # 0-1 scale
desc_score = 0
if desc_length >= self.BENCHMARKS['description_length']['target']:
desc_score = 25
elif desc_length >= self.BENCHMARKS['description_length']['min']:
desc_score = 15
else:
desc_score = 5
# Add quality bonus
desc_score += desc_quality * 10
scores.append(min(desc_score, 35))
# Keyword density score (0-30 points)
keyword_density = metadata.get('keyword_density', 0.0)
if self.BENCHMARKS['keyword_density']['min'] <= keyword_density <= self.BENCHMARKS['keyword_density']['optimal']:
density_score = 30
elif keyword_density < self.BENCHMARKS['keyword_density']['min']:
# Too low - proportional scoring
density_score = (keyword_density / self.BENCHMARKS['keyword_density']['min']) * 20
else:
# Too high (keyword stuffing) - penalty
excess = keyword_density - self.BENCHMARKS['keyword_density']['optimal']
density_score = max(30 - (excess * 5), 0)
scores.append(density_score)
return round(sum(scores), 1)
def score_ratings_reviews(self, ratings: Dict[str, Any]) -> float:
"""
Score ratings and reviews (0-100).
Evaluates:
- Average rating
- Total ratings count
- Review velocity
"""
average_rating = ratings.get('average_rating', 0.0)
total_ratings = ratings.get('total_ratings', 0)
recent_ratings = ratings.get('recent_ratings_30d', 0)
# Rating quality score (0-50 points)
if average_rating >= self.BENCHMARKS['average_rating']['target']:
rating_quality_score = 50
elif average_rating >= self.BENCHMARKS['average_rating']['min']:
# Proportional scoring between min and target
proportion = (average_rating - self.BENCHMARKS['average_rating']['min']) / \
(self.BENCHMARKS['average_rating']['target'] - self.BENCHMARKS['average_rating']['min'])
rating_quality_score = 30 + (proportion * 20)
elif average_rating >= 3.0:
rating_quality_score = 20
else:
rating_quality_score = 10
# Rating volume score (0-30 points)
if total_ratings >= self.BENCHMARKS['ratings_count']['target']:
rating_volume_score = 30
elif total_ratings >= self.BENCHMARKS['ratings_count']['min']:
# Proportional scoring
proportion = (total_ratings - self.BENCHMARKS['ratings_count']['min']) / \
(self.BENCHMARKS['ratings_count']['target'] - self.BENCHMARKS['ratings_count']['min'])
rating_volume_score = 15 + (proportion * 15)
else:
# Very low volume
rating_volume_score = (total_ratings / self.BENCHMARKS['ratings_count']['min']) * 15
# Rating velocity score (0-20 points)
if recent_ratings > 100:
velocity_score = 20
elif recent_ratings > 50:
velocity_score = 15
elif recent_ratings > 10:
velocity_score = 10
else:
velocity_score = 5
total_score = rating_quality_score + rating_volume_score + velocity_score
return round(min(total_score, 100), 1)
def score_keyword_performance(self, keyword_performance: Dict[str, Any]) -> float:
"""
Score keyword ranking performance (0-100).
Evaluates:
- Top 10 rankings
- Top 50 rankings
- Ranking trends
"""
top_10_count = keyword_performance.get('top_10', 0)
top_50_count = keyword_performance.get('top_50', 0)
top_100_count = keyword_performance.get('top_100', 0)
improving_keywords = keyword_performance.get('improving_keywords', 0)
# Top 10 score (0-50 points) - most valuable rankings
if top_10_count >= self.BENCHMARKS['keywords_top_10']['target']:
top_10_score = 50
elif top_10_count >= self.BENCHMARKS['keywords_top_10']['min']:
proportion = (top_10_count - self.BENCHMARKS['keywords_top_10']['min']) / \
(self.BENCHMARKS['keywords_top_10']['target'] - self.BENCHMARKS['keywords_top_10']['min'])
top_10_score = 25 + (proportion * 25)
else:
top_10_score = (top_10_count / self.BENCHMARKS['keywords_top_10']['min']) * 25
# Top 50 score (0-30 points)
if top_50_count >= self.BENCHMARKS['keywords_top_50']['target']:
top_50_score = 30
elif top_50_count >= self.BENCHMARKS['keywords_top_50']['min']:
proportion = (top_50_count - self.BENCHMARKS['keywords_top_50']['min']) / \
(self.BENCHMARKS['keywords_top_50']['target'] - self.BENCHMARKS['keywords_top_50']['min'])
top_50_score = 15 + (proportion * 15)
else:
top_50_score = (top_50_count / self.BENCHMARKS['keywords_top_50']['min']) * 15
# Coverage score (0-10 points) - based on top 100
coverage_score = min((top_100_count / 30) * 10, 10)
# Trend score (0-10 points) - are rankings improving?
if improving_keywords > 5:
trend_score = 10
elif improving_keywords > 0:
trend_score = 5
else:
trend_score = 0
total_score = top_10_score + top_50_score + coverage_score + trend_score
return round(min(total_score, 100), 1)
def score_conversion_metrics(self, conversion: Dict[str, Any]) -> float:
"""
Score conversion performance (0-100).
Evaluates:
- Impression-to-install conversion rate
- Download velocity
"""
conversion_rate = conversion.get('impression_to_install', 0.0)
downloads_30d = conversion.get('downloads_last_30_days', 0)
downloads_trend = conversion.get('downloads_trend', 'stable') # 'up', 'stable', 'down'
# Conversion rate score (0-70 points)
if conversion_rate >= self.BENCHMARKS['conversion_rate']['target']:
conversion_score = 70
elif conversion_rate >= self.BENCHMARKS['conversion_rate']['min']:
proportion = (conversion_rate - self.BENCHMARKS['conversion_rate']['min']) / \
(self.BENCHMARKS['conversion_rate']['target'] - self.BENCHMARKS['conversion_rate']['min'])
conversion_score = 35 + (proportion * 35)
else:
conversion_score = (conversion_rate / self.BENCHMARKS['conversion_rate']['min']) * 35
# Download velocity score (0-20 points)
if downloads_30d > 10000:
velocity_score = 20
elif downloads_30d > 1000:
velocity_score = 15
elif downloads_30d > 100:
velocity_score = 10
else:
velocity_score = 5
# Trend bonus (0-10 points)
if downloads_trend == 'up':
trend_score = 10
elif downloads_trend == 'stable':
trend_score = 5
else:
trend_score = 0
total_score = conversion_score + velocity_score + trend_score
return round(min(total_score, 100), 1)
def generate_recommendations(
self,
metadata_score: float,
ratings_score: float,
keyword_score: float,
conversion_score: float
) -> List[Dict[str, Any]]:
"""Generate prioritized recommendations based on scores."""
recommendations = []
# Metadata recommendations
if metadata_score < 60:
recommendations.append({
'category': 'metadata_quality',
'priority': 'high',
'action': 'Optimize app title and description',
'details': 'Add more keywords to title, expand description to 1500-2000 characters, improve keyword density to 3-5%',
'expected_impact': 'Improve discoverability and ranking potential'
})
elif metadata_score < 80:
recommendations.append({
'category': 'metadata_quality',
'priority': 'medium',
'action': 'Refine metadata for better keyword targeting',
'details': 'Test variations of title/subtitle, optimize keyword field for Apple',
'expected_impact': 'Incremental ranking improvements'
})
# Ratings recommendations
if ratings_score < 60:
recommendations.append({
'category': 'ratings_reviews',
'priority': 'high',
'action': 'Improve rating quality and volume',
'details': 'Address top user complaints, implement in-app rating prompts, respond to negative reviews',
'expected_impact': 'Better conversion rates and trust signals'
})
elif ratings_score < 80:
recommendations.append({
'category': 'ratings_reviews',
'priority': 'medium',
'action': 'Increase rating velocity',
'details': 'Optimize timing of rating requests, encourage satisfied users to rate',
'expected_impact': 'Sustained rating quality'
})
# Keyword performance recommendations
if keyword_score < 60:
recommendations.append({
'category': 'keyword_performance',
'priority': 'high',
'action': 'Improve keyword rankings',
'details': 'Target long-tail keywords with lower competition, update metadata with high-potential keywords, build backlinks',
'expected_impact': 'Significant improvement in organic visibility'
})
elif keyword_score < 80:
recommendations.append({
'category': 'keyword_performance',
'priority': 'medium',
'action': 'Expand keyword coverage',
'details': 'Target additional related keywords, test seasonal keywords, localize for new markets',
'expected_impact': 'Broader reach and more discovery opportunities'
})
# Conversion recommendations
if conversion_score < 60:
recommendations.append({
'category': 'conversion_metrics',
'priority': 'high',
'action': 'Optimize store listing for conversions',
'details': 'Improve screenshots and icon, strengthen value proposition in description, add video preview',
'expected_impact': 'Higher impression-to-install conversion'
})
elif conversion_score < 80:
recommendations.append({
'category': 'conversion_metrics',
'priority': 'medium',
'action': 'Test visual asset variations',
'details': 'A/B test different icon designs and screenshot sequences',
'expected_impact': 'Incremental conversion improvements'
})
return recommendations
def _assess_health_status(self, overall_score: float) -> str:
"""Assess overall ASO health status."""
if overall_score >= 80:
return "Excellent - Top-tier ASO performance"
elif overall_score >= 65:
return "Good - Competitive ASO with room for improvement"
elif overall_score >= 50:
return "Fair - Needs strategic improvements"
else:
return "Poor - Requires immediate ASO overhaul"
def _prioritize_actions(
self,
recommendations: List[Dict[str, Any]]
) -> List[Dict[str, Any]]:
"""Prioritize actions by impact and urgency."""
# Sort by priority (high first) and expected impact
priority_order = {'high': 0, 'medium': 1, 'low': 2}
sorted_recommendations = sorted(
recommendations,
key=lambda x: priority_order[x['priority']]
)
return sorted_recommendations[:3] # Top 3 priority actions
def _identify_strengths(self, score_breakdown: Dict[str, Any]) -> List[str]:
"""Identify areas of strength (scores >= 75)."""
strengths = []
for category, data in score_breakdown.items():
if data['score'] >= 75:
strengths.append(
f"{category.replace('_', ' ').title()}: {data['score']}/100"
)
return strengths if strengths else ["Focus on building strengths across all areas"]
def _identify_weaknesses(self, score_breakdown: Dict[str, Any]) -> List[str]:
"""Identify areas needing improvement (scores < 60)."""
weaknesses = []
for category, data in score_breakdown.items():
if data['score'] < 60:
weaknesses.append(
f"{category.replace('_', ' ').title()}: {data['score']}/100 - needs improvement"
)
return weaknesses if weaknesses else ["All areas performing adequately"]
def calculate_aso_score(
metadata: Dict[str, Any],
ratings: Dict[str, Any],
keyword_performance: Dict[str, Any],
conversion: Dict[str, Any]
) -> Dict[str, Any]:
"""
Convenience function to calculate ASO score.
Args:
metadata: Metadata quality metrics
ratings: Ratings data
keyword_performance: Keyword ranking data
conversion: Conversion metrics
Returns:
Complete ASO score report
"""
scorer = ASOScorer()
return scorer.calculate_overall_score(
metadata,
ratings,
keyword_performance,
conversion
)