---
title: Apple App Store
description: Connect Apple App Store, understand its sync behavior, and query every table and column it writes.
species: reference
---
# Apple App Store

Connect Apple App Store with issuer id, key id, private key, and vendor number. The source writes 1 fixed table under `titan.apple_app_store`.
```sql
select
  event_date,
  app_name,
  app_apple_id
from titan.apple_app_store.sales_subscriber_detailed
limit 10
```

## Connect Apple App Store

1. Open **Apps**, choose **Connect app**, and select **Apple App Store**.
2. Enter issuer id, key id, private key, and vendor number.
3. Review the tables, then save the source.
4. Watch **Sync history** until the first run completes.

Credentials are stored as secrets. They never become lake columns or appear in query results.

## Sync behavior

Supernova downloads detailed subscriber sales reports and keeps the report fields as typed columns.

A new source syncs when you connect it and then follows its schedule. The default recurring interval is 4 hours. An interrupted run keeps its completed progress and retries safely.

Every lake table also has the [system columns](/v2/docs/concepts/your-lake#the-system-columns) `_synced_at` and `_deleted`; the column reference below lists source columns only.

## Table reference

### `sales_subscriber_detailed`

`titan.apple_app_store.sales_subscriber_detailed` has 26 source columns.

```columns table=apple_app_store.sales_subscriber_detailed
event_date                              date pk             Source field `event_date`.
app_name                                string              Source field `app_name`.
app_apple_id                            integer             Source field `app_apple_id`.
subscription_name                       string pk           Source field `subscription_name`.
subscription_apple_id                   integer             Source field `subscription_apple_id`.
subscription_group_id                   integer             Source field `subscription_group_id`.
standard_subscription_duration          string              Source field `standard_subscription_duration`.
subscription_offer_name                 string              Source field `subscription_offer_name`.
promotional_offer_id                    string              Source field `promotional_offer_id`.
subscription_offer_type                 string              Source field `subscription_offer_type`.
subscription_offer_duration             string              Source field `subscription_offer_duration`.
marketing_opt_in_duration               string              Source field `marketing_opt_in_duration`.
customer_price                          float               Source field `customer_price`.
customer_currency                       string              Source field `customer_currency`.
developer_proceeds                      float               Source field `developer_proceeds`.
proceeds_currency                       string              Source field `proceeds_currency`.
preserved_pricing                       string              Source field `preserved_pricing`.
proceeds_reason                         string              Source field `proceeds_reason`.
client                                  string              Source field `client`.
device                                  string              Source field `device`.
country                                 string              Source field `country`.
subscriber_id                           integer pk          Source field `subscriber_id`.
subscriber_id_reset                     string              Source field `subscriber_id_reset`.
refund                                  string pk           Source field `refund`.
purchase_date                           date pk             Source field `purchase_date`.
units                                   integer             Source field `units`.
```

## Deletes and history

Rows are merged by their source key. When the source can prove that a row was deleted, Supernova keeps the row and sets `_deleted` so queries can choose whether to include history. Filter current-state queries with `where not _deleted`.
