Toolaby Wall

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.

  1. 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.
  2. The sales appear grouped by what was sold: product, amount, interval. For each group, choose the plan it becomes, or leave it on Skip.
  3. Select Import on a group.

What is written:

SaleBecomesAnd
A one-time paymentA lifetime licence for the buyer's email, on the plan chosen, dated from the saleCarries the Stripe payment id, so a refund or dispute made in Stripe reaches the licence
A subscriptionThe subscription on the buyer's account, on the plan chosenTagged 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
emailrequiredThe person's address.
kindlicence or grantDefault licence. A grant is access without a purchase, with or without an end.
plana one-time plan's idLicences only. Empty: the default plan.
keyA 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.
since2026-03-14When they bought, or when access began.
until2026-03-14Grants only. Empty: until revoked. A date already past is refused: the grant would hold nothing.
noteShown 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 haveDo
Stripe payment links or CheckoutFrom Stripe, one-time payments → a lifetime plan.
Stripe subscriptionsFrom Stripe, subscriptions → a subscription plan. Billing continues on Stripe as before.
Licence keys from another platformFrom a file, with the key column. Buyers keep their keys; they can also just sign in.
A list of buyers with no keysFrom a file, without key. Buyers sign in with their address.
Subscriptions on another platformTwo 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 freeSet 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 nameNothing 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.

On this page