Fixed expiry
A fixed expiry date ends a subscription on a specific calendar day, regardless of when it started. This is different from Length, which ends the subscription after a number of renewals. Fixed expiry is useful when access must stop on a known date that is shared across all customers.
When to use fixed expiry
Pick a fixed expiry date when:
- You sell annual memberships that always end on December 31.
- You run a seasonal subscription (sports season, school year, conference cycle).
- You grant access to time-limited content (a course that wraps on a specific date).
- You offer founder pricing that ends on a given date, after which customers renew at a standard rate.
If customers should all have the same duration from their own purchase date, use Length instead. If you want all renewals to land on the same day of the month but continue indefinitely, see Synchronized renewals.
How fixed expiry works
When a fixed expiry date is set:
- Renewals continue as normal on the product’s billing cadence up to that date.
- The last renewal scheduled before the fixed expiry date runs as usual.
- The subscription status moves to Expired on the fixed expiry date.
- No further charges are attempted after expiry.
The fixed expiry date is stored on the product and applied at purchase time. Changes to a product’s fixed expiry do not retroactively update existing subscriptions.
Setting a fixed expiry date on a product
Simple subscription
- Go to Products → Edit on the subscription product.
- In the Product data panel, find the Fixed expiry date field.
- Enter the date in YYYY-MM-DD format, or pick it from the date picker.
- Click Update.
Variable subscription
- Go to Products → Edit and open the Variations tab.
- Expand the variation you want to configure.
- Enter the Fixed expiry date on the variation.
- Click Save changes.
Each variation can have its own fixed expiry date, or none at all.
First-purchase behavior
If a customer purchases a product the day before the fixed expiry date, they will pay the full subscription price and then immediately expire the next day. To avoid this:
- Stop selling the product close to the expiry date by changing its status to Private or Draft.
- Use a coupon or discount to pro-rate late purchases.
- Use the
milosubscriptions_fixed_expiry_allow_purchasefilter to block purchases within a minimum window of the expiry date. See Hooks and filters.
Interaction with Length and Minimum periods
Fixed expiry works alongside Length and Minimum periods:
- If Length and Fixed expiry are both set, whichever comes first ends the subscription.
- Minimum periods only affects cancellation, not expiry. A customer cannot cancel before the minimum, but the subscription still expires on the fixed expiry date.
Renewing or extending a subscription past expiry
After the fixed expiry date, the subscription’s status becomes Expired. To grant further access you can:
- Create a new subscription by purchasing the product again.
- Edit the subscription from Milo Subscriptions → Subscriptions and move the fixed expiry date forward, then set the status back to Active. This is an admin-only action.
For self-serve resubscription at the next cycle, publish an updated product (with a new fixed expiry) and email existing customers a link to renew.
Emails
The default email set includes a Subscription expired notification that is sent to the customer when the subscription hits the fixed expiry date. See Emails to customize the subject, body, and timing.
Example configurations
Annual membership ending December 31
- Billing period: Month
- Billing interval: 1
- Fixed expiry: 2026-12-31
All customers, regardless of when they joined, will be charged monthly and expire on 2026-12-31.
Course that runs June to August
- Billing price: $49
- Billing period: Month
- Billing interval: 1
- Fixed expiry: 2026-08-31
Students enrolling on June 1 pay three times. Students enrolling on July 15 pay twice, once on July 15 and once on August 15, then the course ends.
Next steps
- Lifetime subscriptions: grant permanent access instead of time-limited.
- Synchronized renewals: align renewal dates without forcing a hard expiry.
- Statuses: see how Expired compares to Cancelled and On-hold.
Did this page miss something?
Tell us and we rewrite it, usually the same day.