SignalSeal Docs

SuperWall

Forward SuperWall paywall and transaction events into SignalSeal.

The SuperWall integration pushes paywall views and transactions from SuperWall into SignalSeal, so they get forwarded to your ad networks alongside the events your SDK already reports. You still install the SignalSeal SDK; SuperWall just covers the paywall and transaction side.

An app counts revenue from one subscription source - you can't run SuperWall and RevenueCat at the same time. While SuperWall is connected, Revenue and Proceeds come from SuperWall. See Revenue & Proceeds.

Events SuperWall sends

SignalSeal normalizes every SuperWall transaction webhook to an sw_* event name. Map any of these to an ad-network event in Event mapping.

SuperWall webhookSignalSeal event
Initial purchase, in a trial/intro periodsw_trial_started
Initial purchase, paidsw_subscription_started
Renewal that converts a trialsw_trial_converted
Renewal, paidsw_renewal
Cancellationsw_cancellation
Any event with a negative price (a refund)sw_refund
Uncancellationsw_uncancellation
Expirationsw_expiration
Billing issuesw_billing_issue
Product changesw_product_change
Subscription pausedsw_subscription_paused
Non-renewing purchasesw_non_renewing_purchase

SuperWall doesn't send paywall-view webhooks - only transactions. Anything not in the list above flows through as sw_<type>.

Qualified events

Like RevenueCat, SignalSeal emits a derived event 2 hours after a trial or subscription starts, only if no sw_cancellation or sw_expiration arrived in that window:

Start eventEmitted 2h later if still active
sw_trial_startedsw_trial_qualified
sw_subscription_startedsw_subscription_qualified

Map the _qualified events when you want campaigns to optimize against trials and subscriptions that stuck rather than every raw start.

Set up

Add the integration

In SignalSeal, open your app → Integrations → Add integration → SuperWall. Copy the webhook URL.

Add the webhook in SuperWall

SuperWall → your app's settings → Webhooks → Add webhook. Paste the SignalSeal URL and save. SuperWall shows a signing secret (whsec_…) - copy it.

Paste the signing secret back into SignalSeal

Paste the whsec_… value into the SignalSeal integration form and save. SignalSeal uses it to verify every incoming webhook is really from SuperWall.

So SignalSeal can match SuperWall's events to the right install, your app writes the SignalSeal ID - and the campaign that drove the install - onto the SuperWall user. Pass the SDK's attribution params straight through:

import Superwall from 'expo-superwall/compat'
import { SignalSealSDK } from '@signalseal/react-native'

const attributes = await SignalSealSDK.getAttributionParams()
await Superwall.shared.setUserAttributes(attributes ?? {})

That sets signalseal_id plus the campaign, ad set, ad and keyword, so you can also target paywalls by acquisition source. getAttributionParams() is null until the SDK has configured - safe to call again later. See the iOS and Android SDK pages for the native equivalents.

Verification

A new integration starts in Verification mode while SignalSeal checks the incoming webhooks are real and match a known install. After ~24 hours of healthy traffic it auto-promotes to Active and events flow to ad networks.

Troubleshooting

  • Signature verification failing - paste the full whsec_… value into SignalSeal. The secret rotates if you regenerate it in SuperWall.
  • Events arrive but match rate is low - open a recent webhook in the Live Feed. No install attached means signalseal_id wasn't set on that user; confirm setUserAttributes runs before the paywall is shown.
  • Some paywall events missing - only events ticked in SuperWall's webhook settings are forwarded. Enable the ones you want in SuperWall.