Skip to main content
Contributor I
May 21, 2025
Solved

Bulk Subscribe not creating a Subscribed to List event

  • May 21, 2025
  • 9 replies
  • 245 views

Hi!

We’re using a Zapier python step to subscribe profiles to an additional list. Although it is adding them to the list okay, its not creating a Subscribed to List event on the profile activities as is typical for other subscribe methods in Klaviyo. For auditing purposes it would be great to see the event created but as its a default Klaviyo event I don’t believe we can create it ourselves via the API. Am I naive in thinking that this endpoint should create the event? Isn’t that part of its purpose as a subscribe call?

https://developers.klaviyo.com/en/reference/bulk_subscribe_profiles

LMK if I’m missing something or could achieve this in a different way. 

Thanks

Nicola

    Best answer by Byrne C

    Hey ​@nicolawoo,

    Sorry for the long wait! I ran some tests on my account to see what sort of behavior is expected. From the script you sent above, it looks like when you’re subscribing someone to the Developer List, you’re calling the “Add to List” endpoint, and then after that, you’re calling the “Bulk Subscribe Profiles” endpoint. Am I correct?

    When testing this, I noticed that if the list is double opt-in, the profile (that’s already subscribed to email marketing from another list) will be added to the list, but a “subscribed to list” event won’t appear on their profile. Despite the fact that they are subscribed already, and are in that list, they’re not going to record a Subscribed to List event if your list is double opt in. When I sent my list to single opt-in, this wasn’t an issue for me. Can you confirm that the list you were testing with was single opt-in?

     

    9 replies

    ross_hopkins
    Expert Problem Solver II
    2025 Champion
    May 21, 2025

    Hi ​@nicolawoo ,

    Thanks for asking the community for help. I’m hoping I can help you with your question.

    I just tried out the following payload and was able to see the “Subscribed to Email Marketing” event appear against the Profile, although it did actually take a minute or so to appear after seeing the call was successful from Postman:

    Can you share your payload and we can troubleshoot from there.

    Thanks,

    Ross

    whereisjad
    Expert Problem Solver IV
    Expert Problem Solver IV
    May 21, 2025

    @nicolawoo Please visit https://www.klaviyo.com/developer-tools/logs and filter the “Source” column using the private key you provided to Zapier. This will allow you to view the specific API call used to subscribe profiles to the list. If the same API call as described by ​@ross_hopkins  is being used, it should trigger the “Subscribed to Email Marketing” event for each profile. Kindly confirm what Zapier is logging, and we will proceed from there.

    — Jad A | Klaviyo + Shopify + API Integrations Specialist • 7+ Years' Experience Helping with new setups, seamless integrations, and API connections—happy to connect. http://ja-technical-consulting.xyz/
    Problem Solver IV
    May 21, 2025

    Hi ​@nicolawoo ,

    Great question—and you're not wrong in expecting the event to show up.

    Using Klaviyo’s Bulk Subscribe API should trigger the "Subscribed to List" or "Subscribed to Email Marketing" event, but in practice, it can lag or fail to log visibly depending on how the payload is structured or how Zapier handles the request.

    A few expert tips:

    • Double-check your payload format even a small mismatch can prevent the event from logging.

    • Use the Klaviyo Developer Logs (https://www.klaviyo.com/developer-tools/logs) with your private API key to confirm what’s actually being sent.

    • If the API call is valid, the event usually shows—just not instantly.

    • If the event still doesn’t appear, try the single subscribe endpoint (/profile-subscribe) instead. It’s more consistent for logging activity per profile.

    Let me know if you’d like help checking your payload.

    Best,
    Micheal

    +2348087340172 (Whatsapp number)
    Contributor I
    May 22, 2025

    so we need to learn al these codes payload to use KLAVIYO?

    Problem Solver IV
    May 22, 2025

    Hi ​@PASTRYCHEF ,

    Great question—and no, you don’t need to learn all the code or payloads to use Klaviyo effectively.

    Most marketers can do 90% of what they need using Klaviyo’s built-in tools, flows, and templates—no coding required. The payloads and custom code are mainly for advanced setups or if you're working with developers to build something custom.

    If you ever do need help with that technical side, feel free to reach out I’m happy to guide or handle it for you.

    Best,
    Micheal

    +2348087340172 (Whatsapp number)
    nicolawooAuthor
    Contributor I
    May 23, 2025

    Thanks all for the responses - ​@ross_hopkins ​@whereisjad ​@mike digital101!

    To clarify, I think a slight nuance is this: we are trying to subscribe our general audience to get developer newsletters. So they are already Subscribed to Email Marketing, and what would be great to audit in the profile activity is the Subscribed to List event so we know when they also later subscribed to the developer list.

    In further testing, I found both the Subscribed to Email Marketing and Subscribed to List events were created for a profile that was otherwise “Never Subscribed”. But it perhaps isn’t expected if they are already subscribed to email marketing?

    Nonetheless, I checked the log and here are the results (for an already subscribed profile):

    Also our script, where we reference Input Data for email, list ID and our API key in Zapier:

    # Imports
    import json
    import requests

    # Constants / Configuration
    BASE_URL = "https://a.klaviyo.com/api"
    KLAVIYO_API_VERSION = "2024-10-15"

    # Function Definition
    def klaviyo_profile_sync(input_data):
    print("Starting Klaviyo Profile Sync...")

    # Step 1: Setup headers and API key
    print("Setting up headers and API key...")
    klaviyo_private_key = StoreClient(input_data['store_client_secret']).get(input_data['api_key_name'])

    # General headers
    headers = {
    "accept": "application/json",
    "revision": KLAVIYO_API_VERSION,
    "content-type": "application/json",
    "Authorization": f"Klaviyo-API-Key {klaviyo_private_key}"
    }

    # Bulk subscribe headers
    bulk_headers = {
    "accept": "application/vnd.api+json",
    "revision": KLAVIYO_API_VERSION,
    "content-type": "application/vnd.api+json",
    "Authorization": f"Klaviyo-API-Key {klaviyo_private_key}"
    }

    email = input_data['email']

    # Step 2: Check if profile exists
    print(f"Checking if profile exists for email: {email}")
    search_url = f"{BASE_URL}/profiles/?filter=equals(email,'{email}')"
    response = requests.get(search_url, headers=headers)
    response.raise_for_status()
    profile_data = response.json()

    profile_id = profile_data['data'][0]['id'] if profile_data.get('data') else None
    update_profile = bool(profile_id)

    # Step 3: Create or update profile
    print(f"{'Updating' if update_profile else 'Creating'} profile...")
    profile_payload = {
    "data": {
    "type": "profile",
    "attributes": {
    "email": email
    }
    }
    }

    if update_profile:
    profile_payload["data"]["id"] = profile_id
    profile_url = f"{BASE_URL}/profiles/{profile_id}"
    requests.patch(profile_url, json=profile_payload, headers=headers).raise_for_status()
    else:
    profile_url = f"{BASE_URL}/profiles/"
    response = requests.post(profile_url, json=profile_payload, headers=headers)
    response.raise_for_status()
    profile_id = response.json()['data']['id']

    print("Profile successfully synced.")

    # Step 4: Add to developer list and subscribe
    print("Adding profile to developer list...")
    developer_list_id = input_data['developer_list_id']
    list_payload = {"data": [{"type": "profile", "id": profile_id}]}

    # Add to the developer list
    requests.post(
    f"{BASE_URL}/lists/{developer_list_id}/relationships/profiles/",
    json=list_payload,
    headers=headers
    ).raise_for_status()
    print("Successfully added to developer list.")

    # Explicitly subscribe the profile
    print("Subscribing profile to developer emails...")
    subscribe_payload = {
    "data": {
    "type": "profile-subscription-bulk-create-job",
    "attributes": {
    "profiles": {
    "data": [
    {
    "type": "profile",
    "attributes": {
    "subscriptions": {
    "email": {
    "marketing": {"consent": "SUBSCRIBED"}
    }
    },
    "email": email
    },
    "id": profile_id
    }
    ]
    },
    "historical_import": False
    },
    "relationships": {
    "list": {
    "data": {
    "type": "list",
    "id": developer_list_id
    }
    }
    }
    }
    }

    subscribe_url = f"{BASE_URL}/profile-subscription-bulk-create-jobs"
    subscribe_response = requests.post(subscribe_url, json=subscribe_payload, headers=bulk_headers)
    subscribe_response.raise_for_status()
    print("Profile successfully subscribed to developer list.")

    print("Klaviyo Profile Sync completed successfully.")
    return {"status": "success", "profile_id": profile_id}

    # Call the function directly
    output = klaviyo_profile_sync(input_data)
    print(output)

    Thank you!

    Nicola

    emma.owens
    Community Manager
    Community Manager
    May 28, 2025

    Hi ​@nicolawoo ! 

    Thank for your the above info - one reason a ‘Subscribed to List’ event wouldn’t fire in their profile would be if they were already in that list previously. The event won’t re-fire unless it is their first time in the list. Can you confirm if your Developer List is brand new, or if profiles have previously been subscribed to it? 

    Thanks! 

    nicolawooAuthor
    Contributor I
    June 6, 2025

    @emma.owens no sorry, unfortunately this isn’t the answer! 

    Even for a new profile that has only been subscribed to the marketing list, when I then subscribe to the developer list too it doesn’t create a “Subscribed to Developer List” event. I think the issue is that if the action isn’t also subscribing to the email marketing then a 2nd subscribe to list event doesn’t appear to get created.

    Byrne C
    Community Manager
    Byrne CAnswer
    Community Manager
    June 10, 2025

    Hey ​@nicolawoo,

    Sorry for the long wait! I ran some tests on my account to see what sort of behavior is expected. From the script you sent above, it looks like when you’re subscribing someone to the Developer List, you’re calling the “Add to List” endpoint, and then after that, you’re calling the “Bulk Subscribe Profiles” endpoint. Am I correct?

    When testing this, I noticed that if the list is double opt-in, the profile (that’s already subscribed to email marketing from another list) will be added to the list, but a “subscribed to list” event won’t appear on their profile. Despite the fact that they are subscribed already, and are in that list, they’re not going to record a Subscribed to List event if your list is double opt in. When I sent my list to single opt-in, this wasn’t an issue for me. Can you confirm that the list you were testing with was single opt-in?