Apple App Store Developer Portfolio Scraper
Pricing
Pay per event
Apple App Store Developer Portfolio Scraper
🍎 Enumerate apps returned for Apple developer IDs across country storefronts. Export app metadata for ASO, monitoring, acquisition research, and publisher intelligence.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Turn an Apple developer ID into a structured inventory of the apps that publisher offers in each selected App Store country.
Use numeric developer IDs or paste public apps.apple.com developer URLs. The Actor calls Apple's anonymous Lookup service, normalizes every returned software record, and saves export-ready app metadata.
No Apple account, API key, browser, proxy, cookies, or private credentials are required.
What does Apple App Store Developer Portfolio Scraper do?
This Actor enumerates apps associated with a supplied Apple publisher.
For every developer and storefront it can extract:
- 🍎 developer ID and developer name
- 📱 app ID, app name, and bundle ID
- 🗂️ primary genre and complete genre list
- 💵 price, formatted price, and currency
- ⭐ average rating and rating count
- 🆕 current version rating and rating count
- 🧩 version and minimum operating system
- 📅 first release and current-version release dates
- 🖼️ artwork and canonical App Store URL
- 📝 public app description
- 🌍 storefront, original query, source URL, and scrape time
One row represents one app in one storefront. This makes regional comparisons explicit instead of silently merging values that may differ by country.
Who is it for?
ASO and mobile-market intelligence teams
Build repeatable publisher inventories for competitive research. Snapshot datasets on a schedule and compare app launches, removals, releases, ratings, or pricing.
App-acquisition scouts
Review the complete public portfolio returned for a potential acquisition target. Export bundle IDs and app URLs into a due-diligence sheet.
Ad-tech and vendor-risk researchers
Map apps back to a developer identity and monitor changes in the publisher's footprint.
Agencies
Create portfolio reports for multiple clients or competitors without manually opening every profile and app page.
Data engineers
Feed normalized records into warehouses, dashboards, alerts, webhooks, or enrichment pipelines.
Why use this developer portfolio scraper?
Apple search is keyword-oriented and can mix unrelated publishers. A developer lookup starts from a deterministic publisher ID.
The Actor adds operational features around the public source:
- accepts both IDs and full profile URLs
- supports multiple country storefronts in one run
- validates malformed inputs before extraction
- retries transient source failures with bounded backoff
- deduplicates records within each storefront
- returns stable field names for downstream automation
- charges only for the run start and saved app records
How it works
- The Actor validates each developer identifier.
- Developer URLs are converted to their numeric Apple IDs.
- Each ID is paired with each requested storefront.
- Apple's public Lookup endpoint is queried with
entity=software. - The publisher record is discarded and software records are normalized.
- Duplicate storefront/developer/app combinations are removed.
- App rows are saved to the default Apify dataset.
If one developer/storefront request fails after retries, the Actor logs it and continues with the remaining pairs. If every source request fails, the run fails rather than reporting a misleading successful extraction.
Input
The input has three fields.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
developerIds | string array | Yes | 389801255 prefill | Numeric IDs or Apple developer profile URLs |
countries | string array | No | us | Two-letter App Store storefront codes |
maxAppsPerDeveloper | integer | No | 200 | Maximum apps saved per developer and storefront, from 1 to 200 |
A small first run can use:
{"developerIds": ["389801255"],"countries": ["us"],"maxAppsPerDeveloper": 20}
To compare storefronts:
{"developerIds": ["https://apps.apple.com/us/developer/meta-platforms-inc/id389801255"],"countries": ["us", "gb", "de"],"maxAppsPerDeveloper": 200}
Country codes are normalized to lowercase. Invalid values fail closed.
Output data
Results are available in the default dataset as JSON, CSV, Excel, XML, RSS, or HTML.
| Field | Meaning |
|---|---|
developerId | Numeric Apple publisher ID as a string |
developerName | Publisher name returned by Apple |
appId | Numeric Apple app ID as a string |
appName | Public app title |
bundleId | App bundle identifier |
primaryGenre | Primary App Store genre |
genres | All returned genre labels |
price | Numeric storefront price |
currency | ISO-like storefront currency code |
formattedPrice | Apple's formatted price label |
averageRating | Aggregate average user rating |
ratingCount | Aggregate number of ratings |
currentVersionRating | Rating for the current version |
currentVersionRatingCount | Current-version rating count |
version | Current version string |
firstReleaseDate | Original release timestamp |
currentVersionReleaseDate | Current-version release timestamp |
minimumOsVersion | Minimum supported OS version |
contentAdvisoryRating | Returned age/content label |
artworkUrl | Highest-resolution returned artwork URL |
appStoreUrl | Canonical public app URL |
description | Public app description |
storefront | Requested two-letter country code |
query | Original supplied ID or URL |
sourceUrl | Exact Lookup request URL |
scrapedAt | UTC extraction timestamp |
Example output
{"developerId": "389801255","developerName": "Meta Platforms, Inc.","appId": "389801252","appName": "Instagram","bundleId": "com.burbn.instagram","primaryGenre": "Photo & Video","price": 0,"currency": "USD","averageRating": 4.7,"ratingCount": 27000000,"version": "latest returned version","storefront": "us","appStoreUrl": "https://apps.apple.com/us/app/instagram/id389801252","query": "389801255","scrapedAt": "2026-07-19T00:00:00.000Z"}
Values change over time and by storefront; the example illustrates shape rather than a guaranteed live value.
How much does it cost to scrape Apple developer portfolios?
This Actor uses pay-per-event pricing.
- A small one-time Start event covers run initialization.
- An App result event is charged once for each dataset row saved.
- App-result prices use Apify's plan-based tiered discounts.
The current start price is $0.005. The formula-derived BRONZE app-result price is $0.00012613 per row, with lower SILVER through DIAMOND rates and a FREE-tier rate of $0.00014505. The exact price for your plan appears before a run and in the Actor's Pricing tab.
Runs that return fewer apps cost less. Test with one developer and one storefront before scheduling large regional monitoring jobs.
Step-by-step guide
- Open the Actor in Apify Console.
- Find the publisher's Apple developer ID or public profile URL.
- Add one or more identifiers under Developers.
- Keep
usor add other two-letter country codes. - Choose a maximum from 1 to 200.
- Click Start.
- Review logs for each completed developer/storefront pair.
- Open Dataset and export or integrate the records.
Portfolio monitoring workflow
Run the same input daily or weekly with an Apify schedule.
Store each snapshot in your warehouse, then compare records by:
storefront + developerId + appIdfor identity- missing or new app IDs for removals and launches
versionorcurrentVersionReleaseDatefor releasespriceandcurrencyfor commercial changesaverageRatingandratingCountfor reputation movement
Apify webhooks can trigger a diff service after every successful run.
Regional availability workflow
Supply the same developer with multiple countries.
Because each row retains storefront, analysts can group by app ID and identify:
- apps present in one country but absent in another
- regional price and currency differences
- rating/count differences across storefronts
- regional App Store URLs
A missing app can mean regional unavailability or that Apple did not include it in the capped Lookup response. Treat the source limitation explicitly.
Integrations
Google Sheets and Excel
Export CSV or Excel directly from the dataset for portfolio audits and client reports.
Webhooks
Send a successful-run webhook to Zapier, Make, n8n, or an internal endpoint. Use the dataset ID from the run payload to retrieve rows.
Data warehouses
Use the Apify API client to load snapshots into BigQuery, Snowflake, PostgreSQL, or object storage.
Slack and email alerts
Diff the newest dataset against the previous snapshot and alert when app IDs, prices, or versions change.
Other Apify Actors
Chain the returned app URLs or IDs into a detail, review, privacy-label, or similar-app workflow.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/apple-app-store-developer-portfolio-scraper').call({developerIds: ['389801255'],countries: ['us', 'gb'],maxAppsPerDeveloper: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/apple-app-store-developer-portfolio-scraper').call(run_input={'developerIds': ['389801255'],'countries': ['us'],'maxAppsPerDeveloper': 20,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~apple-app-store-developer-portfolio-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"developerIds":["389801255"],"countries":["us"],"maxAppsPerDeveloper":20}'
Fetch dataset records after the run finishes:
$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true&format=json"
Use with Apify MCP and AI agents
Connect AI tools to:
https://mcp.apify.com?tools=automation-lab/apple-app-store-developer-portfolio-scraper
Claude Code setup
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/apple-app-store-developer-portfolio-scraper"
Claude Desktop setup
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/apple-app-store-developer-portfolio-scraper"}}}
Cursor setup
Add the same HTTP MCP URL to Settings → Tools & MCP → New MCP Server.
VS Code setup
Add the same HTTP endpoint to your workspace MCP server configuration, then enable the Apify server in the MCP panel.
Example prompts:
- “List the US App Store portfolio for developer 389801255.”
- “Compare this Apple publisher's apps in the US, UK, and Germany.”
- “Return bundle IDs and release dates as a compact table.”
- “Run this weekly and summarize newly observed app IDs.”
Data quality and deduplication
The Actor only saves returned records that contain an app ID, app name, developer ID/name, bundle ID, and canonical URL.
Deduplication uses storefront, developer ID, and app ID. The same app can intentionally appear once per requested storefront because availability and metadata can differ.
Nullable source values remain null; numeric counts default to zero and genre arrays default to an empty array. This preserves predictable output types.
Limits
Apple's Lookup response is capped at 200 requested software results per developer and storefront. The Actor cannot promise portfolio completeness beyond Apple's returned set.
Other practical limits:
- at most 100 developer inputs per run
- at most 20 storefronts per run
- sequential requests to avoid unnecessary source pressure
- three bounded attempts for transient HTTP or timeout failures
- public metadata only; no private analytics or developer-console data
Apple can change or retire the endpoint without notice.
Responsible and legal use
The Actor retrieves public App Store metadata without bypassing login or access controls.
You are responsible for your use of the data. Follow Apple's applicable terms, database rights, privacy laws, contractual requirements, and local regulations.
Do not use public publisher or app metadata to make unlawful discriminatory decisions, impersonate developers, or misrepresent affiliation with Apple.
This Actor is not affiliated with or endorsed by Apple Inc.
Troubleshooting
“Invalid developer identifier”
Use digits only, such as 389801255, or a full URL whose path contains /developer/<name>/id<digits> on apps.apple.com.
“countries must contain two-letter storefront country codes”
Use codes such as us, gb, de, fr, or jp. Do not use language tags like en-US.
The run succeeded with zero rows
Apple may return no software records for that developer/storefront pair. Confirm the developer ID and try the profile's visible country storefront.
One storefront failed
Read the run log. The Actor retries transient failures and continues with other pairs. Re-run later if Apple temporarily rejected or timed out the request.
An app visible on the profile is absent
The Lookup endpoint can return a storefront-specific and source-capped set. The Actor reports what Apple returned and does not claim completeness beyond 200.
Tips for reliable recurring runs
- Start with one known publisher and the
usstorefront. - Preserve
sourceUrlandscrapedAtfor auditability. - Compare app IDs instead of names because titles can change.
- Keep country codes stable between snapshots.
- Schedule at a cadence that matches your decision process rather than polling continuously.
- Store historical snapshots before applying destructive updates.
Related scrapers
- Apple App Store Scraper — search apps, fetch known app IDs, and collect reviews.
- Apple App Store Charts Scraper — monitor ranked chart positions.
- Apple App Store Privacy Labels Scraper — collect app privacy disclosures.
Choose this Actor when the starting entity is a developer/publisher and the desired output is its returned app portfolio.
FAQ
Does it require an Apple developer account?
No. It uses a public anonymous Apple Lookup response.
Does it use a browser or proxy?
No. It is an HTTP/API Actor, which keeps execution fast and inexpensive.
Can I enter an app ID instead of a developer ID?
No. Supply the publisher's developer ID. An app ID identifies one app and is a different lookup workflow.
Can I scrape more than 200 apps for one developer?
Not through this source. Apple caps the requested Lookup set at 200, and the Actor discloses that limit instead of claiming a complete set beyond it.
Why is the same app repeated?
If you request multiple storefronts, one row per app/storefront is intentional. Use storefront + developerId + appId as the composite identity.
Are ratings globally comparable?
No. Rating values and counts can differ by storefront and over time.
Can I schedule it?
Yes. Use Apify schedules, then trigger a webhook or integration after successful runs.
What happens when one developer ID is unavailable?
A valid empty source response produces no rows for that pair. Transport failures are retried and logged; other pairs continue.
Build a publisher intelligence pipeline
A useful repeat workflow combines:
- this Actor for publisher-to-app enumeration,
- a scheduled snapshot,
- warehouse storage keyed by storefront/developer/app,
- a diff job for launches, removals, versions, prices, and ratings,
- alerts and a dashboard for analysts.
That pipeline turns a public developer profile into structured, reviewable market intelligence without manual app-by-app collection.