Freemius Coupon & Discount Management in WordPress: Full CRUD Suite with Customer Usage History

Discount coupons are one of the most powerful revenue acceleration tools available to WordPress plugin developers. A well-timed coupon campaign — a Black Friday deal, a launch week promotion, a loyalty discount for a long-term subscriber considering a plan upgrade — can produce revenue spikes that dwarf the impact of any content marketing or SEO effort in the same timeframe. But managing Freemius coupons has historically required constant navigation to freemius.com — finding the correct product, navigating to the coupons section, creating the coupon, then repeating the process for every additional product you want to apply the discount to.

The Discounts module in Freemius Checkout for WooCommerce eliminates this workflow entirely. It provides a complete CRUD interface for freemius plugin discount coupons directly inside your WordPress admin — including the ability to create a coupon for every product in your developer account simultaneously with a single operation, and granular usage history showing exactly which customers applied which codes.

Why Coupon Management Belongs Inside WordPress

For a solo developer or small team running a plugin business, coupon campaigns typically follow a content marketing event: you publish a blog post, send a newsletter, or run a social promotion, and you create a coupon code to accompany it. All of these activities live in WordPress — the blog post is written in WordPress, the newsletter is often connected to a WordPress opt-in form, the promotion is drafted in the WordPress admin.

Having to interrupt this workflow to navigate to freemius.com, locate the correct product (especially if you have 3-5 plugins), and create the coupon there introduces friction that often results in either delayed promotions or simplified, sub-optimal coupon structures — because the developer skips extra steps like setting usage limits or expiration dates to save time.

With the Discounts module, coupon creation takes under 30 seconds without leaving WordPress — making the full coupon configuration (discount type, percentage or fixed, usage limit, expiration) the path of least resistance rather than an extra burden.

Full CRUD: Create, Read, Update, Delete

The Discounts module exposes the full Freemius Coupons API through a clean WordPress admin interface:

+

Create

New discount coupons for specific products or all products at once

📊

Read

Unified table listing all coupons across all products with search

✎️

Update

Modify discount amount, expiry, usage limits inline

🗑️

Delete

Delete individual coupons or bulk delete multiple at once

All CRUD operations call the Freemius API via the Freemius_API_Service class using the official Freemius PHP SDK — the same SDK Freemius recommends for all developer API integrations. The operations are REST API-backed and results are reflected in your freemius.com dashboard immediately.

Creating a Freemius Coupon from WordPress

To create a new coupon, navigate to Freemius → Discounts and click Add New Coupon. The creation form exposes all standard Freemius coupon parameters:

  • Coupon Code: The code customers enter at checkout (e.g., BLACKFRIDAY30)
  • Discount Type: Percentage (%) or fixed dollar amount
  • Discount Amount: The numeric value (30 for 30% off, or 15 for $15 off)
  • Usage Limit: Maximum number of times this coupon can be redeemed (leave blank for unlimited)
  • Expiration Date: Date after which the coupon becomes invalid
  • Target Product: Which specific plugin/theme this coupon applies to, or “All Products”

The form calls create_coupon($product_id, $data) which hits the Freemius API endpoint /plugins/{id}/coupons.json via POST. The coupon is immediately active on the Freemius checkout for that product.

Create Coupons for All Products at Once

The most time-saving feature of the Discounts module is the “Create for All Products” operation. When running a site-wide promotion — a Black Friday sale, a launch anniversary deal, a bundle discount — you typically want the same coupon code to work across all your plugins and themes.

Normally, this requires creating the coupon separately for each product in freemius.com — a tedious multi-step process for every product in your catalogue. With the “Create for All Products” option selected, the plugin calls create_coupon_for_all($data) which iterates through every product returned by /plugins.json and creates the specified coupon for each one simultaneously.

Example scenario: You’re running a Black Friday promotion with code BF2026 for 40% off. You have 5 plugins in your Freemius account. Normally: navigate to each plugin in freemius.com, create the coupon 5 times. With this plugin: fill in the form once, select “All Products”, click Create — the coupon is created for all 5 plugins in one operation.

Updating and Deleting Individual Coupons

The coupon table includes Edit and Delete action buttons for each coupon row. Editing opens a form pre-populated with the current coupon values, allowing you to modify the discount amount, expiry date, or usage limit without recreating the coupon from scratch — useful when you need to extend a promotion deadline or increase a usage cap mid-campaign.

The update operation calls update_coupon($product_id, $coupon_id, $data) which hits /plugins/{id}/coupons/{coupon_id}.json via PUT. Deletion calls delete_coupon($product_id, $coupon_id) via DELETE. Both operations are reversible only by recreating — there is no undo, consistent with how Freemius’ own dashboard handles coupon deletion.

Bulk Delete Operations

