Skip to main content

Official Python SDK for the ASORadar API — App Store & Google Play reviews, app metadata, rankings, and ASO intelligence.

Project description

asoradar

PyPI version Python versions License: MIT

Official Python SDK for the ASORadar API — App Store & Google Play reviews, app metadata, version history, rankings, and ASO intelligence for developers and AI agents.

  • Sync and asyncASORadar and AsyncASORadar, same surface.
  • Generated from the live OpenAPI spec — 44 methods across App Store, Google Play, and Webhooks.
  • Typed (PEP 561) with machine-usable errors — branch on err.kind, not status tables.
  • One dependency: httpx. Python ≥ 3.10.

Get 100 Free API Requests

Sign up and get 100 free ASORadar requests — no credit card required.

Install

pip install asoradar
# or: uv add asoradar / poetry add asoradar

Quickstart

from asoradar import ASORadar

client = ASORadar(access_key="YOUR_KEY")  # https://asoradar.com/tokens

# Recent App Store reviews for Instagram
reviews = client.app_store.reviews(app_id="389801252", country="us")

# Google Play app metadata
app = client.google_play.app("com.whatsapp", country="de")

# What changed in the last releases?
versions = client.app_store.version_history("389801252")

# One-call competitor brief: metadata + ratings + top complaints
brief = client.app_store.clone_brief("6446901002")

Async:

from asoradar import AsyncASORadar

async with AsyncASORadar(access_key="YOUR_KEY") as client:
    reviews = await client.app_store.reviews(app_id="389801252")

Usage

The client mirrors the API's three surfaces:

client.app_store — App Store (/a1/*)

client.app_store.reviews(app_id="389801252", rating=1, search="crash")
client.app_store.reviews_by_version(app_id="389801252", version="435.0.0")
client.app_store.reviews_sentiment("389801252")
client.app_store.app_by_name(name="Instagram")
client.app_store.app("389801252")
client.app_store.search(term="photo editor", country="us")
client.app_store.suggest(term="insta")
client.app_store.list(collection="topfreeapplications", num=50)
client.app_store.similar("389801252")
client.app_store.developer("389801255")
client.app_store.developer_portfolio_stats("389801255")
client.app_store.categories()
client.app_store.version_history("389801252")
client.app_store.version_history_diff("389801252")
client.app_store.metadata_diff("389801252")
client.app_store.privacy("389801252")
client.app_store.privacy_diff("389801252")
client.app_store.ratings("389801252")
client.app_store.clone_brief("389801252")
client.app_store.niche_scan(category="6008", country="us")

client.google_play — Google Play (/g1/*)

Same shape with Google-specific extras:

client.google_play.reviews(app_id="com.whatsapp", country="de")
client.google_play.permissions("com.whatsapp")
client.google_play.permissions_diff("com.whatsapp")
client.google_play.datasafety("com.whatsapp")
client.google_play.datasafety_diff("com.whatsapp")
# ...plus reviews/search/suggest/list/similar/developer/categories/
#    metadata_diff/clone_brief/niche_scan/reviews_sentiment, as on app_store

client.webhooks — subscriptions (/webhooks)

Get notified on app changes, chart movement, or review keyword matches:

sub = client.webhooks.create(
    kind="app_changes",
    target_url="https://example.com/hooks/asoradar",
    criteria={"store": "apple", "app_id": "389801252"},
)
# sub["secret"] is returned ONCE — store it to verify HMAC signatures.

client.webhooks.list()
client.webhooks.get(sub["id"])
client.webhooks.rotate_secret(sub["id"])
client.webhooks.delete(sub["id"])

Freshness

Read endpoints are cache-first. Pass fresh=True to force a live refresh:

client.app_store.reviews(app_id="389801252", fresh=True)

Error handling

Every failure raises ASORadarError with a machine-usable kind:

from asoradar import ASORadar, ASORadarError

try:
    client.app_store.reviews(app_id="389801252")
except ASORadarError as err:
    match err.kind:
        case "budget_exceeded":   # 402 — top up, do not retry
            ...
        case "rate_limited":      # 429 — wait err.retry_after_seconds
            ...
        case "auth":              # 401/403 — check your access key
            ...
        case "validation" | "not_found" | "server" | "timeout" | "network" | "api":
            ...
    print(err.status, err.kind, err.body)

Options

ASORadar(
    access_key="...",                       # required — https://asoradar.com/tokens
    base_url="https://api.asoradar.com",    # optional
    timeout=30.0,                           # optional, per request (seconds)
    transport=custom_httpx_transport,       # optional — tests, proxies
)

Escape hatch

Endpoints newer than this SDK build are still reachable with full auth / error handling:

client.request("GET", "/a1/brand-new-endpoint", query={"app_id": "..."})

Related

  • asoradar on npm — the JavaScript / TypeScript SDK.
  • asoradar-mcp — MCP server that exposes this API as tools for AI agents (Claude, Cursor, Codex, …).
  • API docs

License

MIT — see 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

asoradar-1.0.0.tar.gz (20.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

asoradar-1.0.0-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file asoradar-1.0.0.tar.gz.

File metadata

  • Download URL: asoradar-1.0.0.tar.gz
  • Upload date:
  • Size: 20.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.13

File hashes

Hashes for asoradar-1.0.0.tar.gz
Algorithm Hash digest
SHA256 bf09cfdd9fb5a058c09c4fc8c5691a02b3a7d035b04664ca8f3beb9cfd380862
MD5 7e1c3cacd73ad87938c92a6291842fee
BLAKE2b-256 4ae3cda866cd0ddc7ddd54c3a5ef64e964fd7da1b6785869c23954e9cac748a6

See more details on using hashes here.

File details

Details for the file asoradar-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: asoradar-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.13

File hashes

Hashes for asoradar-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 df39ed4b60457671321b2f16a61fcbc5821bcfcfc98676ca75d572d9594bb1ef
MD5 e5ca860326af8beb1e1cfd4dd583c6e3
BLAKE2b-256 8f37f33bc6d5540c6442fe460c6b91f3d2801354b61c8da51b109e2256294cf7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page