---
title: "App Store Connect by Custom Product Page"
method: GET
path: "/accounts/ios/reports/cpps"
tags: ["App Store Connect"]
---

# App Store Connect by Custom Product Page

`GET /accounts/ios/reports/cpps`

## Request

- Base URL: `https://public-api.apptweak.com/api/public/integrations`
- URL: `https://public-api.apptweak.com/api/public/integrations/accounts/ios/reports/cpps`
- Auth: API key in header `x-apptweak-key`

Get App Store Connect performance for the Custom Product Pages (CPPs) you select, with a breakdown by app, country and CPP. The response contains all the info related to the selected property, grouped by app id, country code and CPP store id, without pagination. <br/><br/> <b>Price</b> <table> <thead><tr><th>Datapoint</th><th>Description</th><th>credits/request</th></tr></thead> <tbody> <tr><td><b>CPP object</b></td><td>Hash containing the name and status of the Custom Product Page, the start date and end date of the report, and the values of the property.</td><td>1</td></tr> </tbody> </table> <br/><br/> <b>Good to know</b> <br/><br/> &bull; Custom Product Page reports cover 6 of the properties listed in the <a href="https://developers.apptweak.com/reference/app-store-connect#property-parameters" target="_blank"><b>property parameter table</b></a>: `impressions-total`, `impressions-total-unique`, `page-view-count`, `page-view-unique`, `units` and `installs`.<br/>&bull; Apple delivers reporting data with up to 2 days of delay, so the last days of a report that reaches today normally come back `null`.<br/>&bull; A CPP whose `status` is `DELETED` still carries the values recorded before it was deleted.<br/>&bull; The CPP ids are the UUIDs App Store Connect assigns; <a href="https://developers.apptweak.com/reference/cpp-by-app" target="_blank"><b>CPP by App</b></a> returns a `cpp_id` for every Custom Product Page observed on the store.<br/>&bull; Update frequency, available history and country availability are those of the other App Store Connect reports, on the <a href="https://developers.apptweak.com/reference/app-store-connect" target="_blank"><b>App Store Connect</b></a> page.

## Query parameters

- `id` string, required
- `cpps` string, required
- `property` 'impressions-total' | 'impressions-total-unique' | 'page-view-count' | 'page-view-unique' | 'units' | 'installs', required
- `apps` string
- `countries` string
- `start_date` string, date
- `end_date` string, date

## Response `200`

One series per CPP, keyed by app ID, then country, then CPP UUID.

- object
  - `result` object
  - `metadata` ResponseMetadata: Standard response envelope: the request as the API parsed it, the credits actually charged (`cost`), and what the call could have cost had every datapoint been available (`max_credit_cost`). Every endpoint of this API returns it unchanged.
    - `request` object
      - `path` string: The path that was called.
      - `params` object, nullable: The query as the API parsed it, with defaults applied.
      - `cost` integer: Credits actually charged for this call.
      - `max_credit_cost` integer: Credits the call could have cost if every datapoint requested had been available.
      - `status` integer: HTTP status of the response.
    - `response` object, nullable: Endpoint-specific notes; null when there are none.

## Other responses

- `401`: Missing or invalid `x-apptweak-key`.
- `403`: The API plan does not include integration data (`IntegrationDataNotInPlanError`), the account is not owned by the key (`ForbiddenError`), an app in `apps` does not belong to the account, or the credit balance is too low (`NotEnoughCreditsError`). Nothing is charged.
- `422`: A parameter is missing, malformed or out of range. `error.parameter` names it.
- `429`: Rate limit exceeded (60 requests per 10 seconds). Retry with backoff.

---

[API](https://skmtc.dev/apptweak/apis/console-data-api.md) - [All operations](https://skmtc.dev/apptweak/apis/console-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/apptweak/apis/console-data-api/revisions/2e220a518664?raw)
