Find ALL contacts who filled out a form

  • 28 February 2024
  • 5 replies

Userlevel 2
Badge +4

We are running a competition - join our mailing list to be in with a chance to win a pair of posh shoes.

So I created a Klaviyo sign-up form for this and set it to subscribe people to our main list as usual, thinking that it would be trivial to create a segment showing which contacts had filled out the form so we could randomly select the winner.

But it isn’t: there is no option in properties about someone → something someone has or has not done for ‘filled out this sign up form’.

There is only the ‘source’ option - but if someone entered the competition who was already a mailing list subscriber, then source would still show how they originally signed up to the mailing list, not that they had filled out the competition form. We don’t want to exclude existing subscribers from the competition, that would be unfair.

My current workaround is to make a new list for the form - I tested this by filling it out myself and I did not immediately end up on the list, it seems to have happened after the verification email is clicked on. This will work for now but I’ll have to merge this list into our main subscriber list afterwards, which is not ideal. I would greatly prefer to just use our main list and get a report on who filled out the form.

Is there a way - either on the dashboard or via an API query - to find out who filled out this form, whether or not they were already subscribed. There’s certainly a count of the number of users who have filled out the form, but no way that I can see to get at who they are.



Best answer by Sale pro 28 February 2024, 11:45

View original

5 replies

Userlevel 7
Badge +35

Hi @dartacus 

Good question!

Klaviyo states that “the value set for $source on a profile is overwritten when profiles takes actions that set this field. For example, submitting a form would update the existing $source value on the profile to reflect the form submission”

So the $source field is updated for existing subscribers to reflect the new source. I just tried this to check and it worked for me.

So if your main data capture form has a $source = general and your comp form has a $source = competition, a contact who has previously subscribed to your list ( $source = general) will have their $source updated to ‘competition’ when they ener using your new competition form. You can then create a segment using Properties about someone $source equals ‘competition’ to get your entrants. Then convert that segment to a list and sample list members with a value of 1 to get your winner.

Let me know if that works for you

BTW, for existing Klaviyo contacts that I invite to a prize draw entry (no entry questions) via email, I usually don’t use a form as it’s an extra step for them to add their email (which I already have), and they may use a different email to the one they orginally subscribed with. Instead, I direct them to a competion entry confirmation page, then create a segment of clicks to that page for the entrants. More involved, but a better experience for existing contacts I think.

Hope that helps





Navigate to the Forms & Response tab: Go to your Klaviyo account and click on the "Forms & Response" tab in the top menu.

Select the Form

View Submissions

Export Contacts

Userlevel 2
Badge +4

Thanks both for your responses. Digging around in the help docs a bit more I found the following:

  • Note that each time someone fills out a form, their $consent_form_id property is replaced with the ID of the form they filled out most recently, so profiles will only appear in this segment if they have not filled out any other forms since completing the one in question. To avoid this, add a hidden field to your form before setting it live, then use the hidden field property as your segment definition.

…so the way to handle this is to set a hidden field which sets a property on submit, then base a segment on that property. Job done.



Got it! To ensure that profiles appear in a segment based on the form they filled out, without being affected by subsequent form submissions, you can set up a hidden field in your form. This hidden field can set a specific property value upon form submission, which you can then use as the basis for your segment definition. This way, each form submission will update the property without affecting the $consent_form_id property, allowing you to accurately segment profiles based on their form interactions. Thanks for sharing this approach!

Userlevel 2
Badge +4

@Sale pro Thank you, I’d seen that in the docs when I was looking into your previous suggestion, but this is definitely the way to handle it.