30%
OFFLimited time
Make sure your store is healthy and ready forGet your store ready for Black Friday
Catalog Health Scanner for WooCommerce
Use code at checkout
Get 30% Off

Automated Stock Update Triggers

WooCommerce Plugin
5.0
12 Reviews
v1.9.0
Updated 1 month ago
250+
Stores Live
every order status, its own stock rule ↓

Decide exactly when an order moves your stock.

Pre-orders shouldn't deduct on Processing. Bank transfers shouldn't deduct until Completed. Refunds should restore. The plugin gives every order status, every custom status, and the payment-complete event their own stock action. $49.99/yr or $149 once.

14-day refund
Custom statuses supported
HPOS-ready
three things WooCommerce native can't do ↓

One stock model. Three different leaks.

Native WooCommerce decrements stock on Processing or Completed and restores it on Cancelled. That is it. The moment your shop sells pre-orders, wires-pending B2B, or anything with a custom workflow status, your stock count and your warehouse stop agreeing.

problem · 1

Bank-transfer orders deduct stock before payment lands.

📥 BACS order #4101−1 on Processing✕ wire never arrives
📥 BACS order #4102−1 on Processing✕ stale, 7 days
📥 BACS order #4103−1 on Processing✕ customer ghosted

Native WooCommerce deducts at Processing, the same status BACS uses while waiting on a wire. Three "hold" orders later your stock count is 3 below what is on the shelf, and your fast-mover shows out of stock.

problem · 2

Custom statuses do nothing to stock.

your workflow statuses
"Awaiting Pickup" → nothing happens
"Backordered" → nothing happens
"Partially Refunded" → nothing happens
→ inventory drifts every week

You added "Awaiting Pickup" with a custom-status plugin. Native WooCommerce has no idea what to do with it, so orders sit there decremented (or not) based on what status they came from, not what you actually want.

problem · 3

Refunded? Failed? You restore by hand.

#4218 · Refundedstock still −1→ manual restore
#4219 · Failedstock still −1→ manual restore
#4220 · Partial refundstock untouched→ inventory drift
3 orders · 3 minutes of admin per week, scaling

Native WooCommerce restores stock only on Cancelled. Refunded, Failed, and partial refunds leave the deduction in place. Multiply by a busy month and you are running phantom out-of-stocks while units sit on the shelf.

eight controls you'll use ↓

Every status. Every event. Every product.

The plugin does four things: pair a stock action to each order status (built-in or custom), fire on payment-complete and checkout-processing events too, scope rules by product or category, and audit every change in a debug log so you can prove what fired and when.

pair · status + action

One action per order status. Built-ins and custom.

Every status registered in WooCommerce shows up as a row. Custom statuses too, including ones added by Order Status Manager.

action · 4 modes

Four actions to choose from.

"Skip" is the underrated one. It tells WooCommerce not to apply its own default for that status, so your rule wins cleanly.

events · payment + checkout

Fire on payment-complete or checkout-processing.

Card-only stores prefer payment-complete so a failed charge never deducts. High-trust gateways use checkout-processed for instant reservation.

scope · product or category

Per-product and per-category overrides.

admin · bulk actions

Backfill stock in two clicks.

Found out today the triggers were off all last week? Filter orders by date, bulk-apply, done. The log captures every retroactive change.

audit · debug log

Every change leaves a trail.

WooCommerce > Status > Logs. Every trigger fire is a row: order ID, SKU, delta, source status, resulting level. End-of-month audits stop being archaeology.

compat · HPOS + custom statuses

HPOS-ready. Custom statuses auto-detected.

product types · all of them

Simple, variable, grouped, bundle-friendly.

The plugin hooks into the order's line items and follows whatever stock-managed products are attached. No hardcoded product-type list.

setup

Four steps. Live in under 10 minutes.

i · install

Activate the plugin

Upload the .zip from Plugins → Add New, then activate.

Automated Stock Update Triggers for WooCommerce Active
ii · pair

Pair statuses with actions

Settings → Stock Triggers. Each status (built-in + custom) gets a dropdown: Decrement, Restore, Hold, Skip. Save.

Processing −1
Awaiting Wire hold
iii · scope

Scope rules per product or category

Optional. Override a rule for a single SKU (e.g. pre-orders) or a whole category (e.g. wires-only B2B kit).

cat: pre-ordershold ✓
cat: ready-stock−1 ✓
SKU TS-L-BLKreserve ✓
iv · audit

Watch the log fill in

WooCommerce → Status → Logs → stock-triggers. Every fire is a row with order ID, product, delta, and source status.

how we stack up

Stock-event triggers, without paying for a warehouse plugin.

WooCommerce
native · built-in
Smart Manager
$149/yr · $499 lifetime
ATUM Inventory
free + ~$80/yr add-ons · no lifetime
WPFactory
$49.99/yr · $149 once
core: per-status stock action
Decrement on Processing & Completed✓✓✓
Restore on Cancelled✓✓✓
Restore on Refunded✕✕✕
Restore on Failed✕✕✕
Custom action per status (decrement / restore / hold / skip)✕✕✕
Custom order statuses auto-detected✕✕✕
event hooks
Fires on woocommerce_payment_complete✕✕✕
Fires on woocommerce_checkout_order_processed✕✕✕
Per-product override✕✕not specified
Per-category override✕✕✕
admin tooling
Bulk action: reduce stock for selected orders✕✓✓
Bulk action: restore stock for selected orders✕✕not specified
Per-order manual trigger from edit screen✕✕✕
Debug log of every stock change✕stock log only✓
platform
HPOS-ready-✓✓
Variable + grouped products✓✓✓
Single-purpose plugin (no warehouse bloat)-✕✕
pricing & ownership
Free version on .org-✓✓
Lifetime tier-✓ $499 (lifetime)✕
Multi-store licensing-per-site tierper add-on
10-year cost$0$499~$800
50+ plugins (All Access)-✕✕
Ready to pair every status with its stock action? ↓ Jump to pricing
scroll →
three real stores ↓

Three businesses. Three stock-trigger setups.

Pre-orders · apparel

Apparel shop · "Pre-orders shouldn't deduct until they ship."

A streetwear brand sells limited-drop tees that ship 6 weeks after order. Native WooCommerce was decrementing them on Processing, so the same SKU showed sold-out before the run was even printed. The plugin holds stock on Processing for the "pre-order" category and decrements on Completed (when shipping label prints).

Categorypre-orders
Processinghold (no deduct)
Completeddecrement (ships now)

Pre-order sell-out signals are accurate again. No more "we sold out" emails on day 1 when the second batch hasn't even been printed.

High-refund · digital + physical

Hybrid shop · "Refunded items should come back to stock automatically."

A boutique cosmetics shop has a 5% refund rate (post-purchase patch tests fail). Native WooCommerce never restores on Refunded, so the warehouse staff was manually adjusting once a week. With the plugin, Refunded → restore for everything in the "physical" category, while digital downloads stay decremented.

Categoryphysical-products
Refundedrestore
Failedrestore

Weekly manual restocking eliminated. Stock counts match the physical shelf at end-of-week, every week.

verified reviews

From stores running this right now.

Using the plugin? Leave a review on WordPress.org.

"Excellent plugin. Works very well. Outstanding support. Tom, thank you for all your help."
J
Julian Stysis
verified buyer
see review →
"The plugin is excellent, very easy to use and very useful, also the developer is very responsive."
G
Gustavo
verified buyer
see review →
"Excellent plugin and very responsive developer. Highly recommended!"
N
Nik
verified buyer
see review →
tested with

Works with your existing order workflow.

Platform

WP 4.4+WP 6.9WC 4.0+WC 10.7PHP 7.4+PHP 8.3HPOS-ready

Status & workflow

Order Status ManagerOrder Status RulesSequential Orders Prowc_register_order_statusWC Subscriptions

Product types

SimpleVariableGroupedExternalBundle children

Reporting & tools

WC Status LogsWC AnalyticsWPMLPolylangREST API
why this plugin

Built for stores where order status drives inventory.

Every WPFactory plugin ships with the same eight guarantees. Here's what running this one looks like in practice.

Clean code, reviewed

Hooks into WooCommerce's order-status registry instead of hardcoding the list. Custom statuses from any third-party plugin appear automatically. No extra database tables, no cron jobs.

Docs & specs, written

Every trigger, action, and scope option is documented at wpfactory.com/docs. Filters exposed for custom decrement logic.

Support that ships

See George's request 5 years ago: category-specific stock triggers, shipped in v1.6.0. Real bug reports become releases within days, not quarters.

14-day money-back

14-day refund on yearly and lifetime, 30 days on All Access, no questions asked. If a custom status doesn't trigger the way you'd hoped, support helps; if it still doesn't fit, you walk away whole.

Bundle savings, real

All Access is $499 once for all 50+ plugins, lifetime, unlimited sites, and it includes every plugin we release later. Three lifetime licenses at $199 already cost $597, so the bundle usually wins by your third plugin.

Updates, regularly

