Play Store Competitor Analysis
Extract comprehensive app data and screenshots from Google Play Store listings for competitive analysis. Supports single app analysis, multi-app comparison, or searching for top competitors by keyword.
Requirements
Install the google-play-scraper package. On modern macOS/Linux systems, you'll need to use a virtual environment:
# Create a virtual environment in the skill directory (one-time setup)
python3 -m venv .venv
# Activate and install the package
source .venv/bin/activate
pip install google-play-scraper
Then run the script with the virtual environment's python:
# Use the venv python directly (no activation needed)
.venv/bin/python3 scripts/scrape_play_store.py --search "messenger" ./output
# Or activate first, then run
source .venv/bin/activate
python3 scripts/scrape_play_store.py --search "messenger" ./output
Workflow
- Determine the analysis type:
- Single app: User provides a Play Store URL or package ID
- Comparison: User provides multiple URLs/package IDs
- Search: User wants to find top competitors for a keyword (e.g., "top 10 messenger apps")
- Run the appropriate scraper command
- Review the generated outputs with the user
Usage
Single App Analysis
Run the scraper with a Play Store URL or package ID:
python3 scripts/scrape_play_store.py "<play_store_url_or_package_id>" "<output_directory>"
Examples:
# Using URL
python3 scripts/scrape_play_store.py "https://play.google.com/store/apps/details?id=com.slack" ./competitor-analysis/slack
# Using package ID directly
python3 scripts/scrape_play_store.py com.slack ./competitor-analysis/slack
Multiple App Comparison
Run the scraper with multiple URLs or package IDs:
python3 scripts/scrape_play_store.py --compare "<id1>" "<id2>" "<id3>" "<output_directory>"
Example:
python3 scripts/scrape_play_store.py --compare \
com.slack \
com.microsoft.teams \
com.discord \
./competitor-analysis/messaging-apps
Search for Top Competitors
Search for top apps by keyword and automatically analyze them:
python3 scripts/scrape_play_store.py --search "<query>" "<output_directory>" --limit <N>
Examples:
# Find and analyze top messenger apps
python3 scripts/scrape_play_store.py --search "messenger apps" ./competitor-analysis/messenger --limit 10
# Find top 5 podcast apps
python3 scripts/scrape_play_store.py --search "podcast" ./competitor-analysis/podcasts --limit 5
# Default limit is 10 if not specified
python3 scripts/scrape_play_store.py --search "fitness tracker" ./competitor-analysis/fitness
Output
Single App Output
output_dir/
├── {package-id}.json # Full structured data
├── {package-id}.md # Formatted report
├── icon.png # App icon
└── screenshots/
├── screenshot_01.png
├── screenshot_02.png
└── ...
Comparison/Search Output
output_dir/
├── comparison.json # All apps data for programmatic use
├── comparison.md # Side-by-side comparison report
├── {app-1-package-id}/
│ ├── {package-id}.json
│ ├── {package-id}.md
│ ├── icon.png
│ └── screenshots/
├── {app-2-package-id}/
│ └── ...
└── {app-3-package-id}/
└── ...
Data Extracted
| Field | Description | |-------|-------------| | title | App name | | description | Full app description | | short_description | Brief summary | | rating | Average star rating (1-5) | | rating_count | Number of ratings | | reviews_count | Number of text reviews | | histogram | Rating distribution [1-star, 2-star, 3-star, 4-star, 5-star] | | installs | Install count range (e.g., "10,000,000+") | | real_installs | Actual install count estimate | | category | Primary category | | category_id | Category ID (e.g., GAME_ACTION) | | price | Price or 0 for free | | free | Boolean: is app free | | currency | Price currency code | | contains_ads | Boolean: has advertisements | | offers_iap | Boolean: has in-app purchases | | iap_range | In-app purchase price range | | developer | Developer name | | developer_id | Developer ID | | developer_email | Developer contact email | | developer_website | Developer website URL | | developer_address | Developer address | | privacy_policy | Privacy policy URL | | version | Current version | | android_version | Minimum Android version (text) | | content_rating | Content rating (Everyone, Teen, etc.) | | content_rating_description | Content rating details | | released | Original release date | | last_updated | Last update timestamp | | screenshots | All screenshot URLs | | video | Promo video URL if available | | icon_url | App icon URL | | header_image | Header/feature graphic URL |
Comparison Report Includes
| Metric | Description | |--------|-------------| | Rating comparison | Side-by-side ratings with visual indicators | | Install base | Relative market presence with actual numbers | | Update frequency | Last update dates | | Monetization | Free/paid, ads, IAP comparison | | Feature highlights | Key differentiators from descriptions | | Competitive insights | Highest rated, most installed, etc. |
Notes
- Uses the
google-play-scraperPython package for reliable data extraction - Screenshots are downloaded at high resolution
- Rate limiting is applied automatically to avoid blocking
- For comparison/search mode, apps are processed sequentially with delays
- Output directories are created if they don't exist
- The comparison report highlights competitive advantages and gaps
- Search results are ordered by Play Store's ranking algorithm