Apple App Store Scraper: Apps, Reviews & ASO avatar

Apple App Store Scraper: Apps, Reviews & ASO

Pricing

from $0.38 / 1,000 search results

Go to Apify Store
Apple App Store Scraper: Apps, Reviews & ASO

Apple App Store Scraper: Apps, Reviews & ASO

Extract Apple App Store apps, reviews, rankings, privacy labels, version history, in-app purchases, events, editorial features, similar apps, developer portfolios, and country availability. Get 55-field app details and up to 500 reviews per app. No Apple account or API key required.

Pricing

from $0.38 / 1,000 search results

Rating

0.0

(0)

Developer

ScrapingMonkey

ScrapingMonkey

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Apple App Store Scraper - App Details, Reviews, Rankings and Market Data

Extract public Apple App Store apps, enriched product details, customer reviews, charts, developer catalogs, similar apps, privacy labels, regional availability, in-app purchases, events, editorial features, and search suggestions into analysis-ready datasets.

  • Run 11 focused modes for discovery, product intelligence, review research, localization, and monitoring
  • Get 55 top-level fields in each enriched details row, including ratings histogram, App Privacy, version history, device requirements, IAPs, events, and editorial placements
  • Search multiple keywords or process multiple apps and developers in one run
  • Accept numeric Apple IDs, bundle IDs, and full apps.apple.com URLs
  • Localize catalog metadata, prices, ratings, and availability by App Store country and language
  • Filter reviews by star rating and ISO date; retain review and parent-app context in every row
  • No Apple account, API key, browser cookies, or user-supplied proxy configuration is required
  • Export results to JSON, CSV, Excel, XML, or consume them through the Apify API

What can you do with this Apple App Store Scraper?

ModeInputOne dataset rowBest for
searchsearchTermsOne matching app with 44 App Store fields plus query contextKeyword research and competitor discovery
detailsappIdsOne app with 55 top-level fields and nested enrichmentComplete product intelligence
reviewsappIdsOne customer review with app contextVoice-of-customer and sentiment analysis
chartsCollection and optional genre IDOne ranked chart appRanking and category monitoring
developerdeveloperIdsOne app published by the developerPortfolio research
similarappIdsOne Apple-recommended related appCompetitive landscape discovery
suggestsearchTermsOne App Store search suggestionASO keyword expansion
availabilityappIds, countriesOne app-country availability resultLaunch and localization audits
iapappIdsOne displayed in-app purchase and localized priceMonetization research
eventsappIdsOne current or upcoming in-app eventLive-ops monitoring
editorialappIdsOne Apple editorial placement featuring the appFeaturing and promotion research

Choose one mode per run. You can feed IDs discovered by search, charts, developer, or similar into details, reviews, availability, iap, events, or editorial in a later run.

Quick start

  1. Open the Actor and click Try for free.
  2. Keep search selected and enter one or more keywords in Search terms.
  3. Set Maximum items per input to a small value such as 10.
  4. Click Start.
  5. Preview the Dataset or download it in your preferred format.

The default input searches for photo editor and works without credentials or proxy setup.

Input examples

Search apps

{
"mode": "search",
"searchTerms": ["photo editor", "video editor"],
"maxItems": 20,
"country": "us",
"language": "en-US"
}

maxItems applies separately to each search term. One row represents one matching app.

Enriched app details

{
"mode": "details",
"appIds": [
"https://apps.apple.com/us/app/instagram/id389801252",
"com.google.ios.youtube",
"835599320"
],
"country": "us",
"language": "en-US",
"includePrivacy": true,
"includeVersionHistory": true,
"includeRatingsHistogram": true,
"includeIAP": true,
"includeEvents": true,
"includeReviews": false
}

Filtered reviews

{
"mode": "reviews",
"appIds": ["389801252", "com.spotify.client"],
"maxItems": 100,
"country": "us",
"language": "en-US",
"reviewSort": "mostRecent",
"reviewScore": 1,
"reviewsSince": "2026-01-01"
}

