App Store & Google Play API: iOS, Android, ASO avatar

App Store & Google Play API: iOS, Android, ASO

Pricing

from $2.00 / 1,000 unique apps

Go to Apify Store
App Store & Google Play API: iOS, Android, ASO

App Store & Google Play API: iOS, Android, ASO

App Store and Google Play API: iOS and Android app details, keyword search ranks and top charts in any country. Ratings, installs, versions. Pay per app.

Pricing

from $2.00 / 1,000 unique apps

Rating

0.0

(0)

Developer

Christian Barbosa

Christian Barbosa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Share

Get app data from the Apple App Store and Google Play in one normalized format: app details, keyword search results with positions, and top charts (free, paid, grossing) for any country. You pay only per app found. IDs that do not exist, empty searches and failed requests are free.

User reviews are not included by design, so the output contains no personal data.

Why this app store scraper

  • Two stores, one schema. The same fields for Apple and Google Play: rating, ratings count, price, currency, version, release and update dates (ISO 8601, UTC), developer, category, screenshots, icon and more. Paste App Store URLs, Google Play URLs, Apple IDs or package names in the same list: the store is detected automatically.
  • Official sources first. Apple data comes from the official iTunes Search and Lookup API and Apple's RSS charts. Google Play data comes from the JSON embedded in each app page, not from fragile HTML selectors.
  • Keyword and chart positions. Every search and chart row keeps its position (searchPosition, chartPosition), so you can track app store optimization (ASO) rankings over time.
  • Fair pricing. One flat price per unique app per country. You are never charged for apps that are not found, empty results or errors.
  • Clear status. Every input ends as OK, NO_RESULTS, NOT_FOUND, INVALID_INPUT, BLOCKED or ERROR. The run message shows the counts and the RUN_SUMMARY record lists each input with the reason. If more than 20% of inputs fail, the run is marked as failed so you notice.
  • Reliable by design. No browser. Failed requests are retried with exponential backoff and a fresh session, within a retry budget. If a store keeps blocking, the Actor switches automatically from datacenter to residential proxies.
  • Safe on long runs. Progress is saved, so a platform restart never duplicates rows or charges twice.

What data you get

ModeDescription
detailsFull details for each app ID or store URL, in each selected country.
searchApps returned for each search term, in store order, with searchPosition.
topChartsTop free, top paid or top grossing apps, overall or by category, with chartPosition.

The output tab has three views: overview, search and chart positions, and all fields. Download as JSON, CSV or Excel, or connect through the API.

How to use it

  1. Choose a mode: app details, search by keyword or top charts. The mode is optional: when it is empty, apps in the list mean details, only search terms mean search, and neither means top charts.
  2. For details, paste app IDs or URLs: https://apps.apple.com/us/app/whatsapp-messenger/id310633997, 310633997, com.whatsapp or https://play.google.com/store/apps/details?id=com.whatsapp. Use apple:com.burbn.instagram for an Apple bundle ID.
  3. For search, enter one or more search terms. For top charts, choose the chart type and category.
  4. Choose the stores (search and charts) and one or more countries (us, gb, co, de, br...).
  5. Optional: set the language, max results per search or chart and max items per run.
  6. Run the Actor.

Example output

{
"store": "googlePlay",
"appId": "com.raha.app.mymoney.free",
"title": "MyMoney—Track Expense & Budget",
"developer": "Ananta Raha",
"category": "Finance",
"price": 0,
"currency": "USD",
"free": true,
"rating": 4.784,
"ratingsCount": 68109,
"installs": 1000000,
"installsText": "1,000,000+",
"version": "6.6-free",
"updatedAt": "2026-07-31T19:15:16.000Z",
"releasedAt": "2019-11-17T07:59:34.000Z",
"contentRating": "Everyone",
"url": "https://play.google.com/store/apps/details?id=com.raha.app.mymoney.free",
"country": "us",
"searchTerm": "budget tracker",
"searchPosition": 1,
"detailsComplete": true,
"input": "budget tracker",
"sourceUrl": "https://play.google.com/store/apps/details?id=com.raha.app.mymoney.free&hl=en&gl=us",
"scrapedAt": "2026-11-01T19:49:15.617Z"
}

Pricing

