Skip to main content

** for privacy purposes, the customer data shown here is just dummy data and they are not real ** 

We have a profile feed set up to send customer create and update from our system to Klaviyo in real-time when a customer record is created. Our API request body looks as below. We send our internal customer ID in the “external_id” field under attributes and it populates correctly under “Profile details” section as shown in the screenshot. 

 

API request body: 

{
  "data": {
    "type": "profile",
    "attributes": {
      "email": "example@gmail.com",
      "external_id": "1003010463",
      "first_name": "example",
      "last_name": "customer",
      "location": {
        "address1": "",
        "address2": "",
        "city": "",
        "country": "",
        "region": "",
        "zip": ""
      },
      "properties": {
        "email_opt_out_date": null,
        "birthday": null,
        "email_opt_in": "",
        "email_opt_in_date": null,
        "spouse_name": "",
        "marital_status": "",
        "phone_opt_in": "",
        "gender": "",
        "enrolled_in_loyalty_program": "",
        "spouse’s_birthday": null,
        "cell_phone_opt_in": "",
        "anniversary_date": null
      }
    }
  }
}

 

Customer profile in Klaviyo: 

 

However, when we load customers via csv file upload, even if I name the header column to “external_id” and input value, Klaviyo does not recognize this field and instead asks to create a new mapping field and it creates “external_id” under Custom properties section. 

 

Below is the csv file I uploaded with the placement of the “external_id” field. 

 

How do I need to fix the csv file so that “external_id” field is shown under the Profile details section and not as Custom properties? 

Hi ​@suminchoi2015 - When uploading a CSV to Klaviyo’s Profiles tab, any fields that are not recognized as default Klaviyo fields (like email, phone_number, etc.) are treated as custom properties, not top-level profile fields.

In your case, the external_id field is being uploaded but is stored under Custom Properties instead of showing in the “Information” section of the profile.

Klaviyo only treats specific fields as profile attributes (i.e., top-level keys). These include:

  • email
  • phone_number
  • first_name
  • last_name
  • organization
  • title
  • location
  • country
  • region
  • city
  • zip
  • timezone

Anything else (such as external_id) must be mapped explicitly through the Klaviyo API or a proper field mapping process, CSV uploads alone don’t automatically promote new fields to top-level profile attributes.

 

How to Fix It

 

Option 1: Use the Klaviyo API

If you want external_id to appear in the “Information” section, use the Profiles API instead of CSV upload.

Here’s the correct API body format:

{
  "data": {
    "type": "profile",
    "attributes": {
      "email": "example@example.com",
      "first_name": "John",
      "last_name": "Doe",
      "external_id": "123456789"
    }
  }
}

This ensures Klaviyo stores the value in the correct external_id field. You can use the /api/profiles/ endpoint for both creating and updating profiles.

Klaviyo API Docs on Profiles

 

Option 2: Use CSV Upload With a Custom Property

If you must use a CSV file upload:

  1. Ensure your CSV includes a column named external_id.

  2. Upload it via Profiles > Upload File.

  3. When prompted, map the column manually to “Custom Property → external_id”.

  4. After upload, you’ll find it under the “Custom Properties” section on the profile.

You can still use this value in segmentation, flows, and integrations by referencing {{ person.external_id }} in templates or flow filters.