Google Play Scraper & App Store Scraper: App Details, Search avatar

Google Play Scraper & App Store Scraper: App Details, Search

Pricing

from $1.50 / 1,000 app details returneds

Go to Apify Store
Google Play Scraper & App Store Scraper: App Details, Search

Google Play Scraper & App Store Scraper: App Details, Search

Google Play scraper and App Store scraper in one run: app details and keyword search from both stores in one schema. Ratings, star histograms, Play installs, prices, versions, developers. Package names, iOS bundle IDs, Apple IDs or store URLs in; bad IDs give free error rows. Unofficial.

Pricing

from $1.50 / 1,000 app details returneds

Rating

0.0

(0)

Developer

hiver

hiver

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Share

Google Play Scraper & App Store Scraper: App Details and Keyword Search

A Google Play scraper and App Store scraper in one Actor: get Google Play and Apple App Store app details in one table. Supply Play package names, iOS bundle IDs (com.spotify.client), numeric Apple IDs, public store URLs, or search terms. The same columns cover both stores: developer, rating, rating count, star histogram, price, currency, version and dates. Google Play install bands are included when published; Apple does not publish installs.

Real output rows from the 2026-10-08 bench runs: Spotify and the top "meditation" result on Google Play and the App Store, in one set of columns

Watch the 82-second walkthrough (MP4)

One row per distinct app. Invalid IDs and unavailable apps produce error rows instead of stopping the run. Keyword results are enriched with full app details, not just title and a link. Optional Apple histogram failures keep the API metadata and add a warning.

Unofficial; not affiliated with Google or Apple.

App details by iOS bundle ID

Know your iOS apps by bundle ID (com.spotify.client) rather than by their numeric App Store ID? Put the bundle IDs in apps, next to Play package names. When Google Play has no app with that ID, the Actor looks it up on the App Store in the run's country (the lookup is free) and returns the full App Store details. Every App Store row carries bundleId, so you can join it to App Store Connect exports or your own app list. An ID found on neither store returns one free error row that says so.

Board test run n5eeLeUsVEzrkT8BY, 2026-10-12, build 0.1.8, input ["com.spotify.client", "ios:com.zhiliaoapp.musically", "com.spotify.music", "com.hiver.doesnotexist"]: 4 rows in 7.9 s, 3 apps charged.

InputstoreappIdbundleIdappName
com.spotify.clientapp_store324684580com.spotify.clientSpotify: Music and Podcasts
ios:com.zhiliaoapp.musicallyapp_store835599320com.zhiliaoapp.musicallyTikTok - Videos, Shop & LIVE
com.spotify.musicgoogle_playcom.spotify.musicnullSpotify: Music and Podcasts
com.hiver.doesnotexist(error row, free)not found on Google Play or the App Store (us)

Some apps use the same ID on both stores (TikTok com.zhiliaoapp.musically). Without a prefix you get the Google Play app; write ios: in front, as the test run did, or set dottedIdStore to app_store when every dotted ID in the list is an iOS bundle ID.

Measured against the most-used app-details Actors

Our board's Lab bench gave this Actor, the most-used Google Play and App Store app-details Actors on the Apify Store, and a low-cost Google Play Actor the same four jobs: details for 4 apps on Google Play (Spotify, Minecraft, Wikipedia, Duolingo), the same 4 apps on the App Store, and a search for "meditation" (up to 10 apps) in each store. Answers were checked against 26 facts read from the stores' own pages and Apple's lookup API (name, developer, rating, price, genre, installs, release year, version, histogram present). Bench run 2026-10-08 14:30 UTC, build 0.1.4.

This ActorMost-used Google Play Actor (159 monthly users)Most-used App Store Actor (109)Low-cost Google Play Actor (93)
Google Play details: facts matched10 of 1010 of 10Play not supported10 of 10
Google Play search: fields filled97.7%98.5%Play not supported45.4%
App Store details: facts matched10 of 10App Store not supported9 of 10App Store not supported
App Store details: fields filled92.3%App Store not supported84.6%App Store not supported
Both stores in one run, one set of columnsyesnonono
Price per 1,000 apps in these runs$1.81$2.50 to $3.25$3.56 to $4.25$0.30
Run time per job it supports5.8 to 15.5 s2.6 to 5.3 s1.2 to 3.3 s2.3 to 4.7 s

On Google Play this Actor matched every fact the most-used Play Actor matched; that Actor filled slightly more search fields (98.5% vs 97.7%). On the App Store this Actor matched one more fact and filled more fields than the most-used App Store Actor. It costs less than either, and one run covers both stores. The low-cost Play Actor is cheaper but filled less than half the fields on search, and the others are faster: this Actor spaces its requests and fetches full details for every search result. Monthly users are from the Apify Store on 2026-10-08. Four jobs are a small sample; later builds have not been benched again yet.

Input

{
"stores": ["google_play", "app_store"],
"apps": ["com.spotify.music", "324684580"],
"searchTerms": ["meditation"],
"maxResultsPerTerm": 10,
"country": "us",
"language": "en"
}
  • stores: google_play, app_store, or both (default). IDs are auto-detected. If an ID belongs to an excluded store, it produces an uncharged error row.
  • apps: Play package IDs, iOS bundle IDs such as com.spotify.client, numeric Apple IDs or public store URLs. Use ios: / appstore: for Apple and android: / play: for Google. At most 1,000 per run; malformed IDs are not repaired.
  • dottedIdStore: auto (default), app_store or google_play. Auto tries Play first, then an Apple bundle-ID lookup in the run country, only falling back after an explicit not-found response. If both stores have the ID, Play wins and the status message explains how to select Apple. Lookups are free; only successful app rows are charged. Apple rows include the published bundleId; Play rows leave it null.
  • searchTerms: at most 50 keywords, each 1–200 characters. Both stores are searched independently. Each result gets searchTerm and its one-based source rank.
  • maxResultsPerTerm: 1–200, default 20, per term and store. This is an upper bound: iTunes may return fewer and Google Play uses only the first public search page. No infinite scrolling or private pagination is used.
  • country: two-letter storefront, default us. This input governs all requests, including app URLs that contain another country.
  • language: requested interface language, default en. A store may fall back to its storefront's language; Apple iTunes does not support every language code. Text is never machine-translated or invented.