Top charts

{
"mode": "charts",
"chartCollection": "topFree",
"category": 6014,
"maxItems": 100,
"country": "us",
"language": "en-US"
}

Apps by developer

{
"mode": "developer",
"developerIds": ["570060151"],
"maxItems": 100,
"country": "us"
}

Similar apps

{
"mode": "similar",
"appIds": ["570060128"],
"maxItems": 20,
"country": "us"
}

Search suggestions

{
"mode": "suggest",
"searchTerms": ["photo", "fitness"],
"maxItems": 10,
"country": "us",
"language": "en-US"
}

Availability by country

{
"mode": "availability",
"appIds": ["com.duolingo.DuolingoMobile"],
"countries": ["us", "gb", "de", "jp"],
"language": "en-US"
}

In-app purchases

{
"mode": "iap",
"appIds": ["570060128"],
"country": "us",
"language": "en-US"
}

App events

{
"mode": "events",
"appIds": ["1094591345"],
"country": "us",
"language": "en-US"
}
{
"mode": "editorial",
"appIds": ["570060128"],
"country": "us",
"language": "en-US"
}

Complete output examples

Every distinct dataset shape is shown below. Optional scalar values are null when Apple does not publish them; repeatable groups are empty arrays when unavailable. Failed targets are logged and skipped rather than emitted as artificial error rows.

Complete search output - 46 top-level fields

{
"appId": "570060128",
"bundleId": "com.duolingo.DuolingoMobile",
"title": "Duolingo: Language Lessons",
"url": "https://apps.apple.com/us/app/id570060128",
"description": "Learn languages with short lessons.",
"icon": "https://example.com/icon-512.jpg",
"icon60": "https://example.com/icon-60.jpg",
"icon100": "https://example.com/icon-100.jpg",
"icon512": "https://example.com/icon-512.jpg",
"genres": ["Education", "Productivity"],
"genreIds": ["6017", "6007"],
"primaryGenre": "Education",
"primaryGenreId": 6017,
"contentRating": "4+",
"trackContentRating": "4+",
"languages": ["EN", "DE"],
"sizeBytes": 498500000,
"minimumOsVersion": "17.0",
"released": "2012-11-13T08:00:00Z",
"updated": "2026-08-03T18:03:04Z",
"releaseNotes": "Performance improvements.",
"version": "7.134.0",
"price": 0.0,
"formattedPrice": "Free",
"currency": "USD",
"free": true,
"developerId": "570060151",
"developer": "Duolingo",
"developerUrl": "https://apps.apple.com/us/developer/id570060151",
"developerWebsite": "https://www.duolingo.com/",
"sellerName": "Duolingo, Inc",
"score": 4.7,
"ratingCount": 5374930,
"currentVersionScore": 4.7,
"currentVersionRatingCount": 1200,
"screenshots": ["https://example.com/iphone.jpg"],
"ipadScreenshots": ["https://example.com/ipad.jpg"],
"appleTvScreenshots": [],
"supportedDevices": ["iPhone15,2"],
"features": ["iosUniversal"],
"advisories": [],
"kind": "software",
"isGameCenterEnabled": false,
"country": "us",
"searchTerm": "language learning",
"recordType": "search"
}

Complete details output - 55 top-level fields

