xavicabot/filament-activecampaign
Connect ActiveCampaign to your Filament admin panel. Manage contacts, lists, tags, and automations directly from Laravel—no separate dashboard required. Simple setup, native Filament UI, and a smooth workflow for your team.
Architecture fit. xavicabot/filament-activecampaign is a thin integration layer between Filament admin panels and ActiveCampaign automations. It is not an architectural driver — it sits at the edge of the admin surface and emits outbound HTTP to ActiveCampaign's REST API. The v1.4.0 release does not change that shape; it deepens the capabilities of the existing layer (queue dispatch, batched field sync, contact tag CRUD) rather than introducing a new dependency class or service boundary. Teams already running Filament v3 admin panels alongside ActiveCampaign as their marketing automation platform are the intended audience, and for that profile the fit is good.
Integration feasibility. Low friction. The release is explicitly non-breaking versus v1.3.0, the public surface only widens (addTagToContact now accepts string|array; new *Async methods; new client/service methods), and the config additions (activecampaign.async, async_tries, async_backoff) are additive with defaults. A team can adopt v1.4.0 as a drop-in patch, then opt into the new capabilities incrementally. The only externally observable behaviour change is that custom fields resolving to an empty string from {user.*} / {ctx.*} templates are now omitted from the payload instead of sent blank — this is a correctness improvement (it stops the integration from silently clearing values already stored in ActiveCampaign) but it is a behaviour change that can shift what downstream automations observe.
Technical risk. Moderate-low, concentrated in three areas rather than in the upgrade itself:
1.x for Filament ^3.0 and 2.x for Filament ^4.0 | ^5.0 — with v1.4.0 being a backport of v2.1.0. Feature parity is claimed today, but backport discipline decays. Any future feature will land on 2.x first, and 1.x will lag by an unknown interval. This is a real roadmap risk if the team intends to stay on Filament 3 for a long horizon.trigger/triggerWithEmail now honour an async flag and may silently route through a queue. A caller that previously relied on synchronous completion (e.g. checking ActiveCampaign state immediately after a form submit) will behave differently once the flag is flipped. The job also re-resolves the user inside handle() and exits gracefully if the user is gone — safe, but it means "dispatched" no longer implies "applied."POST /contact/sync reduces latency and rate-limit exposure, but it also widens the blast radius of a malformed field value: one bad entry can fail the whole sync instead of just its own call.Key questions for the maintainer/owning team.
1.x line, and will future 2.x features continue to be backported indefinitely or is 1.x now in maintenance-only mode?activecampaign.async is enabled, what is the recommended retry/backoff configuration relative to ActiveCampaign's documented API rate limits?listContactTags / detachContactTag) idempotent from the package's perspective, or does the caller need to guard against duplicate associations or 404s?Stack fit. Requires PHP with Laravel and Filament ^3.0. If the platform is on Filament 3, this is the correct branch — installing or upgrading to the 2.x line instead will fail Composer resolution. Confirm the Filament major version before anything else, because it is the single axis that determines which release line applies and there is no overlap between them.
Migration path. Effectively a patch upgrade from v1.3.0: composer require xavicabot/filament-activecampaign:^1.4 and re-run the suite. There are no breaking changes, no published migration steps, no config file rewrite. The recommended path is deliberately staged:
activecampaign.async left at its default (off) and no code changes. This isolates the empty-custom-field behaviour change as the only variable and lets the team validate against real automation payloads.addTagToContact with arrays, removeTagFromContact, getContactTags) as a separate change, since it is purely additive and low-risk.activecampaign.async last, once a queue worker, retry/backoff values, and a failed-job alerting path are in place.Compatibility. No breaking changes; the widened addTagToContact signature is backwards compatible. The one behavioural delta — empty custom fields being skipped rather than sent blank — should be checked against any automation that treats an empty string as a meaningful state. Teams on Filament 4 or 5 must not use this release at all; they should be on v2.1.0, which carries the same feature set.
Sequencing. Do the version-line decision first (Filament 3 → 1.x, Filament 4/5 → 2.x), then the v1.4.0 patch, then batched-sync validation in staging, then tags, then async. If a Filament 4/5 upgrade is anywhere on the roadmap, flag now that it implies a package major-line migration, not just a package bump — and that the two lines will diverge over time.
Maintenance. The package is a small, focused adapter with a modest surface area, and v1.4.0 ships with 75 tests / 191 assertions green on Filament 3 — a credible signal for a plugin of this size. The maintenance burden on the consuming team is low but non-zero: config additions must be published/reconciled if the config file is vendored, and the dual-line support model means the team should track which line they are on and why. Treat Filament major upgrades as the trigger for a package-line review.
Support. No first-party commercial support; the project's own release notes are the primary documentation, and the 2.1.0 release is referenced as the canonical description of the features now backported. Practical implication: the team's own engineers are the support tier. Budget a named owner for the ActiveCampaign integration and keep an internal note mapping package version → Filament version → enabled config flags.
Scaling. Two concrete improvements here. Batching field sync cuts outbound request volume substantially per automation execution, which directly improves headroom against ActiveCampaign's API rate limits — the release's ~5→2 request example implies roughly a 60% reduction for typical multi-field automations, and the effect compounds with automation volume. Queue support decouples admin-panel response time from ActiveCampaign latency, which is the right move for any user-facing form submission. The unresolved scaling question is queue throughput and worker capacity: once async is on, ActiveCampaign API latency becomes a queue-drain problem, and async_tries / async_backoff need to be tuned against both ActiveCampaign's limits and the team's tolerance for delayed automation enrollment.
Failure modes. Enumerate and instrument these:
async_tries, the job lands in failed-jobs. Without a monitoring hook this is invisible; wire it into existing alerting.POST /contact/sync fails as a unit, so one bad field blocks all field updates for that execution. This is the main regression risk introduced by batching and warrants a staging test with real templates.removeTagFromContact and detachContactTag involve association IDs; expect 404-class responses when a tag or association is already gone and ensure the calling code tolerates them.Ramp-up. Very low for a Laravel/Filament developer — the API is idiomatic, the new methods are self-describing, and no new infrastructure is required unless async is enabled. Realistic estimate: under a day for the patch upgrade and staging validation; an additional half-day to a day for queue configuration, backoff tuning, and failed-job alerting if async is adopted. The larger cognitive cost is not the package but the version-line policy: make sure the team knows they are on the Filament 3 maintenance track and what that implies for future feature availability.
How can I help you explore Laravel packages today?