Direct IDs are processed first. Duplicate app IDs within the same store, including matches across multiple search terms, are returned only once. The first occurrence wins; direct detail rows have null search fields. Search ranks retain the source's original order and may have gaps after deduplication.

Output and source limits

FieldMeaning
store, appId, appName, developerSource store (google_play or app_store), exact ID, published title and developer
rating, ratingsCountAverage stars and number of ratings, not written-review count
histogram, histogramUnitPublished exact rating counts keyed "1"…"5"; unit ratings. Missing distribution is null, never an invented zero histogram. Apple counts come from the public app page; its displayed percentages are not converted to counts.
installsGoogle Play's displayed band, such as 1,000,000,000+. Always null for Apple.
price, currencyUp-front app download price and currency. A free app has numeric zero, not null. In-app subscriptions/purchases are not this price.
versionPublished version, including the English Play About dialog's “Varies with device” label for an explicitly device-specific version record. Missing or malformed records remain null; the label is not a default for every missing version. Other languages retain null for this label rather than an invented translation.
releasedAtApple's ISO release timestamp or Google's exact localized release-date label. Do not treat a label without a timezone as a UTC timestamp.
updatedAt, genre, urlISO update timestamp, primary store genre and country-specific public app URL
searchTerm, rankFirst matching search term and one-based source rank; null on direct rows
country, languageRequested country/language, not a guarantee the store translated every field
warnings, errorOptional enrichment warnings; null error on app data. Failed targets have an error and null data fields.

Apple API average ratings can be more precise than the one-decimal average on its public page. Both values change over time, and page/API caches can differ. The Actor preserves the API's rating rather than substituting the rounded page score. Histogram bins remain the values published on that page; they are not rescaled to force a sum to match a separately cached API rating count. Apple sometimes serializes a count with floating-point residue (for example a value just below an integer); that source value is retained rather than rounding or inventing counts.

Need review text, review dates and developer replies? Use App Reviews Scraper, which covers both stores in a review-level schema. This Actor returns app-level details and search ranks, not reviews or user profiles.

Price

Pay per returned app: Free $1.90, Starter/Bronze $1.80, Silver $1.70, Gold $1.50 per 1,000 app rows. Search enrichment is included; no extra per-search fee. Invalid IDs, failed app fetches and omitted duplicates are uncharged. Metadata retained after optional histogram failure is still an app row and is charged.

Apify also applies its native $0.00005 Actor-start event. For example, 1,000 Free-plan app rows cost $1.90 + $0.00005 = $1.90005. A one-app run costs $0.00195. Platform usage is included in pay-per-event pricing. The board applies and verifies the cloud price; the source pricing file alone is not proof that prices are live.

Reliability and respectful access

Requests are spaced per source host (Google Play at least 1 second, iTunes and the Apple public app page each at least 1.5 seconds). A refusal on Apple's optional histogram page stops that host without disabling the independent iTunes metadata API. Transient network errors, HTTP 429 and server errors receive at most three attempts with exponential backoff. Retry-After is honored; a request for a long wait stops the store for this run. HTTP 401/403, consent redirects and refusing Google pages are not bypassed. No proxies, login credentials, CAPTCHA solving or block evasion are used.

A bad app never intentionally fails the whole run. This does not make every run useful: check the error rows, warnings, and SUMMARY key-value record. All-error runs finish with explicit errors and no billable apps; zero results for a keyword may be legitimate. Store pages can change; missing fields remain null rather than guessed. Unexpected infrastructure errors can still fail a run.

FAQ

Can I compare both versions of the same app? Yes. Supply the Android package ID and the Apple numeric ID or bundle ID; each is a separate row. Matching titles are not merged across stores.

Are installs, versions and histograms always available? No. Apple publishes no installs, some Play web pages publish no version, and optional histogram enrichment can be unavailable. Null means unavailable, not zero.

Are these personalized search results or all apps matching a keyword? No. These are the stores' public country-specific results, with the first Play page and the iTunes software-search API's result window. Ranking changes and can differ from a logged-in device.

Can I schedule this daily? Yes, use an Apify schedule. Each run returns current app details; no historical database or only-new mode is implied. Store responses may be cached by the stores themselves.

My Python google-play-scraper search() returns appId None for the app I searched. Does this Actor have the same problem? No. In our check on 2026-10-14, PyPI google-play-scraper 1.2.7 returned appId: None for the top result on 10 of 10 app names (Spotify, WhatsApp, Duolingo and 7 more), the large best-match card Google Play shows above the list (its GitHub issue #238; an unmerged fix is PR #239). This Actor reads the result links Google Play shows: a local run of its code the same day returned com.spotify.music, com.whatsapp, com.duolingo and com.calm.android as the top hits for those names, each with full details. Use searchTerms with stores: ["google_play"].

Something looks wrong? Open an issue on this Actor with the run link, input, expected field and public source. Do not include credentials. Respect the stores' terms and applicable law when using the data.