Store review scores on the customer's profile
Every review updates the customer's Klaviyo profile with their score and tracks a Submitted Review event for the follow-up flow.
New submission on a product-review or NPS form
Update the customer's Klaviyo profile with the rating and feedback, and track a Submitted Review event
One-directional. A submission triggers the action — nothing is written back into your form.
A review form sent after delivery gets answered by people who already bought something. The score is worth more sitting on their Klaviyo profile than in a spreadsheet, because that is where the next email to them gets decided.
Subscription brands lean on this hardest — coffee, refills, anything that renews. A nine or a ten can go straight to a request for a public review; a four routes to a person rather than a flow. Both come off the same submission.
Setting it up
- 1
Send the review form by link or QR code on the delivery note, so the person answering is the customer who received the order.
- 2
Decide two names before building: nps_score for the profile property and Submitted Review for the metric. Both are awkward to rename once history exists.
- 3
In Zapier, create the Zap with the New Submission trigger and select the review form.
- 4
Add Klaviyo's Create or Update Profile action first, mapping Email Address so the score attaches to the existing customer profile instead of a new one.
- 5
Map the 0–10 answer to nps_score and check Zapier is passing it as a number — a score stored as text cannot be compared with greater-than in a segment.
- 6
Add a second Klaviyo step, Track Event, with the metric name Submitted Review and the written answers as event properties.
- 7
In Klaviyo, build one flow on Submitted Review with a conditional split at seven: above it, ask for a public review; below it, notify whoever handles retention.
- 8
Submit the form as a test customer, confirm both the property and the event landed on that profile, then turn the Zap on.
What maps where
Using the Net Promoter Score Survey as the starting point. These are its real fields — swap in your own and the mapping works the same way.
| Form field | Klaviyo |
|---|---|
| Your Name | First and last name attributes, so the follow-up email is not addressed to an email prefix |
| Email Address | The profile identifier — the score is written to the customer's existing Klaviyo profile |
| On a scale of 0–10, how likely are you to recommend us to a friend or colleague? | An nps_score property, stored as a number so segments can compare it |
| What's the main reason for your score? | An event property on Submitted Review, quoted in the internal notification for low scores |
| Which of our products or services did you use? | A property that lets the follow-up flow name the right product |
| What could we do to improve your experience? | An event property kept for reading, not used to trigger anything on its own |
Variations worth knowing
If you would rather not build the branch inside Klaviyo, use Zapier Paths after the trigger. One path tracks Submitted Review and subscribes the profile to an advocates list; the other sends the answers to whoever handles complaints. The score still lands on the profile either way.
The nps_score property holds one value and each survey overwrites it. The Submitted Review event does not — every submission is its own record with its own timestamp. Use the property for segments and the event stream for the trend across quarters.
If something isn't arriving
The address in the form does not match the one on the Klaviyo profile, usually because the customer typed a different one. Ask for the email the order was placed with in the field label, and add a Klaviyo find-profile step before the update so mismatches show in Zapier's task history instead of quietly creating duplicates.
Klaviyo stored the answer as text, so a greater-than comparison matches nothing. Add a Zapier formatter step to convert the value to a number, re-run one task to overwrite an existing profile, and check the property type on that profile before rebuilding the segment.
Frequently asked questions
Should the score go on the profile or in the event?
Both, for different jobs. The profile property answers what this customer's score is now, which is what a segment reads. The event answers what they said and when, which is what a flow branches on and what a report counts over time.
Can a low score stop a scheduled campaign going out?
Not on its own. Build a Klaviyo segment of profiles with a low nps_score and exclude it from the campaign, or hold those profiles aside while the follow-up happens. The exclusion is set up in Klaviyo, never on the form.
Does the customer's answer change anything on the form?
No. The flow runs one direction: submission in, Klaviyo action out. Nothing is written back, so the form has no memory of who has already replied. Klaviyo's flow filters are where you stop the same customer being asked twice.
Related automations
- Add text message opt-ins to your SMS audience
Only people who answered yes to text updates reach Klaviyo, with their mobile number and SMS consent set on the profile.
- Grow your marketing list from a signup form
Each signup on your discount or newsletter form becomes a consented Klaviyo profile on the marketing list, ready for the welcome flow.
- Put workshop registrations on their own reminder list
Each registration lands on a session-specific Klaviyo list and tracks a Registered event, so confirmations and reminders send themselves.
- Start a nurture flow with a Joined Waitlist event
A waitlist submission records a Joined Waitlist event in Klaviyo, so the nurture flow starts the moment someone signs up.
- Turn quiz answers into Klaviyo profile properties
Quiz answers arrive as custom properties on the Klaviyo profile, so budget, goal and experience level become segments you can send to.
- Add buyers to a customers list after each order
Each order form submission adds the buyer to a Customers list in Constant Contact for updates and repeat-purchase emails.
Build the form first
The automation needs somewhere to fire from. Publish a form, connect it once, and every submission from then on runs this flow.
Start free