RoleDawn

How to Export App Store Reviews to CSV or JSON

By the RoleDawn team · Published · Updated

Call https://roledawn.com/api/v1/app-reviews?store=apple&id=<App Store ID>&country=us. You get the reviews shown on that app's public App Store page as JSON (id, star rating, title, text and date), plus the app's average rating and ratings count; a 10-line Python script turns them into a CSV file. No App Store Connect account and no API key, and it works for any public app, not only your own. The App Store page shows about 10 reviews per country, so call several countries for more.

  • Any public app. Yours or a competitor's: no App Store Connect access needed.
  • JSON in one request. id, rating, title, text and date for each review, plus the app's rating and ratings count.
  • CSV in 10 lines. A plain Python script with no extra packages; it opens in Excel, Google Sheets or Numbers.
  • Star filter and sorting. rating=1,2 for the complaints only; sort by newest, oldest or rating.

Step 1: find the App Store ID

It is the number after id in the app's address: apps.apple.com/us/app/whatsapp-messenger/id310633997. You can also pass the whole store URL (URL-encoded) as id.

Step 2: get the reviews as JSON

curl "https://roledawn.com/api/v1/app-reviews?store=apple&id=310633997&country=us&limit=50"

Real response, captured 2026-10-07 (first 2 of 10 reviews shown, text shortened to 200 characters for this page):

{
  "store": "apple",
  "id": "310633997",
  "country": "us",
  "lang": null,
  "app_title": "WhatsApp Messenger",
  "app_url": "https://apps.apple.com/us/app/whatsapp-messenger/id310633997",
  "rating": 4.68,
  "ratings_count": 18723283,
  "fetched_at": "2026-10-07T12:41:38.564Z",
  "total": 10,
  "count": 2,
  "limit": 50,
  "offset": 0,
  "next_offset": null,
  "reviews": [
    {
      "id": "14478556408",
      "rating": 3,
      "title": "Can’t log in, No Human support from the app just AI response",
      "text": "I have been unable to use WhatsApp for several days due to an account registration issue that started unexpectedly. My account was initially restricted for “unusual activity,” so I submitted a review…",
      "date": "2026-08-27T15:17:52.000Z",
      "app_version": null,
      "thumbs_up": null,
      "developer_reply": null,
      "developer_reply_date": null
    },
    {
      "id": "13657831289",
      "rating": 5,
      "title": "WhatsApp not bad",
      "text": "WhatsApp’s not bad at all—it’s actually great for what it does. End-to-end encryption keeps your actual messages and calls private (no one, not even Meta, can read them), and it’s super reliable for …",
      "date": "2026-01-21T04:48:38.000Z",
      "app_version": null,
      "thumbs_up": null,
      "developer_reply": null,
      "developer_reply_date": null
    }
  ]
}

That is the JSON export: save it with curl -o reviews.json "…". total is the number of reviews on the store page for that country (10 here).

Step 3: turn it into a CSV file

This script uses only Python's standard library. Set a User-Agent header as shown; requests without one may be refused.

import csv, json, urllib.request

url = "https://roledawn.com/api/v1/app-reviews?store=apple&id=310633997&country=us&limit=50"
req = urllib.request.Request(url, headers={"User-Agent": "review-export/1.0"})
data = json.load(urllib.request.urlopen(req))

with open("reviews.csv", "w", newline="", encoding="utf-8") as f:
    w = csv.writer(f)
    w.writerow(["id", "rating", "date", "title", "text"])
    for r in data["reviews"]:
        w.writerow([r["id"], r["rating"], r["date"], r["title"], r["text"]])

The first lines of the resulting reviews.csv for the request above, captured 2026-10-07 (review text shortened to 60 characters for this page; the file has the full text):

id,rating,date,title,text
14478556408,3,2026-08-27T15:17:52.000Z,"Can’t log in, No Human support from the app just AI response",I have been unable to use WhatsApp for several days due to …
13657831289,5,2026-01-21T04:48:38.000Z,WhatsApp not bad,WhatsApp’s not bad at all—it’s actually great for what it d…
13365264225,5,2025-11-06T21:34:56.000Z,My hosnest rewive,I just wanted to take a moment to express my appreciation f…
12681258568,1,2025-05-21T15:07:21.000Z,End to end encryption password couldn’t be reset!!!,The WhatsApp support team absolutely  not helpfull!!! I exp…

Opening it in Excel? Use encoding="utf-8-sig" instead so accented letters and emoji display correctly.

How do I get more than 10 reviews?

The App Store shows a different set of reviews in each country. Loop over the countries you care about and add a country column (on 2026-10-07, the same request returned 10 reviews in the GB store and 10 reviews in the AU store):

import csv, json, urllib.request

APP_ID = "310633997"
COUNTRIES = ["us", "gb", "au"]

with open("reviews.csv", "w", newline="", encoding="utf-8") as f:
    w = csv.writer(f)
    w.writerow(["country", "id", "rating", "date", "title", "text"])
    for cc in COUNTRIES:
        url = f"https://roledawn.com/api/v1/app-reviews?store=apple&id={APP_ID}&country={cc}&limit=50"
        req = urllib.request.Request(url, headers={"User-Agent": "review-export/1.0"})
        for r in json.load(urllib.request.urlopen(req))["reviews"]:
            w.writerow([cc, r["id"], r["rating"], r["date"], r["title"], r["text"]])

Each country is one request, so three countries use 3 of the 50 free daily calls. If it is your own app, App Store Connect lists every review it has received.

How do I export only 1- and 2-star reviews?

Add rating=1,2. Sorting: sort=newest (default), oldest, rating_asc, rating_desc or relevant (store order). Up to 50 reviews per page.

curl "https://roledawn.com/api/v1/app-reviews?store=apple&amp;id=310633997&amp;country=gb&amp;rating=1,2"

Limits

  • Each app is read live and cached at the edge for up to 60 minutes per country and language; fetched_at says when it was read.
  • Direct calls to roledawn.com are a free demo: 50 requests per IP per day across all RoleDawn APIs (reset at 00:00 UTC) and 60 per minute. The X-RateLimit-Daily-Remaining header shows what is left.
  • Need more calls or an API key? The App Store & Google Play Reviews API on RapidAPI has the same endpoints and fields, with a free plan, paid monthly plans and a usage dashboard.
  • Public data only: the API reads each host's robots.txt first and follows it, and identifies itself as RoleDawnBot. No logins.

All parameters and fields, plus app metadata (star histogram, version, release notes): App Reviews API reference.

FAQ

Do I need an App Store Connect account?

No. The API reads public App Store data, so it works for any app, including competitors' apps.

How many reviews can I export?

The reviews shown on the app's public App Store page: about 10 per country. Call several countries for more. For your own app, App Store Connect has the full history.

Can I export Google Play reviews the same way?

Yes. Use store=google and the package name, e.g. id=com.duolingo; the fields are the same, so the same script works. Google Play shows about 20 reviews per country and language.

Why do I get HTTP 403 from my script?

Send a User-Agent header, as in the example. Requests without one may be refused.

Is it free?

Direct calls are a free demo: 50 requests per IP per day, no key. For regular exports, the App Store & Google Play Reviews API on RapidAPI has a free plan and paid monthly plans.

Related: App Reviews API reference · Google Play reviews API · App Store & Google Play Reviews API on RapidAPI · Jobs API. RoleDawn is not affiliated with Apple; App Store is a trademark of Apple Inc.