If you’re looking to download reviews from the App Store, you either have access to the app you want to download reviews from, or you don’t.
In this post, we’ll go through solutions & strategies to access App Store reviews in both cases, weighing price, time, and scalability each time.
But first, there are a few things to know before we dive into App Store review data export solutions.
How iOS reviews actually work
If you're looking into reviews on the app store, you might, or might not know that there are two different objects at play:
- Reviews
- Ratings
On a platform like Google My Business, there's a single object called review. And it either has, or it does not have content.
On iOS it's a little different.
A review without content becomes a rating. And a review object has content and a rating associated to it.
The problem is that ratings are mostly unavailable. Anyone claiming they give you access to ratings is either full of shit, or making stuff up from publicly available aggregated information.
You can sort of reverse engineer it using the information they provide on publicly available app pages, just like below 👇
Some APIs even sell that data.
Realistically, it’s highly unreliable, and I would recommend looking at reviews only. Reviews should be a representative subset of ratings, and they’re a lot easier to use and accurately measure.
A word on countries & languages
You might also know that an app is listed on a select list of countries on the App Store.
Some apps will be available in every possible country, while others will only be available in Korea, or in the US, or in France, or in any combination of the 116 countries available on the Store.
There are a few gotchas around geos on the App Store, the main one being that reviews are associated to a country, but not to a language.
I haven't found a "global" endpoint, and I suspect there simply isn't one.
This means you need to fetch reviews from each country in order to get all reviews. You can also decide to fetch only a few countries, but you might be missing out on some reviews.
There are 116 countries on the App Store.
Here's a list.
You can download it as a CSV here.
Finding an App ID
In almost every solution listed below, the app’s ID is required to be able to access the right reviews. Including their own App Store Connect API.
#1 Finding your app ID on the App Store Connect dashboard
If you have access to the APp Store Connect dashboard, you’re good.
It’s pretty straightforward, log into the console, select the right app, and find the Apple ID.
#2 Finding your app ID on the public App Store
The ID is also in the public URLs on the public pages generated by the App Store. You can go to the App Store, search and find your app, and extract the ID from the URL
For example, for Instagram, the URL looks like this https://apps.apple.com/us/app/instagram/id389801252, and the ID is the part after “id”, so 389801252.
I personally hate using their search, so I often search on Google instead with a simple site filter.
The search for instagram would be: site:apps.apple.com instagram.
#3 Finding any app’s ID programmatically
You can also leverage Apple’s itunes search programmatically if you expect to need to find a lot of App IDs. This is all public and documented by Apple here.
To search, run the following:
If you’re searching mobile apps, the entity is “software”.
The query is your search term, URL encoded.
And the country code is an ISO 3166-1 (2 letter) code for the country. Note that this is not the standard used by the App Store Connect API for some reason (they use 3 letter codes).
Fun fact: the app IDs are called “trackIDs” on that endpoint (iTunes legacy).
#1 Using Apple’s App Store Connect API
This only works if you have access to the App Store Connect API, and if the app you’re hoping to download reviews from is one you have access to.
If not, you can skip this first method.
Using their own API essentially presents three advantages
- You can post replies back through the same API connection
- You can expect consistent and reliable data schemas over time. If you’re planning to monitor your reviews by polling regularly for example.
- You can access reviews across all regions in a single API call. We’ll get to it, but you can’t do that with other solutions.
The problem is you’re going to have to get technical.
To authenticate with Apple’s App Store Connect API, you’ll need to sign JSON Web Tokens (JWTs). This is pretty thoroughly documented here and if you have experience with JWTs it should be pretty straightforward.
But if you’re a non-technical marketer looking to download a list of your reviews, it might actually be easier to go through a third party solution.
#2 Using Apple’s undocumented API
Undocumented is a bit of a stretch at this point, since this URL is all around the internet. If you’re looking for low-level data and aren’t afraid to set up a few proxies, you can try this yourself easily.
The main downside here is that you’ll need to check every one of the 116 countries on the store for reviews, which can take a while. Here’s the country list with their codes again for reference.
To scrap App Store reviews, you can leverage this endpoint: `https://itunes.apple.com/{countryCode}/rss/customerreviews/page={page}/sortBy={sort}/id={app_id}/json`
It'll return up to 50 reviews each time, in JSON format. Fairly straightforward really.
There are 4 params to customize your query
- countryCode: See the country list above for a complete list.
- page: You'll need to implement pagination logic if you want to get all available reviews. Each page returns 50 reviews
- sortBy: The sort order you want. It can probably take a few values but mostRecent works, so why use anything else?
- app_id: You can get the app ID from the app page on your browser. For example, Shopify's app ID is 324684580
That's it.
You'll get a pretty heavy JSON output with 50 reviews, pagination information under the "link" object, and a few other data points.
All that’s left is dump the output into your favourite JSON parser, and write a wrapper.
Gotchas to watch out for
If you start hitting the endpoint with no throttling whatsoever, it'll start to slow down in its responses, which eventually leads to timeouts or 403s.
You're left figuring out where it went wrong to restart at the right place. No fun.
With a bit of throttling, you'll manage to keep fast responses, and it's ultimately a lot faster. A classic case of put yourself in whoever you're scraping's shoes.
Use an IP too much (including clean residential IPs if you're doing this locally), and you'll get 403s for a few minutes or hours. You'll need some sort of proxy rotation logic or service if you want to handle large volumes of reviews. Server proxies work just fine, it's really just a matter of Apple protecting itself from aggressive scraping.
The easiest way around this is to use scraping APIs like Scrapingbee, but that can end up being quite costly.
Libraries & packages
There are a couple of libraries that can save you some time here.
This python library leverages that exact endpoint and handles pagination for you. This node library adapts the python library to node and also throws in a few extras like the ratings histogram (which is … unreliable at best).
#3 Using Reviewflowz’s review exports
If you’re not able – or not in the mood – to write a script that will loop through 116 countries, rotate proxies, wrap Apple’s JSON into something a little more practical, deduplicate reviews on the fly (the same review might be on several countries), detect language, etc we’ve got you covered.
Our Pay As You Go exports allow you to download reviews from any app, in any country, in seconds.
Search for an App, select the one you want, and export.
You can download a sample of 25 lines to check what the file looks like and whether it has everything you need, and then purchase the export for $0.10 / row.
If you have high volume or specific requirements, feel free to reach out, we’re usually either able to help, or to recommend someone else who might be able to help.