The engine of ActiveCampaign fits in a weekend: contacts with tags and custom fields, a signup form with double opt-in, broadcasts, and automations that wait, branch on a tag or a click and send the next email through Amazon SES. What stays behind is everything around that engine. You take over deliverability (domain authentication, bounces, complaints, reputation), you lose the integrations that feed automations with purchases and bookings, and nobody but you can edit the flows. For a solo founder with a few thousand contacts the trade can be worth it; for a marketing team it rarely is.
Before you buildSmall list and simple flows? Brevo's free plan runs automations for up to 2,000 contacts; try it before building and running your own sender.
Build me a self-hosted email marketing and automation tool to replace
ActiveCampaign. Requirements:
- Node.js 22 + TypeScript: a Fastify server, a React admin built with Vite,
better-sqlite3 in ./data/marketing.db. Admin UI on http://localhost:4800.
- Contacts with email, name, custom fields, tags and lists; CSV import with a
column-mapping preview and merge by email.
- An embeddable signup form (one <script> snippet) with double opt-in.
- Segments from conditions (has tag, field equals, opened or clicked in the
last N days) with a live count before saving.
- Broadcasts from Markdown or HTML templates with {{first_name}} fields, sent
now or scheduled, throttled to the SES sending rate.
- Automations as ordered steps: trigger (tag added, form submitted, date
field), wait N days, if/else on tag or click, send email, add or remove tag.
A worker runs due steps every minute and survives restarts.
- Send with @aws-sdk/client-sesv2 (keys in .env). Suppress addresses on bounce
and complaint notifications from an SNS webhook.
- One-click unsubscribe link plus List-Unsubscribe headers on every email;
log opens and clicks per contact.
- Only form, unsubscribe, tracking and SNS routes are public; the admin is
password-protected and meant for localhost or Tailscale. No telemetry.
- Out of scope: a drag-and-drop email designer, CRM deals, SMS, shop plugins.
- README: SES domain setup (SPF, DKIM, DMARC), requesting SES production
access (budget a day for AWS to answer), and a plain warning that you now
own deliverability.Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own ActiveCampaign.
Add an ActiveCampaign importer to the email tool in this folder. Requirements: - Read ACTIVECAMPAIGN_URL and ACTIVECAMPAIGN_API_KEY from .env. - Page through the v3 API (/api/3/contacts, /api/3/tags, /api/3/contactTags, /api/3/fields, /api/3/fieldValues, /api/3/lists), staying under 5 requests per second. - Create matching tags, custom fields and lists, then contacts with their values. - Contacts that are unsubscribed or bounced in ActiveCampaign are imported as suppressed and never mailed. - A --dry-run flag prints the counts without writing; running twice must not create duplicates. - Update the README with where to find the API URL and key.
Add a visual editor for automations to the email tool in this folder. Requirements: - Use @xyflow/react to draw each automation as nodes: trigger, wait, if/else with two branches, send email, add tag, remove tag. - Save to the same step format the worker already runs; old automations open in the canvas unchanged. - Show how many contacts are waiting at each node right now. - Validate before saving: one trigger, no dangling branches, no loops without a wait. - Update the README.
Add Stripe purchase triggers to the email tool in this folder. Requirements: - A webhook endpoint POST /hooks/stripe that verifies the signature with STRIPE_WEBHOOK_SECRET from .env. - On checkout.session.completed, create or update the contact by email, add the tag customer and a tag with the product name, and fire a "purchase" trigger. - On customer.subscription.deleted, add the tag churned. - Log every event with its outcome; replaying an event must be safe. - Update the README with the Stripe dashboard steps.
Add subject-line A/B tests to broadcasts in the email tool in this folder. Requirements: - Send version A and B to two random 10% samples of the segment. - After a wait I choose (1-24 hours), pick the winner by click rate and send it to the remaining 80%. - Judge by clicks, not opens, and say why in the UI: Apple Mail Privacy Protection inflates open counts. - Show the result next to the broadcast. - Update the README.
People stay for the depth of the automations: tags, triggers and branches let a small business build follow-up flows without a developer, and integrations keep those flows fed with purchases, bookings and form fills. Deliverability is the quieter reason. An address that lands in the inbox is worth more than any feature, and few owners want to manage bounces and sender reputation themselves.
Estimate · A small VPS runs about $5 a month. SES charges about $0.10 per 1,000 emails, so 10,000 emails a month cost roughly a dollar, and new AWS accounts get free-tier credits. The build is token usage on your agent plan.
Checked 2026-10-13 against ActiveCampaign's docs: 1, 2, 3, 4
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Starter | $19 | $15 | 1 user, sends up to 10x the contact limit, 5 actions per automation, limited segmentation, 15 active goals. |
| Plus | $59 | $49 | 1 user, unlimited automation actions, standard segmentation, landing pages, 25 active goals. |
| Pro | $99 | $79 | 3 users, sends up to 12x the contact limit, advanced segmentation, predictive sending, conditional content, attribution. |
| Enterprise | $179 | $145 | 5 users, sends up to 15x the contact limit, premium segmentation, custom objects, SSO, a dedicated account team. |
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: A drag-and-drop automation builder and 950+ ready-made recipes, Sending infrastructure that someone else keeps out of spam folders.
About $19 a month on the Starter (1,000 contacts) plan, $228 a year (checked 2026-10-13).
A drag-and-drop automation builder and 950+ ready-made recipes; Sending infrastructure that someone else keeps out of spam folders; 1,000+ integrations, including shop, payment and booking events; Site tracking, predictive sending and conditional content; The CRM, SMS and WhatsApp add-ons. If any of those matter to you, keep paying.
Yes: Mautic (open source), listmonk (open source), Dittofeed (open source).