Skip to content

Bulk import

Bulk import seeds your existing customers into Keylight as live, working licenses in a single upload. Keys you supply are preserved; where you don’t have one, Keylight generates it. Every imported license is tagged Migrated so you can track your migration backlog.

This is the developer-driven half of migrating to Keylight. For the customer-driven alternative, see Claim a legacy key.

Dashboard → Licenses → the Import button at the bottom-right of the list.

One import targets one app — you pick the app in the dashboard, not in the file. The first row is a header; column names are matched case-insensitively.

ColumnRequiredWhat it does
emailYesLinks or creates the customer.
key_typeYesWhich key type on the app — matched by id or display name.
license_keyNoThe customer’s existing key. Present → preserved. Blank → Keylight generates one.
nameNoCustomer display name. Defaults to the email.
expires_atNoISO date (e.g. 2030-01-01). Blank → taken from the key type’s duration.

Example:

email,key_type,license_key,name,expires_at
ada@example.com,Pro,ACME-1A2B-3C4D,Ada Lovelace,
grace@example.com,Pro,,Grace Hopper,2030-01-01
  1. Pick the app, optionally add a source label (e.g. legacy-gumroad), and decide whether to email customers their key.
  2. Upload the CSV. Keylight validates without writing anything and shows a preview: how many rows are valid, which rows errored (with row numbers), and which were skipped.
  3. Confirm. Only then are licenses written.

Imported licenses are normal active licenses — once a customer’s app activates the key, they validate exactly like one you minted by hand. The Migrated badge (on the license list and detail) just marks where they came from, so you can see how much of your base has moved over. Customers keep their imported key; issuing a fresh key later stays available but isn’t required.

If an email already has an active license for the app, that row is skipped and reported — never duplicated. So if you fix a few rows and re-upload the file, the customers who already imported are left alone.

Off by default — these are existing customers, and a surprise email blast is rarely what you want. Flip the toggle to send each imported customer their key.

Up to 5,000 rows per file. For a larger base, split it into several files and import them in sequence.

Imported customers are ready for the next step: offer them your new version with an Upgrade. See the major-version example for the full flow.