Skip to main content

ActiveCampaign integration

Sync contacts, manage lists and deals, and react to subscriber lifecycle events across your clients' ActiveCampaign accounts.

What it does

The ActiveCampaign integration lets your agency run a client's marketing automation, sales pipeline, and email campaigns without leaving TaskJuice. Connect a client's ActiveCampaign account once and you can create, update, look up, and search contacts, tag them, subscribe them to lists, create campaigns, manage CRM deals, and attach notes. Webhook triggers cover every event ActiveCampaign publishes — contact lifecycle, tags, campaigns, deals, tasks, and accounts — so almost any ActiveCampaign activity can start a workflow.

Connect an ActiveCampaign account

  1. Open your workspace in TaskJuice and navigate to Connections.
  2. Choose ActiveCampaign and click Connect.
  3. Sign in to the ActiveCampaign account you want to manage on behalf of your client, open Settings, and choose Developer.
  4. Copy the account name and the API key. The account name is only the subdomain — in https://acme.api-us1.com, the account name is acme, not the full URL.
  5. Paste both values into TaskJuice and save. The connection is ready to use in any workflow.

To revoke access, sign in to ActiveCampaign, open Settings, choose Developer, and regenerate the API key. TaskJuice surfaces the resulting 401 on the next workflow run so you can rotate the credential.

Pick lists, pipelines, and tags by name

Actions that target an account-scoped record let you choose it from a dropdown instead of typing an ID. TaskJuice loads the options live from the connected account, so they always match what the client sees in ActiveCampaign:

  • Lists on Add Contact to List
  • Pipelines, stages, and owners on Create Deal — the stage list narrows to the pipeline you pick
  • Tags on Add Tag to Contact

Triggers

Every trigger is an ActiveCampaign webhook. Grouped by what they watch:

  • Contacts — Contact Subscribed, Contact Added, Contact Updated, Contact Unsubscribed, Contact Note Added, Contact Tag Added, Contact Tag Removed, Contact Task Added
  • Lists — List Added
  • Campaigns — Campaign Sending Started, Campaign Opened, Campaign Link Clicked, Campaign Replied, Campaign Forwarded, Campaign Shared, Email Bounced
  • Deals — Deal Added, Deal Updated, Deal Note Added, Deal Pipeline Added, Deal Stage Added, Deal Task Added, Deal Task Completed, Deal Task Type Added
  • Accounts — Account Added, Account Updated, Contact Added to Account, Account Contact Updated
  • SMS — SMS Sent, SMS Replied, SMS Unsubscribed (requires the ActiveCampaign SMS add-on)

Contact Subscribed vs Contact Added. ActiveCampaign publishes one subscribe event for both, and separates them by who triggered it rather than by event name. Pick the trigger that matches your intent and TaskJuice does the rest — it registers every source with ActiveCampaign and routes each delivery to the right trigger by who initiated it. Both triggers can live in the same workspace without stealing each other's events.

List Added fires when a list is created. ActiveCampaign has no event for editing an existing list.

Set up a webhook trigger

Add an ActiveCampaign trigger to a workflow and publish. That is the whole setup.

TaskJuice registers the webhook in the connected ActiveCampaign account for you: it creates it, points it at an address only your workspace can receive on, ticks the events your published workflows need, and attaches a signing secret it generates and keeps. There is no URL to copy, no secret to invent, and nothing to configure in ActiveCampaign.

The signing secret is why. ActiveCampaign has none of its own — whoever creates the webhook invents one, and both sides have to hold it — while every ActiveCampaign trigger requires a signed delivery. TaskJuice generating that value and keeping its own copy is what makes the signature check possible, and it is the part you could not do by hand.

A webhook you made yourself is adopted, not duplicated

If you already created a webhook pointing at your delivery URL, TaskJuice adopts it rather than creating a second — ActiveCampaign only allows one webhook per URL — and replaces its signing secret with one it manages on the next publish. That first publish is also what makes it start delivering, since until then TaskJuice has no way to verify what your webhook is signing with.

While the trigger panel says setup is underway, TaskJuice is talking to ActiveCampaign. It normally finishes within a minute of publishing.

If registration does not finish

A failed attempt does not surface straight away: the panel keeps showing "Setting up ActiveCampaign…" while TaskJuice is still retrying, and an error message replaces it only after repeated failures. When one does, it tells you what happened and what to do. Four are worth knowing in advance:

  • "ActiveCampaign did not accept these events: …" ActiveCampaign accepts a subscription to an event your plan does not include, reports success, and quietly saves nothing. TaskJuice compares what it asked for against what ActiveCampaign confirmed and names the events that were refused; the remaining events stay active. The SMS triggers are the usual cause, since they need the SMS add-on. Remove those triggers, or add the add-on, and republish. This one appears as soon as the mismatch is detected — it is a partial success, not a retry in progress.
  • "ActiveCampaign rejected the connection. Reconnect your ActiveCampaign account, then republish." The API key on the connection was regenerated or revoked. Open Connections, reconnect the account, and republish.
  • "ActiveCampaign did not confirm the registration. Registration retries automatically — no action needed." ActiveCampaign did not confirm in time. TaskJuice keeps retrying on its own, backing off between attempts; the panel clears when it succeeds. Only the messages that name something to fix are asking you for anything.
  • "Automatic setup stopped after repeated failures. Contact support — other triggers are unaffected." Something has kept failing long enough that waiting is no longer the answer. TaskJuice still re-checks once a day behind this message, but contact support rather than wait it out.

