Reputation & Reviews

App Store API

The App Store Reviews API returns unified Apple App Store and Google Play data as clean JSON.

7 actionsLive JSON1,000 free creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary reviews endpoint returns an app's profile (name, id, rating) and its reviews (rating, title, text, date, reviewer, version) from both stores, and you can search apps, list top charts and categories, pull appDetails, a developer's apps and similar apps. It is built for app-intelligence, review-monitoring and competitor-tracking tools that need mobile-app data across both stores from one endpoint. One ReefAPI key, one shared credit pool, the standard envelope.

Live example

Real request and response JSON

Captured from the indexed primary action, reviews, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/app-store/v1/reviews",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "apps": [
      {
        "name": "WhatsApp",
        "apple": "310633997"
      }
    ],
    "stores": [
      "apple"
    ],
    "countries": [
      "us"
    ],
    "maxReviews": 100
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "app-store",
    "endpoint": "reviews",
    "mode": "live",
    "latency_ms": 3368.5,
    "record_count": 100,
    "bytes": 0,
    "cache_hit": false,
    "kind": "reviews",
    "summary": {
      "units": 1,
      "succeeded": 1,
      "not_found": 0,
      "blocked": 0,
      "success_rate_pct": 100,
      "total_reviews": 100,
      "total_new": 0,
      "avg_completeness_pct": 0.001,
      "by_store": {
        "apple": 1
      },
      "error_breakdown": {},
      "retries_used": 0
    }
  },
  "data": {
    "kind": "reviews",
    "results": [
      {
        "store": "apple",
        "app_id": "[redacted-phone]",
        "query": "[redacted-phone]",
        "profile": {
          "store": "apple",
          "app_id": "[redacted-phone]",
          "bundle_id": "net.whatsapp.WhatsApp",
          "name": "[redacted-name]",
          "subtitle": null,
          "developer": "WhatsApp Inc.",
          "developer_email": null,
          "developer_website": "http://www.whatsapp.com/",
          "avg_rating": 4.68607,
          "rating_count": 18268035,
          "review_count": null,
          "histogram": {
            "1": "[trimmed-depth]",
            "2": "[trimmed-depth]",
            "3": "[trimmed-depth]",
            "4": "[trimmed-depth]",
            "5": "[trimmed-depth]",
            "total": "[trimmed-depth]"
          },
          "current_version_score": 4.68607,
          "current_version_rating_count": 18268035,
          "installs": null,
          "price": 0,
          "currency": "USD",
          "free": true,
          "content_rating": "12+",
          "contains_ads": null,
          "description": "WhatsApp from Meta is a free messaging and calling app used by over 2 billion people across 180+ countries. It's super simple, reliable and private, making it perfect for staying in touch with your friends and family worldwide. WhatsApp works across mobile, tablet, and desktop even on slow connections, with no subscription fees*.\n\nPrivate messaging and calls across the world\n\nYour privacy is our priority. With end-to-end encryption, you can be sure that your personal messages and calls stay between you and who you send them to. And no one, not even WhatsApp, can read or listen to them.\n\nSimple",
          "release_notes": "We update the app regularly to fix bugs, optimize performance and improve the experience. Thanks for using WhatsApp!",
          "released": "[redacted-phone]T02:43:49Z",
          "updated": "[redacted-phone]T05:39:22Z",
          "version": "26.27.74",
          "size_bytes": 377079808,
          "min_os": "15.1",
          "languages": [
            "[trimmed-depth]",
            "[trimmed-depth]",
            "[trimmed-depth]"
          ],
          "screenshots": [],
          "privacy_policy": null,
          "icon_url": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/e3/8b/2f/e38b2fe8-5991-2e46-8b1c-64315e08a3e7/AppIcon-0-0-1x_U007epad-[redacted-phone]-sRGB-0-85-220.png/512x512bb.jpg",
          "url": "https://apps.apple.com/us/app/whatsapp-messenger/id[redacted-phone]?uo=4",
          "categories": [
            "[trimmed-depth]",
            "[trimmed-depth]"
          ]
        },
        "reviews": [
          {
            "store": "[trimmed-depth]",
            "review_id": "[trimmed-depth]",
            "app_id": "[trimmed-depth]",
            "app_name": "[trimmed-depth]",
            "country": "[trimmed-depth]",
            "rating": "[trimmed-depth]",
            "score_text": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "text": "[trimmed-depth]",
            "language": "[trimmed-depth]",
            "review_date": "[trimmed-depth]",
            "app_version": "[trimmed-depth]",
            "sub_ratings": "[trimmed-depth]",
            "thumbs_up": "[trimmed-depth]",
            "vote_sum": "[trimmed-depth]",
            "vote_count": "[trimmed-depth]",
            "reviewer_name": "[trimmed-depth]",
            "reviewer_id": "[trimmed-depth]",
            "reviewer_url": "[trimmed-depth]",
            "reviewer_avatar_url": "[trimmed-depth]",
            "reply_text": "[trimmed-depth]",
            "reply_date": "[trimmed-depth]",
            "review_url": "[trimmed-depth]",
            "scraped_at": "[trimmed-depth]",
            "scraped_at_page": "[trimmed-depth]",
            "is_new": "[trimmed-depth]"
          },
          {
            "store": "[trimmed-depth]",
            "review_id": "[trimmed-depth]",
            "app_id": "[trimmed-depth]",
            "app_name": "[trimmed-depth]",
            "country": "[trimmed-depth]",
            "rating": "[trimmed-depth]",
            "score_text": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "text": "[trimmed-depth]",
            "language": "[trimmed-depth]",
            "review_date": "[trimmed-depth]",
            "app_version": "[trimmed-depth]",
            "sub_ratings": "[trimmed-depth]",
            "thumbs_up": "[trimmed-depth]",
            "vote_sum": "[trimmed-depth]",
            "vote_count": "[trimmed-depth]",
            "reviewer_name": "[trimmed-depth]",
            "reviewer_id": "[trimmed-depth]",
            "reviewer_url": "[trimmed-depth]",
            "reviewer_avatar_url": "[trimmed-depth]",
            "reply_text": "[trimmed-depth]",
            "reply_date": "[trimmed-depth]",
            "review_url": "[trimmed-depth]",
            "scraped_at": "[trimmed-depth]",
            "scraped_at_page": "[trimmed-depth]",
            "is_new": "[trimmed-depth]"
          },
          {
            "store": "[trimmed-depth]",
            "review_id": "[trimmed-depth]",
            "app_id": "[trimmed-depth]",
            "app_name": "[trimmed-depth]",
            "country": "[trimmed-depth]",
            "rating": "[trimmed-depth]",
            "score_text": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "text": "[trimmed-depth]",
            "language": "[trimmed-depth]",
            "review_date": "[trimmed-depth]",
            "app_version": "[trimmed-depth]",
            "sub_ratings": "[trimmed-depth]",
            "thumbs_up": "[trimmed-depth]",
            "vote_sum": "[trimmed-depth]",
            "vote_count": "[trimmed-depth]",
            "reviewer_name": "[trimmed-depth]",
            "reviewer_id": "[trimmed-depth]",
            "reviewer_url": "[trimmed-depth]",
            "reviewer_avatar_url": "[trimmed-depth]",
            "reply_text": "[trimmed-depth]",
            "reply_date": "[trimmed-depth]",
            "review_url": "[trimmed-depth]",
            "scraped_at": "[trimmed-depth]",
            "scraped_at_page": "[trimmed-depth]",
            "is_new": "[trimmed-depth]"
          }
        ],
        "scraped_count": 100,
        "new_count": null,
        "total_available": 18268035,
        "fetchable_ceiling": 500,
        "completeness_pct": 0.001,
        "countries": [
          "us"
        ],
        "status": "PARTIAL",
        "attempts": 1,
        "next_cursor": {
          "latest_date": "[redacted-phone]T08:17:14+00:00",
          "latest_ids": [
            "[trimmed-depth]",
            "[trimmed-depth]",
            "[trimmed-depth]"
          ]
        },
        "notes": null
      }
    ],
    "summary": {
      "units": 1,
      "succeeded": 1,
      "not_found": 0,
      "blocked": 0,
      "success_rate_pct": 100,
      "total_reviews": 100,
      "total_new": 0,
      "avg_completeness_pct": 0.001,
      "by_store": {
        "apple": 1
      },
      "error_breakdown": {},
      "retries_used": 0
    }
  }
}
Actions

