How to bulk update profile properties , & without wiping out existing data?
We sell a STEM product and have different kits depending on whether you’re a grandparent buying it as a gift for a grandchild, or a teacher purchasing a kit suited to their kindergarten.
We’re wanting 1 master list, and to segment that by different verticals that use our products. Our list size is around 5k contacts.
We want segments such as “gift buyers,” “kindergarten teachers,” “primary school teachers,” etc.
I’m lost as to where to start, have tried to look into tags, segments, properties...
So far I suspect it’s best to create custom properties?
But I can’t see how to bulk add properties to existing profiles.
Do I need to export our list, add the new column/property, then re-upload? I’m so worried it will override the existing profile of each email address!!!
But am OK with manually going thru the exported spreadsheet and updating each contact if that’s the best way to do it and it won’t affect other existing profile data when we re-upload.
And do I understand right that once we’ve uploaded these properties to our current list, only then can we add those properties as multi-choice options in our sign-up forms ---- that trying to offer these options in our form before having at least 1 profile already using that property will mean the form won’t collect that data????
Thanks for any help you can give me!
Page 1 / 1
Hi @worcestershiresauce good question - can I ask first, how do you know which contact belongs in which category? ie: how do you know if the person is a grandparent vs a teacher?
Hi @worcestershiresauce, welcome to the community!
It looks like @Brett_Gatsby can help you get started with identifying what the custom profile properties should be.
Just to help you know you’re on the right track, I’ve done a very similar process for many clients before. Custom profile properties are the special sauce of Klaviyo. If you can build them out, and maintain them over time, it helps you develop a rich dataset for your customer database within Klaviyo.
I’d highly encourage you to create a “dictionary” or reference doc to help yourself/ your team keep track of custom profile properties created, the data type you set for each one, and the values created for each property.
This is an example of how I’ve set that up in Airtable for one of my clients’ Klaviyo accounts.
What type of custom property to use?
For your purposes, you’ll want to set this up as a List data type custom property. That enables you to hold multiple values, like “grandparent, teacher” instead of having one new value replace the prior existing value. Here’s a great help doc on data types.
How to set up the custom profile properties?
The best thing to do is export the whole list(s) you’re working with, one at a time. I’d export the email address, and any other data that will help inform the custom profile property you’re creating. Klaviyo will use the email address to reference existing profiles, and update their information - so no duplicates will be created. No information will be lost either, as long as you set up the custom profile properties correctly. So I always save backup CSVs just in case I have to redo something later. This help doc will show you how to do a bulk import via CSV to set up List data type custom profile properties.
Using the custom profile properties after setup
Once you have the custom profile properties you need setup in a CSV file, then you can import that file into your Master list. The custom properties will give you the conditions you need to create segments.
Last thing, re your question here:“And do I understand right… that trying to offer these options in our form before having at least 1 profile already using that property will mean the form won’t collect that data?”
If the custom profile property does not already exist in your account, then you can’t reference it when building signup forms. List data type properties can be tricky, so the most reliable path is to set it up in your account using the CSV bulk import method first. Then after that’s done, you can build signup forms that reference the existing property you’ve created.
This help doc might overall help you get familiar with custom profile properties in Klaviyo.
P.P.S. If you’re not already on a paid Klaviyo account, I highly recommend doing that if it’s feasible for your business. Live chat support has helped me troubleshoot custom property setup in real time, with many imports, and it’s super helpful when you’re trying to figure out what went wrong - if something doesn’t look right. But hopefully, you’ll get it right the first time. (:
Hi @worcestershiresauce good question - can I ask first, how do you know which contact belongs in which category? ie: how do you know if the person is a grandparent vs a teacher?
@Brett_Gatsby thanks for responding So, some of them we can tell by email domain name (e.g. teachers have things like jane.doe@learnandplaygroup.com), and that’s currently the case with most of our list. For general public like grandparents, we’d categorise as “unknown” for now, then send emails that incentivise them to update their own properties/details?
It’s time consuming to do it manually, but we’re happy to do it before our list gets any bigger, and then we’ll list the options in our opt-in form for future subscribers.
Any thoughts?
@Brett_Gatsby forgot to add — because we offer targeted starter kits for “home” or “education”, we could also look at the Shopify data to see what subscribers ordered which kit, and manually update the category property according to what type of kit they purchased. Not totally sure how we’d do this practically, though… possibly whoever is leftover after doing the domain name check, we could manually look at their purchase history, as that wouldn’t be a huge number anymore. Why wasn’t I born a tech wizard is what I’d like to know
@ebusiness pros all super helpful! Good to know it’s been done, and good tip re. the live chat support (yep, got a paid account).
“No information will be lost either, as long as you set up the custom profile properties correctly. I always save backup CSVs just in case I have to redo something later”…
I don’t totally follow what you mean? Do you just mean you don’t delete the CSV that you already uploaded, in case you mistyped a category and need to edit it, or…? Sorry probably completely missing the point!
Also, if somebody unsubscribed in the time it took for us to export, edit, and import the CSV file, that wouldn’t turn them back into an active subscriber, would it?
And...
If the custom profile property does not already exist in your account, then you can’t reference it when building signup forms. List data type properties can be tricky, so the most reliable path is to set it up in your account using the CSV bulk import method first. Then after that’s done, you can build signup forms that reference the existing property you’ve created.
On this, if we are also creating new categories for niches we’re about to advertise to for the first time, that nobody on our current list relates to, could I just use one of our dummy contacts (that we send test emails to), and add a ton of properties to that contact, so we can then offer those as options on our sign-up form going forward? Clearly looking for short-cuts if it means I don’t have to mess with CSVs more than I have to!
Please don’t feel obliged to reply to everything, as you say I can reach out to the help desk. Just sometimes others in the field know best Appreciate all the resources you shared.
@worcestershiresauce you’re asking good questions! So glad you found my feedback helpful. Also glad to hear you’ve got access to live chat.
I’m gonna number these to make it easier to follow, so…
Your question about backup CSV files. Basically any time I prep a CSV file for import into Klaviyo, whether it’s importing new subscribers or setting up custom profile properties, I save a copy of the file in a folder in my cloud drive. Either Google Drive, Dropbox, etc., whatever you use. 1b. That helps me start over with a clear trail to follow when I need to retrace steps/ troubleshoot imports that were incomplete or failed.
As for people who unsubscribe - the best thing to do is to make sure whatever group of people you’re exporting to process data is exported in one of these 2 ways: A = Create a segment of the list you’re working with that identifies all who are “unsuppressed” - that will narrow the focus to be only active profiles. B = Export people’s consent status as an extra property for you to reference, then delete people who are “suppressed” from the CSV before you start adding custom profile properties. That way when you import the file back into Klaviyo, you don’t change their consent status by checking the box that says “yes they opted into emails” 2b. I’d encourage you to try and complete this CSV in one day, and import the data that same day to try and prevent people who unsubscribe messing with your group of “unsuppressed” people. Unfortunately there’s not a foolproof way to track who’s unsubscribing while you’re updating profile data in a CSV file.
When it comes to setting up custom profile properties. IF you’re working with Boolean, Text/String, or Number data type custom properties, then you can set it up directly on a test profile. IF you’re setting up custom profile properties with List data types, always set up the initial property using a CSV file, even if it’s just one row with the data for your test profile. List data type custom properties require JSON array formatting for their values. It’s an annoying thing, but Klaviyo’s backend doesn’t set up a List data type correctly when creating a new property directly on a profile.
I’ve learned this the hard way lol. So even if it feels like more work up front, it pays off later when you have reliable data types working correctly for your custom profile properties.
As for people who unsubscribe - the best thing to do is to make sure whatever group of people you’re exporting to process data is exported in one of these 2 ways: A = Create a segment of the list you’re working with that identifies all who are “unsuppressed” - that will narrow the focus to be only active profiles. B = Export people’s consent status as an extra property for you to reference, then delete people who are “suppressed” from the CSV before you start adding custom profile properties. That way when you import the file back into Klaviyo, you don’t change their consent status by checking the box that says “yes they opted into emails” 2b. I’d encourage you to try and complete this CSV in one day, and import the data that same day to try and prevent people who unsubscribe messing with your group of “unsuppressed” people. Unfortunately there’s not a foolproof way to track who’s unsubscribing while you’re updating profile data in a CSV file.
Ooooh thank you so much, but especially for this bit. Saves me completely messing things up.
Again. Thank you for all of your help, I appreciate it so much! Onwards
You’re very welcome @worcestershiresauce! You’ve got this
When in doubt, just take it slow and double check everything before you import. Slow and steady wins the race
Update re: “do I understand right that once we’ve uploaded these properties to our current list, only then can we add those properties as multi-choice options in our sign-up forms ---- that trying to offer these options in our form before having at least 1 profile already using that property will mean the form won’t collect that data????”
We didn’t want to wait to clean up our current list to start segmenting new subscribers. So we just figured out what we wanted our segments to be, then manually went into a handful of profiles and created these profile properties. From there it was simple to insert those properties into our sign-up forms. (first image)
We created a test segment to make sure it was working, and it is :)
The only thing is people who subscribe at point of checkout (second image) etc rather than our Klaviyo sign-up are not being segmented, so not sure if there is a get-around for that. Will probably have to have those people self-segment using buttons that update their properties within our welcome flow or something.
Thought somebody may want proof of this shortcut working, at least to some degree.
Hey, @worcestershiresauce
Glad you found a path to helping you and your team get started with using targeted segments quickly!
One small piece of caution to others who might read this thread and try a similar strategy: If you create profile properties directly on the profile, you will not be able to set up the List data type for a custom profile property that does not already exist in your account.
So for now, this is a solution only for custom profile properties that are Text/String data type, or Boolean, or Date/ Number data types.
But if at some point, you wanted to be able to leverage List data type custom profile properties to show/hide email content for those people who might have purchased for both “School” and “Home” you would need to reconfigure how your custom profile properties are created and stored in Klaviyo.
As for your new question here:
“The only thing is people who subscribe at point of checkout (second image) etc rather than our Klaviyo sign-up are not being segmented, so not sure if there is a get-around for that. Will probably have to have those people self-segment using buttons that update their properties within our welcome flow or something.”
A; Self-segmentation by using buttons in Welcome Series flow emails to update custom properties is a useful path to filling out customer data profiles.
When doing this for clients in the home good and sporting good spaces, I’ve found that usually <50% of people actually click those buttons, even if they open the email.
B; So here’s a fallback route to help you update data for those people who see the buttons, and don’t click to give you more data about their preferences/ interests.
Klaviyo has this awesome action block you can add to a flow called “Update Profile Property.” You could add that to the end of your customer thank you flow and update profile properties based on what someone purchases so that step gets completed before they exit the flow. Help doc link here
Or, a more precise way to do this is to create a “data update” type of flow for each product category that you created a custom profile property for.
The simplest flow trigger in this case might be to create a segment that groups people based on what types of products they’re purchasing. Then for example: When someone places an order and gets added to a segment for the “School” type, they get added to a “School data update” flow.
That then uses the “Update Profile Property” block to add the “School” custom profile property to their profile, and set the value of “School”, based on your screenshot above.
I hope this helps!
~ Gabrielle
Hi,. is it possible to upload profiles updated csv with API request?
Hey @zire,
Seems like you made a new post with a similar question which I responded to. In case you missed my response, I’ve included the post below: