Free · MIT licensed · no license key

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.

Get it free See how it works

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.

Also from TVT Commerce

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.