Stop letting unpaid pending orders hold your inventory hostage forever
An order stuck in "pending" because payment never came through doesn't just clutter the order grid — it holds a stock reservation indefinitely, and Magento has no built-in cron to clean it up. Order Auto-Cancel runs on a schedule, finds orders unpaid past an age you configure, and cancels them automatically, releasing the reserved stock back to being sellable.
Free forever, no credit card · just a free TVT Commerce account so we know where to send updates
A cron job Magento should ship with, but doesn't
Cancels the orders that never paid — never touches the ones that did.
Configurable age threshold
Cancel orders unpaid past a set number of hours or days — tune it to match how long your payment methods realistically take to settle.
Runs on a schedule automatically
A standard Magento cron job does the work — no manual grid cleanup, no remembering to check for stale orders.
Releases reserved stock
Canceling an order returns its stock reservation to sellable inventory the same way a manual cancel would — nothing stays locked up.
Never touches a paid or partially paid order
Any order with an invoice or payment recorded — even a partial one — is skipped entirely, no matter how old it is.
Optional customer email notification
Let customers know their order was canceled instead of leaving them wondering why it vanished — on by default, can be turned off.
One bad order never blocks the batch
Every order is evaluated and canceled independently, so a single order that fails to cancel cleanly doesn't stop the rest of the run.
Why this exists: Magento reserves stock the moment an order is placed, before payment is confirmed — that's by design, so two customers can't both buy the last unit while a payment is processing. But core has no cron that revisits an order that's been sitting in "pending" for days or weeks with no payment ever landing; the reservation just stays in place until someone manually cancels the order. On a store with any meaningful volume of abandoned or failed payments, that's real inventory quietly unavailable for sale. This module's cron only ever acts on orders with zero invoices and zero payments recorded — anything with even a partial payment is left completely alone — so it's safe to run continuously without risking an order a customer actually paid for. Full walkthrough: How to Automatically Cancel Unpaid Magento Orders (And Free Up the Stock).
Install & configure
1Download the module as a .zip from your account dashboard and copy it into app/code/TVTCommerce/OrderAutoCancel.
bin/magento module:enable TVTCommerce_OrderAutoCancel
bin/magento setup:upgrade
bin/magento cache:flush
2In the module's configuration section, set the unpaid-age threshold and toggle the customer email notification — the cron picks up the setting on its next scheduled run.
Clean up checkout rules, not just the order grid
This module is free and focused on one job. TVT Commerce also builds Group Order Limits, which adds a per-customer-group minimum and maximum order amount, plus AI Copilot, an in-admin assistant for catalog, sales, and CMS.