Migrate existing customers
Bring the customers you already have onto the Wall, from Stripe or from a file.
Whatever you sold with before, the Wall needs one fact per person: an email address and what they hold. A tool's Import page takes that from two sources. Nothing is charged and nothing is emailed by an import; a person appears under Customers and the extension unlocks for them at its next check.
Before you begin
- The tool registered, with its plans under Pricing. Imported licences and subscriptions are recorded against a plan.
- For a Stripe import: the same Stripe account connected under Configure → Payments that took the sales.
From Stripe
For sales made on your Stripe account before the Wall: payment links, Checkout, invoices, and subscriptions. On the Hobby plan a sale made after the tool joined the Wall, the day it was created, is refused: it was made outside the Wall, without its fee. On Pro it is imported as a pass. See Plans.
- On the tool's Import page, select Read the account. The Wall reads every paid Checkout Session and every running subscription that is not its own. Nothing is written by reading.
- The sales appear grouped by what was sold: product, amount, interval. For each group, choose the plan it becomes, or leave it on Skip.
- Select Import on a group.
What is written:
| Sale | Becomes | And |
|---|---|---|
| A one-time payment | A lifetime licence for the buyer's email, on the plan chosen, dated from the sale | Carries the Stripe payment id, so a refund or dispute made in Stripe reaches the licence |
| A subscription | The subscription on the buyer's account, on the plan chosen | Tagged on Stripe as the Wall's, so every later event about it — a renewal, a cancellation, a plan switch — reaches the Wall |
A licence attaches to an account when the person signs in with that address; until then it is the address's, as a purchase made signed out is. A subscription needs an account, which the import creates. A sale with no email cannot be imported and is listed as such.
Reading the account again, or importing a group twice, changes nothing: each sale is recorded once. Each sale written is one of the workspace's 20,000 additions a day (Limits); one already imported counts nothing.
From a file
For everything else: Gumroad, Lemon Squeezy, Paddle, a spreadsheet, a beta list. One CSV, one row per person:
email,kind,plan,key,since,until,note
maya@example.com,licence,default,GUM-1234-5678,2025-11-03,,from Gumroad
beta@example.com,grant,,,2026-01-10,2026-12-31,beta tester| Column | ||
|---|---|---|
email | required | The person's address. |
kind | licence or grant | Default licence. A grant is access without a purchase, with or without an end. |
plan | a one-time plan's id | Licences only. Empty: the default plan. |
key | A key the person already has. Kept, so they can still claim by it on their account page. Empty: a new key is recorded and never sent; the person signs in instead. | |
since | 2026-03-14 | When they bought, or when access began. |
until | 2026-03-14 | Grants only. Empty: until revoked. A date already past is refused: the grant would hold nothing. |
note | Shown on the customer's page. |
Choose the file; the Wall reads it and shows how many rows are ready and which have a problem, by line. Select Import. A row already imported is skipped, so a file can be sent again after fixing a line.
Every row is a pass: on the Hobby plan, rows beyond 100 live passes are left out with the reason. See Plans.
A file holds at most 10,000 rows, saved as CSV (UTF-8); a file with NUL characters, as a UTF-16 file has, is refused. Each row written is one of the workspace's 20,000 additions a day, shared with grants and customers added from the dashboard, the API and the command line. A row already imported counts nothing. Rows past the day's additions are left out with the reason: send the file again the next day. See Limits.
Subscriptions cannot be imported from a file: a card cannot move between platforms. See below.
Cases
| You have | Do |
|---|---|
| Stripe payment links or Checkout | From Stripe, one-time payments → a lifetime plan. |
| Stripe subscriptions | From Stripe, subscriptions → a subscription plan. Billing continues on Stripe as before. |
| Licence keys from another platform | From a file, with the key column. Buyers keep their keys; they can also just sign in. |
| A list of buyers with no keys | From a file, without key. Buyers sign in with their address. |
| Subscriptions on another platform | Two ways. Import them as grants with until set to each period's end, and email buyers to subscribe on your checkout page before then. Or keep billing there and manage access from its webhooks with the API: a grant when a subscription starts, revoked when it ends. Grants are passes: 100 live at once on Free. |
| Free users you want to keep free | Set the Free plan to everything or everything with an account under Pricing; nothing to import. To keep only the existing ones free once you charge, import them as grants. |
| Buyers you know only by name | Nothing to import: the Wall identifies a buyer by email. |
After importing
- Imported people are under Customers, with the note and date you gave.
- The extension unlocks for a person once they sign in with the imported address, or at once on a device that already holds an imported key.
- Refunds, cancellations and plan switches for Stripe-imported sales reach the Wall through Stripe's webhooks as for any other sale.