Apple Ads Transparency Library Scraper
Pricing
Pay per event
Apple Ads Transparency Library Scraper
Search and export public Apple-delivered App Store ads by app or developer, country, and reporting window, with creatives and targeting details.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Search and export public ads from Apple's Ad Repository by app or developer, country, and reporting window.
The Actor turns Apple Ads transparency data into structured dataset rows for creative research, competitive intelligence, and recurring acquisition monitoring.
It uses Apple's public GraphQL data surface directly, so no Apple account, browser, cookie, API key, or proxy is required.
What can you do with Apple Ads Transparency Library Scraper?
- Find ads associated with an App Store app.
- Search all matching ads for an Apple developer.
- Compare creatives delivered across supported EU countries.
- Track first and latest impression dates.
- Export image and video asset URLs in source order.
- Inspect placement, format, language, device, and targeting flags.
- Feed ad records into Sheets, databases, BI tools, or monitoring jobs.
- Deduplicate overlapping app, developer, and country searches by Apple ad ID.
Who is this Apple ads scraper for?
Mobile growth teams can monitor competitor acquisition activity and creative changes.
User-acquisition managers can compare placements, formats, languages, and impression windows across countries.
ASO agencies can collect repeatable evidence for client and competitor research.
App publishers can audit how their own public Apple-delivered ads appear in the transparency repository.
Competitive-intelligence teams can schedule exports and diff them by adId, creative URL, or impression date.
Data teams can consume a typed dataset instead of manually browsing cards in Apple's interface.
Why use this Actor?
Apple's public interface is designed for interactive lookup, not repeatable exports.
This Actor adds:
- app and developer name resolution;
- country and time-window validation;
- limit-aware pagination;
- stable ad-ID deduplication;
- normalized ISO timestamps;
- ordered image and video assets;
- retry handling for temporary upstream errors;
- Apify datasets, API access, schedules, webhooks, and integrations.
The Actor stays HTTP-first and proxy-free to keep runs lightweight.
What Apple ad data is extracted?
| Field | Meaning |
|---|---|
adId | Stable ad identifier reported by Apple |
appId, appName | App Store app identity and localized name |
developerId, developerName | Apple developer identity |
legalName | Legal advertiser or developer name |
placement | App Store placement, such as search results |
format, subFormat | Ad format labels returned by Apple |
countryOrRegion | Country where the ad was delivered |
audienceRefinement | Age, gender, location, and customer-type targeting flags |
firstImpressionDate | First impression in the selected reporting period |
lastImpressionDate | Latest impression in the selected reporting period |
defaultLanguageTag | Creative language tag |
defaultLanguageDisplayName | Human-readable creative language |
defaultPreviewDevice | Device class used for Apple's preview |
adBanner | Icon, subtitle, category, description, and app flags |
adAssets | Ordered image and video creative URLs with dimensions |
matchedEntity* | App or developer selected from Apple's suggestions |
dataStartDate, dataEndDate | Available source-data interval |
scrapedAt | Collection timestamp |
Fields can be null when Apple does not provide them for a particular format or locale.
How to scrape Apple Ad Repository records
- Open the Actor input page.
- Enter one or more app or developer names.
- Choose automatic matching, apps only, or developers only.
- Select one to five supported countries.
- Choose the last 90 days, 180 days, or one year.
- Set the maximum number of unique ads.
- Start the run.
- Open the Apple ads dataset view or download JSON, CSV, Excel, XML, or RSS.
The prefilled TikTok query is intentionally small enough to evaluate quickly and currently resolves to public ad records in Germany.
Input parameters
searchTerms
Required list of 1–20 app or developer names.
Each value must contain 2–100 characters.
Apple's exact suggestion is preferred; otherwise the first suggestion compatible with entityType is selected.
entityType
AUTO— accept the first matching app or developer.APP— consider app suggestions only.DEVELOPER— consider developer suggestions only.
Use an exact App Store name when similarly named apps exist.
countries
Required list of one to five Apple-supported country codes.
Supported countries are Austria, Belgium, Bulgaria, Croatia, Cyprus, Czech Republic, Denmark, Estonia, Finland, France, Germany, Greece, Hungary, Ireland, Italy, Latvia, Luxembourg, Netherlands, Poland, Portugal, Romania, Slovakia, Slovenia, Spain, and Sweden.
dateRange
LAST_90_DAYSLAST_180_DAYSLAST_YEAR
These are Apple's reporting windows, not arbitrary date filters.
maxItems
Maximum unique ads saved across all input searches and countries.
Allowed range: 1–10,000.
The Actor stops pagination as soon as this limit is reached.
Example input
{"searchTerms": ["TikTok - Videos, Shop & LIVE"],"entityType": "APP","countries": ["DE"],"dateRange": "LAST_90_DAYS","maxItems": 25}
For a developer-level multi-market monitor:
{"searchTerms": ["TikTok Ltd."],"entityType": "DEVELOPER","countries": ["DE", "FR", "ES", "IT", "NL"],"dateRange": "LAST_YEAR","maxItems": 250}
Example output
A current public Apple record is normalized into a row like this:
{"adId": "0c5eab9ee36e0e79f8a98e048c41b4a4","appId": 835599320,"appName": "TikTok - Videos, Shop und LIVE","developerId": 1322881000,"developerName": "TikTok Ltd.","legalName": "TIKTOK PTE. LTD.","placement": "APPSTORE_SEARCH_RESULTS","format": "Icon Ad","subFormat": null,"countryOrRegion": "DE","audienceRefinement": {"ageTarget": false,"genderTarget": false,"locationTarget": false,"customerTypeTarget": false},"firstImpressionDate": "2026-07-18T00:00:00.000Z","lastImpressionDate": "2026-07-22T00:00:00.000Z","defaultLanguageTag": "de-DE","defaultLanguageDisplayName": "German","defaultPreviewDevice": "iphone_6_5","adBanner": {"iconPictureUrl": "https://is5-ssl.mzstatic.com/image/thumb/.../1024x1024.png","subtitle": "Entdecken, teilen und liken!","primaryCategory": "Entertainment","inAppPurchases": true,"editorialBadge": false},"adAssets": [{"order": 1,"pictureUrl": "https://is5-ssl.mzstatic.com/image/thumb/.../1920x886.png","videoUrl": "https://apptrailers-ssl.itunes.apple.com/itunes-assets/...m3u8","width": 886,"height": 1920,"orientation": "PORTRAIT"}],"matchedEntityName": "TikTok - Videos, Shop & LIVE","matchedEntityType": "APP","dateRange": "LAST_90_DAYS","scrapedAt": "2026-07-28T00:00:00.000Z"}
Creative arrays may contain image-only assets, video playlists with preview images, or both.
How much does it cost to scrape Apple ads?
The Actor charges a $0.005 one-time start fee, then charges only for unique ads saved to the dataset.
Creative assets included in an ad row have no separate fee.
Current tiered prices per saved ad are:
| Tier | Price per ad |
|---|---|
| Free | $0.000048431 |
| Bronze | $0.000042114 |
| Silver | $0.000032849 |
| Gold | $0.000025268 |
| Platinum | $0.000016845 |
| Diamond | $0.000011792 |
Including the $0.005 start fee, Free-tier totals are about $0.00984 for 100 ads, $0.05343 for 1,000 ads, and $0.48931 for 10,000 ads.
Your final platform bill can also reflect standard Apify platform usage under your plan.
The Actor does not enable residential proxies or a browser, which keeps infrastructure use low.
Pagination, matching, and deduplication
Apple returns result pages of source-defined size.
The Actor requests pages sequentially for each resolved search term.
It stops when Apple reports the result set exhausted or maxItems is reached.
Duplicate ad IDs are saved and billed only once across the entire run.
If a search has no compatible suggestion, the Actor logs a warning and continues with the remaining searches.
A valid no-result search finishes successfully with an empty dataset.
Creative monitoring workflow
Schedule the Actor daily or weekly with a stable input.
Use adId as the primary record key.
Compare consecutive datasets for:
- newly observed ad IDs;
- changed
lastImpressionDatevalues; - new
pictureUrlorvideoUrlvalues; - country-specific creative language;
- format or placement changes;
- audience-refinement flag changes.
Send a webhook after each run to trigger a database load, Slack notification, or diff job.
Export and integration options
The default dataset supports JSON, JSONL, CSV, Excel, XML, RSS, and HTML table exports.
Common workflows include:
- loading records into Google Sheets;
- storing snapshots in BigQuery, Snowflake, or PostgreSQL;
- sending creative URLs to an asset-review queue;
- building a competitor-ad dashboard;
- triggering alerts for newly observed ads;
- joining
appIdwith App Store intelligence datasets.
Media is exposed as source URLs and is not downloaded into Actor storage.
Use the Actor through the Apify API
Replace APIFY_TOKEN with your token.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~apple-ads-transparency-library-scraper/runs?token=APIFY_TOKEN&waitForFinish=120" \-H "Content-Type: application/json" \-d '{"searchTerms": ["TikTok - Videos, Shop & LIVE"],"entityType": "APP","countries": ["DE"],"dateRange": "LAST_90_DAYS","maxItems": 25}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/apple-ads-transparency-library-scraper').call({searchTerms: ['TikTok - Videos, Shop & LIVE'],entityType: 'APP',countries: ['DE'],dateRange: 'LAST_90_DAYS',maxItems: 25,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/apple-ads-transparency-library-scraper').call(run_input={'searchTerms': ['TikTok - Videos, Shop & LIVE'],'entityType': 'APP','countries': ['DE'],'dateRange': 'LAST_90_DAYS','maxItems': 25,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with Apify MCP
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/apple-ads-transparency-library-scraper"
Claude Desktop
Use this remote-server configuration in Claude Desktop:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/apple-ads-transparency-library-scraper"}}}
Cursor
Add the same apify remote MCP URL in Cursor Settings → Tools & MCP → New MCP Server.
VS Code
Add the same apify remote MCP server URL to your workspace MCP configuration, then enable it from the VS Code MCP servers view.
Example prompts:
- “Find recent Apple ads for TikTok in Germany and summarize the formats.”
- “Export Duolingo creatives observed in France during the last 180 days.”
- “Compare Apple ads from this developer across Germany, France, and Spain.”
Reliability and responsible rate handling
Requests use a 30-second timeout.
Network failures, HTTP 429 responses, and temporary 5xx responses receive bounded exponential-backoff retries.
Stable client errors are not retried blindly.
The Actor validates JSON content and GraphQL response shape rather than treating an HTML error page as an empty result.
Concurrency is intentionally conservative because the source endpoint is public and the normal workflow is lightweight.
Limitations
- Results are limited to ads Apple publishes in its Ad Repository.
- The source currently supports 25 countries, not every App Store market.
- Reporting windows are fixed to Apple's 90-day, 180-day, and one-year options.
- Apple can change historical availability, metadata, or creative URLs.
- Suggestion matching is name-based; use exact names and
entityTypefor ambiguous brands. - Asset URLs may expire or change after collection.
- The Actor does not download or transcode media.
- Apple does not expose spend, impressions, clicks, bids, keywords, or performance metrics in this endpoint.
- An empty dataset can mean no matching suggestion or no published ads for the selected filters.
Legal and responsible use
The Actor accesses records Apple makes publicly available for advertising transparency.
Use the data for lawful purposes and comply with Apple's terms, applicable database rights, copyright, privacy, and advertising regulations.
Creative URLs and descriptions may contain third-party intellectual property.
Do not use the Actor to impersonate advertisers, redistribute media without permission, or make unsupported claims about targeting or campaign performance.
You are responsible for your input, collection schedule, retention, and downstream use.
Troubleshooting
Why did my run return no ads?
Check the log for a “No matching Apple app or developer found” warning.
Try the exact App Store app or developer name, choose the correct entityType, broaden the reporting window, or select another supported country.
A resolved entity can still have no ads in the selected market and period.
Why did the Actor select the wrong entity?
Use the complete app/developer name and set entityType to APP or DEVELOPER.
Apple controls suggestion order when no exact name matches.
Why is an asset field null?
Some ad formats contain only an icon, only images, or no video.
Null values reflect Apple's source record rather than a parser failure.
What should I do after a temporary source error?
Inspect the final log message.
The Actor already retries temporary network, rate-limit, and server failures.
If Apple has an extended outage, rerun later rather than increasing memory or adding a proxy.
Related Automation Lab actors
- Facebook Ads Library Scraper for Meta advertiser and creative research.
- Google Ads Transparency Center Scraper for Google advertiser transparency records.
- LinkedIn Ad Library Scraper for LinkedIn ad intelligence.
- Meta Ad Library Page Resolver for resolving brands and domains to Meta advertiser pages.
Use this Actor when the source of truth must specifically be Apple's public Ad Repository.
FAQ
Does this Actor require an Apple account?
No. It uses the anonymous public transparency data surface.
Does it require a proxy?
No proxy is enabled or required for the current implementation.
Can I search by app ID?
The public workflow resolves app or developer names first. Enter the exact App Store name rather than a numeric ID.
Can I request custom dates?
No. Apple exposes only the three rolling reporting windows listed in the input schema.
Are creatives included in the per-ad price?
Yes. Image and video URLs are included in each saved ad record without an additional fee.
Can I run several apps at once?
Yes. Add up to 20 search terms. The global maxItems limit and adId deduplication apply across all of them.
Does the Actor guarantee complete campaign history?
No. It exports records returned by Apple's public repository for the selected filters at run time.