# Moving from Whop to SIGNL

> Bring your Whop People export, payments and metrics into SIGNL, with a dry run first, and see what you set up again.

Updated 2 October 2026.

## What comes across from Whop

SIGNL brings three things across from Whop: the people in your People export, the payments Whop reports to a webhook, and, once a Whop API key is stored for the client, a set of Whop metrics pulled each day.
The People export is a one-off backfill, not a sync.
Each row becomes one visitor, with the email, name, phone, visit count, lifetime value, first and last seen dates, location, device and the first and last source.
A person with at least one purchase is marked as a customer.

## Bring your People export in

1. Export People from Whop as a CSV file.
2. Run `pnpm import:whop-people` with `--client` set to the client's slug and `--file` set to the CSV path.
3. Read the dry run. It reports the rows read, how many are new, how many already exist and the revenue involved, and writes nothing.
4. Run it again with `--apply` to write.

The script needs the Supabase URL and the service role key set in its environment, so it is run by whoever looks after your SIGNL deployment rather than from the Imports page.
Running it twice updates rows rather than duplicating them, because each person is keyed on their Whop person id.
Lifetime value in dollars is multiplied by 100 into cents, the unit SIGNL stores.

### When someone is already in SIGNL

A person whose email SIGNL already holds is enriched rather than duplicated.
Enrichment fills blanks and never overwrites an email, name or phone SIGNL already has.
Revenue is taken from Whop when it is higher than what SIGNL holds.

### Undo

New rows carry the tag whop-import and enriched rows carry whop-enriched.
The dry run prints a delete statement that removes only the whop-import rows, so enriched people are never deleted by an undo.

## Connect payments

Open Payments, then Connections, and copy the Whop URL into Whop's webhook settings.
The URL carries your client id as a query parameter, and the endpoint refuses a delivery without one.
Paste the signing secret Whop shows for that webhook into the same card.
SIGNL stores the secret encrypted and never shows it again.
A successful payment and a refund from Whop are recorded in the payments ledger, with the fee taken from the difference between the gross and net amounts.
A membership becoming valid tags the visitor whop-member.

## What you set up again

- The webhook in Whop, pointing at the URL above.
- Any automation that should react to a payment or a new member.
- The Whop API key for metrics. No self-service form stores it yet.

## What does not come across

- Individual events. The export has totals and a first and last source, not the events behind the visit count, so imported people have no journey timeline.
- Rows for bots, and rows missing an id or a first or last seen date.
- Individual past payments. A person's lifetime value comes across as one total on their row.