After a promotional campaign ends, you typically want to clean up expired coupon codes. The Discounts module supports bulk selection and deletion — select multiple coupon rows using the checkbox column, then click Bulk Delete to remove them all in one operation.

The bulk delete operation calls bulk_delete_coupons($coupons) which iterates through the selected coupons, extracting the plugin_id and id from each and calling the individual delete API for each coupon. The implementation handles mixed-product coupon selections correctly — each coupon is deleted against its own product’s API endpoint.

Coupon Usage History: Who Used Which Code

The most analytically powerful feature of the Discounts module is Coupon Usage History — clicking a coupon’s “View Usage” button fetches a detailed record of every payment that used that coupon code, enriched with customer data:

📩 Customer Email

Retrieved from the Freemius Users API using the payment’s user_id field

👤 Customer Name

First and last name from the user record

🏷 Plan Name

Which plan was purchased (resolved from plan_id via the Plans API)

📅 Payment Date

When the coupon-discounted purchase was made

💰 Gross Amount

The amount paid (after discount applied)

The usage history is fetched via get_coupon_usage($plugin_id, $coupon_id) which calls /plugins/{id}/payments.json?coupon_id={coupon_id}, then enriches each payment record by calling /plugins/{id}/users/{user_id}.json to retrieve the customer’s email and name. This enrichment step makes the usage history table a genuine CRM tool — you know exactly who your discount buyers are, not just how many redemptions occurred.

Practical uses for coupon usage history:

  • Identify your highest-converting coupon channels by cross-referencing coupon codes with traffic sources
  • Follow up with coupon buyers who haven’t left a review — discount buyers are often your most engaged early users
  • Verify that coupon sharing isn’t occurring beyond intended channels (a coupon meant for a single newsletter getting shared widely)
  • Build a loyalty segment of customers who have used promotional pricing for targeted re-engagement campaigns

The Discounts module displays a unified coupon table aggregating coupons from all your Freemius products. Each row shows the coupon code, discount amount/type, associated product name, usage count, usage limit, and expiry date.

A search field filters the coupon list by code — useful when you have many coupons and need to locate a specific promotional code quickly. The search calls get_all_coupons($search) which passes the search term to the Freemius API via /plugins/{id}/coupons.json?search={term} for each product and merges the results.

Practical Use Cases for Discount Campaigns

🤗 Black Friday / Cyber Monday

Create one code for all products simultaneously. Set 72-hour expiry. Set reasonable usage limit to maintain urgency. Create checkout button configuration with coupon pre-fill.

🎉 Product Launch Week

“First 100 customers get 30% off” — set usage limit to 100, no expiry. Monitor usage count in the coupon table until limit is reached.

💌 Newsletter Subscriber Exclusive

Create a unique code for each newsletter campaign. Track coupon usage history to measure email campaign conversion rates vs. other channels.

🚀 Annual-to-Lifetime Upgrade

Offer existing annual subscribers a lifetime deal at a reduced rate. Identify annual subscribers in the Subscriptions module and send individual upgrade coupon codes.

Freemius Coupons vs Paddle & Lemon Squeezy Discount Systems

Both Paddle and Lemon Squeezy — the two most commonly mentioned freemius alternatives — have their own discount/coupon systems accessible via their dashboards and APIs. How does Freemius’ coupon system compare?

Feature Freemius Lemon Squeezy Paddle
Percentage discounts ✔ ✔ ✔
Fixed amount discounts ✔ ✔ ✔
Usage limits ✔ ✔ ✔
Expiry dates ✔ ✔ ✔
WordPress admin management Via this plugin ✗ ✗
Per-customer usage history Via this plugin Limited Limited
Create coupon for all products at once Via this plugin ✗ ✗

FAQ

Are the coupons I create here visible in freemius.com?

Yes. All coupon operations (create, update, delete) directly call the Freemius API. Changes are immediately reflected in your freemius.com developer dashboard — the plugin is an alternative interface to the same data, not a separate coupon system.

Can I create coupons for themes as well as plugins?

Yes. The plugin’s API service fetches all products under your Freemius developer account via /plugins.json — this endpoint returns both plugins and themes. The “Create for All Products” operation creates the coupon for every product of any type in your catalogue.

How many coupon usage records does the usage history show?

The usage history fetches up to 50 payment records by default (the get_coupon_usage method defaults to perpage=50). For high-usage coupons, the most recent 50 redemptions are shown with full customer detail.

Manage All Your Freemius Coupons Without Leaving WordPress

Full CRUD, bulk operations, all-products creation, and per-customer usage history — in one professional dashboard.

Get the Plugin →

Mark Henry's avatar
Written by

Mark Henry

Mark Henry is a lead content creator and WordPress expert at ShopCentral.