Apple App Store Scraper: App Details, Reviews, Search avatar

Apple App Store Scraper: App Details, Reviews, Search

Pricing

Pay per event

Go to Apify Store
Apple App Store Scraper: App Details, Reviews, Search

Apple App Store Scraper: App Details, Reviews, Search

Apple App Store scraper: app details, customer reviews, keyword search and developer apps for any country. Reviews filtered by stars, date, keyword and version. Developer website in every app row. No login.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Data Gleaner

Data Gleaner

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

An Apple App Store scraper for app details, customer reviews, keyword search and developer portfolios, in one Actor. Pull app details by App Store ID, bundle ID or URL (rating, rating count, price, version, update date, category, screenshots, and the developer website in every row), App Store reviews with star, date, keyword and version filters, ranked search results by keyword and everything a developer publishes. Plain HTTP against Apple's public iTunes Search/Lookup API and review feed: no browser, no login, no Apple ID, no API key. Any of Apple's storefronts, and several countries in one run.

It costs $0.0003 per app and $0.0001 per review ($0.30 per 1,000 apps, $0.10 per 1,000 reviews), with no start fee and no separate platform charge. Filtered-out reviews and apps that do not exist are never billed.

What does Apple App Store Scraper do?

It returns the data a visitor sees on the App Store, through the Apify dataset and API as JSON, CSV or Excel. Typical uses:

  • App review monitoring: pull the newest reviews of your app every day, or only the 1-star ones with reviewScore: 1, with title, text, stars, version and helpful votes. reviewsLastDays: 1 returns only the past day and stops reading as soon as it reaches older reviews, so a daily monitor is a request or two. Send new complaints to Slack, email or a ticket system.
  • Release checks: reviewVersions: ["9.1"] keeps reviews of one version, and reviewKeywords: ["crash", "refund", "login"] keeps only reviews that mention those words in the title or text.
  • ASO and competitor tracking: search a keyword and record which apps rank where (position), with rating, rating count, price, category and last update. Schedule it daily to see rank, rating and release-cadence changes over time, in any country.
  • Market and category research: list the apps for habit tracker, invoice maker or period tracker with rating counts, price, category and release dates before you build. developerIds lists everything a competitor publishes.
  • Country comparison: country: "US, GB, DE, JP" runs the same keywords, apps and reviews in each storefront and stamps every row with its country, so you can compare prices, ratings and rankings by market.
  • Voice of customer: feed thousands of reviews of a competitor into your own analysis or an LLM to find what users ask for and complain about.
  • Lead lists from apps: every app row carries developerWebsite and sellerName, so a keyword search becomes a list of companies with their sites (see below).
  • AI agents and apps: feed live App Store data into an agent or product.

Developer websites and contacts

Every app record has a developerWebsite field: the website Apple lists for the app's seller (for most apps; it is null when the developer left it empty). Pass those websites to Website Contact Details Scraper to get emails, phones and social profiles for the companies behind a search or a category:

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("datagleaner/app-store-scraper").call(run_input={"searchQueries": ["habit tracker"], "maxItems": 50})
sites = sorted({a["developerWebsite"] for a in client.dataset(run.default_dataset_id).iterate_items() if a.get("developerWebsite")})
contacts = client.actor("datagleaner/website-contact-details-scraper").call(run_input={"websites": sites})
for row in client.dataset(contacts.default_dataset_id).iterate_items():
print(row)

You can also give Website Contact Details Scraper this Actor's datasetId and set its datasetUrlField to developerWebsite. Apps without a website then fall back to the App Store page, so the Python route above, which skips them, is the cleaner one. For a developer's other emails and socials across the App Store, Google Play, Steam and Chrome Web Store, use App Developer Email Finder.

Input

