Fix: Same Coupon Code Appears in Two Different Klaviyo Flows

If a customer goes through more than one flow that generates a coupon (for example, one flow for newsletter signup and another flow when they write a review), you may notice that the second email shows the coupon code from the first flow instead of a fresh one. This article explains why that happens and how to fix it.

The symptom

  • Flow 1 (for example, Newsletter Signup) sends a coupon and it works correctly.
  • A short time later, Flow 2 (for example, Review Written) sends its email, but it displays the code from Flow 1 instead of the newly generated one.

Why this happens

The plugin does its job correctly: every webhook call generates a brand new, unique WooCommerce coupon and writes it back to the customer’s Klaviyo profile in the Woo coupon field (the dck_woo_coupon profile property). The email step then reads that profile field to display the code.

The stale-code problem comes from how Klaviyo handles profile properties, not from the coupon generation itself. There are two contributing factors:

  1. Profile properties update with a small delay. The Klaviyo Webhook action is fire and forget. Klaviyo does not wait for the webhook to finish and does not read its response. If the email step runs before the new coupon value has propagated onto the profile, the email renders the previous value that is still stored there.
  2. All flows share a single profile field. Every flow writes the coupon into the same Woo coupon field, so the profile only ever holds the most recently generated code. If two coupon flows run close together for the same person, the later write overwrites the earlier one.

The fix: add a time delay before the email

Add a Time Delay step in the Klaviyo flow between the Webhook action and the Email action. A delay of a few minutes gives the profile property enough time to update before the email is rendered.

  1. Open your flow in Klaviyo.
  2. Between the Webhook action and the Email action, drag in a Time Delay step.
  3. Set the delay to at least 2 minutes (5 minutes is a safe choice).
  4. Save and turn the flow on.

Make sure the email uses the dynamic Woo coupon personalization field (search for dck in personalization fields) and not a hardcoded code.

Important: flows that run close together

The time delay fixes the timing issue, but because all flows share the same Woo coupon profile field, it does not protect against two coupon flows running for the same person within the same few-minute window. In that case the second webhook overwrites the field before the first email renders, so the first email can pick up the second flow’s code.

In practice this overlap is rare, since triggers like newsletter signup and writing a review usually happen days or weeks apart. If your flows genuinely can fire at the same time for the same customer, contact support so we can advise on separating the coupon fields per flow.

Checklist

  • A Time Delay of at least 2 minutes sits between the Webhook and the Email step.
  • The email uses the dynamic Woo coupon field, not a fixed code.
  • The same customer is not being pushed through two coupon flows at the same moment.
Browse our plugins

Lightweight WooCommerce plugins built for speed. No bloat, no frameworks -- just clean code that works.

View all plugins
Stay in the loop

Get notified when we launch new plugins. No spam, just product updates.