#ASO Data Sync Tools

Tools for syncing App Store Optimization (ASO) data between local cache and stores.

#aso-pull

Fetch ASO data from App Store/Google Play and save to local cache.

#Parameters

ParameterTypeRequiredDefaultDescription
appstringConditional-Registered app slug
bundleIdstringConditional-App Store bundle ID
packageNamestringConditional-Google Play package name
store"appStore" | "googlePlay" | "both"No"both"Target store
dryRunbooleanNofalseIf true, only outputs result without saving

Note: Provide either app (recommended) or bundleId/packageName directly.

#Usage Examples

// Pull from both stores using registered app
{ "app": "myapp" }

// Pull from App Store only
{ "app": "myapp", "store": "appStore" }

// Pull using direct identifiers
{ "bundleId": "com.example.app", "packageName": "com.example.app" }

// Dry run to preview data
{ "app": "myapp", "dryRun": true }

#What Gets Pulled

App Store:

  • App name, subtitle, description
  • Keywords, promotional text
  • Screenshots (iPhone 6.5", iPhone 6.1", iPad Pro 12.9")
  • All supported locales

Google Play:

  • Title, short description, full description
  • Screenshots (phone, tablet)
  • Feature graphic
  • All supported languages

#Data Storage

Data is saved to the dataDir specified in your config:

{dataDir}/.aso/pull/{slug}/
β”œβ”€β”€ app-store/
β”‚   β”œβ”€β”€ data.json
β”‚   └── screenshots/{locale}/
β”‚       β”œβ”€β”€ iphone65-1.png
β”‚       β”œβ”€β”€ iphone65-2.png
β”‚       └── ...
└── google-play/
    β”œβ”€β”€ data.json
    └── screenshots/{language}/
        β”œβ”€β”€ phone-1.png
        β”œβ”€β”€ phone-2.png
        └── feature-graphic.png

#Response

βœ… ASO data pulled
   Google Play: βœ“
   App Store: βœ“

#aso-push

Push ASO data from local cache to App Store/Google Play.

#Parameters

ParameterTypeRequiredDefaultDescription
appstringConditional-Registered app slug
bundleIdstringConditional-App Store bundle ID
packageNamestringConditional-Google Play package name
store"appStore" | "googlePlay" | "both"No"both"Target store
uploadImagesbooleanNofalseWhether to upload images
dryRunbooleanNofalseIf true, only outputs result without pushing

#Usage Examples

// Push to both stores
{ "app": "myapp" }

// Push to Google Play only
{ "app": "myapp", "store": "googlePlay" }

// Push with images
{ "app": "myapp", "uploadImages": true }

// Dry run to preview
{ "app": "myapp", "dryRun": true }

#Data Source

Data is read from the push directory:

{dataDir}/.aso/push/{slug}/
β”œβ”€β”€ app-store/
β”‚   └── data.json
└── google-play/
    └── data.json

#Response

πŸ“€ ASO Push Results:
βœ… Google Play: Updated 3 locales (en-US, ko, ja)
βœ… App Store: Updated 3 locales (en-US, ko, ja)

Errors:

πŸ“€ ASO Push Results:
❌ Google Play: Push failed: Permission denied
⏭️  Skipping App Store (not registered for App Store)

#Data Format

#App Store Data (data.json)

{
  "defaultLocale": "en-US",
  "locales": {
    "en-US": {
      "name": "My App",
      "subtitle": "Your productivity companion",
      "description": "Full app description...",
      "keywords": "productivity,task,todo",
      "promotionalText": "Now with new features!",
      "screenshots": {
        "iphone65": ["url1", "url2"],
        "iphone61": ["url1", "url2"],
        "ipadPro129": ["url1"]
      }
    },
    "ko": {
      "name": "마이 μ•±",
      "subtitle": "생산성 λ„μš°λ―Έ",
      "description": "전체 μ•± μ„€λͺ…...",
      "keywords": "생산성,μž‘μ—…,할일",
      "promotionalText": "μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€!",
      "screenshots": {
        "iphone65": ["url1", "url2"]
      }
    }
  }
}

#Google Play Data (data.json)

{
  "defaultLocale": "en-US",
  "locales": {
    "en-US": {
      "title": "My App",
      "shortDescription": "Your productivity companion",
      "fullDescription": "Full app description...",
      "screenshots": {
        "phone": ["url1", "url2"],
        "tablet": ["url1"]
      },
      "featureGraphic": "feature-url"
    },
    "ko": {
      "title": "마이 μ•±",
      "shortDescription": "생산성 λ„μš°λ―Έ",
      "fullDescription": "전체 μ•± μ„€λͺ…...",
      "screenshots": {
        "phone": ["url1", "url2"]
      }
    }
  }
}

#Workflow Example

  1. Pull current data:

    { "app": "myapp" }
    
  2. Edit data locally in {dataDir}/.aso/push/{slug}/

  3. Preview changes:

    { "app": "myapp", "dryRun": true }
    
  4. Push updates:

    { "app": "myapp" }
    

#See Also