Migrate from listmonk
To migrate from listmonk, you give ReputeCast your listmonk server’s address and an API user, then import each listmonk list into a ReputeCast list with its subscribers’ attributes and statuses. ReputeCast only reads from the listmonk API; nothing changes on your listmonk server.
Before you begin
Section titled “Before you begin”- You need the
subscribers:importpermission (Owner, Admin and Editor have it). - Create an API user in listmonk 4.0 or later under Admin › Users. API users get a generated token instead of a password. Give the user a role that can read every list and every subscriber (
lists:get_allandsubscribers:get_all). Sources: listmonk, User roles and permissions and listmonk API introduction (checked October 2026). - ReputeCast must reach the listmonk server over HTTP or HTTPS. A server on a private or internal network (for example
10.0.0.5or a.internalname that resolves to one) is refused unless the instance turns onproviders.allow_private_networks(see the configuration reference). - Read how a migration carries consent if this is your first import.
Import your listmonk lists
Section titled “Import your listmonk lists”-
Open Import contacts and choose listmonk.
-
In Server address, enter the address you open listmonk at, such as
https://lists.example.com, without credentials, a query string or a fragment; ReputeCast adds/apiitself. Enter the API user’s name in API user and its token in API token, then select Connect.The wizard lists every listmonk list with its subscribed, unsubscribed and pending counts.
-
Tick the lists to import and pick the ReputeCast list each one goes into. Keep pulling suppressions from your sending providers on, then continue to field mapping.
-
Map the fields.
emailis required;namegoes into first and last name, and each attribute becomes a field named after its key. -
On the consent step, check what each status becomes (see the next section).
-
Run the preview and start the import.
What moves from listmonk
Section titled “What moves from listmonk”- Lists become the ReputeCast lists you chose.
- Name is split into first and last name.
- Attributes (
attribs) become contact fields. The wizard offers the attribute keys it finds on the first 100 subscribers of each chosen list; a key that only appears on later subscribers isn’t offered. - Dates: the subscriber’s creation date becomes the contact’s creation date. listmonk has no opt-in IP, so none is stored.
| listmonk status | Becomes in ReputeCast |
|---|---|
confirmed on the list |
Subscribed · confirmed (or pending, or Skip) |
unconfirmed on a single opt-in list |
Subscribed · confirmed (or pending, or Skip) |
unconfirmed on a double opt-in list |
Subscribed · pending, with a re-permission email (or Skip) |
unsubscribed from the list |
Suppressed · unsubscribed: no Broadcasts or Automations, System mail allowed (locked) |
Subscriber blocklisted in listmonk |
Suppressed · unsubscribed (locked) |
A suppression belongs to the address: a subscriber unsubscribed from one listmonk list gets no Broadcasts or Automations on any ReputeCast list.
listmonk has no separate status for bounced addresses, so an address it blocklisted after bounces arrives as an unsubscribe, which still allows System mail. To block such addresses on every stream, add them with Add address on the suppression list after the import: addresses added there get no mail on any stream.
What stays in listmonk
Section titled “What stays in listmonk”Campaigns and their statistics, templates, bounce records, media and settings are not imported. Rebuild templates in the composer.
Rate limits
Section titled “Rate limits”listmonk runs on your own server, so how fast it answers depends on that server. ReputeCast reads 1,000 subscribers per request, one request at a time, and backs off when the server 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, and how many each list now has. Download full report · CSV lists every row with what happened to it.
- Open Audience, then Suppression list and check that unsubscribed and blocklisted addresses are there.
Troubleshooting
Section titled “Troubleshooting”- “Use the full address, like https://lists.example.com.”: the address has no
http://orhttps://. - “Use only the server’s address … no credentials, query or fragment.”: remove
user:password@,?…or#…from the address. - “That address is on a private or internal network.”: the server resolves to a private, loopback, link-local or metadata address. Use its public address, or have the operator turn on
providers.allow_private_networks. The check runs again on every connection, so a public name that later resolves to a private address is refused too. - “listmonk redirects to another address (301). Enter the address it answers at.”: ReputeCast doesn’t follow redirects. Enter the final address, often the
https://one. - “listmonk rejected the API key”: the API user or token is wrong, or the user’s role can’t read lists and subscribers.
- “Couldn’t reach listmonk: …”: ReputeCast can’t open a connection to the server. Check DNS, the firewall and the TLS certificate.