{
"appId": "570060128",
"bundleId": "com.duolingo.DuolingoMobile",
"title": "Duolingo: Language Lessons",
"url": "https://apps.apple.com/us/app/id570060128",
"description": "Learn languages with short lessons.",
"icon": "https://example.com/icon-512.jpg",
"icon60": "https://example.com/icon-60.jpg",
"icon100": "https://example.com/icon-100.jpg",
"icon512": "https://example.com/icon-512.jpg",
"genres": ["Education", "Productivity"],
"genreIds": ["6017", "6007"],
"primaryGenre": "Education",
"primaryGenreId": 6017,
"contentRating": "4+",
"trackContentRating": "4+",
"languages": ["EN", "DE"],
"sizeBytes": 498500000,
"minimumOsVersion": "17.0",
"released": "2012-11-13T08:00:00Z",
"updated": "2026-08-03T18:03:04Z",
"releaseNotes": "Performance improvements.",
"version": "7.134.0",
"price": 0.0,
"formattedPrice": "Free",
"currency": "USD",
"free": true,
"developerId": "570060151",
"developer": "Duolingo",
"developerUrl": "https://apps.apple.com/us/developer/id570060151",
"developerWebsite": "https://www.duolingo.com/",
"sellerName": "Duolingo, Inc",
"score": 4.7,
"ratingCount": 5374930,
"currentVersionScore": 4.7,
"currentVersionRatingCount": 1200,
"screenshots": ["https://example.com/iphone.jpg"],
"ipadScreenshots": ["https://example.com/ipad.jpg"],
"appleTvScreenshots": [],
"supportedDevices": ["iPhone15,2"],
"features": ["iosUniversal"],
"advisories": [],
"kind": "software",
"isGameCenterEnabled": false,
"country": "us",
"formattedSize": "498.5 MB",
"information": [
{
"name": "Compatibility",
"value": null,
"details": [
{
"name": "iPhone",
"value": "Requires iOS 17.0 or later."
}
]
}
],
"deviceRequirements": [
{
"device": "iPhone",
"requirement": "Requires iOS 17.0 or later."
}
],
"ratingsHistogram": {
"average": 4.7,
"total": 5374930,
"1": 134624,
"2": 44984,
"3": 131110,
"4": 543631,
"5": 4520581
},
"privacyDetails": {
"privacyPolicyUrl": "https://www.duolingo.com/privacy",
"privacyTypes": [
{
"identifier": "DATA_USED_TO_TRACK_YOU",
"title": "Data Used to Track You",
"description": "Data may be used to track you.",
"dataCategories": [
{
"identifier": "CONTACT_INFO",
"title": "Contact Info",
"dataTypes": ["Email Address"]
}
],
"purposes": [
{
"identifier": "THIRD_PARTY_ADVERTISING",
"title": "Third-Party Advertising",
"description": "Used to display third-party advertisements."
}
]
}
]
},
"versionHistory": [
{
"version": "7.134.0",
"releaseDate": "Mon Aug 03 2026 18:03:04 GMT+0000 (Coordinated Universal Time)",
"releaseNotes": "Performance improvements."
}
],
"inAppPurchases": [
{
"rank": 1,
"name": "Super Duolingo",
"priceText": "$9.99"
}
],
"appEvents": [
{
"eventId": "event-123",
"title": "Learning challenge",
"subtitle": "Complete daily lessons",
"description": "A limited-time learning event.",
"promotionType": "event",
"badge": "CHALLENGE",
"kind": "event",
"startDate": "2026-08-01T00:00:00Z",
"endDate": "2026-08-10T00:00:00Z",
"formattedDates": [
{
"kind": "AppEventFormattedDate",
"showLiveIndicator": false,
"displayText": "HAPPENING NOW",
"displayFromDate": "2026-08-01T00:00:00Z",
"countdownToDate": null,
"countdownStringKey": null
}
],
"image": "https://example.com/event.jpg",
"url": "https://apps.apple.com/us/app/id570060128"
}
],
"featuredEditorial": [
{
"editorialId": "1825160725",
"heading": "APP OF THE DAY",
"title": "Make language practice a habit",
"description": "Learn something new every day.",
"style": "EditorialCard",
"image": "https://example.com/editorial.jpg",
"url": "https://apps.apple.com/us/iphone/story/id1825160725"
}
],
"includedReviews": [
{
"appId": "570060128",
"reviewId": "14158523706",
"userName": "Reviewer",
"userUrl": null,
"version": null,
"score": 5,
"title": "Experience so far",
"text": "A useful review.",
"url": "https://apps.apple.com/us/app/id570060128?see-all=reviews",
"date": "2026-06-08T14:19:22.000Z",
"isEdited": null,
"thumbsUpCount": null,
"thumbsUpTotal": null,
"country": "us",
"reviewSort": "mostHelpful",
"requestedReviewSort": "mostRecent",
"reviewSource": "appPageFallback",
"appTitle": "Duolingo: Language Lessons",
"appUrl": "https://apps.apple.com/us/app/id570060128",
"bundleId": "com.duolingo.DuolingoMobile",
"developer": "Duolingo",
"appScore": 4.7,
"appRatingCount": 5374930,
"primaryGenre": "Education"
}
],
"recordType": "details"
}

