Ask for a date of birth at the checkout or in My Account, and a daily job sends each customer a coupon for their day — a few days early, so they can actually spend it. The anniversary of the day they joined needs nothing from them at all: every account already has it.
Three things this plugin gets right
* One customer, one coupon a year — the claim is atomic. A daily job is exactly the job that runs twice: WP-Cron spawns on page loads, so two visitors landing in the same second can both start the run, and a store with a real system cron *and* WP-Cron left on has two by construction. The year is claimed with a single database insert that succeeds for exactly one caller. A read-then-write on user meta — which is what this category does — loses that race, and the customer gets two birthday coupons. * A birthday is a day in your shop's calendar, not an interval. It is worked out in your store's own timezone, so a shop in Auckland does not send its coupons on the wrong day for four months of the year. And 29 February is observed on 28 February in a common year, because somebody born on it has a birthday every year — a plugin that compares the date literally skips three years in four. * A date of birth is personal data, and this plugin treats it as such. It is stored on the customer's account and nowhere else, shown back to them in My Account so they can change or clear it, included in WordPress' own personal-data export, removed by its erasure request, and deleted when the plugin is uninstalled. The coupons themselves are never deleted: a code you have already emailed is a promise.
What you get
* A coupon on a customer's birthday, on the anniversary of the day they joined, or both * A head start — send it up to 60 days early, so the code is in their inbox before the day and still valid on it * A percentage off, or a fixed amount off the cart, with a minimum spend * An expiry in days, counted in your store's own timezone and written into the email * Your own subject and message for each of the two emails, with {code}, {amount}, {expiry}, {first_name} and {site_title} * Your own prefix on the codes, with the rest random so nobody can guess a working code from their own * The date asked for at the checkout, in My Account, or both — and required only if you say so * A Birthday column on the Users list
Careful about the details
* Every coupon is email-restricted, limited to one use in total and one per customer, and marked individual-use. * A run that misses a day does not send a week of late birthday greetings when it comes back. Those days have passed; a "happy birthday" a week late is worse than silence. * Birthdays are found with a meta query, so a store with fifty thousand customers and two hundred birthdays reads two hundred rows. * A coupon that could not be minted gives its claim back, so the customer is not silently skipped for the year. * Coupons are ordinary WooCommerce coupons, so they work at the classic checkout, the block checkout and the Store API with nothing to configure.
Every license includes
- One year of updates and priority support, delivered straight to your WordPress dashboard.
- Use on 1, 5 or 25 sites depending on your license — local, staging and development sites are always free.
- 30-day money-back guarantee — full refund, no questions asked.
- Keeps working after expiry — if you choose not to renew, the plugin keeps running exactly as installed; it simply stops receiving updates and support until you do.
Requires WordPress 6.4+ · PHP 7.4+ · tested up to WordPress 6.8. Works with the classic and block checkout alike.

Rebecca B. (verified owner) –
Emailed on a Sunday, heard back Monday morning. Fair enough. Nothing about Birthday Coupons has caught me out yet. Does everything I wanted.
Natalie Newman (verified owner) –
Good, with one small reservation. Birthday Coupons has been steady enough since the first week. Would buy again, probably.
sarah g (verified owner) –
Did what three free plugins between them could not. Extremely pleased.
Jessica F. (verified owner) –
Big improvement on how I was doing it before.
Robert R. (verified owner) –
Sound plugin. Minor gripes only. A missed day is not made up for later, and I would rather that than a late birthday email. Birthday Coupons has not broken anything, which is the first bar. Job more or less done.