Apple App Store Scraper avatar

Apple App Store Scraper

Pricing

Pay per usage

Go to Apify Store
Apple App Store Scraper

Apple App Store Scraper

Fetches app metadata from the Apple App Store with optional version gating.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Milad Amirzadeh

Milad Amirzadeh

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 days ago

Last modified

Share

Fetches app metadata from the Apple App Store for a list of app URLs. Optionally gates output on the current store version being strictly newer than a supplied minimum version — useful for polling apps and only processing them when a new release appears.

Input

{
"apps": [
{
"url": "https://apps.apple.com/us/app/telegram-messenger/id686449807",
"minVersion": "12.5"
},
{
"url": "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"
}
],
"maxRetries429": 3
}
  • apps (array, required): list of apps to scrape
    • url (string, required): full Apple App Store URL (any country)
    • minVersion (string, optional): if provided, only emit full data when the current store version is strictly greater than this value. Omit to always fetch full data.
  • proxyConfiguration (object, optional): Apify proxy configuration. Recommended — also required for maxRetries429 retries to actually rotate IP.
  • maxRetries429 (boolean or number, optional, default 3): retry strategy for HTTP 429 (rate limited) responses. false/0 disables retrying, true uses the default of 3 retries, or supply a number for a custom retry count. Every request (first attempt and retries) draws a fresh proxy URL from proxyConfiguration with no sticky session, so each retry after a 429 goes out over a different IP, combined with exponential backoff (2s, 4s, 8s, ... capped at 30s, plus jitter).

Output

One dataset record per input item. Non-skipped records include the full field set; skipped records include skipped: true and a reason.

Example — full record:

{
"url": "https://apps.apple.com/us/app/telegram-messenger/id686449807",
"appId": "686449807",
"skipped": false,
"name": "Telegram Messenger",
"subtitle": "Messenger for the people",
"developer": "Telegram FZ-LLC",
"category": "Social Networking",
"price": "Free",
"currentVersion": "12.6",
"releaseNotes": "- New animated emoji...",
"lastUpdatedDate": "2024-11-15T00:00:00Z",
"releaseDate": "2013-08-14T00:00:00Z",
"rating": 4.6,
"ratingCount": 1234567,
"ageRating": "17+",
"size": "200.0 MB",
"languages": ["English", "Arabic", "..."],
"compatibility": "Requires iOS 16.0 or later.",
"description": "Pure instant messaging...",
"seller": "Telegram FZ-LLC",
"copyright": "© 2024 Telegram FZ LLC",
"inAppPurchases": false,
"privacyDataCategories": ["CONTACT_INFO", "IDENTIFIERS"],
"screenshotUrls": ["https://is1-ssl.mzstatic.com/..."],
"iconUrl": "https://is1-ssl.mzstatic.com/image/thumb/.../512x512bb.png",
"chartRank": "5",
"chartCategory": "Social Networking",
"websiteUrl": "https://telegram.org/",
"scrapedAt": "2024-12-01T00:00:00+00:00"
}

Example — skipped record (current version not newer than minVersion):

{
"url": "https://apps.apple.com/us/app/telegram-messenger/id686449807",
"appId": "686449807",
"skipped": true,
"reason": "current version not newer than minVersion",
"currentVersion": "12.4",
"minVersion": "12.5",
"scrapedAt": "2024-12-01T00:00:00+00:00"
}

Example — error record (network failure, unparseable URL, etc.):

{
"url": "https://apps.apple.com/us/app/bad-url/id999",
"appId": "999",
"skipped": true,
"error": "HTTP 404",
"scrapedAt": "2024-12-01T00:00:00+00:00"
}

Screenshots

Screenshots are under test and review.