Skip to main content

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.

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.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 files

Supported by

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