You pay a flat price of USD 0.002 per unique app (store + country + app ID) saved in the run. The same app found by several search terms in the same country is charged once. Apps not found, empty searches and failed requests are not charged. Your maximum cost per run is respected: the Actor stops as soon as it is reached.

RunUnique appsApproximate cost
Daily check of 20 competitor apps in 1 country20USD 0.04
Top 100 free apps in both stores, 1 country200USD 0.40
10 keywords, top 30 results, both stores, 3 countriesup to 1,800up to USD 3.60

Platform compute is billed separately by Apify and is small: in local tests, 1,500 Google Play and Apple apps with full details took about 70 seconds. The default memory is 256 MB.

Output fields

FieldMeaningWhen it is null
storeappStore or googlePlay.Never
appIdApple numeric ID or Google Play package name.Never
bundleIdApple bundle ID.Always on Google Play
title, summaryApp name and short description.summary: on Apple, which has no short description
developer, developerIdDeveloper name and store ID.When the store does not show it
developerWebsiteWebsite the developer publishes on the store page.When not published
developerEmailSupport email published on the Google Play page (a public business contact). Present only when includeDeveloperEmail is on.On Apple, or when not published
category, categoryIdPrimary category name (in the store language) and code.Rarely
price, currency, freePrice in the country currency (for example 3500 COP or 6.49 EUR), and whether the app is free.When the store does not report a price
rating, ratingsCountAverage rating (0 to 5) and number of ratings in that country.When the app has no ratings yet
reviewsCountNumber of written reviews (Google Play counts them separately from star ratings).Always on Apple
ratingsHistogramNumber of ratings per star, for example {"1": 3717957, ..., "5": 27375607}.Always on Apple, which does not publish it
ratingCurrentVersion, ratingsCountCurrentVersionAverage rating and number of ratings of the current version only.Always on Google Play
installs, installsTextGoogle Play minimum install count (number) and the label shown in the store.Always on Apple, which does not publish installs
version, minOsVersionCurrent version and minimum iOS or Android version.On Google Play when the version "varies with device"
updatedAt, releasedAtLast update and first release, ISO 8601 in UTC.When the store does not report it
sizeDownload size in bytes.Always on Google Play, which no longer shows it
contentRatingAge rating as shown in the store (for example 12+, Everyone, USK ab 0 Jahren).Rarely
descriptionFull description as plain text.When the store does not report it
releaseNotes"What's new" text of the current version, as plain text.When the developer did not publish it
genresAll categories of the app, in the store language.Rarely
languagesLanguages the app supports (ISO 639-1 codes).Always on Google Play
containsAds, offersInAppPurchases, inAppPurchaseRangeWhether the app shows ads or sells in-app purchases, and the price range shown by the store.Always on Apple, which does not publish them
privacyPolicyUrlLink to the privacy policy published on the store page.On Apple, or when not published
developerUrlDeveloper page on the store, with all the developer's apps.Rarely
screenshots, ipadScreenshots, headerImage, iconImage URLs (ipadScreenshots on Apple, headerImage on Google Play).Empty list or null when there are none
urlPublic store page of the app.Never
country, language, modeThe filters used.Never
searchTerm, searchPositionSearch term and position (1 = first).Outside search mode
chartType, chartCategory, chartPositionChart and position (1 = first).Outside top charts mode
detailsCompletefalse when only the basic list fields were available (see Known limits).Never
inputThe app ID, URL, search term or chart that produced the row.Never
sourceUrlThe source request, to check the data yourself.Never
scrapedAtWhen the data was collected (UTC).Never

Statuses and errors

StatusMeaningWhat to do
OKData returned and charged.Nothing
NO_RESULTSThe store confirmed an empty search or chart. Not charged.Try another term, category or country.
NOT_FOUNDThe app ID does not exist or the app is not available in that country. Not charged.Check the ID or try another country.
INVALID_INPUTThe entry is not a recognized app ID or store URL. Not charged.Use an Apple numeric ID, a Google Play package name or a store URL.
BLOCKEDThe store kept rate-limiting after all retries and proxy escalation. Not charged.Run again later or select residential proxies.
ERRORThe store returned an unexpected response, for example after a site change. Not charged.Run again; if it persists, open an issue.
SKIPPEDNot processed because the maximum cost or maximum items was reached. Not charged.Raise the limit.

