---
title: "ActiveCampaign Connector"
description: "Complete ActiveCampaign integration guide for syncing contacts, deals, automations, and engagement events with Brevo via Tajo."
url: https://tajo.io/docs/connectors/marketing/activecampaign/
markdown: https://tajo.io/docs/connectors/marketing/activecampaign.md
lang: en-US
robots: noindex
---

# ActiveCampaign Connector

Connector status: Planned Not built yet. Tajo does not run this connector today.

| Source field | Destination field | Sample value |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Connect your ActiveCampaign account to Brevo via Tajo for comprehensive contact migration, deal pipeline synchronization, automation mapping, and unified marketing data across both platforms.

## Overview

| Property | Value |
| --- | --- |
| **Platform** | ActiveCampaign |
| **Category** | Marketing |
| **Setup Complexity** | Medium |
| **Official Integration** | No |
| **Data Synced** | Contacts, Deals, Automations, Events |
| **API Base URL** | `https://{account}.api-us1.com/api/3` |

## Features

- **Contact migration** - Migrate contacts with custom fields, tags, and list memberships
- **Deal pipeline sync** - Sync deal stages, values, and owners for revenue tracking
- **Automation mapping** - Map ActiveCampaign automations to Brevo workflow triggers
- **Event tracking** - Sync site tracking and custom events for behavioral segmentation
- **List and tag sync** - Replicate list structures and tag-based segments in Brevo
- **E-commerce integration** - Sync Deep Data (orders, customers, carts) to Brevo
- **Custom object sync** - Map ActiveCampaign custom objects to Brevo attributes
- **Score sync** - Transfer lead and contact scores to Brevo attributes

## Prerequisites

Before you begin, ensure you have:

1. An ActiveCampaign account (Lite, Plus, Professional, or Enterprise)
2. API URL and API key from Settings > Developer
3. A Brevo account with API access
4. A Tajo account

## Authentication

### API Key Authentication

ActiveCampaign uses an API key passed as a header or query parameter.

```bash
curl "https://{account}.api-us1.com/api/3/contacts" \
  -H "Api-Token: YOUR_API_KEY" \
  -H "Content-Type: application/json"
```

Find your API URL and key in ActiveCampaign Settings > Developer.

API URL

Your API URL is unique to your account (e.g., `https://yourcompany.api-us1.com`). Always use this URL, not the dashboard URL.

## Configuration

### Basic Setup

```yaml
connectors:
  activecampaign:
    enabled: true
    api_url: "https://yourcompany.api-us1.com"
    api_key: "${AC_API_KEY}"

    # Data sync options
    sync:
      contacts: true
      deals: true
      automations: true
      events: true
      ecommerce: true

    # List mapping to Brevo
    list_mapping:
      "Main List": 50
      "Newsletter": 51
      "Customers": 52
```

### Field Mapping

Map ActiveCampaign fields to Brevo contact attributes:

#### Default Mappings

| Parameter | Type | Description |
| --- | --- | --- |
| `email` required | string | Contact email (unique identifier) |
| `firstName` optional | string | Maps to FIRSTNAME attribute |
| `lastName` optional | string | Maps to LASTNAME attribute |
| `phone` optional | string | Maps to SMS attribute |
| `tags` optional | array | Contact tags for segmentation |
| `score` optional | integer | Contact engagement score |
| `deals` optional | array | Associated deal records |
| `fieldValues` optional | array | Custom field values |

#### Custom Field Mapping

```yaml
field_mapping:
  # Standard fields
  email: email
  firstName: FIRSTNAME
  lastName: LASTNAME
  phone: SMS

  # Engagement fields
  score: LEAD_SCORE
  rating: ENGAGEMENT_RATING

  # Deal fields
  deals.value: DEAL_VALUE
  deals.stage: DEAL_STAGE
  deals.owner: DEAL_OWNER

  # Custom fields
  fieldValues.company: COMPANY_NAME
  fieldValues.industry: INDUSTRY
  fieldValues.plan_tier: PLAN_TIER
```

## API Endpoints

### Contacts

| Method | Endpoint | Description |
| --- | --- | --- |
| `GET` | `/api/3/contacts` | List all contacts |
| `POST` | `/api/3/contacts` | Create a contact |
| `PUT` | `/api/3/contacts/{id}` | Update a contact |
| `GET` | `/api/3/contacts/{id}` | Retrieve a contact |
| `POST` | `/api/3/contact/sync` | Sync a contact (create or update) |
| `POST` | `/api/3/import/bulk_import` | Bulk import contacts |

### Deals

| Method | Endpoint | Description |
| --- | --- | --- |
| `GET` | `/api/3/deals` | List all deals |
| `POST` | `/api/3/deals` | Create a deal |
| `PUT` | `/api/3/deals/{id}` | Update a deal |
| `GET` | `/api/3/dealStages` | List all deal stages |
| `GET` | `/api/3/dealPipelines` | List all pipelines |

### Automations

| Method | Endpoint | Description |
| --- | --- | --- |
| `GET` | `/api/3/automations` | List automations |
| `GET` | `/api/3/automations/{id}` | Retrieve an automation |
| `POST` | `/api/3/contactAutomations` | Add contact to automation |

### E-commerce (Deep Data)

| Method | Endpoint | Description |
| --- | --- | --- |
| `POST` | `/api/3/ecomOrders` | Create an order |
| `GET` | `/api/3/ecomOrders` | List orders |
| `POST` | `/api/3/ecomCustomers` | Create a customer |
| `GET` | `/api/3/ecomCustomers` | List customers |

### Event Tracking

