> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appeeky.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Apple Ads Library

> See which competitors run Apple Ads in the EU — placements, countries, impression dates, and creatives. No Apple account required.

Appeeky shows you which apps are running **Apple Ads** in the EU: where they advertise, which App Store placements they use, when impressions were recorded, and what creatives they're running. Look up any competitor by App ID — no Apple Search Ads connection, no credentials.

This is **competitor intelligence**. [Apple Search Ads](/docs/apple-search-ads) is for managing your own campaigns; Apple Ads Library is for researching anyone else's. Data is sourced from Apple's public Ad Repository (published under the EU Digital Services Act).

<Note>
  **Coverage is EU-only.** The repository contains ads delivered in 25 EU storefronts (AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, DE, GR, HU, IE, IT, LV, LU, NL, PL, PT, RO, SK, SI, ES, SE). An app that advertises exclusively in the US, UK, or other non-EU regions will legitimately return zero ads here. Upstream data is delayed \~7 days.
</Note>

***

## Get App Apple Ads Intelligence

```
GET /v1/apps/{appId}/apple-ads
```

Aggregated Apple Ads signal for one app, plus the underlying ad list. `appId` is the numeric Apple App ID (trackId).

**Cost:** 3 credits

### Query parameters

| Parameter    | Type    | Default                  | Description                                          |
| ------------ | ------- | ------------------------ | ---------------------------------------------------- |
| `countries`  | string  | all covered EU countries | Comma-separated EU storefront codes, e.g. `DE,FR,ES` |
| `datePreset` | string  | `LAST_90_DAYS`           | `LAST_90_DAYS`, `LAST_180_DAYS`, or `LAST_YEAR`      |
| `includeAds` | boolean | `true`                   | Set `false` to return only the summary               |

### Example

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl "https://api.appeeky.com/v1/apps/570060128/apple-ads?datePreset=LAST_90_DAYS" \
  -H "X-API-Key: $APPEEKY_API_KEY"
```

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "data": {
    "appId": 570060128,
    "datePreset": "LAST_90_DAYS",
    "coverage": "EU_ONLY",
    "dataStartDate": "2026-03-31",
    "dataEndDate": "2026-06-29",
    "summary": {
      "isAdvertising": true,
      "totalAds": 6,
      "countries": [
        { "code": "DE", "adCount": 3 },
        { "code": "FR", "adCount": 2 },
        { "code": "ES", "adCount": 1 }
      ],
      "placements": { "APPSTORE_SEARCH_RESULTS": 5, "APPSTORE_TODAY_TAB": 1 },
      "formats": { "Icon + Asset Ad": 4, "Icon Ad": 2 },
      "firstImpressionDate": "2026-04-02",
      "lastImpressionDate": "2026-07-01",
      "usesAudienceRefinement": false
    },
    "ads": [
      {
        "adId": "7704366945e755420fd4e5b7059de024",
        "appId": 570060128,
        "appName": "Duolingo: Sprachen und Schach",
        "developerName": "Duolingo",
        "placement": "APPSTORE_SEARCH_RESULTS",
        "format": "Icon + Asset Ad",
        "countryOrRegion": "DE",
        "firstImpressionDate": "2026-06-27",
        "lastImpressionDate": "2026-07-01",
        "adBanner": { "subtitle": "...", "primaryCategory": "..." },
        "adAssets": [{ "pictureUrl": "https://...", "orientation": "PORTRAIT" }]
      }
    ]
  }
}
```

### Summary fields

| Field                                        | Description                                                                                                                  |
| -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `isAdvertising`                              | Whether at least one Apple-delivered ad was recorded in the period                                                           |
| `totalAds`                                   | Total ad entries across the requested storefronts                                                                            |
| `countries`                                  | Per-storefront ad counts, sorted descending                                                                                  |
| `placements`                                 | Ad counts per App Store surface: `APPSTORE_SEARCH_RESULTS`, `APPSTORE_TODAY_TAB`, `APPSTORE_SEARCH_TAB`                      |
| `formats`                                    | Ad counts per format (`Icon Ad`, `Icon + Asset Ad`)                                                                          |
| `firstImpressionDate` / `lastImpressionDate` | Earliest and latest recorded impression across all ads — a recent `lastImpressionDate` means the app is actively advertising |
| `usesAudienceRefinement`                     | Whether any ad used age, gender, location, or customer-type targeting                                                        |

***

## Search Advertisers

```
GET /v1/ads/apple/search?q={name}
```

Find advertised apps and developers by name. Only entities with at least one EU-delivered ad are searchable. Returned `id` values are Apple App IDs (`type: APP`) or developer IDs (`type: DEVELOPER`).

**Cost:** 1 credit

| Parameter | Type   | Default         | Description                                 |
| --------- | ------ | --------------- | ------------------------------------------- |
| `q`       | string | —               | App or developer name, minimum 2 characters |
| `types`   | string | `APP,DEVELOPER` | `APP`, `DEVELOPER`, or both                 |
| `limit`   | number | 20              | Max results (1-50)                          |

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl "https://api.appeeky.com/v1/ads/apple/search?q=duolingo&types=APP" \
  -H "X-API-Key: $APPEEKY_API_KEY"
```

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "data": {
    "entities": [
      { "id": 570060128, "name": "Duolingo: Language Lessons", "type": "APP" }
    ],
    "totalResults": 1
  }
}
```

***

## Get Ad Variations

```
GET /v1/ads/apple/ads/{adId}
```

Full detail for a single ad: locale variations, per-device creative assets (image and video URLs), app icon variations, and audience refinement. Use an `adId` from the app intelligence response.

**Cost:** 2 credits

| Parameter    | Type   | Default        | Description                                     |
| ------------ | ------ | -------------- | ----------------------------------------------- |
| `datePreset` | string | `LAST_90_DAYS` | `LAST_90_DAYS`, `LAST_180_DAYS`, or `LAST_YEAR` |

***

## MCP Tools

The same capabilities are available on the [Appeeky MCP Server](/docs/mcp):

| Tool                              | Description                                                       |
| --------------------------------- | ----------------------------------------------------------------- |
| `apple_ads_library_search`        | Search advertised apps/developers by name                         |
| `apple_ads_library_app_ads`       | Apple Ads intelligence summary (and optional ad list) for one app |
| `apple_ads_library_ad_variations` | Locale variations and creative assets for one ad                  |

### Example prompts

* *"Is Duolingo running Apple Ads in the EU right now? Which placements?"*
* *"Compare the Apple Ads footprint of my top 3 competitors."*
* *"Show me the creatives Photoroom is using in its Apple Ads."*

***

## Errors

| Code                                 | Status | Meaning                                       |
| ------------------------------------ | ------ | --------------------------------------------- |
| `INVALID_APP_ID`                     | 400    | App ID is not numeric                         |
| `INVALID_QUERY`                      | 400    | Search query shorter than 2 characters        |
| `INVALID_COUNTRY`                    | 400    | No valid EU storefront code in `countries`    |
| `APPLE_AD_REPOSITORY_RATE_LIMITED`   | 429    | Apple's upstream rate limit hit — retry later |
| `APPLE_AD_REPOSITORY_UPSTREAM_ERROR` | 502    | Apple Ad Repository returned an error         |
| `APPLE_AD_REPOSITORY_TIMEOUT`        | 504    | Upstream request timed out                    |

Responses are cached server-side (6-12 hours) — safe, since the upstream data itself is delayed by \~7 days.