When includeReviews is false, includedReviews is []. Disabled detail enrichments keep their stable keys and return an empty array or an empty/default object.

Complete review output - 25 top-level fields

{
"appId": "389801252",
"reviewId": "14158523706",
"userName": "Reviewer",
"userUrl": "https://itunes.apple.com/us/reviews/id123",
"version": "390.0",
"score": 5,
"title": "Great app",
"text": "Works well for sharing photos.",
"url": "https://itunes.apple.com/review?id=14158523706",
"date": "2026-08-01T12:30:00-07:00",
"isEdited": null,
"thumbsUpCount": 42,
"thumbsUpTotal": 50,
"country": "us",
"reviewSort": "mostRecent",
"requestedReviewSort": "mostRecent",
"reviewSource": "rss",
"appTitle": "Instagram",
"appUrl": "https://apps.apple.com/us/app/instagram/id389801252",
"bundleId": "com.burbn.instagram",
"developer": "Instagram, Inc.",
"appScore": 4.7,
"appRatingCount": 28000000,
"primaryGenre": "Photo & Video",
"recordType": "review"
}

Paginated rows use reviewSource: "api". If that source is temporarily unavailable, the Actor tries Apple's RSS feed and then public helpful reviews embedded in the app page. Embedded rows have reviewSource: "appPageFallback", reviewSort: "mostHelpful", and preserve the requested value in requestedReviewSort; source-specific fields may be null.

Complete chart output - 48 top-level fields

{
"appId": "389801252",
"bundleId": "com.burbn.instagram",
"title": "Instagram",
"url": "https://apps.apple.com/us/app/id389801252",
"description": "Share photos and videos.",
"icon": "https://example.com/icon-512.jpg",
"icon60": "https://example.com/icon-60.jpg",
"icon100": "https://example.com/icon-100.jpg",
"icon512": "https://example.com/icon-512.jpg",
"genres": ["Photo & Video", "Social Networking"],
"genreIds": ["6008", "6005"],
"primaryGenre": "Photo & Video",
"primaryGenreId": 6008,
"contentRating": "12+",
"trackContentRating": "12+",
"languages": ["EN"],
"sizeBytes": 315000000,
"minimumOsVersion": "15.1",
"released": "2010-10-06T08:12:41Z",
"updated": "2026-08-01T09:00:00Z",
"releaseNotes": "Performance improvements.",
"version": "390.0",
"price": 0.0,
"formattedPrice": "Free",
"currency": "USD",
"free": true,
"developerId": "389801255",
"developer": "Instagram, Inc.",
"developerUrl": "https://apps.apple.com/us/developer/id389801255",
"developerWebsite": "https://www.instagram.com/",
"sellerName": "Instagram, Inc.",
"score": 4.7,
"ratingCount": 28000000,
"currentVersionScore": 4.7,
"currentVersionRatingCount": 120000,
"screenshots": ["https://example.com/iphone.jpg"],
"ipadScreenshots": ["https://example.com/ipad.jpg"],
"appleTvScreenshots": [],
"supportedDevices": ["iPhone15,2"],
"features": ["iosUniversal"],
"advisories": ["Infrequent/Mild Mature/Suggestive Themes"],
"kind": "software",
"isGameCenterEnabled": false,
"country": "us",
"chartCollection": "topFree",
"chartCategory": 6008,
"chartRank": 1,
"recordType": "chart"
}

