#ASO Tools
Tools for App Store Optimization data management.
#Tools
#aso-to-public (pull)
Converts ASO data from .aso/pullData/ to public/products/[slug]/ format.
Input:
slug(required): Product sluglocale(optional): Target locale (defaults to all available)
Output:
- Conversion prompts for each locale
- Structured data ready for web use
#public-to-aso (push)
Converts public/products/[slug]/ data back to ASO format for .aso/pushData/.
Input:
slug(required): Product slugdryRun(optional): Preview without writing fileslocales(optional): Specific locales to process
Output:
- Store-ready ASO data
- Screenshot paths for upload
#improve-public
Generates ASO optimization prompts for existing public data.
Input:
slug(required): Product sluglocale(optional): Target locale for optimizationmode(optional):primary(keyword optimization) orlocalize(translation)
Output:
- Keyword analysis
- Optimization suggestions
- Localization prompts
#validate-aso
Validates ASO data against store field limits and rules.
Input:
slug(required): Product slugstore(optional):appStore,googlePlay, orboth
Output:
- Field length validation
- Keyword uniqueness check
- Policy compliance warnings
#keyword-research
Manages keyword research data for ASO optimization.
Input:
slug(required): Product sluglocale(required): Target localeplatform(optional):iosorandroid
Output:
- Keyword research file paths
- Research prompts for analysis
#localize-screenshots
Translates app screenshots to multiple languages using Gemini API.
Default model: gemini-3.1-flash-image-preview (optionally gemini-3-pro-image-preview).
Requirements:
- Gemini API key must be configured (see Configuration)
- Screenshots must exist in
public/products/{slug}/screenshots/{locale}/phone/and/ortablet/
Input:
appName(required): App name, slug, bundleId, or packageNametargetLocales(optional): Specific locales to translate to (defaults to all supported locales)deviceTypes(optional):["phone"],["tablet"], or["phone", "tablet"](default: both)dryRun(optional): Preview mode without actual translation (default: false)skipExisting(optional): Skip if translated file exists (default: true)screenshotNumbers(optional): Specific screenshot numbers to process- Array for all devices:
[1, 3, 5] - Object for per-device:
{ phone: [1, 2], tablet: [1, 3, 5] } - If not provided, all screenshots will be processed
- Array for all devices:
preserveWords(optional): Words to keep untranslated (e.g.,["Pabal", "Pro", "AI"])imageModel(optional):"flash"(default) or"pro"
Output:
- Translated screenshots saved to
screenshots/{targetLocale}/phone/andtablet/ - Images automatically resized to match source dimensions
Cost Information:
- Image generation costs approximately $0.13 per image
Supported Languages:
For best performance, only the following languages are supported for image generation, as specified in the Gemini API documentation:
| Gemini Locale | Output Locales (UnifiedLocale) |
|---|---|
en-US (English) | en-US, en-AU, en-CA, en-GB, en-IN, en-SG, en-ZA |
ar-EG (Arabic) | ar |
de-DE (German) | de-DE |
es-MX (Spanish) | es-419, es-ES, es-US |
fr-FR (French) | fr-FR, fr-CA |
hi-IN (Hindi) | hi-IN |
id-ID (Indonesian) | id-ID |
it-IT (Italian) | it-IT |
ja-JP (Japanese) | ja-JP |
ko-KR (Korean) | ko-KR |
pt-BR (Portuguese) | pt-BR, pt-PT |
ru-RU (Russian) | ru-RU |
ua-UA (Ukrainian) | uk-UA |
vi-VN (Vietnamese) | vi-VN |
zh-CN (Chinese) | zh-Hans, zh-Hant, zh-HK |
Similar locales are grouped together to reduce API calls. For example, translating to Spanish (es-MX) will automatically save the same image to es-419, es-ES, and es-US folders.
Locales not in the supported list will be skipped during translation.
Example:
screenshots/
βββ en-US/ # Source (primary locale)
β βββ phone/
β β βββ 1.png
β β βββ 2.png
β βββ tablet/
β βββ 1.png
βββ ko-KR/ # Generated
β βββ phone/
β β βββ 1.png
β β βββ 2.png
β βββ tablet/
β βββ 1.png
βββ ja-JP/ # Generated
βββ ...
#Gemini API Configuration
The localize-screenshots tool requires a Gemini API key.
#Getting a Gemini API Key
- Go to Google AI Studio
- Sign in with your Google account
- Click "Create API Key"
- Copy the generated API key
- Important: Link a billing account at Google Cloud Console to enable the Imagen API
#Configuration
Add to ~/.config/pabal-mcp/config.json:
{
"dataDir": "/path/to/your/project",
"gemini": {
"apiKey": "your-gemini-api-key"
}
}
Alternatively, set the GEMINI_API_KEY environment variable.
#Field Limits Reference
#Apple App Store
| Field | Limit |
|---|---|
| App name | β€30 chars |
| Subtitle | β€30 chars |
| Keywords | β€100 chars |
| Promotional text | β€170 chars |
| Description | β€4000 chars |
| What's New | β€4000 chars |
#Google Play
| Field | Limit |
|---|---|
| Title | β€50 chars (β€30 recommended) |
| Short description | β€80 chars |
| Full description | β€4000 chars |
| Release notes | β€500 chars |