> ## 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.

# App Store Connect Metrics

> Sales and Trends data synced from your connected ASC account — downloads, revenue, IAP, subscriptions

The App Store Connect Metrics API returns **aggregated sales data** from your connected App Store Connect account. Data is synced daily from Apple's Sales and Trends reports into Appeeky — no need to pass ASC credentials on each request.

<Note>
  **Requires connected ASC account.** Connect your App Store Connect API key and Vendor Number in [appeeky.com → Settings → Integrations](https://appeeky.com). Data syncs nightly and on manual sync.
</Note>

<Info>
  **Pro feature** — requires Indie plan or higher. API key path: **2 credits** per request. JWT (web): plan check only.
</Info>

***

## Overview

| Endpoint                              | Description                                     |
| ------------------------------------- | ----------------------------------------------- |
| `GET /v1/connect/metrics`             | Overview: totals, per-app breakdown, daily rows |
| `GET /v1/connect/metrics/apps`        | List app IDs that have metrics data             |
| `GET /v1/connect/metrics/apps/:appId` | Single app: daily series + country breakdown    |

### Data available

* **App Units** (downloads)
* **Revenue** (USD)
* **In-App Purchases** (count)
* **Subscriptions** (snapshot)
* **Free Trials** (snapshot)
* **Country/Territory** breakdown (per-app detail only)

Sync fetches up to **90 days** of data. Use `from` and `to` to filter the range.

## Get Overview Metrics

```
GET /v1/connect/metrics
```

Returns totals and per-app breakdown for the date range.

### Query parameters

| Name    | Type   | Default     | Description                 |
| ------- | ------ | ----------- | --------------------------- |
| `from`  | string | 30 days ago | Start date `YYYY-MM-DD`     |
| `to`    | string | today       | End date `YYYY-MM-DD`       |
| `appId` | string | —           | Optional: filter to one app |

<CodeGroup>
  ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
  curl "https://api.appeeky.com/v1/connect/metrics?from=2026-02-19&to=2026-03-21" \
    -H "X-API-Key: apk_your_key_here"
  ```

  ```javascript JavaScript theme={"theme":{"light":"github-light","dark":"github-dark"}}
  const res = await fetch(
    "https://api.appeeky.com/v1/connect/metrics?from=2026-02-19&to=2026-03-21",
    { headers: { "X-API-Key": "apk_your_key_here" } }
  );
  const { data } = await res.json();
  ```
</CodeGroup>

**Response (200 OK):**

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "data": {
    "from": "2026-02-19",
    "to": "2026-03-21",
    "totals": {
      "downloads": 1250,
      "revenue": 89.5,
      "subscriptions": 42,
      "trials": 12,
      "iap_count": 320
    },
    "apps": [
      {
        "appId": "6759740679",
        "appName": "Voice Tape Record",
        "downloads": 1100,
        "revenue": 75.2,
        "subscriptions": 38,
        "trials": 10,
        "iap_count": 280
      }
    ],
    "rows": [
      {
        "app_apple_id": "6759740679",
        "app_name": "Voice Tape Record",
        "metric_date": "2026-03-20",
        "downloads": 45,
        "revenue": 3.2,
        "subscriptions": 2,
        "trials": 0,
        "iap_count": 12
      }
    ]
  }
}
```

***

## List Apps with Metrics

```
GET /v1/connect/metrics/apps
```

Returns distinct app IDs that have metrics data (for linking to app detail).

<CodeGroup>
  ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
  curl "https://api.appeeky.com/v1/connect/metrics/apps" \
    -H "X-API-Key: apk_your_key_here"
  ```
</CodeGroup>

**Response (200 OK):**

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "data": [
    { "app_apple_id": "6759740679", "app_name": "Voice Tape Record" }
  ]
}
```

***

## Get App Detail (Daily + Countries)

```
GET /v1/connect/metrics/apps/:appId
```

Returns daily time series and country/territory breakdown for a single app.

### Path parameters

| Name    | Description                        |
| ------- | ---------------------------------- |
| `appId` | App Store Connect app ID (numeric) |

### Query parameters

| Name   | Type   | Default     | Description             |
| ------ | ------ | ----------- | ----------------------- |
| `from` | string | 90 days ago | Start date `YYYY-MM-DD` |
| `to`   | string | today       | End date `YYYY-MM-DD`   |

<CodeGroup>
  ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
  curl "https://api.appeeky.com/v1/connect/metrics/apps/6759740679?from=2026-02-19&to=2026-03-21" \
    -H "X-API-Key: apk_your_key_here"
  ```
</CodeGroup>

**Response (200 OK):**

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "data": {
    "appId": "6759740679",
    "appName": "Voice Tape Record",
    "from": "2026-02-19",
    "to": "2026-03-21",
    "totals": {
      "downloads": 1100,
      "revenue": 75.2,
      "subscriptions": 38,
      "trials": 10,
      "iap_count": 280
    },
    "daily": [
      {
        "metric_date": "2026-03-20",
        "downloads": 45,
        "revenue": 3.2,
        "subscriptions": 2,
        "trials": 0,
        "iap_count": 12
      }
    ],
    "countries": [
      { "country": "US", "downloads": 520, "revenue": 42.1 },
      { "country": "GB", "downloads": 180, "revenue": 12.5 }
    ]
  }
}
```

***

## Error Codes

| Status | Code                  | When                                   |
| ------ | --------------------- | -------------------------------------- |
| 401    | `MISSING_AUTH`        | No Authorization or X-API-Key header   |
| 401    | `INVALID_TOKEN`       | Invalid or expired JWT                 |
| 401    | `INVALID_API_KEY`     | Invalid or inactive API key            |
| 403    | `PRO_FEATURE`         | Free plan — upgrade to Indie or higher |
| 404    | `USER_NOT_FOUND`      | User not in system (connect ASC first) |
| 429    | `RATE_LIMIT_EXCEEDED` | Not enough credits (2 per request)     |
| 500    | `METRICS_ERROR`       | Database or sync error                 |

***
