asc-metadata-sync
rudrankriyam/app-store-connect-cli-skills
Sync, validate, and apply App Store metadata with canonical asc workflow for localizations, keywords, and version fields.
What is asc-metadata-sync?
Manages App Store Connect metadata synchronization using the canonical asc metadata workflow. Use this skill when updating app metadata, localizations, keywords, or migrating from legacy fastlane formats. It handles pulling, editing, validating, and pushing metadata across multiple locales and app versions.
- Pull canonical metadata from App Store Connect into local JSON files organized by locale and version
- Validate metadata against App Store character limits and field requirements before uploading
- Push or apply validated metadata changes back to App Store Connect with dry-run preview support
- Manage version-localization fields (description, keywords, whatsNew, marketingUrl, supportUrl, promotionalText) and app-info fields (name, subtitle, privacyPolicyUrl)
- Import and sync keyword research from CSV files for App Store optimization
- Migrate legacy fastlane-format metadata to canonical asc format
How to install asc-metadata-sync
npx skills add https://github.com/rudrankriyam/app-store-connect-cli-skills --skill asc-metadata-sync- App Store Connect API credentials configured for asc CLI
- App ID and version information for the target app
- Optional: existing fastlane metadata directory for migration workflows
How to use asc-metadata-sync
- 1.Run asc metadata pull with your APP_ID, version, and platform to download canonical metadata into local JSON files
- 2.Edit the pulled metadata files in metadata/app-info/<locale>.json and metadata/version/<version>/<locale>.json as needed
- 3.Run asc metadata validate to check for character limit violations and required field issues
- 4.Run asc metadata push or asc metadata apply with --dry-run to preview changes before applying
- 5.Review the dry-run output and run the command again without --dry-run to apply changes to App Store Connect
Use cases
- Updating app descriptions, keywords, and promotional text across multiple locales before a release
- Syncing metadata changes from a local repository to App Store Connect with validation and preview
- Importing keyword research data and applying it to version localizations
- Migrating an existing fastlane metadata structure to the canonical asc workflow
- Managing app-level fields like privacy policy URLs and app name across different locales
- iOS app developers managing App Store metadata
- Release managers coordinating multi-locale app updates
- Teams using CI/CD pipelines for App Store metadata automation
- Developers migrating from fastlane to asc tooling
asc-metadata-sync FAQ
Start with asc metadata pull for the canonical workflow. Use asc localizations only when you specifically need .strings files for import/export instead of JSON.
Use asc metadata keywords diff to preview changes, then asc metadata keywords apply to update only the keywords field.
App-info fields (name, subtitle, privacy URLs) are app-level and shared across versions. Version fields (description, keywords, whatsNew) are version-specific and localized per version.
Yes, use asc migrate export to export current metadata, then asc migrate import to apply fastlane-format metadata from a directory.
Yes, always run with --dry-run first to preview the changes that will be applied to App Store Connect.
Full instructions (SKILL.md)
Source of truth, from rudrankriyam/app-store-connect-cli-skills.
name: asc-metadata-sync description: Sync, validate, and apply App Store metadata with the current asc canonical metadata workflow. Use when updating metadata, localizations, keywords, or migrating legacy fastlane metadata.
asc metadata sync
Use this skill to keep App Store metadata in sync with App Store Connect. Prefer the canonical asc metadata workflow for app-info and version localization fields. Use the lower-level asc localizations and asc migrate commands only when the user specifically needs .strings files or legacy fastlane-format metadata.
Current canonical workflow
1. Pull canonical metadata
asc metadata pull --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata"
If the app has multiple app-info records, resolve the app-info ID first and pass it explicitly:
asc apps info list --app "APP_ID" --output table
asc metadata pull --app "APP_ID" --app-info "APP_INFO_ID" --version "1.2.3" --platform IOS --dir "./metadata"
2. Edit local files
Canonical files are written under:
metadata/app-info/<locale>.jsonfor app-level fields:name,subtitle,privacyPolicyUrl,privacyChoicesUrl,privacyPolicyTextmetadata/version/<version>/<locale>.jsonfor version fields:description,keywords,marketingUrl,promotionalText,supportUrl,whatsNew
Copyright is not a localization field. Manage it with:
asc versions update --version-id "VERSION_ID" --copyright "2026 Your Company"
3. Validate before upload
asc metadata validate --dir "./metadata" --output table
For subscription apps, include the extra Terms of Use / EULA heuristic:
asc metadata validate --dir "./metadata" --subscription-app --output table
4. Preview and apply
Run a dry run first:
asc metadata push --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata" --dry-run --output table
Apply after the plan looks correct:
asc metadata push --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata"
Use asc metadata apply when the user wants the apply-named command shape for the same canonical files:
asc metadata apply --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata" --dry-run
asc metadata apply --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata"
Keyword-only workflow
Use this when only the version-localization keywords field should change:
asc metadata keywords diff --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata"
asc metadata keywords apply --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata" --confirm
For importing keyword research:
asc metadata keywords import --dir "./metadata" --version "1.2.3" --locale "en-US" --input "./keywords.csv"
asc metadata keywords sync --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata" --input "./keywords.csv"
Quick field updates
For one-off version-localization edits, pass an explicit version selector. Use --version-id for deterministic updates when you already have it, or --version plus --platform when working from a version string.
asc apps info edit --app "APP_ID" --version-id "VERSION_ID" --locale "en-US" --whats-new "Bug fixes and improvements"
asc apps info edit --app "APP_ID" --version "1.2.3" --platform IOS --locale "en-US" --description "Your app description here"
asc apps info edit --app "APP_ID" --version "1.2.3" --platform IOS --locale "en-US" --keywords "keyword1,keyword2,keyword3"
asc apps info edit --app "APP_ID" --version "1.2.3" --platform IOS --locale "en-US" --support-url "https://support.example.com"
For app-info fields, prefer the post-create setup command:
asc app-setup info set --app "APP_ID" --primary-locale "en-US" --privacy-policy-url "https://example.com/privacy"
asc app-setup info set --app "APP_ID" --locale "en-US" --name "Your App Name" --subtitle "Your subtitle"
Lower-level localization files
Use .strings files when the user specifically wants import/export files instead of canonical JSON:
asc localizations list --version "VERSION_ID" --output table
asc localizations download --version "VERSION_ID" --path "./localizations"
asc localizations upload --version "VERSION_ID" --path "./localizations" --dry-run
asc localizations upload --version "VERSION_ID" --path "./localizations"
For app-info localizations:
asc apps info list --app "APP_ID" --output table
asc localizations list --app "APP_ID" --type app-info --app-info "APP_INFO_ID" --output table
asc localizations download --app "APP_ID" --type app-info --app-info "APP_INFO_ID" --path "./app-info-localizations"
asc localizations upload --app "APP_ID" --type app-info --app-info "APP_INFO_ID" --path "./app-info-localizations" --dry-run
asc localizations upload --app "APP_ID" --type app-info --app-info "APP_INFO_ID" --path "./app-info-localizations"
Legacy fastlane metadata
Use this only for existing fastlane-format trees:
asc migrate export --app "APP_ID" --version-id "VERSION_ID" --output-dir "./fastlane"
asc migrate validate --fastlane-dir "./fastlane"
asc migrate import --app "APP_ID" --version-id "VERSION_ID" --fastlane-dir "./fastlane" --dry-run
asc migrate import --app "APP_ID" --version-id "VERSION_ID" --fastlane-dir "./fastlane"
Character limits
| Field | Limit |
|---|---|
| Name | 30 |
| Subtitle | 30 |
| Keywords | 100 comma-separated characters |
| Description | 4000 |
| What's New | 4000 |
| Promotional Text | 170 |
Agent behavior
- Start with
asc metadata pullunless the user specifically asks for.stringsor fastlane metadata. - Always run
asc metadata validatebefore remote writes. - Preview remote changes with
--dry-runwhen the command supports it. - For quick edits, always pass
--version-idor--versionplus--platform; do not rely on ambiguous latest-version behavior. - Keep app-info fields and version fields separate.
- Use
--output tablefor human verification and JSON for automation.
Related skills
More from rudrankriyam/app-store-connect-cli-skills and the wider catalog.

asc-notarization
Archive, export, and notarize macOS apps with Developer ID signing for distribution outside the App Store.

asc-ppp-pricing
Set territory-specific pricing for subscriptions and in-app purchases using App Store Connect CLI.

asc-release-flow
Validate app readiness and drive App Store submission with asc, handling metadata, builds, IAP, subscriptions, and privacy checks.

asc-revenuecat-catalog-sync
Sync App Store Connect subscriptions and in-app purchases with RevenueCat catalogs.

asc-shots-pipeline
Automate iOS screenshot capture, framing, and App Store upload with xcodebuild, AXe, and Koubou.

asc-signing-setup
Set up iOS/macOS signing certificates, provisioning profiles, and bundle IDs via App Store Connect CLI.