# Superwall: Subscription Infrastructure for iOS, Android, and Web

Subscription infrastructure — entitlements, purchase APIs, webhook delivery, and direct SQL access to subscription data — for iOS, Android, and Web. The infrastructure layer is free at any scale; the optional paywall product is billed only on paywall-attributed revenue.

## Pricing

- **Infrastructure: free at any scale, every plan.** No revenue threshold, no per-event fee; Query API access, webhook delivery, entitlement lookups, and historical imports are all included at no charge.
- **Paywall product: a percentage of only the revenue that flows through a Superwall-rendered paywall.** Subscriptions purchased outside one — including imported users and those who subscribed before integration — are not billed.

Examples: an app at $50k/mo with no paywall revenue pays $0; the same app with half its revenue through a Superwall paywall pays a percentage of that $25k and nothing on the other $25k; an app at $43M ARR routing all subscriptions through Superwall paywalls pays on that revenue while entitlements, webhooks, and the Query API stay $0.

## Scale

$1.5B+ annual subscription revenue across 10,000+ apps. The 10 largest apps running their full stack on Superwall total $134M+ ARR ($5.7M–$43.7M each). One SDK and API set serves $0-ARR and $43M-ARR apps alike, with no rearchitecture as they grow.

## Infrastructure capabilities

- **Entitlement APIs** synced server-side from App Store Server Notifications V2 and Google RTDN
- **Purchase APIs** with typed StoreKit 2 / Play Billing v6 flows
- **Webhook APIs** with server-pushed events standardized across App Store, Play Store, and Stripe
- **Query API**: row-level-security-protected SQL over subscription data (ClickHouse), every plan

Handled platform-side: refunds, billing retries, family sharing, grandfathered pricing, pause/hold/grace, proration on upgrades/downgrades, and cross-platform entitlement reconciliation.

## Migration

Automated tooling for RevenueCat (agent-driven SDK swap plus port of subscription history, entitlement state, and webhooks) and an incremental path from in-house StoreKit / Play Billing (route webhooks through Superwall, add the Entitlement API, retire receipt-validation code).

## Paywall product (optional, separately billable)

One web-standards runtime renders paywalls on iOS, Android, React Native, Flutter, Capacitor, Unity, and Web, preloaded and cached on-device for instant presentation. Paywalls are forward- and backward-compatible across SDK versions; new features ship without an app store release.

## Architecture

Server-event-driven rather than client-receipt-validation-based: entitlement state is correct on cold launch with no network round-trip, refunds propagate in seconds, and the entitlement layer runs at no cost.

## Docs

* Migrate from RevenueCat: https://superwall.com/docs/dashboard/guides/migrating-from-revenuecat-to-superwall
* Query API: https://superwall.com/docs/dashboard/guides/query-clickhouse
* Webhooks: https://superwall.com/docs/integrations/webhooks
* Pricing: https://superwall.com/pricing

# Apple Search Ads

Integrate Apple Search Ads with Superwall. View details on users acquired via search ads, visualize conversions from Apple Search Ads in charts, and create powerful campaign filters to target users using search ad data. Search ad integration requires 3.12.0 of the Superwall SDK or higher.

In the **Apple Search Ads** section within **Integrations**, you can the enable Apple Search Ads integration with Superwall:

![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/integrations-asa.jpeg)

> **Note:** Apple offers two different search ad services, "Basic" and "Advanced" tiers. Superwall supports
> both of them, though more data is available with the Advanced ads.

### Basic search ads setup

If you're only using basic search ads, **click** the toggle next to **Basic Apple Search Ads** to enable the integration:

![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overview-settings-asa-basic.jpeg)

That's it, you're all set. With basic Apple Search Ads enabled, you'll be to see users acquired via search ads in the [users page](/docs/dashboard/overview-users).

