App Store & Google Play Scraper — App Metadata, Any ID or URL
Pricing
from $2.00 / 1,000 app records
App Store & Google Play Scraper — App Metadata, Any ID or URL
One identical record for any iOS or Android app: paste store URLs, ids, bundle ids or a developer page, pick one or many countries, and get 45+ public fields — price, IAP, rating, installs, version, release notes, size, content rating, screenshots. Watch mode returns only changes. $0.003 per app.
Pricing
from $2.00 / 1,000 app records
Rating
0.0
(0)
Developer
NexGen Watch
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
App Store & Google Play Scraper — App Metadata by ID, Bundle, Developer or URL (One Schema)
Get one clean, identical record for any iOS or Android app: paste App Store or Google Play URLs, numeric Apple ids, package names, bundle ids or a developer page (every app of a publisher), pick one or several countries, and get 45+ public metadata fields per app per storefront — title, developer and seller, description and summary, categories, content rating, price and in-app-purchase range, rating and rating count (with the 1–5★ histogram on Play), installs, version, release and update dates, release notes, file size, minimum OS, languages, supported devices, ads flags, privacy-policy URL, icon, screenshots and preview video. Optional watch mode returns only what changed since the last run (price, version, title, screenshots, release notes, content rating).
- Four ways to name an app:
app_ids(ids, package names or URLs),bundle_ids,developer_ids(Apple developer id / page or Play developer page → all its apps),search_terms. - Multi-country in one run:
countries: ["us","gb","de","jp"]→ one row per app per storefront; prices, availability, ratings and release notes differ by country. - One schema for both stores: the same 50 columns whether the app is on Apple or Google Play (a field a store does not publish is null) — no field mapping between two scrapers.
- Public data only from Apple's public lookup API and the public Play store page: no login, no API key, no reviewer or user data (no developer e-mail or address).
Billing: $0.02 per run start, then $0.003 per app record delivered; watch mode adds one $0.10 watch check per run. A store that refuses the request or an app that does not exist in a storefront bills nothing.
Who uses this
- ASO and growth teams benchmarking listings against competitors across both stores and many countries at once.
- Analysts and data engineers who want one cross-store app record for dashboards, instead of two parsers with mismatched fields.
- Publishers and investors tracking a developer's whole portfolio (installs, ratings, prices, update cadence) from one developer id.
- Watchers who need to know the day a competitor changes price, version, screenshots or release notes.
📊 Sample Output
Real rows from run tt22AvKhZwDs0konB on build 0.1.36 (2026-10-18), the Quick start input below (long values shortened):
| store | app_id | country | title | developer | category | price | rating | rating_count | installs | version | content_rating |
|---|---|---|---|---|---|---|---|---|---|---|---|
| apple | 284882215 | us | Meta Platforms, In… | Social Networkin… | Free | 4.5263 | 28797231 | 583.0.0 | 12+ | ||
| apple | 324684580 | us | Spotify: Music and Podcast… | Spotify | Music | Free | 4.77125 | 42628008 | 9.1.90 | 12+ | |
| google_play | com.spotify.music | us | Spotify: Music and Podcast… | Spotify AB | Music & Audio | 0 | 4.348195 | 36503067 | 1,000,000,000+ | Varies with … | Teen |
The run finished with the status message: SUCCEEDED: emitted 3 item(s)
✅ What you get
One app-record row per app per store per country, 50 columns, the same for both stores:
- Identity:
store,app_id,bundle_id,title,summary(Play),description,source_url,icon_url,header_image_url,video_url,screenshots,ipad_screenshots,screenshots_hash. - Publisher:
developer,seller_name,developer_id,developer_url,developer_website,privacy_policy_url. - Listing:
category,genres,genre_ids,content_rating,advisories,languages,supported_devices,features,game_center,minimum_os/android_version,file_size_bytes. - Commercial:
price,price_numeric,currency,is_free,offers_in_app_purchases,in_app_purchase_price,contains_ads,ad_supported. - Traction:
rating,rating_count,rating_histogram(Play, 1–5★),review_count(Play),rating_current_version/rating_count_current_version(Apple),installs,min_installs,real_installs(Play). - Versions:
version,updated_at,released_at,release_notes. - Run facts:
country,collected_at; in watch modeprevious_statuson changed rows.
Two dataset views: App metadata and Publisher & listing.
⚙️ Sample inputs
1. Quick start — ids, a package name and a store URL (the Store example)
{"app_ids": ["284882215", "com.spotify.music", "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"],"stores": ["apple", "google_play"],"country": "us"}
About $0.03 on the Free tier ($0.02 start + 3 × $0.003).
2. One app in six countries (pricing and availability by storefront)
{"app_ids": ["com.spotify.music", "324684580"],"countries": ["us", "gb", "de", "jp", "br", "in"],"max_items": 10}
3. A publisher's whole portfolio by developer page
{"developer_ids": ["https://play.google.com/store/apps/dev?id=5700313618786177705", "324684581"],"max_items": 50}
4. Bundle ids, Apple only
{"bundle_ids": ["com.spotify.client", "com.burbn.instagram"],"stores": ["apple"],"country": "us"}
5. Watch competitor listings daily (schedule this)
{"app_ids": ["284882215", "com.spotify.music", "389801252", "com.instagram.android"],"watchMode": true}
🧾 JSON sample record
{"store": "apple","app_id": "284882215","title": "Facebook","developer": "Meta Platforms, Inc.","description": "Where real people propel your curiosity. Whether you’re thrifting gear, showing reels to that group who gets it, or sharing laughs over fun images reimagined by…","category": "Social Networking","price": "Free","currency": "USD","rating": 4.5263,"rating_count": 28797231,"version": "583.0.0","updated_at": "2026-10-14T09:58:25Z","icon_url": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/38/04/23/38042309-1e34-7b09-70c3-ec5733769459/Icon-Production-0-0-1x_U007epad-0-1-0-sRGB-85-220.png/512x512bb.jpg","screenshots": ["https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/75/26/f4/7526f4ae-6017-0e69-7a03-eab147122b19/f254967c-6ef9-4cc6-b4bf-e89cf016337c_1-iOS-5.5-Home.png/392x696bb.png","https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/5a/e9/55/5ae95577-c18a-0b51-71c9-a148cc0ad323/c795c58d-ec37-463c-9ab9-ba0b8bc00ddd_2-iOS-5.5-Reels.png/392x696bb.png","https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/b8/69/31/b86931ae-08d7-c9a3-3fae-ab5a37daac80/0130e841-7bad-4f8c-83c9-61ea0bac7d7b_3-iOS-5.5-Stories.png/392x696bb.png","… 7 more"],"screenshots_hash": "019ae181dc52122c68d320a280356a2f682d24104eca535dcdc56f1d04097bf4","country": "us","source_url": "https://apps.apple.com/us/app/facebook/id284882215?uo=4","collected_at": "2026-10-18T23:42:23.619667+00:00","bundle_id": "com.facebook.Facebook","developer_id": "284882218","developer_url": "https://apps.apple.com/us/developer/meta-platforms-inc/id284882218?uo=4","seller_name": "Meta Platforms, Inc.","developer_website": "http://www.facebook.com/mobile","summary": null,"genres": ["Social Networking"],"genre_ids": ["6005"],"content_rating": "12+","advisories": ["Infrequent/Mild Profanity or Crude Humor","Infrequent/Mild Alcohol, Tobacco, or Drug Use or References","Infrequent/Mild Mature/Suggestive Themes","Infrequent/Mild Sexual Content and Nudity"],"price_numeric": 0,"is_free": true,"offers_in_app_purchases": null,"in_app_purchase_price": null,"installs": null,"min_installs": null,"real_installs": null,"review_count": null,"rating_histogram": null,"rating_current_version": 4.5263,"rating_count_current_version": 28797231,"released_at": "2019-02-05T08:00:00Z","release_notes": "Our teams have solved many crashes, fixed issues you’ve reported and made the app faster.","file_size_bytes": 518962176,"minimum_os": "15.1","languages": ["AR","HR","CS","… 29 more"],"supported_devices": ["iPhone5s-iPhone5s","iPadAir-iPadAir","iPadAirCellular-iPadAirCellular","… 127 more"],"features": ["iosUniversal"],"game_center": false,"ipad_screenshots": ["https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/d4/8c/aa/d48caae2-9b6c-7ea1-ba50-06ff6ce94881/iPad2-Marketplace.png/576x768bb.png","https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/d7/75/16/d77516e3-9c90-0d18-782d-079244443f28/iPad2-Feed.png/576x768bb.png","https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/c9/aa/42/c9aa42eb-2bf1-dd4a-c2ed-f6bd66f64e86/iPad2-Reels.png/576x768bb.png","… 1 more"],"contains_ads": null,"ad_supported": null,"privacy_policy_url": null,"header_image_url": null,"video_url": null,"android_version": null}
🔧 How it works
Resolve. Each input is classified — Apple numeric id, bundle id, developer id or URL, Play package name or developer page, or a search term. Apple data comes from Apple's public lookup API (one request per id / bundle / developer, rate-limited); Play data from the public store page of each app (developer pages are read once and their listed apps resolved one by one).
Normalize. Both stores are mapped onto the same 50-column record; the original 17 columns keep their names and meaning, so existing integrations keep working.
Watch. With watchMode: true the run stores a baseline (keyed on store + app id + country) and later runs emit only new apps and apps whose title, price, version, screenshots, release notes or content rating changed, with previous_status attached.
Billing. Rows are pushed and charged in one call; a row that cannot be charged is not delivered. An app that does not exist in a storefront is reported in the status message and not billed. A run where the stores refused every request ends SUCCEEDED with SOURCE UNAVAILABLE … nothing charged.
Limits. max_items rows per country (default 20, max 1,000); developer pages and search terms stop at that many apps; Apple requests are paced at one every ~3 s.
⏰ Optional: run it on a schedule
Open the actor in Apify Console → Schedules → Create new, add this actor with the watch-mode input above (watchMode: true) so each run returns only the changes, and pick a cadence: Daily 0 7 * * * or Weekly 0 7 * * 1. Keep the same input on the schedule so the baseline stays comparable. Schedules can POST results to a webhook (Console → Integrations).
💰 Pricing example
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
Actor Start (apify-actor-start) | $0.02 | $0.02 | $0.02 | $0.02 |
App record (app-record) | $0.003 | $0.0027 | $0.0024 | $0.002 |
Watch check (watch-check) | $0.10 | $0.09 | $0.08 | $0.067 |
Snapshot mode (watchMode: false, one app record per app per country):
- 8 app records: $0.02 start + 8 × $0.003 = $0.044
- 100 app records: $0.02 start + 100 × $0.003 = $0.32
- 1,000 app records (e.g. 100 apps × 10 countries): $0.02 + 1,000 × $0.003 = $3.02
Watch mode (watchMode: true, one app record per change, plus one watch check per run):
- First run (seeds the baseline, 0 rows): $0.02 start + $0.10 watch check = $0.12
- A run where nothing changed (0 rows): $0.12
- A run with 5 changes: $0.02 + $0.10 + 5 × $0.003 = $0.135
A snapshot run that delivers zero rows charges the $0.02 start fee only. A run the stores refused charges no value event and no watch check. The start fee is charged once per GB of run memory; the default run memory is 1024 MB.
⚖️ Legal & ToS
Reads public store listings as any visitor would — Apple's public lookup API and public Google Play pages — identifies itself, never logs in and collects no reviewer or end-user data. App metadata remains the publisher's; use it in line with each store's terms (indexing, analysis, monitoring and benchmarking are the intended uses).
❓ FAQ
Q: How does this compare with the single-store scrapers? A: One schema across both stores, multi-country in one run, bundle-id and developer-page lookups, and watch mode — at $0.003 per app record.
Q: An app is missing for one country.
A: It is not published in that storefront. The status message says no app for <id> in storefront <cc>; nothing is billed for it.
Q: Why no reviews here? A: Reviews are a separate product: App Store Reviews and Google Play Reviews take the same ids.
Q: What formats can I export? A: JSON, CSV, Excel or XML from the Dataset tab or API; the flat columns drop straight into a sheet or BI tool.
🆘 Troubleshooting
- Status says SOURCE UNAVAILABLE → the store refused every request this run (rate limiting); retry later or set
proxy_configurationto Apify Proxy. Nothing was billed. - Status says PARTIAL … not found → one of your ids does not exist in that storefront; the other rows were delivered and billed normally.
- First watch run shows no deltas → expected: it seeds the baseline; changes appear from the second run under the same input.
- Run TIMED-OUT → lower
max_items/ fewer countries, or raise the run timeout; delivered rows are kept.
🔗 Related Actors
- App Store Reviews — reviews for the same Apple ids, multi-country.
- Google Play Reviews — reviews for the same package names, multi-language.
- App Store Top Charts — top charts by country and category.
- 🏢 About NexGen Watch — more than 300 public-data actors, pay-per-result: apify.com/nexgenwatch.
⭐ Found this useful?
A quick review on the Apify Store helps other teams find it. Feature request? Open it from the Issues tab — every one is read.