Complete developer output - 47 top-level fields

{
"appId": "570060128",
"bundleId": "com.duolingo.DuolingoMobile",
"title": "Duolingo: Language Lessons",
"url": "https://apps.apple.com/us/app/id570060128",
"description": "Learn languages with short lessons.",
"icon": "https://example.com/icon-512.jpg",
"icon60": "https://example.com/icon-60.jpg",
"icon100": "https://example.com/icon-100.jpg",
"icon512": "https://example.com/icon-512.jpg",
"genres": ["Education"],
"genreIds": ["6017"],
"primaryGenre": "Education",
"primaryGenreId": 6017,
"contentRating": "4+",
"trackContentRating": "4+",
"languages": ["EN"],
"sizeBytes": 498500000,
"minimumOsVersion": "17.0",
"released": "2012-11-13T08:00:00Z",
"updated": "2026-08-03T18:03:04Z",
"releaseNotes": "Performance improvements.",
"version": "7.134.0",
"price": 0.0,
"formattedPrice": "Free",
"currency": "USD",
"free": true,
"developerId": "570060151",
"developer": "Duolingo",
"developerUrl": "https://apps.apple.com/us/developer/id570060151",
"developerWebsite": "https://www.duolingo.com/",
"sellerName": "Duolingo, Inc",
"score": 4.7,
"ratingCount": 5374930,
"currentVersionScore": 4.7,
"currentVersionRatingCount": 1200,
"screenshots": ["https://example.com/iphone.jpg"],
"ipadScreenshots": ["https://example.com/ipad.jpg"],
"appleTvScreenshots": [],
"supportedDevices": ["iPhone15,2"],
"features": ["iosUniversal"],
"advisories": [],
"kind": "software",
"isGameCenterEnabled": false,
"country": "us",
"sourceDeveloperId": "570060151",
"developerAppRank": 1,
"recordType": "developer"
}

Complete similar output - 47 top-level fields

{
"appId": "1546079573",
"bundleId": "com.example.languageapp",
"title": "Language Learning App",
"url": "https://apps.apple.com/us/app/id1546079573",
"description": "Practice another language.",
"icon": "https://example.com/icon-512.jpg",
"icon60": "https://example.com/icon-60.jpg",
"icon100": "https://example.com/icon-100.jpg",
"icon512": "https://example.com/icon-512.jpg",
"genres": ["Education"],
"genreIds": ["6017"],
"primaryGenre": "Education",
"primaryGenreId": 6017,
"contentRating": "4+",
"trackContentRating": "4+",
"languages": ["EN"],
"sizeBytes": 125000000,
"minimumOsVersion": "16.0",
"released": "2021-01-01T00:00:00Z",
"updated": "2026-07-30T00:00:00Z",
"releaseNotes": "Bug fixes.",
"version": "5.2.0",
"price": 0.0,
"formattedPrice": "Free",
"currency": "USD",
"free": true,
"developerId": "123456789",
"developer": "Example Developer",
"developerUrl": "https://apps.apple.com/us/developer/id123456789",
"developerWebsite": "https://example.com/",
"sellerName": "Example Developer LLC",
"score": 4.6,
"ratingCount": 42000,
"currentVersionScore": 4.6,
"currentVersionRatingCount": 500,
"screenshots": ["https://example.com/iphone.jpg"],
"ipadScreenshots": [],
"appleTvScreenshots": [],
"supportedDevices": ["iPhone15,2"],
"features": ["iosUniversal"],
"advisories": [],
"kind": "software",
"isGameCenterEnabled": false,
"country": "us",
"sourceAppId": "570060128",
"similarityRank": 1,
"recordType": "similar"
}

Complete suggestion output - 5 top-level fields

