ActiveCampaign Connector
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 | Yes |
| 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:
- An ActiveCampaign account (Lite, Plus, Professional, or Enterprise)
- API URL and API key from Settings > Developer
- A Brevo account with API access
- A Tajo account
Authentication
API Key Authentication
ActiveCampaign uses an API key passed as a header or query parameter.
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
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": 52Field 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
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_TIERAPI 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
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect ActiveCampaignawait tajo.connectors.connect('activecampaign', { apiUrl: process.env.AC_API_URL, apiKey: process.env.AC_API_KEY});Migrate Contacts to Brevo
// Full contact migration with custom fields and tagsawait tajo.connectors.sync('activecampaign', { type: 'full', resources: ['contacts', 'deals', 'events'], options: { includeTags: true, includeCustomFields: true, includeScores: true, includeListMemberships: true }});
// Check sync statusconst 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
// Forward ActiveCampaign events to Brevoawait tajo.activecampaign.trackEvent({ 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:
connectors: activecampaign: debug: true log_level: verbose log_webhooks: trueTest Connection
tajo connectors test activecampaign# ✓ API connection successful# ✓ Contacts readable# ✓ Deals readable# ✓ Automations accessible# ✓ Event tracking enabledBest Practices
- Use contact sync endpoint - Use
/contact/syncfor upsert operations instead of separate create/update - Map fields by ID - Custom field IDs are stable; labels can change
- Preserve list memberships - Migrate list assignments alongside contact data
- Sync deal pipelines - Map pipeline stages for consistent CRM reporting
- Implement event tracking - Use site tracking for behavioral data in Brevo
- Batch imports - Use bulk import for datasets larger than 1,000 contacts
Security
- API Key Authentication - Token-based access via
Api-Tokenheader - 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
- ActiveCampaign Webhook Guide
- Mailchimp Connector
- Brevo Connector
- Customer Sync Skill
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.