Auto-Expire Shopify Unlisted Products After a Date
Unlisted products — active but not shown in collections or navigation — are a powerful tool for flash sales, VIP access, and limited drops. The problem is remembering to close the window when the offer expires. DateCue does that automatically.
What an unlisted product actually is in Shopify
In Shopify, "unlisted" isn't an official product status — it's a configuration pattern. A product is effectively unlisted when it's set to Active (so it can be purchased) but is deliberately excluded from all collections and navigation. Customers can only reach it via a direct URL you've shared with them.
This pattern is used for:
- Flash sales shared via email or social — only people with the link can buy
- VIP or loyalty access — early access before the public launch
- Wholesale or trade-only pricing — a private product URL given to trade customers
- Limited drops — a product that exists for 24 or 48 hours only
The shared challenge is that someone has to close the window when the offer ends. DateCue handles that.
Step 1: Create the expiry metafield
Go to Settings → Custom data → Products and create:
- Namespace and key:
custom.access_expires - Type: Date and time (recommended — most limited access windows are time-specific)
Set this on unlisted products when you create them.
Step 2: The DateCue workflow
Timing: On the date
Action: Set status → Draft
Filter: Tag includes: unlisted
When the expiry time passes, DateCue sets the product to Draft. Anyone who visits the URL sees a 404. The offer is closed without you logging in at a specific time.
Optionally add a tag to mark it as unlisted
Tagging unlisted products with "unlisted" serves two purposes: it lets you filter the workflow to only affect unlisted products (using the tag filter above), and it gives you an easy way to find them in your admin. Add the "unlisted" tag when you create the product, and remove it (or archive the product) after the window closes.
Extending or shortening the window
If you need to extend a flash sale or VIP window, update the custom.access_expires metafield to the new expiry time. DateCue calculates from the current metafield value, so changing it adjusts when the workflow fires. You can extend or shorten in real time.
💡 Not the same as password-protected pages: DateCue closes the product by changing its status to Draft when the date passes — it doesn't add any purchase restriction during the window. If you want to restrict purchasing to people with a discount code or password during the window, that's a separate Shopify configuration (discount codes, or a lockdown app). DateCue handles the automatic close at expiry.
Frequently asked questions
What happens to people who try to buy after expiry?
Once the product is set to Draft, the product URL returns a "page not found" error. Any customer who visits the link after expiry cannot purchase. Existing orders placed before expiry are unaffected.
Can I set the expiry to a specific hour, not just a date?
Yes — use a Date and time metafield and set the exact expiry time. DateCue checks every minute, so the product will be drafted within a minute of the expiry moment.
Can I reactivate the product after expiry?
Yes — drafting is fully reversible. Go to the product in admin, set it back to Active. If you want it unlisted again for a future window, set a new custom.access_expires date and DateCue will close it again at the new time.
What if I want to archive instead of draft on expiry?
Change the action from "Set status → Draft" to "Set status → Archived." Use archived if the product won't be used again; use draft if you might reactivate it for a future window.
Ready to run time-limited access without the manual close?
DateCue closes the window exactly when you need it to.
Start your free trial14-day free trial. No credit card required.