The go-to Python package for App Store and Google Play review extraction
Project description
App Reviews
Fetch app reviews from the Apple App Store and Google Play Store with a single Python package.
Why App Reviews?
Apple and Google use completely different APIs, formats, and auth methods. Getting reviews across multiple countries means juggling separate requests, rate limits, and JWT signing.
App Reviews handles all of this behind a single client.fetch() call -- no API keys required.
from app_reviews import AppStoreReviews, Country
client = AppStoreReviews()
result = client.fetch("324684580", countries=[Country.US, Country.GB])
for review in result:
print(f"[{review.country}] {review.rating}* {review.title}")
Highlights
| Both stores | Apple App Store + Google Play in one package |
| No API keys | Works out of the box using public endpoints |
| 155 countries | Fetch across regions in a single call |
| Official APIs | Optionally use App Store Connect or Google Play Developer API |
| Interactive TUI | Browse reviews in the terminal |
| Export | JSON, JSONL, CSV |
| Minimal deps | Just cryptography for JWT + stdlib urllib |
Install
pip install app-reviews
Or with uv:
uv add app-reviews
Quick Start
Apple App Store
from app_reviews import AppStoreReviews, Country
client = AppStoreReviews()
result = client.fetch("324684580", countries=[Country.US, Country.GB])
for review in result:
print(f"[{review.country}] {review.rating}* {review.title}")
Google Play Store
from app_reviews import GooglePlayReviews, Country
client = GooglePlayReviews()
result = client.fetch("com.instagram.android", countries=[Country.US])
for review in result:
print(f"[{review.country}] {review.rating}* {review.body[:80]}")
Authentication (Optional)
For higher limits and more data, use the official APIs with your developer credentials.
Requires an Apple Developer Program membership ($99/year).
from app_reviews import AppStoreReviews, AppStoreAuth, Country
auth = AppStoreAuth(
key_id="ABC123DEF4",
issuer_id="12345678-1234-1234-1234-123456789012",
key_path="/path/to/AuthKey.p8",
)
client = AppStoreReviews(auth=auth)
result = client.fetch("324684580", countries=[Country.US, Country.GB])
Requires a Google Play Developer account ($25 one-time).
from app_reviews import GooglePlayReviews, GooglePlayAuth, Country
auth = GooglePlayAuth(service_account_path="/path/to/service-account.json")
client = GooglePlayReviews(auth=auth)
result = client.fetch("com.instagram.android", countries=[Country.US])
Advanced Usage
from app_reviews import AppStoreReviews, RetryConfig
retry = RetryConfig(
max_retries=5, # default: 3
backoff_factor=1.0, # default: 0.5
timeout=60.0, # default: 30.0
retry_on=[429, 503], # default: [500, 502, 503, 504, 429]
)
client = AppStoreReviews(retry=retry, proxy="http://proxy.example.com:8080")
result = client.fetch("324684580", countries=["us"])
from app_reviews import GooglePlayReviews
from app_reviews.exporters.json import export_json
from app_reviews.exporters.csv import export_csv
from app_reviews.exporters.jsonl import export_jsonl
client = GooglePlayReviews()
result = client.fetch("com.instagram.android")
export_json(result.reviews) # JSON array string
export_csv(result.reviews) # CSV string with headers
export_jsonl(result.reviews) # one JSON object per line
Browse reviews in the terminal with the built-in TUI:
pip install app-reviews[tui]
app-reviews
Limitations
-
Free scrapers have limits:
- App Store RSS: ~500 most recent reviews.
- Google Play scraper: rate-limited and may not return all reviews.
-
No historical data:
- Only the most recent reviews from public endpoints
-
Official APIs require developer accounts:
- Apple ($99/year), Google ($25 one-time)
Documentation
Read the full docs includes guides on the Python API, TUI, authentication, export formats, and architecture.
Contributing
git clone https://github.com/firattamurcw/app-reviews.git
cd app-reviews
uv sync --group dev
make test
See the Contributing Guide · Code of Conduct · Security Policy
License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file app_reviews-0.3.0.tar.gz.
File metadata
- Download URL: app_reviews-0.3.0.tar.gz
- Upload date:
- Size: 157.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17258ddf86986cbf83d3fe09e013f1b8229cb8c6eb39dfd53a2376ec2ab946f4
|
|
| MD5 |
061d577a8ec2b8dd6dc8c76f8eff5391
|
|
| BLAKE2b-256 |
c1c54c307cdb7dcec063a0c221834108c4d7411b1597a9578c4b828ea73f4f3c
|
Provenance
The following attestation bundles were made for app_reviews-0.3.0.tar.gz:
Publisher:
release.yml on firattamurcw/app-reviews
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
app_reviews-0.3.0.tar.gz -
Subject digest:
17258ddf86986cbf83d3fe09e013f1b8229cb8c6eb39dfd53a2376ec2ab946f4 - Sigstore transparency entry: 1258028972
- Sigstore integration time:
-
Permalink:
firattamurcw/app-reviews@4b48708c7d247831a278754239f3b43d4409ec4d -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/firattamurcw
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4b48708c7d247831a278754239f3b43d4409ec4d -
Trigger Event:
push
-
Statement type:
File details
Details for the file app_reviews-0.3.0-py3-none-any.whl.
File metadata
- Download URL: app_reviews-0.3.0-py3-none-any.whl
- Upload date:
- Size: 37.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ddfb168fa196d0f326f2f4963407b4463d55a277d249a62eeac650d206a2c62
|
|
| MD5 |
612f254aca449ae0643db739363a81ae
|
|
| BLAKE2b-256 |
c4d6937b0e2963ab1a2c6284bf18dfc96805dccc02f41ae1701f5d3c1efb66c8
|
Provenance
The following attestation bundles were made for app_reviews-0.3.0-py3-none-any.whl:
Publisher:
release.yml on firattamurcw/app-reviews
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
app_reviews-0.3.0-py3-none-any.whl -
Subject digest:
8ddfb168fa196d0f326f2f4963407b4463d55a277d249a62eeac650d206a2c62 - Sigstore transparency entry: 1258029211
- Sigstore integration time:
-
Permalink:
firattamurcw/app-reviews@4b48708c7d247831a278754239f3b43d4409ec4d -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/firattamurcw
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4b48708c7d247831a278754239f3b43d4409ec4d -
Trigger Event:
push
-
Statement type: