Active Coupons for the selected period.
At a glance
The number of coupon codes that are live and redeemable in your store at this moment. A coupon counts as active when it is published (not in draft or trash) and has not passed its expiry date. Fetched in real time fromGET /wp-json/wc/v3/couponsand filtered against each coupon’sdate_expiresfield.
| What it counts | The number of coupon objects whose status is publish and whose date_expires is null or in the future. Each live, redeemable code contributes 1 to the count. |
| REST API endpoint | GET /wp-json/wc/v3/coupons. Fields used: status (must be publish), date_expires (null or future), and code. Coupons are stored in WordPress as a custom post type (shop_coupon). |
| Status / filter treatment | Counts only publish coupons that have not expired. Coupons in draft, pending, private, or trash are excluded. A coupon with a date_expires in the past is excluded even though it remains in the database. Usage-limit exhaustion (usage_limit reached) is NOT factored in by default, see the FAQs. |
| Expiry handling | WooCommerce stores date_expires in the WP site timezone but exposes date_expires_gmt in UTC. The card evaluates expiry against UTC, so a coupon expiring at local midnight may flip a few hours off your WP Admin view (see Reconcile). |
| Usage limits | A coupon with usage_limit set and fully consumed is still publish and may still be counted here unless your store auto-expires it. WooCommerce core does not change coupon status when a usage limit is hit; it simply rejects further redemptions at checkout. |
| Self-hosted vs managed-Woo | Identical behaviour on self-hosted LAMP stacks, WordPress.com Business and Commerce plans, and managed-Woo hosts (Woo.com Cloud, WP Engine, Pressable, Kinsta). Self-hosted hosts introduce sync-lag risk during outages; managed hosts are steadier. |
| Time window | RT (real time, the current live count) |
| Alert trigger | None. This is an informational inventory count, not an alerting card. |
| Roles | owner, marketing |
Calculation
Calculated automatically from your WooCommerce data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A homeware brand on managed WooCommerce (WP Engine) is mid-way through a spring promotion. On 14 Mar 26 the marketing lead opens the card to confirm what is live.| Coupon code | Status | date_expires (WP timezone) | Counts as active? |
|---|---|---|---|
SPRING15 | publish | 31 Mar 26 | Yes |
WELCOME10 | publish | null (no expiry) | Yes |
VIP-EARLY | publish | 10 Mar 26 | No (expired) |
BLACKFRIDAY24 | publish | 30 Nov 25 | No (expired) |
NEWSLETTER5 | draft | null | No (not published) |
STAFF-TEST | publish | null | Yes |
| Active Coupons (this card) | 3 |
- Expired codes still live in the database.
VIP-EARLYandBLACKFRIDAY24are bothpublishbut past their expiry, so they drop out of the count. WooCommerce never deletes them; they sit dormant. The card reflects what a customer could actually redeem today, which is the number that matters for promotion hygiene. STAFF-TESTis counted and should not exist. Test coupons left inpublishstate are a common leak. They count here because they are technically redeemable. A jump in this card that the marketing team did not plan often traces to a forgotten test code or a staging coupon promoted to production. Pair with Top Coupons by Usage (30D) to see whether any unexpected code is actually being redeemed.- Timezone can shift the boundary.
SPRING15expires at 23:59 on 31 Mar 26 in WP site timezone (Europe/London). The card evaluates against UTC, so during BST the code can appear active for up to an hour after WP Admin shows it expired. For a live count this is rarely material, but it explains a transient off-by-one against the WP Admin coupons screen.
Sibling cards merchants should reference together
| Card | Why pair it with Active Coupons |
|---|---|
| WC Top Coupons by Usage (30D) | Active Coupons tells you what is live; this tells you which live codes are actually pulling redemptions. A long active list with few redemptions signals dead promotions. |
| WC Discount as % of Revenue | The margin cost of your live coupons. A rising active count with rising discount share warns that promotions are eating into margin. |
| WC Coupon Stacking Abuse (2+ coupons / order) | More active codes raises the surface area for stacking abuse. Watch both when you run overlapping promotions. |
| WC Total Revenue | Context for whether your live coupon set is moving the headline number or just discounting orders that would have happened anyway. |
| WC Average Order Value | A spend-threshold coupon (for example, “10% off over £50”) should lift AOV. Watch AOV when you publish new codes. |
Reconciling against WooCommerce
Where to look in WooCommerce Admin: WP Admin → Marketing → Coupons lists every coupon. Filter to the Published view and ignore anything in Draft or Trash. To match this card, mentally exclude any row whose expiry date has passed; the WP Admin list does not hide expired coupons automatically. Other WP Admin views that look like the same number but are not:- The “All (n)” count at the top of the Coupons screen: includes drafts, trashed, and expired coupons. Always higher than this card.
- WooCommerce → Marketing → Coupons (Marketing hub view): same underlying data but a different layout; still does not filter out expired codes.
- A coupons-management plugin (Advanced Coupons, Smart Coupons): these often add scheduling, auto-apply, and URL coupons that may or may not surface in the core REST endpoint. Verify the plugin writes to the standard
shop_couponpost type.
| Reason | Direction of divergence |
|---|---|
| Expiry filtering. This card hides expired codes; the WP Admin Coupons list shows them. | Ours lower than the raw Admin list |
Timezone. WooCommerce stores date_expires in WP site timezone; this card evaluates against UTC. A coupon expiring at local midnight may count for a few hours longer or shorter here. | +/- a small number around the expiry boundary |
| Draft / trash exclusion. Drafts and trashed coupons are excluded here but shown in the Admin “All” tab. | Ours lower |
| Self-hosted server uptime. If the WP host was unreachable during the poll, a newly published coupon may take up to the next sync to appear. | Ours temporarily lower; self-resolves |
Plugin-created coupons. URL or auto-apply coupons from third-party plugins may not register as standard shop_coupon posts. | Ours lower if the plugin bypasses the core post type |
Known limitations / merchant FAQs
Does this count coupons that have hit their usage limit? By default, yes, because WooCommerce core does not change a coupon’s status when itsusage_limit is reached. The code stays publish and simply gets rejected at checkout. So a fully consumed code can still appear in this count even though no customer can redeem it. If you want the count to reflect only truly redeemable codes, expire or unpublish exhausted coupons, or reach out to support@vortexiq.ai about usage-aware filtering.
Why is this card real time rather than a 30-day window?
Active Coupons is an inventory count, not a flow metric. It answers “what can a customer redeem right now”. A historical window would not make sense for a live promotion list. For redemption volume over time, use Top Coupons by Usage (30D).
A test coupon is inflating my count, how do I clean it up?
Set the coupon to Draft or move it to Trash in WP Admin → Marketing → Coupons. Once it leaves publish status it drops out of this card at the next sync. Leaving live test codes in production is a security and margin risk because anyone who guesses the code can redeem it.
Does this include WooCommerce Subscriptions or recurring-discount coupons?
If they are stored as standard shop_coupon posts with publish status and a future or null expiry, yes. Some subscription plugins store recurring-discount logic in custom meta on the subscription rather than as a coupon; those would not appear here.
I unpublished a coupon but the card still shows it, why?
Most likely sync lag. The Vortex IQ Woo indexer polls on a schedule, so a status change can take until the next successful poll to reflect, usually within an hour. If a self-hosted host was unreachable during the poll, it can take longer. Check WooCommerce → Settings → Advanced → REST API to confirm the Vortex IQ key is still active.