{
"searchTerm": "photo",
"suggestion": "photo editor",
"rank": 1,
"country": "us",
"recordType": "suggestion"
}

Complete availability output - 10 top-level fields

{
"appId": "570060128",
"bundleId": "com.duolingo.DuolingoMobile",
"title": "Duolingo: Language & Chess",
"country": "gb",
"available": true,
"url": "https://apps.apple.com/gb/app/id570060128",
"price": 0.0,
"formattedPrice": "Free",
"currency": "GBP",
"recordType": "availability"
}

Unavailable country rows retain the same 10 keys with available: false and unavailable catalog values set to null.

Complete iap output - 8 top-level fields

{
"appId": "570060128",
"bundleId": "com.duolingo.DuolingoMobile",
"appTitle": "Duolingo: Language Lessons",
"country": "us",
"rank": 1,
"name": "Super Duolingo",
"priceText": "$9.99",
"recordType": "iap"
}

Complete app-event output - 17 top-level fields

{
"appId": "1094591345",
"bundleId": "com.nianticlabs.pokemongo",
"appTitle": "Pokémon GO",
"country": "us",
"eventId": "event-123",
"title": "Community Day",
"subtitle": "A featured Pokémon appears",
"description": "Join a limited-time in-game event.",
"promotionType": "event",
"badge": "SPECIAL_EVENT",
"kind": "event",
"startDate": "2026-08-09T14:00:00Z",
"endDate": "2026-08-09T17:00:00Z",
"formattedDates": [
{
"kind": "AppEventFormattedDate",
"showLiveIndicator": false,
"displayText": "HAPPENING NOW",
"displayFromDate": "2026-08-09T14:00:00Z",
"countdownToDate": null,
"countdownStringKey": null
}
],
"image": "https://example.com/event.jpg",
"url": "https://apps.apple.com/us/app/id1094591345",
"recordType": "app-event"
}

Complete editorial output - 12 top-level fields

{
"appId": "570060128",
"bundleId": "com.duolingo.DuolingoMobile",
"appTitle": "Duolingo: Language Lessons",
"country": "us",
"editorialId": "1825160725",
"heading": "APP OF THE DAY",
"title": "Make language practice a habit",
"description": "Learn something new every day.",
"style": "EditorialCard",
"image": "https://example.com/editorial.jpg",
"url": "https://apps.apple.com/us/iphone/story/id1825160725",
"recordType": "editorial"
}

What data can you extract?

CategoryComplete field inventory
Record contextrecordType, searchTerm, suggestion, rank, sourceAppId, sourceDeveloperId, chartCollection, chartCategory, chartRank, developerAppRank, similarityRank
App identity and contentappId, bundleId, title, url, description, icon, icon60, icon100, icon512, kind
Classification and compatibilitygenres, genreIds, primaryGenre, primaryGenreId, contentRating, trackContentRating, languages, sizeBytes, formattedSize, minimumOsVersion, supportedDevices, features, advisories, isGameCenterEnabled, information, deviceRequirements
Release datareleased, updated, releaseNotes, version, versionHistory
Pricing and monetizationprice, formattedPrice, currency, free, inAppPurchases, name, priceText
DeveloperdeveloperId, developer, developerUrl, developerWebsite, sellerName
Ratingsscore, ratingCount, currentVersionScore, currentVersionRatingCount, ratingsHistogram
Mediascreenshots, ipadScreenshots, appleTvScreenshots, image
App PrivacyprivacyDetails with privacyPolicyUrl; each privacy type has identifier, title, description, dataCategories, and purposes; categories have identifier, title, dataTypes; purposes have identifier, title, description
ReviewsincludedReviews, reviewId, userName, userUrl, text, date, isEdited, thumbsUpCount, thumbsUpTotal, reviewSort, requestedReviewSort, reviewSource, appTitle, appUrl, appScore, appRatingCount
Availabilitycountry, available plus localized title, url, price, formattedPrice, currency
EventsappEvents, eventId, subtitle, promotionType, badge, startDate, endDate, formattedDates
EditorialfeaturedEditorial, editorialId, heading, style