v1.8.3 shipped recently. Tested against the latest WooCommerce within days of every release. HPOS-ready, PHP 8.3 compatible.

Plays well with others

Compatible with WC Subscriptions, Order Status Manager, Order Status Rules, WPML, Polylang. Filters exposed for every trigger so custom logic slots in cleanly.

Designed for store owners

You don't need to write a hook to fix WooCommerce's stock behaviour. Open the settings, pick an action per status, save. The plugin does the rest.

5 stores joined this week·2 in the last 24h
if you're going to keep this plugin a while ↓

Three tiers. Pick once.

14-day refund on yearly and lifetime, 30 days on All Access. Lifetime pays for itself by year 3. All Access pays for itself with any 2nd plugin you'd ever use. Yearly auto-renew can be turned off in your account.

STOCK TRIGGERS PRO
$149 once

Buy once. Owns itself by year 3. Use on every site you own.

  • Unlimited sites
  • Lifetime updates
  • Priority email support
  • 14-day refund
  • GPL-licensed · use on client sites
Buy Lifetime - $149 once
★ SMART MOVE ALL ACCESS · LIFETIME
$999$499oncesave 50%

This plugin + 49 others, lifetime updates, unlimited sites - for $300 more than Lifetime alone.

! Buying any 3 single lifetimes?
$597 → $499 / 50+
  • 50+ plugins, lifetime updates
  • Unlimited sites - every plugin
  • Future plugins included free, forever
  • Lifetime priority support
  • Pays back at 5th plugin you'd use
Explore All Access
What is an order-status stock trigger?
It is a rule that says "when an order moves into a given status (Cancelled, Failed, On Hold, Processing, Completed, Refunded, or a custom one you created), decrement the stock, increment it, hold it, or restore it." Native WooCommerce only decrements on Processing or Completed and only restores on Cancelled; this plugin lets you customise every status.
Does it work with custom order statuses?
Yes. Any custom status registered through wc_register_order_status or added by another plugin (Order Status Manager, Order Status Rules, Sequential Order Numbers Pro custom statuses) shows up in the trigger settings automatically. No hardcoded status list.
Can I restrict triggers to certain products or categories?
Yes. Each trigger can be scoped to specific products, specific categories, or all of the shop. Useful when you want pre-order items to never decrement until Completed, while standard SKUs decrement on Processing.
Does it cover payment-complete and checkout-processing events?
Yes. Both events are hookable as triggers, separately from status changes. Decrement at woocommerce_payment_complete (so cards-only orders only deduct after the charge clears), or at woocommerce_checkout_order_processed for high-trust gateways like bank transfer.
Can I bulk-adjust stock manually?
Yes. The plugin adds bulk actions to the orders screen to reduce or restore stock for selected orders in one click. Useful when you forgot to enable a trigger and need to backfill a week of stock changes.
What happens to existing WooCommerce stock behaviour?
Native behaviour is replaced by the plugin's rules where they apply. You can leave statuses you did not configure on default behaviour, or set them to explicitly do nothing using the "Skip" action.
Is there a debug log?
Yes. Every stock change driven by a trigger is logged with order ID, product, quantity, source status, and resulting stock level. Inspect from WooCommerce > Status > Logs > stock-triggers.
Does it work with variable products and product bundles?
Yes for variable products: the triggered action adjusts the specific variation that was ordered. For third-party bundle plugins, the action follows whatever stock-managed children the bundle exposes.
Is the plugin HPOS-compatible?
Yes. HPOS (High-Performance Order Storage) is declared compatible. Works with both the new high-performance order tables and legacy postmeta-based storage.
Is there a free version on WordPress.org?
Yes. The free version covers status-based decrement / restore on the core statuses. Pro adds the payment-complete trigger, category and product scoping, the admin bulk actions, debug logging, and priority support.
Does it work with WooCommerce Subscriptions?
Yes. Renewal orders inherit the rules you configured for the corresponding status, so subscription renewals decrement (or do not) according to your trigger setup.
What is the refund policy?
14 days on the yearly and lifetime plans; 30 days on All Access. No questions asked. The yearly plan also includes an upgrade credit toward Lifetime or All Access. Lifetime never renews. Yearly auto-renew can be turned off in your account.
if you've scrolled this far ↓

Stop fighting WooCommerce's stock rules. Pair every status with the right action.

Decrement on Processing, hold on Awaiting Wire, restore on Refunded, ignore on Failed. Every built-in status, every custom status, every payment event. Per product, per category. Logged. 250+ stores already running it. 14-day refund if it's not for you.

250+ stores · 5.0★ across 12 reviews · WordPress.org plugin · 14-day refund