statamic-rad-pack/campaign-monitor
Statamic addon that connects your site to Campaign Monitor, letting visitors subscribe through forms and keeping mailing lists in sync. Configure API credentials and list IDs, then use tags or form handlers to add subscribers without custom API code.
Architecture fit
This is a Statamic addon, not a standalone Laravel package — it extends Statamic's form-submission pipeline and user-registration lifecycle and exposes Campaign Monitor as a first-class CP resource. That placement matters for a TPM: it means the integration surface is content-editor-facing (mailing list selection, custom field mapping, subscriber management in the control panel) rather than a headless SDK we'd wire ourselves. The value proposition is glue removal — newsletter signup, unsubscribe, and subscriber updates become configuration plus Antlers markup instead of bespoke Campaign Monitor API v3 client code we maintain forever. Architecturally it fits any Statamic site that already uses Statamic Forms or native user registration; it fits poorly if our forms live in a separate app, if we use a different ESP as the system of record, or if we need behaviour Campaign Monitor's list model does not support (complex journeys, transactional sends, deep segmentation).
Integration feasibility
High in shape, medium in confidence. The install path is standard: Composer require, publish config, supply API credentials and list IDs, map custom fields, then attach the fieldtype to a form blueprint or use the Antlers tags. No database migration or schema change is advertised. The real feasibility work is not code — it is consent design and list hygiene: deciding whether user registrations auto-subscribe (a compliance decision, not a technical one), whether we want single or double opt-in, and which Campaign Monitor custom fields must pre-exist in the CM UI before mapping works. Budget days, not weeks, but do not treat this as a drop-in toggle for anything touching user registration.
Technical risk
composer remove plus config deletion — low lock-in at the code level.Key questions
Stack fit
Fits a Statamic-on-Laravel application already using Statamic Forms and/or native user registration, with Campaign Monitor as the existing or chosen ESP. It does not fit if we are mid-migration off Campaign Monitor, if marketing owns the ESP contract and will not grant API keys to engineering, or if forms are rendered by a separate front end (Next.js, etc.) that bypasses Statamic's submission pipeline — in that case the Antlers tags and fieldtype are unusable and we would only be consuming the underlying API wrapper, which changes the buy-versus-build calculus.
Migration path
Greenfield: install, configure, map fields, ship. Brownfield with existing custom Campaign Monitor code: run both in parallel behind a config flag, route a single low-traffic form through the addon, compare the subscribers created in CM (fields populated, list correct, consent recorded) against the legacy path, then cut over form by form. There is no data migration — CM remains the system of record for subscribers; Statamic remains the system of record for users. Deliberately keep those two facts separate in the design doc, because conflating them is how teams end up with two half-truths about who is subscribed.
Compatibility
Confirm Statamic major (v6 implied by the 3.0.1 fix), PHP version, and Laravel major before committing. Check the Campaign Monitor account's plan tier for API access and custom field allowances. Verify the fieldtype renders correctly against our blueprints — this is precisely the area 3.0.1 patched, so test on a copy of a real blueprint, not a toy one. Pin the exact version; do not float.
Sequencing
composer.lock; record the consent decision and the version rationale in the dependency log.Maintenance
Low code maintenance, non-trivial policy maintenance. The addon itself needs only occasional version bumps alongside Statamic upgrades. The recurring work is ownership of the consent model, the field-mapping table (every new form field is a potential mapping gap), and periodic reconciliation between Statamic users and CM subscribers. Assign a named owner — in practice this lands on whoever owns marketing ops, with engineering on call for the plumbing. That ambiguity is the most common way this class of integration quietly rots.
Support
Two support surfaces. Upstream: MIT, small maintainer team, GitHub issues only — assume no SLA and no fast turnaround; keep the previous working version pinned for rollback. Downstream: the marketing team will treat "the newsletter signup is broken" as an engineering ticket regardless of whether the fault is Statamic, the addon, our config, or Campaign Monitor's API. Build a one-page runbook with the three checks (credentials valid, list ID correct, API reachable) so first-line triage does not require an engineer.
Scaling
Comfortable at typical CMS traffic; the constraint is Campaign Monitor's API rate limits, not the addon. Two things to verify: whether subscriber writes are queued (preferred — decouples form latency from ESP latency) and whether bulk operations (imports, backfills, reconciliation scripts) will trip rate limits. If we anticipate high-volume signup bursts — a launch, a campaign landing page — put the writes on a queue with retry/backoff and a dead-letter path before the traffic arrives, not after.
Failure modes
Ramp-up
Low for anyone who knows Statamic — the concepts (blueprints, fieldtypes, Antlers) are native, and the addon adds configuration rather than new mental models. The ramp-up cost is elsewhere: a new engineer needs the consent decision, the field-mapping table, and the failure-handling runbook written down, or they will re-derive them under incident pressure. Write those three artifacts during the pilot; they take an afternoon and they are the difference between a boring integration and a recurring incident.
How can I help you explore Laravel packages today?