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 webhook | SignalSeal event |
|---|---|
| Initial purchase, in a trial/intro period | sw_trial_started |
| Initial purchase, paid | sw_subscription_started |
| Renewal that converts a trial | sw_trial_converted |
| Renewal, paid | sw_renewal |
| Cancellation | sw_cancellation |
| Any event with a negative price (a refund) | sw_refund |
| Uncancellation | sw_uncancellation |
| Expiration | sw_expiration |
| Billing issue | sw_billing_issue |
| Product change | sw_product_change |
| Subscription paused | sw_subscription_paused |
| Non-renewing purchase | sw_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 event | Emitted 2h later if still active |
|---|---|
sw_trial_started | sw_trial_qualified |
sw_subscription_started | sw_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.
Link the install to 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_idwasn't set on that user; confirmsetUserAttributesruns 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.