Getting started with coupon codes in Klaviyo

Last updated at:

You will learn

Learn how to create and upload unique and static coupon codes in Klaviyo to engage your customers and get them excited about given promotions on your site. 

Before you begin

There are multiple ways to upload and use coupon codes in Klaviyo. This guide covers: 

  • Uploading:
    • Unique coupon codes 
    • Single, static coupon codes 
  • Adding coupons to your emails and SMS
  • Displaying your coupons as barcodes for your brick-and-mortar stores
  • Setting up coupon reminders for customers that haven't used a coupon code
  • Seeing who used specific discount codes (Shopify and Magento 1.x stores)

Unique vs. static coupon codes

  • Unique, also called "dynamic," coupon codes are a random series of numbers or letters that a recipient can use one time. Each recipient will receive their own coupon code, and no two recipients will have the same code. Unique coupon codes are typically longer and more complicated than static codes. 

  • Static coupon codes means that there's only one code (e.g., Welcome20). Every person will receive the same code and be able to use it on your site. Static codes are able to be shared out; however, they are easier to remember and use. 

This guide will cover how to upload and and manage those coupons in Klaviyo; however, if you have a Shopify or Magento store, you can also generate new unique coupon codes. Learn how in these articles: 

Upload unique coupons into Klaviyo

Enable uploaded coupons

First, make sure that uploaded coupons are enabled.

  1. Navigate to Account > Settings 
  2. Click Profile Maintenance
  3. Toggle on the Uploaded Coupons option
    Klaviyo's Profile Maintenace page with uploaded coupons switched on.jpg

Once you enable uploaded coupons, you will see a corresponding tab in Coupons

Prepare your list of coupon codes

Next, prepare a list of your unique coupon codes.

Check that: 

  • Each code is unique
  • The list of codes is saved as a CSV file
  • One column in the list has Coupon or Coupon Code as the header

Below is an example of what a list of coupon codes look like in a spreadsheet.

Example of 10 coupon codes in a CSV file that are ready to be uploaded

Upload coupons into Klaviyo

  1. Navigate to Coupons
  2. Click the Uploaded Coupons
    The uploaded coupons tab in Klaviyo showing 0 coupons
  3. Click Create Uploaded Coupon to add a new coupon code
  4. Provide a name for your coupon
  5. Select an expiration date
    The Add Coupon button in the Uploaded Coupons tab in Klaviyo, which allows you to add more coupon codes
  6. Click Add Coupon to save your coupon
  7. Click the dropdown for your new coupon
  8. Select Add Codes
    The Add Coupon option is available in the dropdown on the far right side of the coupon.
  9. Upload your list of coupons either by dragging and dropping your file or selecting it from your computer
    Page to upload coupon codes via CSV, either dragging and dropping it into the page, or searching for the CSV in your computer
  10. Review your coupons
  11. Click Start Import

After your coupons finish importing, you can see how many coupon codes uploaded successfully and how many were skipped because of duplicates or a lack of data.

Coupon upload creation screen, showing that the codes were uploaded successfully

Tips on uploading unique coupon codes

You can generate your own set of unique coupon codes outside of Klaviyo, upload them to your Klaviyo account, and reference them in your campaign or flow messages. This is a useful method if you're using point of sale software that can generate and manage coupon codes. There are some important things to note when uploading coupons using this method.

  • Klaviyo doesn't maintain any metadata on your coupons. This means we don't know how much the code is worth, what the expiration period is, which restrictions there are on the code's use.
  • You are responsible for ensuring the validity and expiration dates that these codes will work at your point of sale system.
  • You can set an expiration date when adding coupon codes, but this date only applies to how long the coupon codes are available in your Klaviyo account. Please note that dates are in the UTC time zone.
  • Uploaded coupon codes will be stored in Klaviyo for one year. After that year, unsent codes will expire automatically, and you will need to upload new codes.

Note that you must always have enough coupon codes to send to recipients. If you send a campaign or flow message without enough available coupon codes, the messages will be skipped.

Use uploaded coupons in a message

You can now include your coupon codes in your messages. When editing an email or SMS, include the following snippet, replacing "CouponName" with the name of your coupon:

{% coupon_code 'CouponName' %}

Email example showing a single coupon


You can only add 1 coupon code per email. You can display the same coupon code in multiple places, but you cannot use multiple codes.

After sending your email, you can check the total coupon codes by clicking into the Coupons tab and checking the Available/Total column.

The Uploaded Coupon tab where you can see the coupon name, how many total codes there are, and how many are available

 When sending uploaded coupon codes in emails, if your send list is larger than your available coupon codes, then the messages scheduled will be skipped.

  • If the code is used in a campaign message, Klaviyo will compare the number of expected recipients to the number of available codes for the coupon used. A warning is displayed if there aren't enough codes available, and you are unable to send the campaign. When A/B testing, you will need enough available codes to cover the full send, even if your code is only being sent to a part of the list or segment you are sending to. 
    Error message indicating that not enough coupon codes are available to send to all recipients
  • If the code is used in a flow message, Klaviyo will compare the number of expected recipients to the number of available codes for the coupon used. Flow emails that contain coupon codes with 0 available cannot be turned live. At send time, if a flow email contains a coupon with no available codes, the email will be skipped. You can see who was skipped by clicking into the analytics of the flow email and clicking Recipient Activity > Other.
    The skipped reason for no more uploaded coupons in an email's analytics


