Setup and context — Building Great Apps Is No Longer Enough
You've built the app. You've tested it. You're proud of it. Then you hit publish — and nothing happens.
This is the reality for most indie developers. In a market with millions of apps on the App Store and Google Play, visibility doesn't come for free. The traditional answer is "hire a marketing team," but that's not an option when you're building solo.
Antigravity's multi-agent system changes the equation. This playbook shows you how to automate the entire launch cycle — from pre-launch ASO research to post-launch review management — using AI agents that work while you focus on building.
Who This Guide Is For
- Solo developers and small teams building iOS or Android apps
- Developers who've launched before but struggled to gain traction
- Anyone who wants to spend time building, not marketing
- Antigravity users who want to convert their AI skills into real revenue
What You'll Build
Pre-Launch Preparation
├── ASO Optimization Agent (keyword research + copy generation)
├── Screenshot Strategy Agent (UI copy + layout recommendations)
└── Competitor Analysis Agent (market positioning + differentiation)
Launch Day
├── Social Media Agent (platform-optimized content generation)
├── Press Kit Auto-Generator
└── Influencer/Community List Builder
Post-Launch (30 Days)
├── Review Monitor + Auto-Response Agent
├── Ranking Tracker + Improvement Recommender
└── A/B Test Analysis Agent
Chapter 1: Automating Your ASO Strategy with AI Agents
Why ASO Still Matters (And Why Most Developers Get It Wrong)
App Store Optimization is the single highest-leverage activity before launch. The right keyword strategy and compelling store listing copy can double or triple organic downloads — with zero ad spend.
Most developers treat ASO as an afterthought. Antigravity agents let you treat it as a systematic, data-driven process that runs itself.
Setting Up Your ASO Agent in Agents.md
Create an agents.md file in your project root to define the ASO agent's behavior:
# ASO Optimization Agent
## Role
You are an expert in App Store and Google Play optimization.
Given app information, automatically generate:
- Target keyword list (10 primary + 20 long-tail)
- App Store description (English and localized)
- Google Play short description (80 chars max)
- Optimized title and subtitle variants
## Input Format
You'll receive: app category, core features, and target user profile.
## Output Format
Return JSON with keywords and all copy variants.
Focus on user problems solved, not feature lists.Keyword Research Agent Implementation
# aso_agent.py — executed via Antigravity MCP
def run_aso_analysis(app_info: dict) -> dict:
"""
Delegates ASO analysis to Antigravity agent.
Two-stage processing: Planning Mode for research → Fast Mode for copy.
Args:
app_info: {"category": "...", "features": [...], "target_users": "..."}
Returns:
{"primary_keywords": [...], "title": "...", "description": "...", ...}
Example:
app_info = {
"category": "Health & Fitness",
"features": ["Sleep tracking", "Sleep analysis", "Apple Health sync"],
"target_users": "Working professionals aged 25-45"
}
result = run_aso_analysis(app_info)
# Returns optimized copy in JSON format
"""
prompt = f"""
App Information:
- Category: {app_info['category']}
- Core Features: {', '.join(app_info['features'])}
- Target Users: {app_info['target_users']}
Analyze and generate ASO-optimized copy as JSON.
Title: 30 chars max. Subtitle: 30 chars max.
Prioritize search intent over brand voice.
"""
return prompt # Antigravity agent handles executionWhen executed, the agent automatically generates:
- Primary keywords: High-volume terms relevant to your category
- Long-tail keywords: High-intent phrases with strong conversion signals
- Title variants: 3–5 options that naturally include target keywords
Competitor Analysis for Differentiation
# Competitive Analysis (add to agents.md)
## Competitive Intelligence
Analyze the top 10 competitor apps and identify:
1. Top 5 user complaints from 1–2 star reviews
2. Top 5 appreciated features from 4–5 star reviews
3. Unmet user needs (differentiation opportunities)
4. Unique Value Proposition (UVP) to lead with
Use results directly in store listing copy and screenshot messaging.Chapter 2: Screenshot Strategy Automation
Screenshots Drive 70% of Download Decisions
Most users check screenshots before deciding to download. The best screenshots don't show features — they show what changes for the user.
# screenshot_strategy.py
SCREENSHOT_POSITIONS = {
1: {"type": "pain_point", "pattern": "Tired of {problem}?"},
2: {"type": "solution", "pattern": "{feature} that actually {outcome}"},
3: {"type": "feature_detail", "pattern": "{feature} built for {user_type}"},
4: {"type": "feature_detail", "pattern": "{another_feature} that {benefit}"},
5: {"type": "social_proof", "pattern": "Trusted by {number}+ users"},
6: {"type": "cta", "pattern": "Start free today"},
}
def generate_screenshot_copy(competitive_insights: dict) -> list[dict]:
"""
Generate screenshot strategy from ASO and competitor analysis.
Returns per-screenshot recommendations:
- Headline and supporting text
- Layout type (text-top, split-screen, full-bleed)
- Color/background guidance
Example output:
[
{"position": 1, "headline": "Tired of poor sleep?", "layout": "text-top"},
{"position": 2, "headline": "Track sleep cycles automatically", ...},
...
]
"""
return [
{
"position": pos,
"type": config["type"],
"headline": f"[Agent-generated: {config['pattern']}]",
"layout": "text-top + screen-bottom" if pos <= 3 else "full-screen",
}
for pos, config in SCREENSHOT_POSITIONS.items()
]Figma MCP Integration
Using Antigravity's Figma MCP, you can automatically populate screenshot templates with agent-generated copy. See the Figma + Antigravity workflow guide for implementation details.
Chapter 3: Launch Day Social Media Agent
Platform-Native Content Generation
Each social platform has different norms and audience expectations. One-size-fits-all content underperforms everywhere. Your Antigravity agent generates platform-native content from a single brief:
# SNS Launch Agent (add to agents.md)
## Platform-Specific Generation
### Twitter/X (280 characters)
- 3–5 hashtags max, include App Store link
- Lead with one clear hook (problem OR feature — not both)
### Instagram (Caption + Hashtags)
- Caption: 150 chars (fits in 3 lines on mobile)
- Hashtags: 15–20 (post in first comment)
### Reddit (subreddits: r/apple, r/androidapps, r/productivity)
- Natural community tone — never overtly promotional
- Include technical credibility signals
### Product Hunt
- Tagline: 60 chars, action-oriented
- Description: 260 chars, benefit-focusedLaunch Day Timeline
# launch_scheduler.py
LAUNCH_TIMELINE = {
"T+0": ["Twitter/X main tweet", "Product Hunt launch (9AM PST)", "Community announcements"],
"T+1h": ["Instagram post", "Blog article live", "LinkedIn post"],
"T+3h": ["Reddit posts", "Hacker News 'Show HN' consideration"],
"T+24h": ["Download metrics report", "First-day review responses", "Conversion analysis"],
}
def generate_launch_content(app_info: dict) -> dict:
"""
Auto-generate content for all platforms and timeline slots.
Returns:
{
"twitter": {"text": "...", "hashtags": [...]},
"instagram": {"caption": "...", "hashtags": [...]},
"reddit": {"subreddit": "r/androidapps", "title": "...", "body": "..."},
"product_hunt": {"tagline": "...", "description": "..."}
}
"""
return {
platform: {"content": f"[Agent-generated content for {platform}]"}
for platform in ["twitter", "instagram", "reddit", "product_hunt"]
}Chapter 4: The 30-Day Post-Launch Revenue Sprint
Review Monitoring and Auto-Response
Responding to reviews within 24 hours signals to app store algorithms that you're an engaged developer. It can also convert 1-star reviews into 4-star updates when users feel heard.
# review_agent.py
from enum import Enum
class ReviewSentiment(Enum):
POSITIVE = "positive" # 4–5 stars
NEUTRAL = "neutral" # 3 stars
NEGATIVE = "negative" # 1–2 stars
BUG_REPORT = "bug_report" # Contains bug description
def classify_and_respond(review: dict) -> dict:
"""
Classify review and generate tailored response.
Args:
review: {"rating": 2, "text": "App crashes on...", "author": "user123"}
Returns:
{"sentiment": "bug_report", "response": "...", "action_required": True}
Response principles:
1. Use reviewer's name for personalization
2. Explicitly acknowledge their specific concern
3. Give concrete next steps or fix timeline
4. Always express genuine gratitude
5. Keep under 150 characters (longer responses don't get read)
"""
pass # Antigravity agent handles processingRevenue Projection Calculator
# revenue_projection.py
def calculate_monthly_revenue(
dau: int,
arpdau_usd: float,
paid_users: int,
subscription_price: float
) -> dict:
"""
Project monthly revenue from ads + subscriptions.
Args:
dau: Daily Active Users
arpdau_usd: Ad revenue per user per day (USD)
paid_users: Monthly active paid subscribers
subscription_price: Monthly subscription price (USD)
Returns:
{"ad_revenue": 450.0, "sub_revenue": 299.0, "total": 749.0, "dau_needed": 4666}
Example:
calculate_monthly_revenue(dau=3000, arpdau_usd=0.005, paid_users=100, subscription_price=2.99)
# → {'ad_revenue': 450.0, 'sub_revenue': 299.0, 'total': 749.0, 'dau_needed': 4666}
"""
ad_revenue = dau * arpdau_usd * 30
sub_revenue = paid_users * subscription_price
total = ad_revenue + sub_revenue
dau_needed = int((1000.0 - sub_revenue) / (arpdau_usd * 30)) if arpdau_usd > 0 else 0
return {
"ad_revenue": round(ad_revenue, 2),
"sub_revenue": round(sub_revenue, 2),
"total": round(total, 2),
"dau_needed": dau_needed
}Chapter 5: The 30-Day Launch Sprint Plan
Week 1: Maximizing Launch Momentum
Day 1–2: Full Channel Blitz
- Simultaneous social posts across all platforms (agent-optimized)
- Product Hunt launch (9:00 AM PST for maximum visibility)
- Direct outreach to personal network
Day 3–5: Community Penetration
- Technical blog post about the build process
- Reddit, dev Discord, and relevant community posts
- Press kit sent to relevant media
Day 6–7: Data Audit
- Week 1 download and review analysis
- Complete all pending review responses
- Kick off first App Store screenshot A/B test
Weeks 2–4: The Optimization Loop
# Weekly Optimization Agent
Run every Monday morning:
1. Generate previous week's KPI report (downloads, revenue, crashes, ratings)
2. Flag keywords that dropped out of top 50 rankings
3. Check competitor app updates for differentiation maintenance
4. Aggregate A/B test results (statistical significance check)
5. Generate next week's content calendar
Run every Friday:
1. Zero out pending review responses
2. SNS engagement performance summary
3. Next week's experiment planChapter 6: Agent Architecture Patterns for Scale
Orchestrator + Specialized Sub-Agents
# launch-orchestrator.md (project root)
## Orchestrator: Launch Campaign Manager
Coordinate the following sub-agents:
1. ASO Agent — 2 weeks pre-launch, generates keyword + copy set
2. Screenshot Agent — After ASO, generates screenshot strategy
3. SNS Content Agent — 3 days pre-launch, all platform content
4. Review Response Agent — Launch day onward, daily review responses
5. Analytics Agent — Daily 8AM, KPI dashboard + alert escalation
Orchestration rules:
- Run parallelizable agents simultaneously
- Enforce dependency order: ASO → Screenshot → SNS Content
- Auto-retry on failure (max 3 attempts), then log and continueError Handling and Auto-Recovery
# orchestrator.py
import asyncio
class LaunchOrchestrator:
MAX_RETRIES = 3
async def run_agent_with_retry(
self,
agent_name: str,
agent_func,
inputs: dict,
retry_count: int = 0
) -> dict:
"""
Execute agent with exponential backoff retry strategy.
Retry timing: 10s → 30s → 60s → fallback
Example:
result = await orchestrator.run_agent_with_retry(
"aso_agent",
aso_agent.run,
{"category": "Health & Fitness"}
)
"""
try:
return await agent_func(inputs)
except Exception:
if retry_count < self.MAX_RETRIES:
wait_time = [10, 30, 60][retry_count]
await asyncio.sleep(wait_time)
return await self.run_agent_with_retry(
agent_name, agent_func, inputs, retry_count + 1
)
# Fallback: return default template, flag for manual review
return {"status": "fallback", "requires_manual_review": True}Chapter 7: Common Pitfalls and How to Avoid Them
Mistake 1: Aggressive Review Solicitation at Launch
App Store guidelines prohibit incentivized or manipulative review requests. Use SKStoreReviewRequest only at moments of genuine user success:
// Correct timing for review requests (Swift)
import StoreKit
func requestReviewIfAppropriate(completedMilestones: Int) {
// Only on 3rd milestone completion (Apple caps at 3 times/year)
guard completedMilestones == 3 else { return }
if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
}
// ❌ Never call requestReview() on first launchMistake 2: Keyword Stuffing
Packing keywords into descriptions alienates real users even if it temporarily helps algorithmic ranking. Always do a human readability pass on agent-generated copy before submitting.
Mistake 3: Post-Launch Neglect
Launch day momentum fades in 2–3 weeks. Maintain at least one meaningful update per month. Use Antigravity's weekly optimization agent to sustain this cadence automatically.
Summary — Launch Smarter, Not Harder
Here's what you've learned in this playbook:
- Pre-launch: ASO agents handle keyword research and copy optimization systematically
- Launch day: Social media agents deploy platform-optimized content simultaneously
- Post-launch: Review response, A/B testing, and KPI analysis run automatically
- Orchestrator design: Multiple specialized agents work in concert to manage the full campaign
Implementing this system lets a solo developer punch well above their weight class at launch. You'll move faster than teams with dedicated marketing staff, and maintain momentum long after launch day excitement fades.
Start with Chapter 1's ASO automation today. One day of setup can meaningfully shift your organic download curve.
For deeper coverage of app monetization, see our guides on AdMob + Firebase Revenue Optimization and StoreKit 2 Subscription Implementation.