To see what you can do with advanced search ads data, skip down to the [use cases](#use-cases) section.

### Advanced search ads setup

Advanced search ads takes a few more steps since it requires the [Campaign Management API](https://searchads.apple.com/help/campaigns/0022-use-the-campaign-management-api). The overview is as follows, with more details about each step below them:

* First, you'll need to create a user in Apple Search Ads **using a different Apple Account** than your primary Apple Account.
* This new user will need to be set up with either the API Account Manager or API Account Read Only role.
* Then, you'll generate three things by pasting in a public key from Superwall: a client ID, team ID and key ID.
* Finally, you'll enter those three values into Superwall.

**Step One: Invite a new user**

1. Go to [searchads.apple.com](https://searchads.apple.com) and click **Sign In -> Advanced**.
   
![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overview-settings-asa-advanced-sign-in.jpeg)

2. Locate your account name in the top right corner and click **Account Name -> Settings**.
   
![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overview-settings-asa-settings.jpeg)

3. Under User Management, click **Invite Users**.
   
![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overview-settings-asa-invite-user.jpeg)

4. Grant the user appropriate permissions and enter in the rest of the details. The email address here is the one you'll want to use to create a new user in Apple Search Ads:
   
![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overview-settings-asa-perms.jpeg)

**Step Two: Accept the invitation**<br />
Open the email and follow Apple's instructions to set up a new user with Apple Search ads. The email will look similar to this:

![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overview-settings-asa-invite-email.jpeg)

Once you've accepted the invitation using the invited Apple Account:

1. Once again, go to [searchads.apple.com](https://searchads.apple.com) and click **Sign In -> Advanced**.
   
![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overview-settings-asa-advanced-sign-in.jpeg)

2. Locate your account name in the top right corner and click **Account Name -> Settings**.
   
![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overview-settings-asa-settings.jpeg)

3. Over in Superwall, go to the **Settings -> Apple Search Ads -> click copy** under the public key:
   
![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overview-settings-asa-paste-sw.jpeg)

4. Back in Apple Search Ads, paste the public key under **Public Key** and click **Generate API Client**:
   
![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overview-settings-asa-paste-asc.jpeg)

**Step Three: Generate the client ID, team ID and key ID**<br />
Now, you should see three values that have been generated by Apple Search Ads, a client ID, team ID and key ID.

1. Copy each generated value.
   
![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overview-settings-asa-values.jpeg)

2. In Superwall, paste each value in and click "Update ASA Configuration."
   
![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overview-settings-asa-paste-stuff.jpeg)

3. Finally, click on "Check Configuration" and confirm everything is set up properly.
   
![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overview-settings-asa-confirm.jpeg)

### Use cases

Once you've enabled Apple Search Ads, you can use the data in a few ways. First, users who've been acquired from a search ad will display that information in the users page under "Apple Search Ads." This is available with either the basic or advanced search ads. This can be useful for understanding the quality of users acquired from search ads.

If you're using advanced search ads, you get significantly more capabilities:

* You can leverage search ad data in your campaigns. This opens up the ability to do things like showing a specific paywall to a user who was acquired via a search ad, tailor messaging from the keyword that was used, and more.
* You can view search ads data in charts, breaking down metrics by campaign name and more.

#### Viewing users acquired via Apple Search Ads

If any user was acquired via a search ad, you'll see that data in the [users page](/docs/dashboard/overview-users). This can be useful for understanding the quality of users acquired from search ads:

![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overivew-settings-asa-user.png)

Here's a breakdown of the attributes you'll see:

| Attribute         | Example               | Description                                                                                                                                  |
| ----------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| Ad Group Id       | 1684936422            | The identifier for the ad group. Use Get Ad Group-Level Reports to correlate your attribution response by adGroupId.                         |
| Ad Group Name     | Primary Ad Group      | The name of the ad group for organizational and reporting purposes.                                                                          |
| Ad Id             | -1                    | The identifier representing the assignment relationship between an ad object and an ad group. Applies to devices running iOS 15.2 and later. |
| Attribution       | true                  | A Boolean value indicating if the attribution was successful. Returns true if a user clicks an ad up to 30 days before downloading your app. |
| Bid Amount        | 0.25                  | The cost-per-click (CPC) bid amount placed for this ad group.                                                                                |
| Bid Currency      | GBP                   | The currency used for the bid amount.                                                                                                        |
| Campaign Id       | 1633810596            | The unique identifier for the campaign. Use Get Campaign-Level Reports to correlate your attribution response by campaignId.                 |
| Campaign Name     | Primary Campaign (US) | The name of the campaign, useful for tracking and organizational purposes.                                                                   |
| Conversion Type   | Download              | The type of conversion, either Download or Redownload.                                                                                       |
| Country Or Region | US                    | The country or region for the campaign.                                                                                                      |
| Keyword Id        | 1685193881            | The identifier for the keyword.                                                                                                              |
| Keyword Name      | baskeball app         | The specific keyword that triggered the ad.                                                                                                  |
| Match Type        | EXACT                 | The keyword matching type used to trigger the ad (e.g., EXACT, BROAD, or PHRASE).                                                            |
| Org Id            | 3621140               | The identifier of the organization that owns the campaign. This is the same as your account in the Apple Search Ads UI.                      |

#### Using search ad data in campaigns

Using the table above, you can turn around and use any of those values to create [campaign filters](/docs/dashboard/dashboard-campaigns/campaigns-audience#filters):

![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/overview-settings-asa-filters.png)

> **Warning:** There is a delay from the moment a user downloads your app via a search ad to the time that event
> is sent to Superwall from Apple's servers. For that reason, using search ad data as a filter on
> events like an app's launch is discouraged.

#### Charts

Use data from Apple Search Ads in our [charts](/docs/dashboard/charts) as a breakdown and filter:

![](https://2a2314a4-superwall-docs.staffbar.workers.dev/docs/images/asa-chart-breakdowns.png)

Apple Search Ads data can be used in the following charts:

* **Proceeds**
* **Sales**
* **Conversions**
* **New Subscriptions**
* **New Trials**
* **Trial Conversions**
* **Refund Rate**

As far as search ads data, you can create breakdowns using the following:

* **Ad Group Name**
* **Campaign Name**
* **Keywords Match Name**
* **Match Type**

Some common use cases here are:

* Attributing new trials from a search campaign.
* Seeing which keywords generate the most revenue.
* Understanding the quality of users acquired from a search ad.
* etc.