statamic-rad-pack/mailchimp
Statamic Mailchimp addon by Rad Pack that connects Statamic forms to Mailchimp audiences, making it easy to capture newsletter signups, map form fields, and manage subscribers without custom integration code.
Architecture fit. This is a Statamic addon, not a general Laravel package. It registers through Statamic's addon/service-provider lifecycle, exposes configuration for API key, audience ID and merge fields via environment variables, and hooks front-end form submissions into Mailchimp subscribe calls. That makes it a strong fit only if the target application is already a Statamic site on a supported major version; for a plain Laravel app it is the wrong abstraction and a thin HTTP client would be simpler. The value it buys is small and well-bounded: eliminating a few dozen lines of custom API code and giving content editors a configuration surface instead of a developer.
Integration feasibility. Low effort. composer require, publish config, set MAILCHIMP_API_KEY / audience / server prefix in .env, then wire a Statamic form. Merge-field support and per-form list selection mean most marketing requirements are configuration, not code. Realistic spike-to-working-form time is under a day for a developer already fluent in Statamic; the unknowns are policy, not engineering.
Technical risk. The dominant risk is supply-chain, not code. Eighteen stars, effectively one or two maintainers (ryanmitchell, edalzell), MIT licence, no vendor SLA or commercial support tier. The dependency is also two-deep: the addon tracks Statamic majors, which track Laravel and PHP versions, so a Statamic upgrade can strand this package mid-project. Secondary risks: Mailchimp's marketing API is external and versioned, so credential/scope or endpoint changes land on us; and the v6.2.5 change capping audience pulls at 500 is a silent behavioural change — a successful response looks identical whether or not more records exist.
Note the divergence worth flagging: the package's own description is entirely about pushing form submissions into Mailchimp, while the available developer guidance is dominated by pulling audiences out (pagination, 500-record pages, queued jobs, high-water marks). Two very different operational profiles. Before committing, confirm which one we actually need; if it is only form-to-subscriber, the 500-cap discussion is irrelevant to us and the risk profile drops materially.
Key questions for the vendor/team.
Http::fake, fake client) so we can CI this without hitting a live audience?Stack fit. Assumes a Statamic site (v4/v5 era) on a modern Laravel and PHP 8.x, with the standard Statamic forms pipeline available. If the roadmap includes migrating off Statamic, this addon is a sunk-cost trap and should be treated as a stopgap with a documented exit.
Migration path. For a site already sending subscribers via hand-rolled Guzzle calls, cron scripts, or a Zapier/Make bridge, migration is genuinely cheap: replace the custom call site with the addon's form handler, keep the same env-var credentials, and delete the bespoke code. There is no data migration — Mailchimp remains the system of record for subscribers. If we are moving from a competitor addon, expect a short validation pass on merge-field naming rather than any structural change.
Compatibility. Pin the version in composer.json (~6.2.0 or exact) rather than floating. Verify composer constraints against our PHP/Laravel before the spike, not during it. Because credentials live in env rather than config, the package is config:cache-safe — but that cuts both ways: after any deploy of a version bump, run config:clear and queue:restart for workers, or we will chase a bug that does not exist.
Sequencing.
last_pulled_at watermark.$tries and backoff() so a Mailchimp 5xx never blocks a user's form submit; decide the user-facing failure message for rejected/invalid addresses.fetched / total and warn when a page returns exactly 500.Http::fake() fixtures — a full page, a partial page, an auth failure, a duplicate — proving the pagination loop terminates and the failure path is explicit.Maintenance. Low code churn, non-trivial attention. Patch releases are small (v6.2.5 was one behavioural limit plus CI bumps), which is reassuring on stability but means the project is in maintenance mode rather than active development. Budget a recurring line item: dependency-update automation with a human review gate, plus a fixture-test run after every bump. The recurring cost is not updating the package — it is re-validating it whenever Statamic, Laravel or Mailchimp moves.
Support. Community-only, best-effort, via GitHub issues. There is no escalation path if a Mailchimp API change breaks submissions on a Saturday. The mitigation is architectural, not contractual: keep the addon behind a thin internal service boundary so we can fork or swap in a direct Mailchimp client in hours rather than days, and record that fallback in the runbook before launch.
Scaling. Subscribe-path scaling is trivial — it is per-form-submission and bounded by traffic, and the main concern is latency (make it async) and Mailchimp's rate limits under a launch spike. Pull-path scaling is where it bites: 500-record pages, several MB per page of member data, multi-page loops that will blow PHP's execution limit if run synchronously, and rate-limit pressure on large audiences. Stream page-by-page into the database, unset() between iterations, and never accumulate the full audience in memory.
Failure modes to design against.
upsert() semantics and a defined behaviour for previously unsubscribed contacts.Ramp-up. A Laravel developer is productive on the subscribe path within a day; there is little to learn beyond the config file and form wiring. The pull path is a different skill requirement — pagination correctness, queue discipline, idempotency — and should be scoped as a small but real piece of engineering work, not as "the addon does it." Documentation is thin and partly generic, so plan for the first engineer to leave written notes; that is the cheapest insurance against the bus factor this package carries.
How can I help you explore Laravel packages today?