What the App Store API does

ActionDescriptionConcrete use caseKey params
reviewsunified Apple + Play reviews for one or more appsSupport teams call reviews to get unified Apple + Play reviews for one or more apps.apps, appleAppId, googlePlayPackage, appName, stores, ...
searchranked app search resultsReputation platforms call search to get ranked app search results.query, stores, country, count
topChartsranked chart/category appsMarket researchers call topCharts to get ranked chart/category apps.stores, country, category, count, chart, ...
listCategoriesstatic genre/category listB2B review analysts call listCategories to get static genre/category list.stores
appDetailsfull app profileSupport teams call appDetails to get full app profile.appId, appleAppId, googlePlayPackage, stores, country, ...
developerAppsevery other app published by the same developerReputation platforms call developerApps to get every other app published by the same developer.appId, appleAppId, googlePlayPackage, stores, country, ...
similarAppsrelated / similar apps for an appMarket researchers call similarApps to get related / similar apps for an app.appId, appleAppId, googlePlayPackage, stores, country, ...
Code samples

Call reviews from your stack

curl -X POST https://api.reefapi.com/app-store/v1/reviews \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"apps":[{"name":"WhatsApp","apple":"310633997"}],"stores":["apple"],"countries":["us"],"maxReviews":100}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.app-store.reviews with {"apps":[{"name":"WhatsApp","apple":"310633997"}],"stores":["apple"],"countries":["us"],"maxReviews":100}.
Use cases