You can also use coupon codes in SMS/MMS messages using this format:

{% coupon_code 'CouponName' %}.

Swap out CouponName for the name of your coupon and add it to your flow or campaign message.

SMS with coupon for 20 percent off one item

The only difference with SMS is you can only add the coupon code once. 

Error message for when two dynamic coupons are included in an SMS

Send coupons as barcodes (email only)

If you also have brick-and-mortar stores, you can save your customers (and your cashiers) a lot of time by providing a barcode coupon that can quickly be scanned at your point of sale system.

To display a barcode in an email template, use the following template tag:

{% barcode_code 'CouponName' height=100 width=200 %}

The height is measured in pixels and can be adjusted to serve the design requirements for your template.

Below is a preview of the email with this barcode.

Preview of an email with a coupon in a barcode

Some point-of-sale systems required you to add special characters to your coupon code before it is rendered into a barcode. If you need more control over the code before being rendered, adding the cut parameter to your coupon template tag removes a specific character or characters from all locations in the code displayed.

For example, let's say your point of sale system requires that you render your barcodes from coupon codes that begin with a hashtag. For your site, you need to remove this hashtag. You can use the cut parameter to pass one version of this code as a barcode, and a separate version that does not include the hashtag for your other code. For the code #GREATdoggo12345, the following tags display these values for a user:

{% coupon_code 'CouponName' cut=# %} == GREATdoggo12345
{% coupon_code 'CouponName' cut=G %} == #REATdoggo12345
{% coupon_code 'CouponName' cut=g %} == #GREATdoo12345
{% coupon_code 'CouponName' cut=5 %} == #GREATdoggo1234
{% coupon_code 'CouponName' cut=#Gg5 %} == REATdoo1234

The cut parameter has the following limitations:

  • This is case sensitive. For example, using cut=i will remove i but not I.
  • Multiple items can be combined with a single cut tag.

If you're using the cut parameter, ensure that you fully understand how characters are removed from your rendered code so that customers do not receive corrupted codes.

Previewing coupon codes in messages

If you send a preview of a coupon to your email or phone number, it will use one of your generated coupon codes. 

However, if you preview the coupon within Klaviyo (i.e., looking at it in-app), the preview will show the coupon name followed by "-PREVIEW." In this case, the preview does not show an actual coupon code or use one of your available codes. 

preview of coupon within Klaviyo showing coupon name followed by -PREVIEW.

Add a single static coupon code for everyone

For small stores or for certain discounts, you may just want to paste the code straight into the SMS or email content being used. If you're worried about the code getting spread around the internet, you can change it every couple of months or set a small expiration window.

The first step would be to create a coupon code in your ecommerce platform. To use it in Klaviyo, drag and drop in a text block and type in the code. Make sure that the block is prominent so recipients will notice it.

Example email showing a single static coupon

Set up coupon / discount code reminders

A great use of Klaviyo's automated flows is to automatically follow up with people who haven't used a coupon code to remind them about it. 

Add an additional email or SMS to the same flow that was triggered to give out the initial coupon, but set this additional message to go out a few days later.

For unique (also called dynamic) coupons, instead use either a split or an additional filter so that the follow-up message only goes to those who have placed an order 0 times since starting this flow. 

For static or uploaded coupons, include an additional filter for this new message that checks whether or not that person has placed an order that used that discount code. Only allow this follow-up email to send if someone hasn't placed an order since starting this flow.

Setting a additional filter so only those who haven't used the coupon receive a reminder email

One person can only receive 1 unique coupon code per coupon. If you resend an email to 1 of your customers using the same coupon, they will receive the same unique coupon code.

See who used discount codes in Shopify and Magento

For Shopify and Magento stores, Klaviyo has the ability to pull in specific coupon codes being used for each purchase. This only works for static coupons or a singular unique coupon code; you cannot segment, split, or filter by a unique coupon code's name or prefix. 

This feature lets you easily create a dynamic segment of everyone who used a particular coupon code.

  1. Create a new segment and name it "Used a coupon".
  2. Select What someone has done (or not done) from the dropdown.
  3. Select the Placed Order event and then click the Add Filter option to specify the discount codes to select.

This is a great way to understand if coupons are getting forwarded on to others, shared among friends, etc.

If you are using a custom platform or a platform like Volusion, BigCommerce, Symphony, or others, you may also be able to pull coupon information. Use the Add Filter option to see if a "Coupon" or "Discount Codes" option appears.

Additional resources

Klaviyo can autogenerate unique coupons for stores using Shopify, Magento1.x, and Magento 2 coupons. Learn more: 

Was this article helpful?
882 out of 1431 found this helpful