Known limits

  • Store result caps: Apple search returns up to 200 apps, Apple charts up to 100, Google Play search about 30 and Google Play charts up to 200. When fewer apps are returned than requested, the reason is written in RUN_SUMMARY.
  • Apple charts are iPhone charts. The current Apple RSS feed has no grossing chart, so free, paid and grossing charts use Apple's long-standing RSS feed, with the current feed as a backup for free and paid.
  • Google Play paid charts in some categories and countries are short or empty; the Actor reports exactly what the store returns.
  • Google Play size is always empty because Google no longer publishes it. Apple does not publish installs.
  • Basic rows: with Full details for Google Play results turned off, or if an app page fails after all retries, Google Play search and chart rows contain only the list fields (title, developer, price, rating, icon) and have detailsComplete: false.
  • Language: Apple applies the language only where the country store offers it; otherwise the store default language is used.
  • No reviews: user reviews are excluded on purpose because they contain personal data.

Integrations: API, schedules, webhooks, Google Sheets and AI agents

API. Run the Actor and receive the rows in one call:

$curl -X POST "https://api.apify.com/v2/acts/ocius-data~app-store-data-reliable/run-sync-get-dataset-items?token=YOUR_API_TOKEN&format=json" -H "Content-Type: application/json" -d '{"mode": "details", "apps": ["com.spotify.music", "324684580"], "countries": ["us"]}'

Python, with the official apify-client package:

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ocius-data/app-store-data-reliable").call(run_input={"mode": "topCharts", "countries": ["us", "gb"], "maxResults": 100})
for app in client.dataset(run["defaultDatasetId"]).iterate_items():
print(app["store"], app["chartPosition"], app["title"], app["rating"])

Node.js, with the official apify-client package:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('ocius-data/app-store-data-reliable').call({ mode: 'search', searchTerms: ['budget app'], countries: ['us'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Schedules. Save your input as a task and open Schedules in Apify Console to track charts, ratings and versions daily. Keep the same countries and terms in every run so positions are comparable.

Webhooks, Google Sheets, Zapier, Make and n8n. In the task, open Integrations and add a webhook for ACTOR.RUN.SUCCEEDED, the Google Sheets integration, or the official Apify app in Zapier, Make or n8n (trigger "Actor run finished", action "Get dataset items").

MCP and AI agents. The Actor is available through the Apify MCP server (https://mcp.apify.com). Add ocius-data/app-store-data-reliable to the server's Actor list and an AI agent such as Claude can call it with plain inputs such as {"mode": "details", "apps": ["com.whatsapp"]}.

FAQ

Is it legal? The Actor collects publicly available store listing data. Apple data comes from Apple's official public API and feeds. No user reviews or other personal data are collected.

Can I mix both stores in one list? Yes. In details mode each ID or URL is routed to its store automatically.

How do I track keyword rankings? Use search mode with your keywords and schedule the Actor daily. Compare searchPosition by appId, searchTerm and country over time.

Why are prices and ratings different by country? Each store reports price, currency, ratings and availability per country. Add every country you need to countries.

Built to the same standard: a status for every input in RUN_SUMMARY, actionable error messages and list-based inputs, so they chain well in one workflow:

Changelog

  • November 2026 The mode field is optional and follows the input when it is empty, so AI agents and API calls that send only search terms or only apps work without it.
  • November 2026 New fields: written reviews count, ratings per star, rating of the current version, release notes, all categories, supported languages, ads and in-app purchases, privacy policy, developer page, iPad screenshots and header image. New "Ratings and monetization" view.
  • 0.1 First version: details, search and top charts for Apple App Store and Google Play, normalized output, per-input statuses, run summary, field completeness and pay per unique app.

Use cases

  • App store optimization (ASO): keyword ranking and chart tracking
  • Competitor monitoring: versions, update frequency, ratings and prices
  • Market research by category and country
  • Lead lists of app publishers (company names and websites)
  • Datasets for AI agents and analytics

Tips

  • For daily rank tracking, keep the same countries, language and terms in every run, so positions are comparable.
  • Turn off Full details for Google Play results for fast, low-cost ranking checks; turn it on when you need installs, versions and dates.
  • Use Max items per run and the maximum cost per run to control spending on large keyword lists.
  • RUN_SUMMARY also includes field completeness per store (fieldCompletenessPercent), which helps you spot fields a store stopped publishing.

Support

Open an issue on the Actor page. Issues are reviewed every day and fixes are released quickly.