Migrate from Keila
To migrate from Keila, you connect ReputeCast to a Keila project with an API key and import all of its contacts into one ReputeCast list, with their custom data and statuses. It works with Keila Cloud and with a Keila server you run yourself. ReputeCast only reads from the Keila API v1; nothing changes in Keila.
Before you begin
Section titled “Before you begin”- You need the
subscribers:importpermission (Owner, Admin and Editor have it). - Create a Keila API key in the project you’re moving: select API Keys in the menu on the left, click Create new API key, name it and save. Keila shows the key once. Source: Keila, API authentication (checked October 2026).
- For a self-hosted Keila, ReputeCast must reach the server over HTTP or HTTPS. A server on a private or internal network is refused unless the instance turns on
providers.allow_private_networks(see the configuration reference). - Read how a migration carries consent if this is your first import.
Import your Keila contacts
Section titled “Import your Keila contacts”-
Open Import contacts and choose Keila.
-
Check the Server address. It starts as
https://app.keila.iofor Keila Cloud; replace it with your own server’s address if you run Keila yourself. Leave out credentials, a query string and a fragment; ReputeCast adds/api/v1itself. -
Paste the key into API key and select Connect. Keila has no lists, so the wizard shows one source list, All contacts, with the project’s contact count.
-
Pick the ReputeCast list the contacts go into, keep pulling suppressions from your sending providers on, and continue to field mapping.
-
Map the fields.
emailis required;first_nameandlast_namematch the ReputeCast fields, and each key of the contacts’ custom data becomes a field named after it. -
Check the consent step (see the next section), run the preview and start the import.
What moves from Keila
Section titled “What moves from Keila”- Every contact of the project goes into the one ReputeCast list you chose.
- First and last name go into the matching fields.
- Custom data (
data) becomes contact fields. The wizard offers the keys it finds on the first 100 contacts; a key that only appears on later contacts isn’t offered. - Dates: the contact’s creation date in Keila becomes its creation date in ReputeCast. Keila’s API gives no opt-in date or IP, so the contacts arrive as single opt-in.
| Keila status | Becomes in ReputeCast |
|---|---|
active |
Subscribed · confirmed (or pending, or Skip) |
unsubscribed |
Suppressed · unsubscribed: no Broadcasts or Automations, System mail allowed (locked) |
unreachable |
Suppressed · hard bounce, all streams (locked) |
What stays in Keila
Section titled “What stays in Keila”Keila segments are not imported, although the source step lists their names: rebuild them as ReputeCast segments, using the custom data you imported. Campaigns, templates, forms and senders stay in Keila too.
Rate limits
Section titled “Rate limits”ReputeCast reads 500 contacts per request, one request at a time, and backs off when Keila answers 429 or a 5xx error:
| Setting | Default | How to change |
|---|---|---|
| Largest CSV or XLSX file | 100 MB and 500,000 rows (XLSX reads the first sheet) | Fixed |
| Source API rate limit (429) | Up to 5 retries, each after the source's Retry-After (2 s when absent, at most 60 s); then the import pauses and resumes by itself after 1 minute | Resume now, or Slow down to 3 req/s on the paused import |
| Source server or network errors | Up to 5 retries, after 1, 2, 4, 8 and 16 s | Fixed |
Check that it worked
Section titled “Check that it worked”- The summary shows how many contacts were imported, merged, suppressed, left pending and skipped. Download full report · CSV lists every row with what happened to it.
- Open Audience, then Suppression list and check that unsubscribed and unreachable contacts are there.
Troubleshooting
Section titled “Troubleshooting”- “Keila rejected the API key”: the key was deleted, or it belongs to another project or another Keila server. Create a key in the right project.
- “Use the full address, like https://lists.example.com.” or “Use only the server’s address …”: enter the address you open Keila at, starting with
https://, without anything after the host name. - “That address is on a private or internal network.”: use the server’s public address, or have the operator turn on
providers.allow_private_networks. - “Keila redirects to another address (301). Enter the address it answers at.”: ReputeCast doesn’t follow redirects. Enter the final address.
- A custom data key is missing on the field mapping: none of the first 100 contacts has it. After the import, set the field with a CSV import that matches contacts by email.