Apple Ads Transparency Library Scraper avatar

Apple Ads Transparency Library Scraper

Pricing

Pay per event

Go to Apify Store
Apple Ads Transparency Library Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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:

  1. app and developer name resolution;
  2. country and time-window validation;
  3. limit-aware pagination;
  4. stable ad-ID deduplication;
  5. normalized ISO timestamps;
  6. ordered image and video assets;
  7. retry handling for temporary upstream errors;
  8. 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?

FieldMeaning
adIdStable ad identifier reported by Apple
appId, appNameApp Store app identity and localized name
developerId, developerNameApple developer identity
legalNameLegal advertiser or developer name
placementApp Store placement, such as search results
format, subFormatAd format labels returned by Apple
countryOrRegionCountry where the ad was delivered
audienceRefinementAge, gender, location, and customer-type targeting flags
firstImpressionDateFirst impression in the selected reporting period
lastImpressionDateLatest impression in the selected reporting period
defaultLanguageTagCreative language tag
defaultLanguageDisplayNameHuman-readable creative language
defaultPreviewDeviceDevice class used for Apple's preview
adBannerIcon, subtitle, category, description, and app flags
adAssetsOrdered image and video creative URLs with dimensions
matchedEntity*App or developer selected from Apple's suggestions
dataStartDate, dataEndDateAvailable source-data interval
scrapedAtCollection timestamp

Fields can be null when Apple does not provide them for a particular format or locale.

How to scrape Apple Ad Repository records

  1. Open the Actor input page.
  2. Enter one or more app or developer names.
  3. Choose automatic matching, apps only, or developers only.
  4. Select one to five supported countries.
  5. Choose the last 90 days, 180 days, or one year.
  6. Set the maximum number of unique ads.
  7. Start the run.
  8. 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_DAYS
  • LAST_180_DAYS
  • LAST_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:

TierPrice 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 lastImpressionDate values;
  • new pictureUrl or videoUrl values;
  • 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 appId with 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 os
from apify_client import ApifyClient
client = 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().items
print(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 entityType for 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.

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.

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.