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.
Where it is
Section titled “Where it is”Dashboard → Licenses → the Import button at the bottom-right of the list.
CSV format
Section titled “CSV format”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.
| Column | Required | What it does |
|---|---|---|
email | Yes | Links or creates the customer. |
key_type | Yes | Which key type on the app — matched by id or display name. |
license_key | No | The customer’s existing key. Present → preserved. Blank → Keylight generates one. |
name | No | Customer display name. Defaults to the email. |
expires_at | No | ISO date (e.g. 2030-01-01). Blank → taken from the key type’s duration. |
Example:
email,key_type,license_key,name,expires_atada@example.com,Pro,ACME-1A2B-3C4D,Ada Lovelace,grace@example.com,Pro,,Grace Hopper,2030-01-01How it runs
Section titled “How it runs”- Pick the app, optionally add a source label (e.g.
legacy-gumroad), and decide whether to email customers their key. - 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.
- Confirm. Only then are licenses written.
The “Migrated” tag
Section titled “The “Migrated” tag”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.
Re-running is safe
Section titled “Re-running is safe”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.
Limits
Section titled “Limits”Up to 5,000 rows per file. For a larger base, split it into several files and import them in sequence.
After importing
Section titled “After importing”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.