# Chart one app's paid ads

Chart one competitor app's paid ads: launches, run lengths and creative mixes, for all of its advertisers or one.

## Endpoint: GET /v1/competitors/{platform}/{storeId}/paid-ads/intelligence

- Method: `GET`
- Path: `/v1/competitors/{platform}/{storeId}/paid-ads/intelligence`
- Authentication: Bearer API credential or OAuth access token
- Required scope: `context:read`
- MCP tool: `get_ads`
- MCP action: `app_intelligence`

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `platform` | path | ios | yes | The preview supports iOS only. |
| `storeId` | path | numeric string | yes | Apple App Store identifier. |
| `advertiserExternalId` | query | string | no | Narrow the charts to one of the advertisers the response lists. Omit it for all of them. |

## Known errors

- 400 invalid_request for an invalid filter, identity or limit.
- 401 authentication_required for a missing or invalid credential.
- 402 subscription_required when access is not entitled.
- 403 authorization_required for a missing scope or unavailable preview access.
- 403 workspace_not_accessible when x-genviral-tenancy names a workspace the credential cannot reach.
- 404 not_found when the record is outside the accessible catalogue.
- 429 rate_limited; honor Retry-After when present.
- 429 daily_call_limit; the plan's daily API and MCP calls are used until 00:00 UTC.

## Request

Identify the listing. Every chart covers all of its advertisers unless you name one.

```
curl --get 'https://api.peekpanda.com/v1/competitors/ios/0000000000/paid-ads/intelligence' \
  --header "Authorization: Bearer $PEEKPANDA_TOKEN" \
  --header 'x-genviral-tenancy: personal' \
  --data-urlencode 'advertiserExternalId=example-page'
```

## MCP request

Call get_ads with action app_intelligence. Path fields go in params, filters in query, and a write body in body.

```
{
  "name": "get_ads",
  "arguments": {
    "request": {
      "action": "app_intelligence",
      "params": {
        "platform": "<platform>",
        "storeId": "<storeId>"
      }
    }
  }
}

```

## Response

advertisers lists every advertiser of the app, whichever one the charts narrow to. Days are whole UTC days, the same windows the case file reads. weeks holds 26 Monday weeks, oldest first; liveAds is the part of newAds still live now. longestRunning uses the Search paid ads item shape with short-lived media URLs. medianRunDays and longestRunDays are null when no ad is live.

```
{
  "generatedAt": "2026-09-24T09:00:00.000Z",
  "storeId": "0000000000",
  "advertiserExternalId": null,
  "advertisers": [],
  "totals": {
    "ads": 27,
    "liveAds": 4,
    "advertisers": 1,
    "newAdsLast7Days": 2,
    "newAdsLast30Days": 5,
    "medianRunDays": 12,
    "longestRunDays": 188
  },
  "weeks": [
    {
      "weekStart": "2026-03-09",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-03-16",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-03-23",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-03-30",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-04-06",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-04-13",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-04-20",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-04-27",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-05-04",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-05-11",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-05-18",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-05-25",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-06-01",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-06-08",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-06-15",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-06-22",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-06-29",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-07-06",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-07-13",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-07-20",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-07-27",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-08-03",
      "newAds": 1,
      "liveAds": 0
    },
    {
      "weekStart": "2026-08-10",
      "newAds": 1,
      "liveAds": 1
    },
    {
      "weekStart": "2026-08-17",
      "newAds": 1,
      "liveAds": 1
    },
    {
      "weekStart": "2026-08-24",
      "newAds": 1,
      "liveAds": 1
    },
    {
      "weekStart": "2026-08-31",
      "newAds": 2,
      "liveAds": 1
    }
  ],
  "longevity": [
    {
      "band": "0-6",
      "count": 0
    },
    {
      "band": "7-14",
      "count": 0
    },
    {
      "band": "15-30",
      "count": 0
    },
    {
      "band": "31-60",
      "count": 0
    },
    {
      "band": "61-90",
      "count": 0
    },
    {
      "band": "90+",
      "count": 1
    }
  ],
  "longestRunning": [],
  "formats": [
    {
      "key": "video",
      "label": "Video",
      "count": 27
    }
  ],
  "ctas": [
    {
      "key": "install now",
      "label": "Install now",
      "count": 20
    }
  ],
  "destinations": [
    {
      "key": "app_store",
      "label": "App Store",
      "count": 27
    }
  ],
  "landingPages": [
    {
      "page": "apps.apple.com/app/id0000000000",
      "url": "https://apps.apple.com/app/id0000000000",
      "kind": "app_store",
      "adCount": 27,
      "activeCount": 4,
      "firstSeenAt": "2026-03-02T00:00:00.000Z",
      "lastSeenAt": "2026-09-01T00:00:00.000Z"
    }
  ]
}

```

## Source

Stored paid-ad observations. An ad belongs to the app its own verified App Store link names, or to the app its proven advertiser page runs ads for, web funnels and Google Play links included. There is no spend, impression, reach or country field: Meta does not publish them.

## Refresh

These reads do not collect new ads.