What happens when you unpublish or disconnect

Unpublishing leaves the ActiveCampaign webhook in place and stops the events reaching your workflow. Republishing within 90 days reuses it, so there is nothing to set up again; after that TaskJuice deletes it from the account. Disconnecting the ActiveCampaign connection queues the webhook for deletion, along with the signing secret: the delete usually lands within a minute, and if ActiveCampaign cannot be reached, TaskJuice keeps retrying on its own, backing off between attempts.

TaskJuice verifies the signature on every inbound POST before it starts a run, so an unsigned or mis-signed request never reaches your workflow.

Reading webhook data

ActiveCampaign posts form-encoded bodies using bracketed field names such as contact[id] and contact[fields][3]. TaskJuice decodes these into nested objects, so you reference them the natural way:

{{ $trigger.contact.email }}
{{ $trigger.contact.fields.3 }}
{{ $trigger.deal.title }}

Every value arrives as text, including IDs and numbers — ActiveCampaign sends "1001", not 1001. Actions in this integration accept text IDs, so you can pass a trigger value straight into an action without converting it.

Actions

  • activecampaign/create-contact creates a new contact with email, name, phone, and an optional array of custom field values.
  • activecampaign/update-contact updates an existing contact by its ID.
  • activecampaign/get-contact fetches a single contact by ID, with its custom field values.
  • activecampaign/list-contacts lists contacts with optional email or free-text search, paginated via limit and offset.
  • activecampaign/add-contact-to-list subscribes a contact to a list you pick (set status to 2 to unsubscribe).
  • activecampaign/add-tag-to-contact applies a tag you pick to a contact.
  • activecampaign/create-campaign creates a single-send email campaign with sender, subject, HTML and text bodies, and list assignments.
  • activecampaign/create-deal creates a deal with title, value, currency, and contact, in the pipeline, stage, and owner you pick.
  • activecampaign/get-deal retrieves a single deal by its ID.
  • activecampaign/update-deal updates a deal, including moving it to another stage or marking it won or lost.
  • activecampaign/create-note attaches a note to a deal or a contact.

Known limitations

  • ActiveCampaign API keys are scoped to a single account subdomain. Each client needs its own connection, with its own account name and API key.
  • ActiveCampaign enforces a per-account rate-limit budget on the v3 API and returns 429 with a Retry-After header when exceeded. The action engine retries 429 responses with backoff; very high-volume cycles should pace work with a downstream throttle.
  • ActiveCampaign accepts a webhook subscription for an event your plan does not include, returning success while quietly saving no events at all. TaskJuice catches this and names the refused events in the trigger panel, but the events still will not arrive until the plan covers them. The SMS triggers are the usual cause, since they need the SMS add-on.
  • Each webhook URL can be used once in ActiveCampaign. TaskJuice registers one webhook per connected account and puts every trigger's events on it, so this limit is not something you manage. The delivery address belongs to your whole TaskJuice account — every workspace shares it — which is why an ActiveCampaign account holds one TaskJuice webhook in total, not one per workspace.
  • Webhook management is likewise shared across your whole TaskJuice account, one managed registration per app. If two of your workspaces hold connections to two different ActiveCampaign accounts, whichever workspace published most recently is the account TaskJuice manages — the other account's webhook is left behind permanently: it keeps delivering, but TaskJuice no longer updates it and does not remove it, even when you disconnect that connection. If you stop using the older account, delete its webhook in ActiveCampaign yourself.
  • ActiveCampaign publishes no field reference for the Contact Tag Added, Contact Tag Removed, and Deal Task Completed payloads. Those triggers advertise the fields common to every ActiveCampaign event; anything else ActiveCampaign sends still arrives at runtime and can be referenced directly, it just will not autocomplete.
  • ActiveCampaign delivers each webhook once and never retries, and disables a webhook that returns HTTP 410. Treat a missed delivery as lost rather than expecting redelivery. This also means an event that fires in the seconds between a webhook being created and its signing secret being attached is permanently lost — a one-off at setup time, and the reason it is worth setting the trigger up before the account gets busy.
  • ActiveCampaign's own documentation does not state whether the X-AC-Signature digest is hex or base64. TaskJuice verifies hex. If deliveries are rejected for a bad signature on an otherwise healthy registration, tell us — settling this needs a real signed delivery from a live account, and it is the one detail here that has not been confirmed against one.
  • Campaign creation produces a draft campaign in ActiveCampaign. Sending the campaign is a separate step in the ActiveCampaign UI; the API supports send scheduling through additional fields not exposed in this integration's initial action set.
Was this helpful?