Metadata-Version: 2.4
Name: app-store-scraper-reliable
Version: 0.1.0
Summary: Maintained drop-in replacement for app-store-scraper: App Store reviews that work again on modern Python, same AppStore(...).review() API, optional reliable backend.
Author: RT Solutions
License: MIT
Project-URL: Reliable backend, https://apify.com/rt-solutions/appstore-reviews-ai
Keywords: app store,app-store-scraper,app store reviews,ios reviews,itunes,scraper,aso
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.20
Dynamic: license-file

# app-store-scraper-reliable — App Store reviews in Python (maintained app-store-scraper alternative)

[`app-store-scraper`](https://pypi.org/project/app-store-scraper/) has not been updated since 2020. On a recent Python it fails right at import (`No module named 'urllib3.packages.six.moves'`), and its review endpoint needs a token Apple no longer exposes.

`app-store-scraper-reliable` keeps **the same class and method**. Change one import:

```python
# before
from app_store_scraper import AppStore
# after
from app_store_scraper_reliable import AppStore

slack = AppStore(country='us', app_name='slack', app_id=618783545)
slack.review(how_many=200)

print(slack.reviews_count)
print(slack.reviews[0])
# {'date': datetime(...), 'review': '...', 'rating': 5, 'isEdited': False, 'title': '...', 'userName': '...', 'version': '...', 'id': '...'}
```

```
pip install app-store-scraper-reliable
```

## What's different

| | app-store-scraper 0.3.5 | app-store-scraper-reliable |
|---|---|---|
| Installs on Python 3.10+ | ❌ (old urllib3 pin) | ✅ only `requests` |
| Reviews | ❌ token no longer available | ✅ Apple's public review feed, with the retries it needs (it often answers an empty page by mistake) |
| `review(how_many, after, sleep)`, `reviews`, `reviews_count` | ✅ | ✅ same names and dict keys |
| Finding `app_id` from the name | Google search (blocked) | Apple's search API |
| When Apple keeps failing | — | optional reliable backend |

Apple's feed exposes at most **500 reviews per country** (newest first). `isEdited` is always `False` and `developerResponse` is not available from this feed.

## Reliable backend

```python
app = AppStore('us', 'candy-crush-saga', 553834731, apify_token='YOUR_APIFY_TOKEN')   # automatic fallback
app = AppStore('us', 'candy-crush-saga', 553834731, backend='apify', apify_token='...')  # always
# or set the APIFY_TOKEN environment variable
```

Routes the same `review()` call through the [App Store & Google Play Reviews scraper](https://apify.com/rt-solutions/appstore-reviews-ai) on Apify (rotating IPs, many retries): **$0.10 per 1,000 reviews**, free monthly credits on Apify. It can also write an AI summary of complaints and feature requests.

> Disclosure: I built both this package and the Apify scraper. Everything works without an account; the reliable backend is optional.

## License

MIT. Keeps the public interface of app-store-scraper (MIT, © Eric Lim). Independent project, not affiliated with Apple.
