Automatically Sync Event Attendees to Mailchimp

What this Zap does

When your event ends in CE-Go, this Zap automatically adds all attendees to your Mailchimp email list—saving you hours of manual data entry and ensuring your marketing list is always up-to-date.

Perfect for:

  • Event organizers who want to follow up with attendees
  • Marketing teams building post-event campaigns
  • Anyone who runs events and uses Mailchimp

Before you start

Make sure you have:

  • A CE-Go account with at least one event
  • A Mailchimp account (free or paid)
  • A Mailchimp Audience (list) where you want to add attendees
  • Your Mailchimp Audience ID and Server prefix (we'll show you how to find these)

⏱️ Time to set up: About 20-25 minutes


Step 1: Set Up the Trigger - When Event Ends

This tells Zapier to automatically start the workflow when an event ends in CE-Go.

  1. Click Create Zap in Zapier

  1. In the trigger step, search for CE-Go and select it

  1. Click Continue

  1. Connect your CE-Go account (if not already connected)
  2. Click Continue
  3. Click Test trigger to load a sample event

You'll see sample data like:

  • Event ID: 1234
  • Event Name: Summer Workshop 2026
  • Total Users: 560
  • Event End Date: 2026-01-19T18:00:00Z
  1. Click Continue with selected record

💡 Tip: Rename this step to "When Event Ends" by clicking the pencil icon. This makes your workflow easier to understand!


Step 2: Configure Mailchimp Settings

This step tells the Zap which Mailchimp list to use and prepares the data for syncing.

  1. Click the To continue, choose an event or + button to add a new step
  2. Search for Code  and select it
  3. Choose Javascript in Code select

  1. Copy and paste this code into the Code field:
// ============================================
// ⚙️ Don't change below
// ============================================

const listId = inputData.list_id;     // Get from: Mailchimp → Audience → Settings
const server = inputData.server;      // Check your Mailchimp URL (us15, us19, etc.)

const limitPerPage = 100;
const eventId = inputData.event_id;
const totalUsers = inputData.total_users;
const totalPages = Math.ceil(totalUsers / limitPerPage);
const mailchimpApiUrl = `https://${server}.api.mailchimp.com/3.0/batches`;

const pages = [];
for (let i = 1; i <= totalPages; i++) {
  pages.push(i);
}

return { 
    event_id: eventId,
    total_users: totalUsers,
    limit: limitPerPage,
    pages: pages,
    total_pages: totalPages,
    list_id: listId,
    server: server,
    mailchimp_api_url: mailchimpApiUrl
};

After adding the code, you need to set up Input Data fields. These tell the code where to get information from.

  1. In the Input Data section (left side), click + Add value set
  2. Add these 4 fields:
Field Name Value Where to get it
list_id Your Mailchimp Audience ID Type manually (e.g., de75ae35a2). Get from: Mailchimp → Audience → Settings
server Your Mailchimp server prefix Type manually (e.g., us15). Check your Mailchimp URL (us15, us19, etc.)
event_id Event ID from webhook Select: 1. Event ID
total_users Total users from webhook Select: 1. Total Users

⚠️ Critical: You MUST enter your own list_id and server values here! If you skip this, the automation won't work.

To select data from Step 1:

  1. Click in the event_id value field
  2. Click the + icon or start typing to see available data
  3. Under 1. When Event Ends, select Event ID
  4. Repeat for total_users - select Total Users

Your Input Data should now look like this:

  • list_id = de75ae35a2 (your value)
  • server = us15 (your value)
  • event_id = 1. Event ID: 1234
  • total_users = 1. Total Users: 560
  1. Click Run Code or  Continue

💡 Tip: Rename this step to "Setup Configuration" by clicking the pencil icon. This makes your workflow easier to understand!

Step 3: Check if Users Exist

This filter ensures the Zap only continues if there are actually users to sync. If the event has zero attendees, the Zap will stop here (saving you from unnecessary steps).

  1. Click the + button to add a new step
  2. Search for Filter
  3. Click Filter (it's a built-in tool, no account needed)
  4. Click Continue

Set up the filter condition

  1. In the Only continue if... section, click the first dropdown
  2. Select 2. Total Users (from the Mailchimp Settings step)
  3. In the second dropdown, select (Number) Greater than
  4. In the value field, type 0

Your filter should read: Only continue if 2. Total Users (Number) Greater than 0

  1. Click Continue
  2. Click Continue

Success! If you see "Your Zap would have continued", the filter is working correctly. The test event has 560 users, so it passes the check.

💡 Tip: Rename this step to "Check if Users Exist" for clarity!


Step 4: Loop Users Page by Page

Instead of trying to sync all users at once (which could fail with large events), this step processes users in small batches.

  1. Click the + button to add a new step
  2. Search for Looping
  3. Click Looping
  4. Click Continue

⚠️ Note: Looping by Zapier is currently in Beta, but it's stable and works great for this use case!

Configure the Loop

  1. In the Action Event field, click Create Loop From Line Items and click Continue
  2. In the Values to Loop field write pages, and in the next field click to insert data
  3. Select 2. Pages (this is the array of page numbers we created earlier in step)

  1. Set Trim Whitespace to True
  2. Set Loop iteration counter start to 1
  3. Set Maximum number of Loop iterations to 100

What does this do? If your event has 560 users and you're processing 5 at a time, this creates 112 "loops" (560 ÷ 5 = 112). Each loop will run through Steps 5-9 to sync one batch of users.

  1. Click Continue and Test Step 

💡 Tip: Rename this step to "Loop Users Page by Page"

⚠️ Important: The next steps (5-9) will run INSIDE this loop. That means they'll execute multiple times - once for each page of users!


Step 5: Get Event Users

Now we're inside the loop! This step fetches one page (batch) of users from your CE-Go event. It will run multiple times - once for each page.

  1. Click the + button to add a new step
  2. Search for CE-Go
  3. Choose the Get Event Users action
  4. Click Continue

  1. Click Continue

Configure Event Users Settings

Now fill in these fields:

Field Value How to set it
Event ID Event ID from webhook Select 2. Event Id
Limit How many users per page Select 2. Limit Per Page
Page Current page number Select 4. Loop Iteration
Status Leave blank Don't select anything
Evaluation Leave blank Don't select anything
Registration Date From Leave blank Don't enter anything
Registration Date To Leave blank Don't enter anything
Successful if no search results are found? False (Default) Leave as default
If multiple search results are found Return all users Select Return all results as line items. Step run status is “success”.

What's happening here? On the first loop, this gets page 1 (users from page 1). On the second loop, page 2 (users from page 2). And so on until all users are fetched!

  1. Click Continue
  2. Click Test step

  1. Click Continue

💡 Tip: Rename this step to "Get Event Users"

Step 6: Skip if No Users on Page

This filter prevents errors by checking if the current page actually has users. Sometimes the last page might be empty, and this filter ensures we don't try to sync nothing to Mailchimp.

  1. Click the + button to add a new step
  2. Search for Filter
  3. Click Filter
  4. Click Continue

Set up the filter condition

  1. In the Only continue if... section, click the first dropdown
  2. Select 5. Count (this is the number of users returned from CE-Go)
  3. In the second dropdown, select (Number) Greater than
  4. In the value field, type 0

Your filter should read: Only continue if 5. Count (Number) Greater than 0

  1. Click Continue
  2. Click Continue

Success! The test shows Count: 11, so the filter passes. If a page had 0 users, this loop iteration would skip the remaining steps.

💡 Tip: Rename this step to "Skip if No Users on Page"

Step 7: Prepare Mailchimp Batch

This is where we transform your CE-Go user data into a format that Mailchimp can understand. Think of it as translating from one language to another!

  1. Click the + button to add a new step
  2. Search for Code
  3. Choose in Select Code option Javascript

Configure Input Data

  1. In the Input Data section, add these 4 fields:
Field Name Value to Select
list_id 2. List Id
url 2. Mailchimp Api Url
data 5. Step(Row) Output
loop_iteration 4. Loop Iteration

Add the Code

  1. In the Code field, paste this entire code:
const crypto = require("crypto");

// Get Mailchimp settings
const listId = inputData.list_id;
const url = inputData.url;

try {
  const data = JSON.parse(inputData.data);
  const users = data.results;

  // Create batch operations for Mailchimp
  const operations = users.map(user => {
    const email = user.email.toLowerCase().trim();

    // Mailchimp requires MD5 hash of email for member ID
    const hash = crypto
      .createHash("md5")
      .update(email)
      .digest("hex");

    return {
      method: "PUT",
      path: `/lists/${listId}/members/${hash}`,
      body: JSON.stringify({
        email_address: email,
        status_if_new: "subscribed",
        merge_fields: {
          FNAME: user.first_name || "",
          LNAME: user.last_name || ""
        }
      }),
      operation_id: user.email
    };
  })
  .slice(0, 500); // Mailchimp batch limit

  return {
    body: JSON.stringify({ operations }),
    url: url,
    operations_count: operations.length,
    page_number: inputData.loop_iteration
  };
} catch(e) {
  return {
    error: true,
    error_title: "Failed to Prepare Batch",
    page_number: inputData.loop_iteration || 1,
    message: e.message
  }
}

What does this code do?

  • Takes the users from CE-Go
  • Converts each email to an MD5 hash (Mailchimp requirement)
  • Creates a "batch operation" for each user with their email, first name, and last name
  • Packages everything into a format Mailchimp can process
  • Limits to 500 users per batch (Mailchimp's maximum)
  1. Click Run Code
  2. Click Continue

You should see output like:

💡 Tip: Rename this step to "Prepare Mailchimp Batch"

Step 8: Create Mailchimp Batch

Now we're ready to send the prepared data to Mailchimp! This step creates a "batch job" in Mailchimp that will process all the users in the background.

  1. Click the + button to add a new step
  2. Search for Mailchimp
  3. Choose API Request (Beta) action
  4. Click Continue

  1. Connect your Mailchimp account (if not already connected)
  2. Click Continue

Configure the API Request

Field Value How to set it
Stop on error Yes Select Yes
HTTP Method POST Select POST
URL Mailchimp API URL Select 7. Url
Query string parameters Leave empty Don't add anything
Additional request headers Leave empty Don't add anything
Body Prepared batch data Select 7. Body

Why don't we need to add headers? Mailchimp automatically adds the Authorization header using your connected account. That's the magic of using Zapier's native Mailchimp integration!

  1. Click Continue
  2. Click Test step

You should see a successful response with:

  • Id: nfare81jim (a unique batch ID)
  • Status: pending (Mailchimp is queuing the batch)
  • Total Operations: 0 (this updates later as Mailchimp processes)
  • Submitted At: timestamp when batch was created

Success! Your batch has been created in Mailchimp. Mailchimp will process it in the background (usually takes 15-30 minutes depending on the size).

  1. Click Continue

💡 Tip: Rename this step to "Create Mailchimp Batch"

Step 9: Validate Batch Response

This final check ensures that Mailchimp actually created the batch successfully. It's like getting a confirmation receipt after placing an order - you want to make sure it went through!

  1. Click the + button to add a new step
  2. Search for Code
  3. Choose Javascript

Configure Input Data

  1. In the Input Data section, add these 3 fields:
Field Name Value to Select
mailchimp_response 8. Response Body
operations_count 7. Operations Count
page_number 7. Page Number

Add the Code

  1. In the Code field, paste this entire code:
// Parse Mailchimp response from Step 8
const response = JSON.parse(inputData.mailchimp_response);

try {
  // Check if response exists
  if (!response) {
    return {
      error: true,
      error_title: "No Response from Mailchimp",
      message: "Mailchimp API did not return a response",
      page_number: inputData.page_number
    };
  }
  
  // Check if batch ID exists
  if (!response.id) {
    return {
      error: true,
      error_title: "Batch ID Missing",
      message: "Mailchimp response has no batch ID",
      response_status: response.status || 'unknown',
      page_number: inputData.page_number
    };
  }
  
  // Verify batch status is valid
  const validStatuses = ['pending', 'started', 'preprocessing', 'finished'];
  if (!validStatuses.includes(response.status)) {
    return {
      error: true,
      error_title: "Invalid Batch Status",
      message: `Unexpected status: ${response.status}`,
      batch_id: response.id,
      page_number: inputData.page_number
    };
  }
  
  // Success - batch created successfully
  return {
    error: false,
    batch_id: response.id,
    batch_status: response.status,
    operations_sent: inputData.operations_count,
    page_number: inputData.page_number,
    submitted_at: response.submitted_at
  };
} catch (error) {
  return {
    error: true,
    error_title: "Failed to Validate Mailchimp Response",
    message: error.message,
    page_number: inputData.page_number
  };
}

What does this code do?

  • Checks if Mailchimp sent back a response
  • Verifies that a batch ID was created
  • Confirms the batch status is valid (pending, started, or finished)
  • Returns an error if anything is wrong, or success data if everything is good
  1. Click Run Code
  2. Click Test step

You should see output like:

  • Error: false (no errors!)
  • Batch Id: nfare81jim
  • Batch Status: pending
  • Operations Sent: 11
  • Page Number: 1

Perfect! The batch was validated successfully. Mailchimp has accepted your batch and will process it shortly.

💡 Tip: Rename this step to "Validate Batch Response"

⚠️ Almost done! Steps 5-9 will now repeat for each page of users. Once all pages are processed, the loop ends and we're done! The next step will only run after the entire loop completes.


🎉 You're Done! Publish Your Zap

Congratulations! You've built a complete automation workflow. Here's what your final Zap should look like:

Your workflow should have these 9 steps:

  1. When Event Ends - CE-Go trigger
  2. Mailchimp Settings - Code by Zapier
  3. Check if Users Exist - Filter by Zapier
  4. Loop Users Page by Page - Looping by Zapier
  5. Get Event Users - CE-Go action
  6. Skip if No Users on Page - Filter by Zapier
  7. Prepare Mailchimp Batch - Code by Zapier
  8. Create Mailchimp Batch - Mailchimp API Request
  9. Validate Batch Response - Code by Zapier

Publish Your Zap

  1. Review all your steps to make sure everything is configured correctly
  2. Double-check that you entered your Mailchimp Audience ID and Server in Step 2
  3. At the top right of the screen, click the Publish button

  1. Your Zap is now live! 

Success! Your Zap is now running. From now on, whenever an event ends in CE-Go, all attendees will automatically be synced to your Mailchimp list!

💡 Tips & Troubleshooting

How do I check if it worked?

After your event ends:

  1. Go to Zapier → Zap History
  2. Look for runs of your "Sync Event Attendees" Zap
  3. Check that all steps show green checkmarks ✅
  4. In Mailchimp, go to your Audience → All contacts
  5. Search for a few attendee emails to verify they were added

What if I see errors in Zap History?

Common issues and fixes:

Error Solution
"Batch ID Missing" Check your Mailchimp connection is still active. Try reconnecting your Mailchimp account.
"Invalid Audience ID" Double-check the list_id in Step 2. Make sure it matches your Mailchimp Audience ID exactly.
"Server not found" Verify the server value in Step 2 matches your Mailchimp URL (us15, us19, etc.)
"No users found" The event might not have any registered users. This is normal and the Zap will stop safely.

How do I sync users to a different Mailchimp list?

  1. Go to your Zap and click Edit
  2. Open Step 2: Mailchimp Settings
  3. Update the list_id Input Data field with your new Audience ID
  4. Click Save and test the Zap
  5. Click Publish to activate the changes

Need Help?

If you run into any issues or have questions:

  • 📧 Contact CE-Go support
  • 📚 Check Zapier's help docs: help.zapier.com

Happy automating! 🎉
You've just saved yourself hours of manual work. Enjoy the extra time!

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.

Still need help? Contact Us Contact Us