8. Troubleshooting Klaviyo + Giftnote

Fix the most common Klaviyo + Giftnote issues, from duplicate emails and rejected transactional flows to renamed events and case-sensitive variables.

Written By Giftnote Team

Last updated About 1 hour ago

Fix the most common Klaviyo + Giftnote issues, from duplicate emails and flows rejected as non-transactional to renamed events and case-sensitive event variables.

Settings β†’ Integrations β†’ Klaviyo. Check that it shows Connected and that Integration Enabled is on.

1. Recipients getting duplicate emails

If your gift recipients are receiving two emails for the same gift β€” one that looks like a basic Giftnote template and one that matches your Klaviyo design β€” both systems are sending at the same time.

Turn off Giftnote's native emails:

  1. Open the Giftnote app in your Shopify admin.
  2. Go to Settings β†’ Notifications.
  3. Turn off the email for every event your Klaviyo flows now send. Expand each event row (for example Gift Order - Gift Message Delivered) and switch off its email channel. Save if a save bar appears.

Once Klaviyo flows are active, Giftnote's native emails must always be off.

SMS gift messages are still sent by Giftnote, not Klaviyo. Turning off native emails does not stop the SMS.

You'll know it worked when: the next gift order triggers only one email to the recipient, and that email matches your Klaviyo template design (your branding, your domain).

2. Flows rejected by Klaviyo as non-transactional

Klaviyo classifies gift notification emails as transactional (not marketing), which means they must contain less than 20% promotional content. If your flow was rejected, it's because Klaviyo detected promotional elements.

Strip promotional content from your flow:

  1. Open the rejected flow in Klaviyo.
  2. Remove all call-to-action buttons (e.g., "Shop Now," "Browse New Arrivals," "Use Code X").
  3. Remove any promotional imagery β€” banners, sale graphics, or lifestyle images unrelated to the gift.
  4. Remove any split/conditional blocks that serve marketing content.
  5. Keep only the gift message content: who it's from, the message itself, and any product details related to the gift.
  6. Resubmit the flow for transactional approval via Klaviyo live chat.

Standard email support may not escalate this correctly. Use Klaviyo's live chat and specifically ask them to review and approve the flow as transactional.

Important: Transactional approval typically takes overnight (up to 24 hours). Plan for this β€” don't submit the morning of your go-live. And any edit you make to an already-approved transactional template requires re-submitting it for approval again.

3. Klaviyo invite link expired before setup was completed

If you sent the Giftnote team a Klaviyo invite and they weren't able to accept it in time, the link has expired. Klaviyo invite links are only valid for 12 hours.

Option A β€” Resend the invite:

  1. Log in to Klaviyo.
  2. Go to Settings β†’ Account β†’ Users.
  3. Send a new invite to nick@giftnote.com with Manager-level access. The access level must be Manager β€” Analyst or Viewer permissions are not sufficient for setting up flows.
  4. Let the Giftnote team know immediately so they can accept within the 12-hour window.

4. Old flows stopped working after a Giftnote update

If your Klaviyo flows were working months ago but have stopped triggering, the most likely cause is that Giftnote updated its event naming convention and your old flows are still listening for the previous event names.

Check the event names first:

  1. In Klaviyo, open the flow and note the metric it triggers on.
  2. In the Giftnote app, go to Settings β†’ Integrations β†’ Klaviyo. Under Notification Events, check the event you expect is switched on and that Integration Enabled is on.
  3. Compare the names. Select Edit on an event to see or customize the metric name Klaviyo receives.
  4. Check the connection. The Connection card should read Connected via OAuth β€” the current, supported connection.

Used Giftnote before the September update?
Flows built on the older Klaviyo metrics Giftnote - Order Scheduled and Giftnote - Order Tracked keep working. Shops that used Giftnote before September 2026 keep sending both legacy metric names, and both now map to the Placed Gift Order event. That event includes a Delivery Method property (Send Now, Send Later, On Delivery or On Fulfillment), so new flows can use one trigger and split on the method.

If the names match and the flow still doesn't trigger, the flow itself needs replacing. Editing the trigger on an existing Klaviyo flow doesn't reliably fix this.

Replace your flows entirely:

  1. Chat with us using the chat button in the help centre or in the app, and let the team know your flows have stopped triggering.
  2. The Giftnote team will copy the current template flows into your Klaviyo account β€” these use the latest event names.
  3. Reskin the new flows with your brand's design (logo, colors, copy).
  4. Submit the new flows to Klaviyo for transactional approval. Approval takes up to 24 hours. Do not delete your old flows until the new ones are approved and live.
  5. Turn on the new flows and turn off the old ones.

If your Connection card does not show Connected via OAuth, you may be on the legacy Klaviyo integration and missing newer event types like gift card usage tracking (Redeemed Gift Card). Ask the Giftnote team about upgrading during this process.

5. Event variables showing as blank in emails

If your Klaviyo email template shows the gift message, recipient name, or sender name as blank β€” but the flow is triggering correctly β€” the issue is almost always variable casing.

Klaviyo event variables are case-sensitive. Using the wrong capitalization will cause the variable to render as empty.

Check every variable in your template against this reference:

What you want to displayCorrect variableCommon mistake
Sender's name{{ event.From }}{{ event.from }}
Recipient's name{{ event.To }}{{ event.to }}
Gift message{{ event.Message }}{{ event.message }}

Giftnote's event schema uses capitalized property names (e.g., From, To, Message). Lowercase versions will not render. If you're unsure about the exact casing for a specific variable, select Preview on the event in Settings β†’ Integrations β†’ Klaviyo, or check the event payload in Klaviyo under Analytics β†’ Metrics β†’ [event name] β†’ Activity Feed and click any event to see the raw property names.

Fix the variables:

  1. Open your Klaviyo flow.
  2. Click into the email template.
  3. Find every Giftnote event variable and update the casing to match the reference above.
  4. Save the template.
  5. Resubmit the flow for transactional approval β€” any edit to an approved template requires re-approval.

You'll know it worked when: the next gift order email displays the sender's name, recipient's name, and gift message correctly instead of blank spaces.

Still not working?

If none of the above resolved your issue, try these:

  • Send a test event. In Settings β†’ Integrations β†’ Klaviyo, select Test on the event (or Test All), then check your Klaviyo activity feed. If the test arrives, the connection works and the problem is in the flow or the order.
  • Place a test order from your live storefront (not from Shopify admin β€” admin orders bypass the gift message widget entirely). Add a gift message, complete checkout, then mark the order as Delivered in Shopify admin. Check your Klaviyo activity feed to see if the event appeared.
  • Check Klaviyo's flow activity log for the specific flow. Go to Flows β†’ [your flow] β†’ Activity Feed to see if events are arriving but the flow is skipping them (common cause: Smart Sending is suppressing transactional emails β€” disable Smart Sending on all Giftnote flows).
  • Verify your Klaviyo account is on a paid plan with payment details entered. Flows cannot be marked as transactional on free Klaviyo accounts.

If you've tried all of the above and the issue persists, chat with us using the chat button in the help centre (https://help.giftnote.com/en) or in the app, or email support@giftnote.com. Include your store URL, the name of the Klaviyo flow that isn't working, and a screenshot of the flow's activity feed so we can diagnose it quickly.