FieldMeaning
appIdsDetails mode. Numeric App Store IDs (324684580), bundle IDs (com.spotify.client) or App Store URLs. One app record each, looked up in batches. Apps that do not exist in the chosen country are skipped and not charged.
searchQueriesSearch mode. Keywords as typed in the App Store. Up to maxItems apps per keyword in store rank order, with full details.
developerIdsDeveloper mode. A developer name as shown on the App Store (Spotify AB), a numeric developer ID, or a developer page URL. Returns the apps that developer publishes, each record with developerQuery.
reviewAppIdsReviews mode. Apps whose reviews to fetch, as IDs, bundle IDs or URLs, up to maxReviews each per country. Returns review records only (no app record).
maxItemsApps per search keyword or developer, per country, default 30, up to 200 (the most the App Store API returns for one keyword).
maxReviewsReviews to keep per app and country after filters, default 100, up to 500. Apple's review feed holds the newest 500 reviews of an app in each country; list several countries for more.
reviewSortnewest (default, best for monitoring) or helpful.
reviewScoreOptional, 1 to 5. Only reviews with exactly that many stars.
reviewsSinceOptional date, YYYY-MM-DD. Skips older reviews. With reviewSort: "newest" the Actor stops reading at the first older page.
reviewsLastDaysOptional number of days, for example 7. If you also set reviewsSince, the later cut-off applies.
reviewKeywordsOptional list of words. Keeps reviews whose title or text contains any of them (case-insensitive). You pay only for the matches.
reviewVersionsOptional list of version prefixes. 9.1 matches 9.1.90.
country, languageStore country (US, GB, DE, JP) or several separated by commas (US, GB, DE), and language (en, de, pt-BR). Country changes prices, availability, ratings and which reviews appear.
entityWhat search and developer mode return: software (iPhone and iPad apps, default), iPadSoftware or macSoftware.
requestDelaySecsPacing between requests, default 0.5.
proxyConfigurationOptional, off by default.

With no input at all, the Actor runs a built-in example (1 app, 2 search results for habit tracker, 2 reviews) and says so in the run's status message. If you already call another App Store Actor, these input names are also accepted: startUrls, queries, searchTerms, countryCode, countries, languageCode, maxResults, sortBy, maxReviewsPerApp.

App details and a keyword search in one run:

{
"appIds": ["https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580", "com.apple.dt.Xcode"],
"searchQueries": ["habit tracker"],
"maxItems": 30,
"country": "US",
"language": "en"
}

The same keyword in three countries (one set of records per country):

{ "searchQueries": ["habit tracker"], "maxItems": 25, "country": "US, GB, DE" }

Reviews of two apps, newest first:

{
"reviewAppIds": ["324684580", "com.burbn.instagram"],
"maxReviews": 200,
"reviewSort": "newest"
}

Only the 1-star reviews of an app:

{ "reviewAppIds": ["324684580"], "reviewScore": 1, "maxReviews": 100 }

Daily monitor: new reviews from the last day that mention a problem word.

{ "reviewAppIds": ["324684580"], "reviewsLastDays": 1, "reviewKeywords": ["crash", "bug", "refund"], "reviewSort": "newest" }

Everything a developer publishes:

{ "developerIds": ["Spotify AB"], "maxItems": 50 }

Output

Every record has source (appIds, search, developer or reviews), country, language and scrapedAt. App records:

{
"type": "app",
"appId": 324684580,
"trackId": 324684580,
"bundleId": "com.spotify.client",
"title": "Spotify: Music and Podcasts",
"description": "With the Spotify app, you can explore an extensive library of music and podcasts for free...",
"developer": "Spotify",
"sellerName": "Spotify",
"developerId": 324684583,
"developerUrl": "https://apps.apple.com/us/developer/spotify/id324684583",
"developerWebsite": "https://www.spotify.com/",
"rating": 4.77,
"ratingCount": 42671055,
"currentVersionRating": 4.77,
"currentVersionRatingCount": 42671055,
"price": 0.0,
"currency": "USD",
"formattedPrice": "Free",
"free": true,
"genre": "Music",
"genreId": 6011,
"genres": [
"Music",
"Entertainment"
],
"released": "2011-07-14T11:22:37+00:00",
"updated": "2026-10-19T13:57:56+00:00",
"version": "9.1.92",
"contentRating": "12+",
"recentChanges": "We're always making changes and improvements to Spotify. ...",
"minimumOsVersion": "16.1",
"fileSizeBytes": 323621888,
"languages": [
"AF",
"AM",
"AR"
],
"supportedDevices": [
"iPhone5s-iPhone5s",
"iPadAir-iPadAir"
],
"features": [
"iosUniversal"
],
"isGameCenterEnabled": false,
"kind": "software",
"url": "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
"icon": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/b7/ed/61/b7ed610...",
"screenshots": [
"https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/f3/ce/05/f..."
],
"ipadScreenshots": [
"https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/31/15/15/3..."
],
"source": "appIds",
"searchQuery": null,
"position": null,
"inputUrl": "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
"developerQuery": null,
"country": "US",
"language": "en",
"scrapedAt": "2026-10-21T08:00:00+00:00"
}

