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