Why teams leave ActiveCampaign
- Pricing per-contact + per-feature. ActiveCampaign's tier multipliers stack quickly. Relayly's flat send-based pricing is more predictable.
- Heavy CRM lean. If you're not using ActiveCampaign as a CRM, you're paying for it anyway.
- EU residency requires Enterprise. Lower tiers are US-only.
- Slow segment evaluation at scale. Common complaint above 100k contacts. Relayly evaluates predicates against indexed Postgres.
What carries across
| ActiveCampaign concept | Relayly equivalent | Auto-migrates? |
|---|---|---|
| Contacts | contacts | Yes — including custom fields + tags. |
| Lists | lists | Yes — names + opt-in setting. |
| Tags | Contact tags | Yes — direct mapping. |
| Segments | Predicate-based segments | Most translate; deal-pipeline-based predicates need manual review. |
| Email templates | email_templates | HTML carries; drag-drop re-renders in our editor. |
| Automations | Flows | Linear automations translate well. Goal-based and split-test flows need engineering review. |
| Custom fields | Custom fields | Yes — type preservation (text, date, dropdown, etc.). |
The codebase swap
API shapes are similar enough that find/replace handles most call sites. The key differences:
// ActiveCampaign API await fetch(`${AC_URL}/api/3/contacts`, { method: "POST", headers: { "Api-Token": process.env.AC_TOKEN }, body: JSON.stringify({ contact: { email: "u@example.com" } }) });
// Relayly Node SDK import Relayly from "@relayly/node"; const r = new Relayly({ apiKey: process.env.RELAYLY_API_KEY }); await r.contacts.upsert({ email: "u@example.com" });
Automation translation
ActiveCampaign automations have a richer node taxonomy than most ESPs. The migrator handles:
- Triggers (subscribed, tagged, field changed, abandoned cart, etc.) → flow triggers
- Send email → send actions with template references
- Wait (until time, until field, until tag) → delay nodes
- If/Else → branch nodes
- Tag / untag → tag mutations
- Update field → contact field mutation
Goal-based jumps and split-test nodes are flagged for manual conversion. Typical migration: 70% of nodes auto-translate, the remaining 30% take 5-10 min of manual review per automation.
The cutover playbook
- Run the export script. It's read-only against ActiveCampaign and re-runnable.
- Review the manifest. Anything flagged as "needs review" gets a copy-paste remediation snippet.
- Apply to Relayly. Idempotent SQL + REST imports. Re-run safely.
- Dual-send for a week. Compare inbox rates at Gmail / O365 / Yahoo through the dashboard.
- Flip the API key. Search-and-replace your codebase, deploy, monitor 24h.
- Pause ActiveCampaign. Don't delete the account — keep it for 30 days as an unsubscribe-list reciprocity reference.
- After 30 quiet days, terminate ActiveCampaign. You're done.
Pricing-side check
| Volume | ActiveCampaign | Relayly | Annual delta |
|---|---|---|---|
| 5k contacts (Marketing Lite) | $49/mo | $25/mo | + $288/year |
| 25k contacts (Marketing Plus) | $169/mo | $100/mo | + $828/year |
| 100k contacts (Pro) | $406/mo | $130/mo | + $3,312/year |
ActiveCampaign Marketing pricing as of 2026-05 from activecampaign.com/pricing. Sales/CRM tiers are higher again.
Start the migration
Sign up free, run the export script, dual-send for a week. We'll spot you 10,000 verification sends.
Start free