Input parameters

ParameterTypeRequiredDefaultDescription
modestringYessearchsearch, details, reviews, charts, developer, similar, suggest, availability, iap, events, or editorial
searchTermsstring[]In search / suggest["photo editor"]Keywords processed independently
appIdsstring[]In app-target modes[]Numeric IDs, bundle IDs, or App Store URLs
developerIdsstring[]In developer[]Numeric Apple developer IDs
countrystringNousTwo-letter App Store country controlling catalog and prices
countriesstring[]In availability[]Regions checked independently; country is used when empty
languagestringNoen-USLocale such as en-US, de-DE, ja-JP, or en
maxItemsintegerNo50Maximum per search term, app, developer, or chart; 0 requests all source-exposed items; accepted range 0-500
maxConcurrencyintegerNo5Independent terms, app IDs, developer IDs, or availability regions processed concurrently, from 1 to 20
includeReviewsbooleanNofalseNest reviews inside details rows; every nested review is billed as one review event in addition to the app-detail event
includePrivacybooleanNotrueInclude privacy policy and structured App Privacy labels
includeVersionHistorybooleanNotrueInclude embedded version-history entries
includeRatingsHistogrambooleanNotrueInclude exact 1-star through 5-star counts
includeIAPbooleanNotrueInclude displayed in-app purchases in details
includeEventsbooleanNotrueInclude displayed app events in details
reviewSortstringNomostRecentmostRecent or mostHelpful
reviewScoreintegerNounsetKeep only a rating from 1 to 5
reviewsSincestringNounsetISO date or timestamp lower bound
chartCollectionstringNotopFreetopFree, topPaid, topGrossing, new, newFree, newPaid, topFreeIpad, topPaidIpad, topGrossingIpad, topFreeMac, topPaidMac, or topGrossingMac
categoryintegerNounsetOptional Apple genre ID, for example 6014 for Games

Use cases

App Store optimization and keyword research

Combine suggest and search to expand seed keywords, measure the apps Apple returns for each query, and track competitors occupying important discovery positions.

Competitive product and monetization intelligence

Use details, similar, developer, and iap to compare positioning, screenshots, releases, ratings distributions, device requirements, portfolios, and localized purchase prices.

Review and customer research

Collect rating-filtered reviews with parent-app metadata, then send the Dataset to a notebook, warehouse, or language model for topic, complaint, and sentiment analysis.

Ranking and launch monitoring

Schedule charts, availability, events, and editorial runs to observe rank changes, country launches, live-ops campaigns, and Apple featuring over time.

Privacy and compliance research

Compare the public App Privacy categories and policies disclosed across competing apps or across repeated snapshots.

Performance and cost

This Actor uses pay-per-event billing when that pricing model is enabled. Each saved row triggers the matching event: search-result, app-detail, review, chart-result, developer-app, similar-app, suggestion, availability-result, iap-item, app-event, or editorial-item. When includeReviews is enabled in details mode, the details row triggers one app-detail event and every review stored inside includedReviews triggers one additional review event. The Actor limits the nested review count before saving when the run is close to its maximum charge limit. Check the Actor's Pricing tab for the current per-event rates.

Details requests are heavier than basic app rows because they load the public product page. includeReviews adds review requests. Independent terms, app IDs, developer IDs, and availability app-country pairs run concurrently up to maxConcurrency. Pagination for one target remains sequential because each page depends on the previous response. Runtime also depends on Apple's response time, retries, input count, and source-controlled pagination. The Actor stops cleanly when an Apify maximum charge limit is reached.

No precise runtime or cost table is published here because repeatable production measurements depend on the final Store pricing and Apify run configuration.

API usage

The public username is not yet stored in this project. Replace YOUR_USERNAME with the final Apify account name:

