WooCommerce’s built-in coupon system is fine for "5% off your first order". It falls over the moment you want anything more interesting: gift certificates customers can buy and email, store credit you issue when a refund goes sideways, a buy-one-get-one offer for a product launch, or 500 unique single-use codes for an influencer campaign. None of that ships with core WooCommerce. You either bolt on a plugin or you write a lot of custom PHP.
Smart Coupons is the plugin I keep ending up on. It’s been around since 2012, was acquired by Woo from StoreApps in 2014, and now lives on the WooCommerce marketplace as one of their most-installed extensions. It does roughly twenty things on top of native WC coupons, and the things it does are the ones you actually need on a real shop.
Spin it up against a real WooCommerce install and you can have BOGO offers configured in about 15 minutes.
Table of Contents
- What Smart Coupons actually does
- Key features
- Gift certificates and store credit
- How BOGO offers work
- Bulk coupon generation
- URL coupons and auto-apply rules
- Installation and setup
- Real-world use cases
- Developer reference
- Performance, compatibility, and gotchas
- Pricing and licensing
- FAQ
- Final thoughts
What Smart Coupons actually does
Smart Coupons sits on top of WooCommerce’s native coupon system and fills in the missing 80%. Native WC has flat discounts, percent discounts, product/category restrictions, expiry dates, and per-user limits. That’s about it. Smart Coupons adds:
- Gift certificates that customers can buy as products and email to recipients
- Store credit you can issue from the admin (or buy on the front-end as a credit balance)
- BOGO ("buy X, get Y") offers configured visually, not via code
- Bulk generation of hundreds of unique codes in one click, with CSV export
- URL coupons like
/?coupon=BLACKFRIDAYthat auto-apply when visited - Auto-apply rules based on cart total, user role, date, referrer, or URL parameter
- Coupon emails that fire automatically after purchase ("here’s $5 off your next order")
- Expiry reminders so a customer doesn’t lose their store credit silently
- Showcase widgets and shortcodes so coupons are visible on cart/checkout/my-account
- Custom coupon design templates with a WYSIWYG editor for printable/emailable cards
- Combine coupons (multiple discounts on one order, with override rules)
- CSV import/export for coupons and their settings
Everything plugs into the standard WC shop_coupon post type. Smart Coupons doesn’t fork the coupon engine; it extends it. That matters because every other WC extension (Subscriptions, Memberships, Bookings) that integrates with coupons still works exactly the same way after you install Smart Coupons.
Key features
Skipping the marketing list. Here’s what I reach for repeatedly when building real shops.
- Gift Certificates as buyable products. Sell a $50 gift card as a product. Customer checks out, recipient gets an email with a unique code worth $50. Works as a regular product, so it counts toward order totals, ships nothing, and inventory tracking can be on or off.
- Store Credit. Issue any dollar (or other currency) amount to a customer or email address. Recipient applies it at checkout like any coupon code. Multiple credits stack. Used for refunds-as-credit, "we made a mistake here’s $20", or signup bonuses.
- BOGO. Buy 1 Get 1 free, Buy 2 Get 1 50% off, Buy from category A Get from category B, etc. Configured from the same Add Coupon page as a regular coupon, just with the BOGO toggle on.
- Bulk Generation. Generate 1, 10, 100, or 10000 unique codes at once. Prefix + suffix supported. Export to CSV. Email to a list. Hand out via Klaviyo / Mailchimp / your CRM of choice.
- Coupon by URL. Set a URL parameter trigger; the coupon auto-applies on cart when that URL is visited. The classic pattern is sharing
?coupon=WINTER20in marketing emails so customers land already discounted. - Auto-apply by cart total. "If cart total is above $100, give 10% off." No customer action needed; the discount appears in the cart automatically. Works with category restrictions so you can scope the discount to specific products.
- Showcase coupons widget. Display all coupons a visitor can use, on cart, checkout, or my-account. They click "Apply" and the code is added. Beats having to remember a 12-character code.
- Email after purchase. Order completion triggers an email with a fresh coupon for next time. Configured per-product or per-order-total.
- Custom coupon design. Edit the printable/emailable coupon template in a WYSIWYG editor. Add your logo, change colors, customize the layout. Useful for branded gift cards.
- Combine coupons. Out of the box, WC allows only one coupon per cart. Smart Coupons lets you stack multiple, with rules about which combine and which don’t.
- Expiry reminders. Email a customer N days before their coupon or store credit expires. Configurable per coupon.
- Restrict by user role / email / domain. Beyond standard WC restrictions, you can require specific roles (wholesale only), specific emails, or specific email domains.
Gift certificates and store credit
Store credit is one way to reward loyalty; a points balance is the other. If you’d rather customers earn and redeem points than hold store credit, our guide to WooCommerce Points and Rewards covers that model in depth.
This is where Smart Coupons. Two scenarios, both solved cleanly:
If your store only needs gift cards (not the full coupon-engine), YITH WooCommerce Gift Cards is a dedicated gift-card plugin with scheduled delivery, partial-balance support, and a PDF voucher. Smart Coupons is the right pick if you also need BOGO, store credit, and bulk-code workflows.
Selling a gift certificate as a product. You create a regular WC product called "Gift Card" (or several at fixed amounts: $25, $50, $100, $250). Each one is a Smart Coupon product type. Customer adds to cart, checks out, and pays. After payment, the recipient (whose email the buyer entered at checkout) receives an email with a unique coupon code worth the face value. The recipient applies it at checkout on their own order. Works as a true gift: the buyer pays, the recipient redeems.
The buyer can specify whether to deliver immediately or on a future date, write a message, and include their name. The email template is customizable in WC → Settings → Emails → Coupon Email.
Issuing store credit from the admin. Different flow. A customer complains about a damaged item; you don’t want to refund cash but you want to compensate. From WC → Smart Coupons → Send Store Credit, you fill in their email, the credit amount, an optional expiry, and a message. The customer gets an email with a code worth that amount. They apply it at checkout next time. Done in 30 seconds, no refund processing fees.
You can also issue store credit programmatically when an order ships, when a customer signs up, when a referral converts, or on any WC action hook. There’s a dedicated WC-CLI command for batch credit issuance.
How BOGO offers work
BOGO is one of those features that sounds simple but has a dozen edge cases. Smart Coupons handles them with a single "BOGO offer" toggle on the Add Coupon page, then exposes the configuration as a sub-form.
Choose what triggers the offer (the "buy" side):
- A specific product
- Any product from a specific category
- A minimum cart total
Then choose what gets offered (the "get" side):
- A specific product, free or at a discount
- Any product from a category, free or at a discount
- A choice of products (customer picks one from a list)
The "get" item is either added automatically to the cart, or offered as a choice for the customer to add. The discount can be: free, percentage off, fixed amount off, or fixed price.
Edge cases handled out of the box:
- The customer already has the "get" product in cart, the discount applies retroactively
- Quantity rules: buy 2, get 1; buy 3, get 2; buy 5, get 1 free shipping
- Combine with cart-total triggers, so it only fires when cart is above $X
- Combine with date ranges: BOGO active only during Black Friday week
- Expiry: single-use, time-limited
The UI doesn’t make you think too hard. If you’ve ever written WC custom logic for a BOGO offer, you know the drill: woocommerce_before_calculate_totals hook, fetch cart contents, parse quantities, calculate discount, apply line item discount. Smart Coupons replaces all of that with five UI fields.
Bulk coupon generation
The bulk generator is the feature I underestimated until I needed it. Then I needed it constantly.
Use cases I’ve actually shipped:
- 500 unique single-use codes for an influencer campaign (each influencer got 100 codes)
- 50 codes for a podcast sponsorship (codes printed on physical postcards)
- 1000 codes auto-generated and emailed via Klaviyo on signup
- 200 codes pre-generated for a Black Friday email campaign, distributed via Mailchimp
The flow: WC → Smart Coupons → Bulk Generate. Set count, prefix (e.g. "PODCAST-"), suffix (random characters), discount type, amount, expiry, restrictions. Click "Generate". Smart Coupons creates each code as a real WC shop_coupon post with a unique slug, then offers a CSV export. Once those codes exist, you can manage and bulk-edit them all from one screen with Smart Manager for WooCommerce, which lists every coupon in an editable grid.
For batches over ~500 codes, the generation runs through WooCommerce’s background queue (Action Scheduler) so it doesn’t time out. You’ll see the progress as the queue processes and get a notification when done.
URL coupons and auto-apply rules
The URL coupon feature is one of the cleanest UX patterns in any WC extension. Set a coupon to "auto-apply on URL" and configure the parameter (usually coupon or your own choice). Then any URL on the site with that parameter triggers the coupon: https://yourstore.com/shop/?coupon=WINTER20 auto-applies the WINTER20 coupon to the cart.
Use cases:
- Email marketing: every "shop now" link in your campaign carries the coupon
- Social media: a shared link from an influencer auto-discounts on landing
- Returning visitors: detect referrer + apply a one-time welcome-back discount
- A/B testing different discount levels by sending different links to different audiences
Auto-apply works on more than just URLs. The same Smart Coupons settings let you trigger on:
- Cart total above $X: applied automatically when the cart crosses a threshold
- Specific product in cart: applied when a triggering product is added
- Specific category in cart: applied when any product from a category is added
- User role: applied for wholesale customers, members, etc.
- Date range: active only during a specific window
- First-time customer: applied only on the customer’s first order
You can stack multiple triggers on one coupon (cart > $100 AND user is wholesale AND date is between X and Y), so the rules can get quite specific without writing PHP.
Installation and setup
Smart Coupons is straightforward to install but it does add several admin pages, so you’ll spend the first hour exploring.
- Install WooCommerce. You need WC active before Smart Coupons. Pair with WP-Optimize Premium for caching since coupon-heavy carts can hit the page cache hard.
- Upload the Smart Coupons zip. WP admin → Plugins → Add New → Upload Plugin, pick the zip, install, activate.
- Configure global settings at WC → Settings → Smart Coupons. Set the number of coupons to show in the showcase widget, the character length of auto-generated codes, the order status that triggers coupon generation. Defaults are sane; tweak only if needed.
- Configure email templates at WC → Settings → Emails. You’ll see new templates: Coupon Email, Combined Coupon Email, Expiry Reminder Email, Gift Certificate Notification. Customize subject lines and the HTML template per your brand.
- Add a "Showcase Coupons" widget or shortcode to your cart or my-account page so customers see what they can use. The shortcode is
[smart_coupons]or[wc_sc_available_coupons]. - (Optional) Set up gift certificate products. Create regular WC products and toggle "This is a smart coupon" in the product data. Set the face value as the price. Save. Now they’re buyable gift certificates.
- (Optional) Pre-generate codes for upcoming campaigns via WC → Smart Coupons → Bulk Generate.
That’s it. Smart Coupons inherits WooCommerce’s permissions, so any user with manage_woocommerce capability can manage coupons. No separate role to configure.
Real-world use cases
Five scenarios from real shops. Match them against what you’re running.
1. Apparel store with gift card revenue. Set up four gift certificate products at $25, $50, $100, $250. Add a "Buy a Gift Card" link to your top nav and footer. Configure the gift certificate email template with your brand colors and copy. Expect ~5-15% of your December revenue to be gift cards if you market them. Pair with WooCommerce Subscriptions for a "gift a subscription" option.
2. SaaS or digital downloads with referral campaign. Issue $10 store credit to existing customers for every referral that converts. The referee gets a 20% off URL coupon. Both flows automated via webhooks from your CRM. Smart Coupons handles the actual coupon creation; the CRM handles the referral tracking.
3. Flash sale with auto-applied discount. Create a coupon with date range (Friday-Sunday only), 30% off, auto-apply by cart total above $50. No code customers need to enter. Email goes out Thursday saying "Sale starts tomorrow"; on Friday the discount applies automatically. Pair with Cartflows Pro for funnel-specific upsells alongside the sale.
4. Membership site with member-only discounts. Configure a coupon restricted to a specific user role (e.g. wholesale_customer or premium_member). Auto-apply when that user is logged in. Combine with WooCommerce Memberships so paying members get automatic pricing.
5. Physical goods + influencer campaign. Generate 1000 unique single-use codes via bulk generator. Export to CSV. Send 100 codes each to 10 influencers. They share with their audiences. Each redemption is tracked back to the influencer via the code prefix. Pair with MonsterInsights to track coupon-driven revenue in Analytics.
Developer reference
Smart Coupons exposes 94 apply_filters hooks and 17 do_action hooks, all prefixed wc_sc_. These are the ones I’ve actually used.
Auto-apply a coupon programmatically
add_action( 'woocommerce_before_calculate_totals', function ( $cart ) {
if ( is_admin() &&! defined( 'DOING_AJAX' ) ) { return; }
if (! WC()->session ) { return; }
if (! WC()->cart->has_discount( 'WELCOME10' ) ) {
$first_order =! empty( get_posts( [
'post_type' => 'shop_order',
'post_status' => [ 'wc-completed', 'wc-processing' ],
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'numberposts' => 1,
] ) );
if (! $first_order ) {
WC()->cart->apply_coupon( 'WELCOME10' );
}
}
}, 10 );
This auto-applies a "WELCOME10" coupon to first-time buyers. Smart Coupons also lets you do this through the UI (Auto apply for new customers), but the code version is useful when you have custom "new customer" logic.
Customize the coupon amount before discount applies
add_filter( 'wc_sc_coupon_amount', function ( $amount, $coupon, $discounting_amount, $cart_item ) {
// Boost the discount for wholesale users on bulk orders
if ( current_user_can( 'wholesale_customer' ) && WC()->cart->get_cart_contents_count() > 10 ) {
return $amount * 1.5; // 50% more discount
}
return $amount;
}, 10, 4 );
Override the coupon email recipient
add_filter( 'wc_sc_coupon_expiry_reminder_filter_emails', function ( $emails, $coupon_id ) {
// Send expiry reminders to a CC address for tracking
$emails[] = 'reminders@example.com';
return $emails;
}, 10, 2 );
Hook into coupon duplication
add_action( 'wc_sc_coupon_duplicate_before_save', function ( $new_coupon, $original_coupon ) {
// Reset usage count on duplicate; add an "(Copy)" marker
$new_coupon->set_usage_count( 0 );
$title = $original_coupon->get_code(). '-COPY-'. time();
$new_coupon->set_code( $title );
}, 10, 2 );
Add a custom column to the coupons admin list
add_filter( 'manage_edit-shop_coupon_columns', function ( $cols ) {
$cols['my_redemption_count'] = 'Redemptions';
return $cols;
} );
add_action( 'manage_shop_coupon_posts_custom_column', function ( $col, $post_id ) {
if ( $col === 'my_redemption_count' ) {
$coupon = new WC_Coupon( $post_id );
echo intval( $coupon->get_usage_count() );
}
}, 10, 2 );
Disable auto-apply for specific URLs
add_filter( 'wc_sc_apply_coupon_via_ajax', function ( $apply, $coupon_code ) {
// Don't auto-apply coupons on the checkout page (avoid race conditions)
if ( is_checkout() ) { return false; }
return $apply;
}, 10, 2 );
Filter which categories trigger auto-apply
add_filter( 'wc_sc_auto_apply_coupons_cart_category_ids', function ( $category_ids, $coupon ) {
// Always include "On Sale" category as a trigger for any auto-apply coupon
$on_sale_id = get_term_by( 'slug', 'on-sale', 'product_cat' );
if ( $on_sale_id ) {
$category_ids[] = $on_sale_id->term_id;
}
return $category_ids;
}, 10, 2 );
Customize the showcase shortcode output
add_filter( 'wc_sc_coupon_html', function ( $html, $coupon, $context ) {
// Wrap each showcased coupon in a custom class for theming
return '<div class="my-themed-coupon">'. $html. '</div>';
}, 10, 3 );
Hook into coupon email send
add_action( 'wc_sc_email_coupon_notification', function ( $coupon_data, $email_args ) {
// Log to your analytics / CRM
if ( function_exists( 'my_crm_log_event' ) ) {
my_crm_log_event( 'coupon_emailed', [
'code' => $coupon_data['code'],
'email' => $email_args['recipient'],
'value' => $coupon_data['amount'],
] );
}
}, 10, 2 );
Performance, compatibility, and gotchas
Performance. Coupons are stored as standard WC posts, so the database overhead per coupon is the same as any WC coupon. The auto-apply logic adds a small per-cart calculation cost; on a cart with many products and many active auto-apply coupons, you’ll see a measurable bump in woocommerce_before_calculate_totals execution time. For most stores it’s negligible. Heavy stores with 100+ active auto-apply coupons should set up object caching (Redis or Memcached) and run a caching plugin like WP-Optimize Premium with page cache exclusions for /cart/ and /checkout/.
Compatibility.
- Works with WC Subscriptions (renewal-only coupons, signup coupons, etc.)
- Works with WC Memberships (member-only discounts)
- Works with WC Bookings (coupons on bookings)
- WPML and Polylang supported (multilingual coupon emails)
- Klaviyo, Mailchimp integration via standard WC hooks (no direct integration but the data is exposed)
- Compatible with Cartflows Pro for funnel checkouts
Gotchas.
- Page caching breaks URL coupons. If you use full-page caching (WP Rocket, Varnish), cached pages won’t trigger the cookie that auto-applies a URL coupon. Add
/cart/,/checkout/, and any landing page that uses?coupon=...to your cache exclusion list. - Multiple coupons in one cart can confuse some payment gateways. Stripe and PayPal handle it fine; some smaller gateways flatten everything to a single line item. Test stacking before relying on it in production.
- Gift certificate products show in shop pages by default. If you don’t want them in the main product listing (you want a dedicated /gift-cards/ page only), exclude them via category or use a hidden product visibility setting.
- Expiry reminders use WP-Cron. On low-traffic sites WP-Cron fires irregularly. If reminders are critical, replace WP-Cron with a real cron job (one line in your server crontab:
wget -q -O - https://yourstore.com/wp-cron.php >/dev/null 2>&1). - Custom coupon designs require the print template page. Smart Coupons creates a
/coupon-terms/page on first activation. Don’t delete it; the print/email coupon template references it. - Bulk-generated codes for huge campaigns (5000+) can hit DB limits. Action Scheduler processes them in batches, but you may need to bump
wp_actionscheduler_actionstable indexes or use a dedicated DB host. - Combine coupons interacts with WC tax calculations. When multiple coupons stack, taxes are recalculated per line item. Double-check tax totals match before going live.
Pricing and licensing
Smart Coupons is sold direct on the WooCommerce marketplace as an annual subscription, priced per number of sites. Pricing changes occasionally so check woocommerce.com/products/smart-coupons/ for current numbers.
That’s what I install on staging environments and side projects. For production stores where you want vendor support (StoreApps’ help desk, priority bug fixes), buy a direct license.
FAQ
Does Smart Coupons replace WooCommerce coupons?
No. It extends them. Every existing WC coupon keeps working as-is; Smart Coupons just adds new fields, new admin pages, and new shortcodes on top.
Can customers buy gift cards as products?
Yes. Mark any WC product as a Smart Coupon. The "price" becomes the gift card face value. Buyer pays, recipient gets an emailed code.
Can I issue store credit without selling it?
Yes. WC → Smart Coupons → Send Store Credit. Type in an email, amount, and message. Customer gets the credit instantly.
Do BOGO offers work with WC variations?
Yes. You can configure BOGO with specific variations as triggers or rewards. The "buy variation X get variation Y" pattern works.
Can I generate 10,000 unique codes at once?
Yes, but it queues through Action Scheduler so it doesn’t time out. Expect 5-10 minutes for 10,000 codes on a typical host.
Will my coupons work with checkout funnels (Cartflows, FunnelKit)?
Yes, Smart Coupons hooks into WC’s standard coupon API so any plugin that supports WC coupons supports Smart Coupons. Cartflows Pro explicitly supports Smart Coupons codes in funnel-specific offers.
Can I email customers their coupon balance?
Yes. The expiry reminder template fires N days before a coupon expires, and you can include the remaining balance dynamically in the template.
Is the showcase widget mobile-friendly?
Yes. The widget uses responsive CSS by default. It looks like a stack of cards on mobile and a row on desktop. You can override via CSS or the wc_sc_coupon_html filter.
Does it work with multilingual stores?
Yes, WPML and Polylang are explicitly supported. Coupon emails and shortcode output are translatable.
Final thoughts
Smart Coupons is one of those plugins where you don’t realize how much you need it until you try to do without it. The first time you have to issue 100 unique discount codes by hand, or build a gift card flow with PHP, you wish you’d bought it on day one.
It’s not a glamorous plugin. There’s no flashy admin panel, no inspiring marketing copy. What it does is take the 5-7 different "coupon plugins" the WordPress ecosystem has spawned and roll their best features into one, then plug everything into WooCommerce’s standard coupon system so nothing else in your stack breaks.
If you’re running a real WooCommerce store, Smart Coupons.