Who uses this API and why

  • App teams call reviews to monitor new ratings and feedback for their app across both stores.
  • Competitor-intelligence tools use topCharts and similarApps to track rivals' rankings.
  • Product teams use appDetails and reviews to analyze feature requests and sentiment by version.
FAQ

Questions developers ask before integrating

What is the App Store API?

App Store API is a ReefAPI endpoint group for app details, rankings, ratings and reviews. It returns live JSON through POST requests under /app-store/v1.

Is the App Store API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. App Store calls use the same shared credit balance as every other ReefAPI engine.

Do I need a App Store login or account?

No login to App Store is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the App Store data?

The page example is captured from a live reviews call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the App Store API use?

App Store actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call App Store from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call app-store actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the App Store API a App Store scraper?

It is the managed alternative to a DIY App Store scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same app details, rankings, ratings and reviews back as clean JSON.

Why does my App Store scraper keep getting blocked?

Most App Store scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.

docs / app-store

App Store

App details, rankings, ratings and reviews.

base /app-store/v17 endpoints
post/app-store/v1/reviews1 credit

unified Apple + Play reviews for one or more apps

ParameterAllowed / rangeDescription
appsoptionalApps to fetch reviews for: an array of objects with any of {name, apple/appleAppId, play/googlePlayPackage}, or plain name strings. Alternative to the single-app id params.
appleAppIdoptionalApple numeric app id (single-app shortcut).
googlePlayPackageoptionalGoogle Play package name (single-app shortcut).
appNameoptionalApp name to search per store when ids aren't supplied.
storesoptionalapple · google_playWhich app stores to query (array). Aliases like ios/app_store and play/android/google are accepted; unknown names are ignored. Omit to query both.
countriesoptionalStorefront country codes (2-letter, lowercase), e.g. ['us','gb']. Use 'all' for the Apple aggregate set. Omit for the default.
maxReviews = 1000optional1–100000Maximum reviews to collect per app/store (clamped to 100000).
Try in playground →
post/app-store/v1/topCharts1 credit

ranked chart/category apps

ParameterAllowed / rangeDescription
chart = topFreeoptionaltopFree · topPaid · topGrossing · newFree · newPaid · newWhich chart to pull. Apple supports top/new free/paid/grossing; Google Play maps to its equivalent top charts.
categoryoptionalGenre/category filter: an Apple genre id (e.g. 6014=Games) or a Play category (e.g. GAME, SOCIAL). See listCategories for valid values.
device = iphoneoptionaliphone · ipadApple-only: chart device variant (iPad has fewer chart feeds).
storesoptionalapple · google_playWhich app stores to query (array). Aliases like ios/app_store and play/android/google are accepted; unknown names are ignored. Omit to query both.
country = usoptionalStorefront country code (2-letter, lowercase), e.g. 'us'.
count = 50optional1–Maximum number of apps to return.
Try in playground →
post/app-store/v1/listCategoriesfree

static genre/category list

ParameterAllowed / rangeDescription
storesoptionalapple · google_playWhich app stores to query (array). Aliases like ios/app_store and play/android/google are accepted; unknown names are ignored. Omit to query both.
Try in playground →
post/app-store/v1/appDetails1 credit

full app profile

ParameterAllowed / rangeDescription
appIdoptionalApp id to look up: Apple numeric id OR Play package name (appleAppId / googlePlayPackage also accepted).
storesoptionalapple · google_playWhich app stores to query (array). Aliases like ios/app_store and play/android/google are accepted; unknown names are ignored. Omit to query both.
country = usoptionalStorefront country code (2-letter, lowercase), e.g. 'us'.
includeSimilarApps = falseoptionalPlay-only: also return similar/related apps for the app.
Try in playground →
post/app-store/v1/developerApps1 credit

every other app published by the same developer

ParameterAllowed / rangeDescription
appIdoptionalApp id to look up: Apple numeric id OR Play package name (appleAppId / googlePlayPackage also accepted).
storesoptionalapple · google_playWhich app stores to query (array). Aliases like ios/app_store and play/android/google are accepted; unknown names are ignored. Omit to query both.
country = usoptionalStorefront country code (2-letter, lowercase), e.g. 'us'.
count = 50optional1–Maximum number of apps to return.
Try in playground →
post/app-store/v1/similarApps1 credit

related / similar apps for an app

ParameterAllowed / rangeDescription
appIdoptionalApp id to look up: Apple numeric id OR Play package name (appleAppId / googlePlayPackage also accepted).
storesoptionalapple · google_playWhich app stores to query (array). Aliases like ios/app_store and play/android/google are accepted; unknown names are ignored. Omit to query both.
country = usoptionalStorefront country code (2-letter, lowercase), e.g. 'us'.
count = 50optional1–Maximum number of apps to return.
Try in playground →