Skip to main content
Solved

Bulk Import - Updating First or Last Name

  • May 6, 2026
  • 2 replies
  • 47 views

Hello,

We are trying to use the bulk import API to upload our data with a csv file. I am able to send the file get a 200 response. However, when going into the Active Campaign site to verify the changes, only the custom field values are getting updated. The “First Name” included in the csv file is not reflected in Active Campaign record.

Is there something specific we must include? We are using email as the identifier.

 

Additionally, I am able to get the batches I imported via the API. However, when on the Active Campaign site, it does not show on the recent imports list. Is that intentional? 

 

Thanks!

Best answer by Anonymous

Hey there ​@pv_socal 👋 

A couple of things stand out here:

The Bulk Contact Importer API (/api/3/import/bulk_import) is documented as a JSON-based import endpoint that expects a contacts array in the request body, not a CSV file upload.

For standard contact fields like First Name, the value needs to be sent as the top-level first_name property on each contact object. Custom fields are handled separately in the fields array using the custom field ID and value, so if only the custom field values are updating, that usually means the request is populating fields correctly but not passing first_name in the format expected by this endpoint.

Using email is correct here, since each contact in this import flow must include an email address and the endpoint supports creating new contacts and updating existing ones.

On your second question, this does appear to be intentional. The older bulk_import API has its own batch/status endpoints, while the newer file-upload import workflow has separate import history endpoints for recent imports. Based on that separation, batches submitted through /api/3/import/bulk_import would not be expected to appear in the UI’s Recent Imports list for file-based imports.

If your goal is specifically to upload a CSV file and have that import tracked in import history, you would want to use the newer file import endpoints instead (/api/3/import/upload or /api/3/import/ai/upload) rather than /api/3/import/bulk_import.

Let me know if you have any questions about any of the information I’ve shared and I’m glad to help out! 

 

2 replies

  • Answer
  • May 7, 2026

Hey there ​@pv_socal 👋 

A couple of things stand out here:

The Bulk Contact Importer API (/api/3/import/bulk_import) is documented as a JSON-based import endpoint that expects a contacts array in the request body, not a CSV file upload.

For standard contact fields like First Name, the value needs to be sent as the top-level first_name property on each contact object. Custom fields are handled separately in the fields array using the custom field ID and value, so if only the custom field values are updating, that usually means the request is populating fields correctly but not passing first_name in the format expected by this endpoint.

Using email is correct here, since each contact in this import flow must include an email address and the endpoint supports creating new contacts and updating existing ones.

On your second question, this does appear to be intentional. The older bulk_import API has its own batch/status endpoints, while the newer file-upload import workflow has separate import history endpoints for recent imports. Based on that separation, batches submitted through /api/3/import/bulk_import would not be expected to appear in the UI’s Recent Imports list for file-based imports.

If your goal is specifically to upload a CSV file and have that import tracked in import history, you would want to use the newer file import endpoints instead (/api/3/import/upload or /api/3/import/ai/upload) rather than /api/3/import/bulk_import.

Let me know if you have any questions about any of the information I’ve shared and I’m glad to help out! 

 


  • Author
  • New Participant
  • May 26, 2026

Thank you, that was it! The annotations for our models were being sent over in upper camel case regardless of how we spelled it, and we needed to force it to the proper format.