skills/store-forms/SKILL.md
Fill App Store Connect and Google Play Console forms via Python+Playwright automation. Handles age rating, privacy, data safety, content rating, export compliance, IDFA, target audience, and ads declaration.
npx skillsauth add seungmanchoi/store-deploy-plugin store-formsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill fills store forms using Python scripts with Playwright (NOT Playwright MCP). Zero LLM token cost for browser automation — the scripts run deterministically.
Run the credential manager to check/setup saved credentials:
python3 ${PLUGIN_DIR}/scripts/credentials_manager.py --show
If not configured:
python3 ${PLUGIN_DIR}/scripts/credentials_manager.py --setup
Credentials are saved globally at ~/.store-deploy/credentials.json and reused across projects.
Read the project to determine form answers:
app.json / app.config.ts — extract bundleIdentifier, package namepackage.json — check for ad SDKs (react-native-google-mobile-ads, expo-ads-admob), analytics, UGC featuresapp.json for ITSAppUsesNonExemptEncryptionGenerate a forms_config.json in the project root:
{
"has_ads": false,
"has_ugc": false,
"has_encryption": false,
"has_violence": false,
"has_sexual": false,
"has_profanity": false,
"has_drugs": false,
"has_gambling": false,
"has_iap": false,
"privacy_url": "https://example.com/privacy",
"data_collection": [],
"review_notes": "",
"iarc_category": "utility",
"min_age": 18
}
Set has_ads: true if ad SDK found. Set data_collection: ["analytics", "advertising"] as appropriate.
IMPORTANT: Tell the user:
"Browser will open. Please log into the store console if prompted. The script will fill forms automatically."
python3 ${PLUGIN_DIR}/scripts/store_forms_ios.py \
--app-id {ASC_APP_ID} \
--bundle-id {BUNDLE_ID} \
--config forms_config.json \
--project .
python3 ${PLUGIN_DIR}/scripts/store_forms_android.py \
--package-name {PACKAGE_NAME} \
--config forms_config.json \
--project .
# iOS: only age_rating and review_info
python3 ${PLUGIN_DIR}/scripts/store_forms_ios.py --app-id 123 --forms age_rating,review_info
# Android: only content_rating and ads_declaration
python3 ${PLUGIN_DIR}/scripts/store_forms_android.py --package-name com.x.y --forms content_rating,ads_declaration
python3 ${PLUGIN_DIR}/scripts/store_forms_ios.py --app-id 123 --config forms_config.json --dry-run
If a form step fails (selector changed, page layout updated):
~/.store-deploy/error-screenshots/If selectors need updating, edit the Python scripts directly in ${PLUGIN_DIR}/scripts/.
Store Forms Complete
====================
iOS:
- [x] Age Rating
- [x] App Privacy
- [x] Review Info
- [x] Export Compliance
- [x] IDFA
Android:
- [x] Content Rating (IARC)
- [x] Data Safety
- [x] Target Audience
- [x] Ads Declaration
| Form | CLI name | Description |
|------|----------|-------------|
| Age Rating | age_rating | Violence, sexual content, profanity questionnaire |
| App Privacy | app_privacy | Privacy policy URL + data collection declarations |
| Review Info | review_info | App review contact info (auto-filled from credentials) |
| Export Compliance | export_compliance | Encryption usage declaration |
| IDFA | idfa | Advertising identifier declaration |
| Form | CLI name | Description |
|------|----------|-------------|
| Content Rating | content_rating | IARC questionnaire |
| Data Safety | data_safety | Data collection, sharing, encryption declarations |
| Target Audience | target_audience | Age group selection |
| Ads Declaration | ads_declaration | Whether app contains ads |
development
Submit app binary to App Store and Google Play via EAS Submit. Handles submission configuration and post-submission metadata upload.
devops
Install deployment prerequisites and create fastlane directory structure for Expo apps. Use when setting up a new project for store deployment.
tools
Generate and process store screenshots for App Store and Google Play. Supports simulator capture, AI generation (nano-banana-mcp), and Pillow post-processing with text overlays.
development
Generate and upload store metadata (title, description, keywords, release notes) for App Store and Google Play in multiple languages.