curl -X POST \
"https://api.apify.com/v2/acts/YOUR_USERNAME~apple-app-store-data-scraper/runs?token=APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "details",
"appIds": ["389801252", "com.spotify.client"],
"country": "us",
"language": "en-US"
}'

Use Apify schedules for recurring snapshots and webhooks for downstream processing. Dataset results work naturally with Google Sheets, Make, Zapier, n8n, Airbyte, Slack, databases, and data warehouses through Apify integrations or API exports.

The Output tab uses one unified Results view with all 94 top-level fields across every supported mode. Fields that do not apply to a row's recordType remain empty, so users never need to switch mode-specific tabs or open the automatic All fields view.

Best for / not for

Best for: ASO research, public competitive intelligence, App Store ranking monitoring, review analysis, localized pricing and availability audits, developer portfolio mapping, and Apple featuring research.

Not for: private Apple account data, authenticated purchase history, downloading IPA binaries, modifying App Store listings, bypassing paid content, or real-time streaming of every Store change.

Limits and good to know

  • One mode runs at a time; arrays batch multiple terms, apps, developers, or countries.
  • maxItems accepts 0-500, but Apple controls actual availability: search and developer lookup expose up to about 200; legacy charts up to 200; modern chart fallback up to 100; paginated reviews up to the Actor limit of 500; suggestions, similar apps, IAPs, events, editorial stories, and embedded review fallback return only what the page exposes.
  • Some legacy chart collections and category-filtered charts require a supported Apple storefront region. Top free, paid, and grossing charts have a country-based fallback where Apple offers it.
  • App titles, descriptions, prices, rating counts, charts, availability, reviews, and some media can differ by country and language.
  • Apple may temporarily rate-limit its paginated review source or return an empty RSS feed. The Actor falls back safely and identifies the source and actual ordering with reviewSource, reviewSort, and requestedReviewSort.
  • Search, chart, developer, and similar rows always contain the stable 44-field app object plus their mode context. Details always retains all enrichment keys even when a block is disabled or unavailable.
  • Retries use exponential backoff for blocks, rate limits, transient HTTP responses, proxy failures, and network errors.
  • A failed target is logged and skipped so valid inputs can still finish. If every operation fails, the Actor run fails instead of producing a misleading empty success.
  • All production traffic is routed through Apify Proxy. Proxy setup is internal and no proxy field is shown in the input.

Frequently asked questions

What input should I provide?

For app-target modes use a numeric ID (389801252), bundle ID (com.burbn.instagram), or full App Store URL. Search and suggestion modes take keywords; developer mode takes numeric developer IDs.

How many results can I extract?

Set maxItems from 1 to 500, or 0 for everything exposed by the selected public source. The effective limits listed above are imposed by Apple and vary by mode.

Why are some fields empty?

Not every app has iPad or Apple TV screenshots, IAPs, events, editorial stories, privacy purposes, a developer website, or reviews in every storefront. Stable optional scalars use null; repeatable data uses [].

Can I process multiple inputs?

Yes. searchTerms, appIds, developerIds, and countries accept arrays. Limits apply independently as documented for the selected mode.

Can I schedule recurring runs?

Yes. Use Apify schedules for recurring jobs and webhooks to notify or trigger another system after completion.

Do I need an Apple account, API key, cookies, or proxy?

No Apple credentials or cookies are required. Production requests automatically use Apify Proxy, so users do not need to configure or supply a proxy.

Responsible use

This Actor extracts publicly available Apple App Store information. Users are responsible for complying with applicable laws, privacy regulations, contractual obligations, and Apple's terms.

Apple, App Store, iPhone, iPad, and related marks are trademarks of Apple Inc. This Actor is independent and is not affiliated with, endorsed by, or sponsored by Apple Inc.

Support

If you encounter a problem, create an issue in the Actor's Issues tab. Include the Apify run ID, selected mode, country/language, and a non-sensitive reproducible input. Do not publish tokens, credentials, or private proxy URLs.