Search records carry searchQuery and position (the rank within that keyword), developer-mode records carry developerQuery and position. appId and trackId are the same number. The field names match Google Play Scraper where the data is the same (title, developer, developerWebsite, rating, ratingCount, price, genre, updated, version, url, icon, screenshots), so one pipeline can read both stores.

Review records:

{
"type": "review",
"reviewId": "14685076517",
"appId": 324684580,
"userName": "Ackerly9",
"userUrl": "https://itunes.apple.com/us/reviews/id561127545",
"title": "Freezing",
"text": "The app always freezes and plays the same songs on dj mode",
"score": 1,
"thumbsUp": 0,
"voteCount": 0,
"version": "9.1.90",
"at": "2026-10-19T11:19:04+00:00",
"source": "reviews",
"inputUrl": "324684580",
"reviewSort": "newest",
"country": "US",
"language": "en",
"scrapedAt": "2026-10-21T08:00:00+00:00"
}

The dataset has an Apps view and a Reviews view with the main columns.

Which fields are filled

  • Always, on every app record: appId, bundleId, title, developer, sellerName, developerId, developerUrl, price, currency, free, genre, version, released, updated, contentRating, url, icon, source, scrapedAt.
  • Sometimes empty by nature: developerWebsite is empty when the developer did not list one. rating and currentVersionRating are empty for apps without ratings yet. recentChanges is empty when the developer wrote no release notes.
  • Reviews: reviewId, userName, title, score, version and at are always there. thumbsUp is the net helpful votes and voteCount all votes on the review.

Pricing

Pay per event, two events, and nothing else: $0.0003 per app record ($0.30 per 1,000) and $0.0001 per review record ($0.10 per 1,000). There is no start fee and no extra charge for compute or proxies. An app record is any app pushed to the dataset, whether it came from appIds, a keyword search or a developer page. You pay only for records pushed: apps that do not exist cost nothing, and reviews removed by reviewScore, reviewsSince, reviewsLastDays, reviewKeywords or reviewVersions cost nothing. The run stops at your maximum charge.

Worked examples:

  • 3 keywords at 30 apps each (90 apps) plus the 200 newest reviews of 5 apps (1,000 reviews): 90 x $0.0003 + 1,000 x $0.0001 = $0.127. Run daily for 30 days that is about $3.80.
  • The same 3 keywords in 4 countries (360 apps): $0.108.
  • A daily review monitor: reviewsLastDays: 1 on 10 apps with about 30 new reviews each is 300 reviews, $0.03 a day, about $0.90 a month.
  • A developer's full catalogue of 40 apps: $0.012.
  • A 10-app test run costs $0.003.

How this compares

App Store Actors on the Apify Store range from about $0.0001 per review to a few thousandths of a dollar per app, and many do only one job: app details, or search, or reviews. This Actor's case is one input format, one dataset schema and one bill for app details, keyword search, developer pages and reviews, at a price in the same range as the cheapest of them, with date, keyword, star and version filters on reviews that only bill the reviews you keep.

Use it from the API

Run it synchronously and get the records back as JSON. Replace <YOUR_APIFY_TOKEN> with your token.

curl -X POST "https://api.apify.com/v2/acts/datagleaner~app-store-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"reviewAppIds": ["324684580"], "maxReviews": 50, "reviewSort": "newest"}'

It also works from n8n, Make or Zapier through the Apify integrations, since the output is a flat JSON record.

Use with Python

pip install apify-client, set the APIFY_TOKEN environment variable, and run. This input returns 20 one-star reviews, about $0.002.

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("datagleaner/app-store-scraper").call(run_input={
"reviewAppIds": ["324684580"],
"maxReviews": 20,
"reviewScore": 1,
})
for review in client.dataset(run.default_dataset_id).iterate_items():
print(review["at"], review["score"], review["title"], review["text"])

Use with JavaScript / Node.js