| Method | Endpoint | Description |
| --- | --- | --- |
| `POST` | `/api/3/tracking/event` | Track a custom event |
| `GET` | `/api/3/eventTrackingEvents` | List all event names |
| `POST` | `/api/3/eventTrackingEvents` | Create an event name |

## Events

### Contact Events

| Event | Trigger | Use Case |
| --- | --- | --- |
| `contact_add` | New contact created | Welcome flow |
| `contact_update` | Contact data changed | Attribute sync |
| `contact_tag_added` | Tag assigned | Segment update |
| `contact_tag_removed` | Tag removed | Segment cleanup |

### Deal Events

| Event | Trigger | Use Case |
| --- | --- | --- |
| `deal_add` | New deal created | Sales notification |
| `deal_update` | Deal stage changed | Pipeline automation |
| `deal_tasktype_add` | Task added to deal | Activity tracking |

### Automation Events

| Event | Trigger | Use Case |
| --- | --- | --- |
| `automation_contact_add` | Contact entered automation | Flow tracking |
| `automation_contact_complete` | Contact completed automation | Next-step trigger |

## Code Examples

### Initialize Connector

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

// Connect ActiveCampaign
await tajo.connectors.connect('activecampaign', {
  apiUrl: process.env.AC_API_URL,
  apiKey: process.env.AC_API_KEY
});
```

### Migrate Contacts to Brevo

```javascript
// Full contact migration with custom fields and tags
await tajo.connectors.sync('activecampaign', {
  type: 'full',
  resources: ['contacts', 'deals', 'events'],
  options: {
    includeTags: true,
    includeCustomFields: true,
    includeScores: true,
    includeListMemberships: true
  }
});

// Check sync status
const status = await tajo.connectors.status('activecampaign');
console.log(status);
// {
//   connected: true,
//   lastSync: '2024-01-15T10:30:00Z',
//   contactsMigrated: 28000,
//   dealsSynced: 4500,
//   eventsSynced: 120000
// }
```

### Track Custom Events

```javascript
// Forward ActiveCampaign events to Brevo
await tajo.activecampaign.trackEvent({
  email: 'customer@example.com',
  event: 'product_demo_requested',
  eventData: {
    product: 'Enterprise Plan',
    source: 'website'
  }
});
```

## Rate Limits

ActiveCampaign API rate limits:

| Plan | Rate Limit | Details |
| --- | --- | --- |
| Lite | 5 requests/second | Per account |
| Plus | 10 requests/second | Per account |
| Professional | 10 requests/second | Per account |
| Enterprise | 20 requests/second | Per account |

Additional limits:

- **Bulk import**: 250 contacts per batch
- **Bulk import frequency**: 1 import at a time
- **Event tracking**: 2 requests/second
- **Daily limit**: No explicit daily limit (rate-based only)

Rate Limit Handling

ActiveCampaign returns `429 Too Many Requests` when limits are exceeded. Implement retry logic with the `Retry-After` header value.

## Troubleshooting

### Common Issues

| Issue | Cause | Solution |
| --- | --- | --- |
| 403 Forbidden | Invalid API key or URL | Verify API URL and key in AC Settings > Developer |
| Contact not synced | Duplicate email handling | Use `/contact/sync` endpoint for upsert behavior |
| Custom field empty | Field ID mismatch | Map fields by ID, not label (labels can change) |
| Webhook not received | Webhook not configured | Set up webhooks in AC Settings > Developer > Webhooks |
| Deal not created | Missing required fields | Ensure pipeline, stage, and contact are provided |

### Debug Mode

Enable verbose logging:

```yaml
connectors:
  activecampaign:
    debug: true
    log_level: verbose
    log_webhooks: true
```

### Test Connection

```bash
tajo connectors test activecampaign
# ✓ API connection successful
# ✓ Contacts readable
# ✓ Deals readable
# ✓ Automations accessible
# ✓ Event tracking enabled
```

## Best Practices

1. **Use contact sync endpoint** - Use `/contact/sync` for upsert operations instead of separate create/update
2. **Map fields by ID** - Custom field IDs are stable; labels can change
3. **Preserve list memberships** - Migrate list assignments alongside contact data
4. **Sync deal pipelines** - Map pipeline stages for consistent CRM reporting
5. **Implement event tracking** - Use site tracking for behavioral data in Brevo
6. **Batch imports** - Use bulk import for datasets larger than 1,000 contacts

## Security

- **API Key Authentication** - Token-based access via `Api-Token` header
- **Webhook verification** - Validate webhook source IP ranges
- **TLS encryption** - All API communication encrypted via HTTPS
- **Account-level access** - API key provides full account access; use with care
- **IP restrictions** - Available on Enterprise plans

## Related Resources

- [ActiveCampaign API Documentation](https://developers.activecampaign.com/reference/overview)
- [ActiveCampaign Webhook Guide](https://developers.activecampaign.com/page/webhooks)
- [Mailchimp Connector](https://tajo.io/docs/connectors/marketing/mailchimp)
- [Brevo Connector](https://tajo.io/docs/connectors/marketing/brevo)
- [Customer Sync Skill](https://tajo.io/docs/skills/data-sync/customer-sync)

## Open-Source Implementation Map

No official open-source repository was found in the current Tajo connector catalog for ActiveCampaign. Keep this page focused on the verified public API contract and vendor documentation until an official schema, SDK, MCP server, or public integration repository is available.

### Tajo Revamp Checklist

- Verify authentication and scope requirements against the vendor documentation before each connector release.
- Document primary sync objects, external IDs, pagination strategy, and rate limits explicitly.
- Add smoke tests from public API examples rather than undocumented behavior.
- Capture webhook signature verification and replay protection when the vendor supports webhooks.
- Record gaps where no official public repository or schema exists so future maintainers know what still needs source-backed validation.
