Skip to main contentSkip to Content
Integrations

Integrations

Import from Mautic

CampaignOS can import a Mautic 5 instance into a workspace: Settings → Integrations → Import from Mautic. Enter the Mautic URL and a user with API access (basic authentication must be enabled in Mautic → Configuration → API Settings). Credentials are used for the request only and are never stored.

Preview reads from Mautic and shows what would be created, updated or skipped, with per-item warnings. Import applies the same plan.

What is imported

MauticCampaignOSNotes
SegmentsSegmentsSegments without filters become static segments; filtered segments become dynamic with a best-effort rule mapping (language → locale, points → score, date_added → created date, tags, custom fields → attributes). Do-not-contact filters are dropped because consent is enforced automatically.
EmailsEmail templatesTranslations are grouped into one template per parent email (parent language = default locale). Tokens are rewritten: {contactfield=firstname} → {{contact.firstName}}, {unsubscribe_url} → {{unsubscribeUrl}}, webview links are removed.
CampaignsAutomation campaigns (draft)Segment sources become a Segment Entry trigger; interval delays become Wait steps; send email, tag, segment, points, field, DNC, owner, stage, webhook and jump actions are mapped; field/segment/tag/points conditions and email open/click, form submit and page hit decisions are mapped. Unsupported events are skipped with a warning. With Only remove tags after an email if the contact opened that email (on by default), a tag change that removes tags after an email gets an “Opened …?” condition: contacts who opened get the tag changes, the rest skip them and continue.
FormsFormsFields are mapped to text, email, tel, number, select, checkbox and textarea. Form actions are not imported.
ContactsContactsMigrated separately, see below.

Re-running the import is safe: entities are matched by name and unchanged items are skipped. Templates and segments are updated in place. Campaign workflows are replaced only while the campaign is still a draft and has not been edited in CampaignOS since the last import (enable Overwrite campaigns edited in CampaignOS to force it). After a Preview you can pick which campaigns to import.

Migrate contacts from Mautic

Settings → Integrations → Migrate contacts copies every Mautic contact into the workspace in short, resumable steps, then adds contacts to the matching static segments.

  • Contacts are matched by email, so running the migration again updates instead of duplicating. Contacts without an email address are skipped.
  • Copied: first and last name, phone, external_id (as the contact’s external ID), language (as locale), points (as score), tags, every other contact field (as attributes, plus mauticId), the original created date, and email consent (a Mautic email do-not-contact becomes an opted-out email consent with the reason).
  • Automation paused (recommended, on by default): new contacts are created with automation paused, so they never enter or continue a campaign, not even when they join a segment, trigger an event, or a campaign is activated with existing members. Resume them from the Contacts page (per reason, per selection or per contact), from a segment’s Members tab, or with the Resume automation button in the migration panel.
  • Progress is saved in the browser; you can pause, close the page and resume. For very large instances run it from a terminal instead:
WORKSPACE_ID=... MAUTIC_URL=https://mautic.example.com MAUTIC_USERNAME=... MAUTIC_PASSWORD=... \ pnpm mautic:migrate-contacts # resumes from .mautic-migration-<workspaceId>.json # --restart to start from the first contact, --no-pause to leave automation active

A migration of about 145,000 contacts takes roughly 13 minutes.

POST /api/workspaces/{workspaceId}/integrations/mautic/contacts

Runs one step (up to about 40 seconds) and returns the next cursor. Call it again with cursor until done is true.

{ "baseUrl": "https://mautic.example.com", "username": "api-user", "password": "secret", "cursor": { "phase": "contacts", "contactsOffset": 0, "segmentIndex": 0, "segmentOffset": 0 }, "pauseAutomation": true }

Pausing automation for contacts

POST /api/workspaces/{workspaceId}/contacts/automation (ADMIN) pauses or resumes automation in bulk:

{ "action": "resume", "reason": "mautic-migration" } { "action": "resume", "segmentId": "..." } { "action": "pause", "contactIds": ["..."] }

GET on the same path returns { "paused": 1480, "byReason": [{ "reason": "mautic-migration", "count": 1480 }] }. A single contact can be changed with PATCH /contacts/{contactId} and { "automationPaused": false }, and the contacts list accepts ?automationPaused=true|false.

API

Both endpoints require the ADMIN role.

POST /api/workspaces/{workspaceId}/integrations/mautic/preview

POST /api/workspaces/{workspaceId}/integrations/mautic/import

{ "baseUrl": "https://mautic.example.com", "username": "api-user", "password": "secret", "include": { "segments": true, "templates": true, "campaigns": true, "forms": true, "contacts": false }, "campaignIds": [13, 14], "gateTagRemovalOnOpen": true, "overwriteModified": false }

Response:

{ "mode": "preview", "segments": [{ "mauticId": 3, "name": "SIGN_UP", "action": "create", "warnings": [] }], "templates": [{ "mauticId": 1, "name": "1st email", "action": "create", "locales": ["pt", "de", "en"], "warnings": [] }], "campaigns": [{ "mauticId": 4, "name": "Welcome Flow", "action": "create", "nodeCount": 10, "warnings": [] }], "forms": [], "warnings": ["Imported campaigns are created as drafts; review and activate them manually"], "errors": [] }
Last updated on