npm install apify-client, set APIFY_TOKEN, and run it as an ES module (.mjs).

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagleaner/app-store-scraper').call({
searchQueries: ['habit tracker'],
maxItems: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const app of items) console.log(app.position, app.title, app.rating, app.developerWebsite);

Use it from n8n, Make, Zapier or an AI agent

Actor ID: datagleaner/app-store-scraper

Minimal input:

{"searchQueries": ["habit tracker"], "maxItems": 10}

Each tool below runs this Actor with your own Apify API token.

  • n8n: add the Apify node (@apify/n8n-nodes-apify). On n8n Cloud you install it from the community node registry. Choose Run an Actor and get dataset, set Actor to datagleaner/app-store-scraper and paste the input above.

  • Make: use the Apify app's Run an Actor module, then Get Dataset Items to read the results. Watch Actor Runs can trigger a scenario when a run finishes.

  • Zapier: use the Apify action Run Actor, then the search Fetch dataset items. The trigger Finished Actor run starts a Zap when a run ends.

  • AI agents (MCP): connect to https://mcp.apify.com?tools=datagleaner/app-store-scraper. In Claude Code:

    claude mcp add --transport http apify "https://mcp.apify.com?tools=datagleaner/app-store-scraper"
    

    Then run /mcp to sign in to Apify in your browser. Then ask in plain language, for example: "Get the 50 newest 1-star App Store reviews of Spotify and summarise the top complaints." An agent without the Actor preloaded can find it with Apify's search-actors tool by searching "app store".

  • LangChain (Python):

# pip install langchain-apify, then set APIFY_TOKEN in your environment
import json
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("datagleaner/app-store-scraper")
result = tool.invoke({"run_input": json.loads('{"reviewAppIds": ["324684580"], "maxReviews": 20}')})

Limits

  • Reviews come from Apple's public review feed. It holds the newest 500 reviews of an app in each country (10 pages of 50), so maxReviews stops at 500 per app and country. For more, list several countries. Apple's feed has no star filter and no sort by rating, so reviewScore is applied after reading: a rare star level can return fewer than you asked for within the 500. The feed has no developer replies, and a review the reviewer edited shows its latest edit date.
  • Search returns up to 200 apps per keyword and country. Use several related keywords for wider coverage.
  • No rating histogram. Apple's API gives the average and the count, not the split by stars.
  • Developer websites are what the developer lists with Apple; most apps have one, some do not.
  • Prices and ratings depend on country. Set country to the market you care about.
  • Rankings and numbers change by the minute. Schedule runs and compare scrapedAt.
  • At very high volume Apple may start refusing requests. The Actor backs off, refreshes its connection and finishes what it has. Enable proxyConfiguration if that happens.
  • Apple changes its API now and then. If a field starts coming back empty, report it and it will be fixed.

FAQ

Is there an official App Store API for this? Apple's App Store Connect API only gives you data about your own apps. This Actor reads Apple's public search, lookup and review feeds instead, so it works for any app, yours or a competitor's.

How do I monitor new reviews? Schedule the Actor daily with reviewSort: "newest" and reviewsLastDays: 1, and use reviewId to skip the ones you have seen. Add reviewScore: 1 to watch only complaints.

How do I track keyword rankings? Run searchQueries daily for your keywords and store position for your app and its rivals. position is the 1-based store rank for that keyword in that country.

Where do I find an app's ID? It is the number after id in the App Store link: https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580 is 324684580. A bundle ID such as com.spotify.client works too.

Can I get the developer's email? Apple does not publish developer emails. The app record gives developerWebsite; run Website Contact Details Scraper on it for emails, phones and socials.

How do I find competitors of my app? Search the keywords your app targets, and put a rival's developer name in developerIds for everything they publish.

Which countries work? Any two-letter storefront Apple serves. Give one or several, for example US, GB, DE.

What happens when an app is not available in a country? It is skipped and not charged; the log says which app.

Do I need a proxy? No, it works without one on Apify in testing. A proxy option is there for very high volume.

Responsible use

This Actor reads publicly visible App Store data without logging in. Use the data in line with Apple's terms. App records are business data. Reviews contain the display names and text that users posted publicly; if you store or combine them with other data about individuals, the data-protection obligations are yours.