Update a profile property from a Workflow Completed event
Build a Klaviyo flow that copies a workflow answer onto the shopper's profile, using a webhook action.
At the end of this tutorial, every Workflow Completed event writes one of its answers onto the shopper's Klaviyo profile as a profile property, ready for segments and personalization.
Prerequisites
- A workflow live and sending to Klaviyo: follow Create a workflow and send it to Klaviyo first.
1. Create the flow
In Klaviyo:
-
Open the Flows tab.
-
Click Create flow (top right).
-
Select Build your own (top right).
-
Name it, for example:
GETJUST - Workflow -
Click Create manually.
2. Set the trigger
The trigger selector opens on Recommended.
-
Click Your metrics, then API.
-
Pick Workflow Completed.
-
Choose your re-entry criteria. Add trigger filters if you need them.
-
Click Save, then Confirm and save.
You land on the flow canvas. The trigger reads When someone Workflow Completed.
Not just properties
This tutorial updates a profile property, but from this same trigger you can also send an email, a text message or a WhatsApp message, update a list, send a webhook, or create an internal alert.
3. Add a webhook action
Klaviyo's built-in Property update action cannot read the event's fields dynamically. So the property is written through a Webhook action calling Klaviyo's own API.
- Click the + under the trigger (add action).
- Under Data, choose Webhook.
The panel on the left configures it.
4. Configure the webhook
Name
For example:
Update profile propertyDestination URL
https://a.klaviyo.com/client/profiles/?company_id=XXXXXXXXXXXX is your 6-character public API key. Find it on
your API keys page,
under Public API key, next to your company name.
Headers
Two key-value pairs. Click Add header for the second one.
| Key | Value |
|---|---|
revision | 2026-04-15 |
Content-Type | application/json |
revision is the Klaviyo API version. Content-Type says the body is JSON.
JSON body
The payload sent to Klaviyo:
{
"data": {
"type": "profile",
"attributes": {
"email": "{{ person.email }}",
"properties": {
"interet": "{{ event.valise_type|default:'' }}"
}
}
}
}What this is:
typeis the kind of object the call updates: a profile.attributes.emailidentifies the profile.{{ person.email }}is filled automatically from the event's shopper.propertiesholds the profile properties to create or update. This example creates one property,interet, from the event'svalise_typefield. Add as many as you want, as long as each value exists in the event.
Find the event's fields
-
Click View profile & event properties under the JSON body.
-
Profile shows the person's profile. Event lists every field the event carries, including the Klaviyo keys you configured in the dashboard.
-
Click a field to copy it, ready to paste into the JSON body, like
{{ event.valise_type|default:'' }}.
When you are done, click Save under the JSON body. The flow now shows the trigger, then the webhook action.
5. Preview
- Click Preview (top right).
- Search for the profile of a shopper who already completed the workflow. Click it.
- Check the webhook rendered with that profile's real event.
- Click Exit preview.
6. Turn it on
-
Click Update status (top right).
-
Choose a status: Draft, Live or Manual.
-
Choose Update status now or Schedule.
-
Click Save.
7. Verify
- Complete the workflow once, with an email whose profile does not have the property yet.
- Open the profile in Klaviyo. Check the property is there.
A "send a test event" button with a custom email is coming soon in the dashboard.