Calendly → ActiveCampaign Integration Guide

I see broken Calendly → ActiveCampaign integrations in about 30% of the accounts I audit. Usually it’s missed appointments that never made it to ActiveCampaign, or duplicate contacts getting created because the integration wasn’t set up to handle existing contacts properly.

The most common failure point? People set up the integration but don’t map the custom fields correctly, so all the qualification data from their booking form just disappears into the void.

What You’ll Have Working By The End

Prerequisites

Method 1: Native ActiveCampaign Integration

Calendly has a direct integration with ActiveCampaign that handles the basic contact creation. This is the cleanest approach for most setups.

Go to your Calendly Integrations page (calendly.com/integrations) and search for ActiveCampaign. Click “Connect” and you’ll be prompted to enter:

Once connected, configure these settings:

Contact Creation Rules:

Field Mapping: The native integration automatically maps:

Custom Field Mapping: If you’re collecting additional data through Calendly’s booking form questions, you’ll need to create matching custom fields in ActiveCampaign first:

  1. In ActiveCampaign: Lists → Manage Fields → Add Custom Field
  2. Create fields with the exact same names as your Calendly questions
  3. The integration will auto-map fields with matching names

Common custom fields I see:

Method 2: Zapier Integration

The Zapier route gives you more control over the data flow and automation triggers. I use this when clients need complex conditional logic or want to create deals simultaneously.

Zapier Setup:

  1. Create new Zap with Calendly as trigger app
  2. Choose “Invitee Created” trigger (fires when someone books)
  3. Connect your Calendly account and test the trigger

ActiveCampaign Action:

  1. Add ActiveCampaign as action app
  2. Choose “Create/Update Contact” action
  3. Map the fields:
Email: {{Invitee Email}}
First Name: {{Invitee First Name}}
Last Name: {{Invitee Last Name}}
Phone: {{Invitee Phone Number}}

Custom Field Mapping: For each custom field, use Zapier’s field mapping:

Company Size: {{Invitee Answers Company Size}}
Budget: {{Invitee Answers Budget Range}}
Timeline: {{Invitee Answers Timeline}}

Additional Actions: Most clients want to trigger an automation sequence, so add a second action:

  1. ActiveCampaign → Add Contact to Automation
  2. Select your follow-up sequence
  3. This fires immediately after the contact is created

Deal Creation (Optional): If you track each booking as a deal:

  1. Add third action: ActiveCampaign → Create Deal
  2. Map deal fields:
Contact: {{Contact ID from previous step}}
Title: "{{Event Type}} - {{Invitee Name}}"
Value: 0 (or expected deal value)
Pipeline: Your sales pipeline
Stage: "Scheduled" or "Initial Meeting"

Method 3: Webhook + API Approach

For advanced setups or when you need real-time processing without Zapier’s delays, use Calendly webhooks with ActiveCampaign’s API.

Calendly Webhook Setup:

  1. Go to Integrations → Webhooks & API Keys
  2. Create new webhook with endpoint: https://yourdomain.com/calendly-webhook
  3. Subscribe to events: invitee.created, invitee.canceled

Webhook Processing Code (Node.js example):

app.post('/calendly-webhook', async (req, res) => {
  const { event, payload } = req.body;
  
  if (event === 'invitee.created') {
    const invitee = payload;
    
    // Extract custom field answers
    const customFields = {};
    if (invitee.questions_and_answers) {
      invitee.questions_and_answers.forEach(qa => {
        customFields[qa.question] = qa.answer;
      });
    }
    
    // Create contact in ActiveCampaign
    const contact = {
      email: invitee.email,
      firstName: invitee.name.split(' ')[0],
      lastName: invitee.name.split(' ').slice(1).join(' '),
      phone: invitee.text_reminder_number,
      fieldValues: [
        { field: 'EVENTTYPE', value: invitee.event.name },
        { field: 'COMPANYSIZE', value: customFields['Company Size'] || '' },
        { field: 'BUDGET', value: customFields['Budget Range'] || '' }
      ]
    };
    
    try {
      const response = await fetch(`${AC_BASE_URL}/api/3/contacts`, {
        method: 'POST',
        headers: {
          'Api-Token': process.env.AC_API_KEY,
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({ contact })
      });
      
      if (!response.ok) {
        throw new Error(`AC API error: ${response.statusText}`);
      }
      
      console.log('Contact created successfully');
    } catch (error) {
      console.error('Failed to create contact:', error);
      // Add to retry queue or send alert
    }
  }
  
  res.status(200).json({ received: true });
});

Testing & Verification

Test the Integration:

  1. Book a test appointment on your Calendly link
  2. Use a unique email address (like test+[timestamp]@yourcompany.com)
  3. Fill out all custom fields with recognizable test data

Verify in ActiveCampaign:

  1. Check Contacts → search for your test email
  2. Verify all fields mapped correctly:
    • Standard fields (name, email, phone)
    • Custom fields match your booking form answers
    • Tags applied correctly
    • Added to correct list

Check Automation Triggers: If you have follow-up sequences, verify the test contact entered the automation. Go to Automations → [Your Sequence] → Contacts to see recent entries.

Timing Verification:

Acceptable delay is under 15 minutes for most business use cases. If it’s longer, something’s broken.

Troubleshooting

Problem: Contacts not appearing in ActiveCampaign Check your Calendly integration logs (Integrations → ActiveCampaign → View Activity). Common issues:

Problem: Duplicate contacts being created The integration isn’t matching existing contacts properly. In ActiveCampaign integration settings:

Problem: Custom fields not mapping Field names must match exactly between Calendly questions and ActiveCampaign custom fields. Check:

Problem: Zapier integration failing Check the Zap history for error details. Most common:

Problem: Webhook endpoint not receiving data Verify the webhook URL is publicly accessible:

Problem: Integration worked then stopped Usually an API key issue or permission change:

What To Do Next

Need help auditing your current tracking setup? Get a free tracking audit — I’ll review your integration and identify what’s breaking or missing.

This guide is part of the ActiveCampaign Integration Hub — complete guides for connecting ActiveCampaign to your marketing stack.