WooCommerce inventory management: setup, workflows, and forecasting

WooCommerce inventory management covers how you track, control, and replenish stock across products, locations, and channels. Done well, it reduces overselling, frees cash from excess inventory, and keeps popular SKUs in stock with less manual work.

What WooCommerce inventory management covers (and why it matters)

Key terms: SKU, stock status, backorders, lead time

  • SKU: Unique identifier used to track items in your catalog and warehouse.

  • Stock status: In stock, out of stock, or on backorder—controls storefront availability.

  • Backorders: Allow selling when stock is zero; can notify buyers you’ll ship later.

  • Lead time: Days from placing a purchase order to having sellable stock on hand.

Pain points inventory solves for Woo stores

  • Overselling during spikes, causing cancellations and poor reviews.

  • Cash tied in slow movers while top sellers stock out.

  • Inaccurate counts from returns, damages, and mispicks.

  • Manual updates across POS, marketplaces, and the warehouse.

  • Unclear reorder points and guesswork in POs.

Core vs extensions: what each can/can’t do

  • Core WooCommerce handles single-location stock, low-stock emails, and per-variation quantities.

  • Extensions add purchase orders, barcode scanning, multi-warehouse, and forecasting.

  • ERP/WMS adds deeper features like bin locations, putaway, audit trails, and accounting.

Decision framework: Core features vs plugins vs ERP/WMS

When core is enough

  • Catalog under ~1,000 SKUs.

  • Single warehouse or stock location.

  • Simple and variable products without complex kits.

  • Low to moderate order volume and minimal marketplaces/POS.

  • You can manage POs and forecasting with spreadsheets.

When to add inventory plugins

  • Need purchase orders, supplier management, or barcodes.

  • Run bundles/kits or light assemblies.

  • Require cycle counts, stock adjustments, or lot/expiry for select SKUs.

  • Want demand forecasting and automated low-stock alerts beyond email.

  • Selling across POS or a few marketplaces with near-real-time sync.

Consider adding a specialized tool such as a WooCommerce inventory forecasting plugin when you need SKU-level demand projections and safety stock rules tied to your store’s data.

When to graduate to ERP/WMS

  • Multiple warehouses, 3PLs, and dropshippers.

  • Bin-level storage, wave picking, ASN/EDI, and QC steps.

  • Complex assemblies/BOMs, serial/lot tracking at scale.

  • Tight integration with accounting and procurement.

  • Large catalogs with high throughput and strict audit requirements.

Cost, complexity, and data ownership

  • Core: lowest cost, minimal overhead, data stays in WordPress.

  • Plugins: moderate cost, faster time to value, data largely remains in Woo but stored via plugin tables.

  • ERP/WMS: highest cost and change management; ensure API access and data export paths to avoid lock-in.

Migration path and risks

  • Start with clean SKUs and accurate stock in Woo.

  • Add plugins for POs/barcodes/forecasting as volume grows.

  • Pilot ERP/WMS with a subset of SKUs/locations before full migration.

  • Watch for duplicate stock sources (plugins and ERP both writing stock).

  • Maintain a single “system of record” for inventory quantities.

More time, More Sales

AI Forecasting For E-Commerce Merchants

AI Forecasting For E-Commerce Merchants

Set up inventory in WooCommerce (step-by-step)

Global stock settings and notifications

  • Go to WooCommerce > Settings > Products > Inventory.

  • Enable “Manage stock.”

  • Set “Hold stock (minutes)” to reserve items for unpaid orders and auto-cancel if payment fails.

  • Enable low/out-of-stock notifications and set default thresholds.

  • Choose whether to hide out-of-stock items from the catalog.

Simple products: SKUs, manage stock, thresholds

  • Products > Add New (or edit existing).

  • Inventory tab:

    • Enter a unique SKU.

    • Check “Manage stock.”

    • Set “Stock quantity” and “Low stock threshold.”

    • Choose backorders policy and “Sold individually” if needed.

Variable products: parent vs variation stock

  • Switch product type to Variable product.

  • Define attributes and variations.

  • For each variation:

    • Set its own SKU and “Manage stock” with quantity and thresholds.

  • Use parent-level stock only when variations do not have separate counts (rare).

Bundles/kits and composite products

  • For virtual kits, use a bundling/composite extension:

    • Link child SKUs to a parent bundle.

    • Configure component stock deduction at order time.

    • Decide if components can substitute or be optional.

  • For physical kits, assemble on receiving and treat the kit as its own SKU.

Backorders and stock status rules

  • “Do not allow” prevents checkout at zero.

  • “Allow, but notify customer” shows a backorder message.

  • “Allow” enables silent backorders—use sparingly.

  • Keep lead times accurate if taking backorders to set expectations.

Bulk edits and CSV import/export

  • Products list > Bulk actions > Edit for quick changes to stock status or backorders.

  • Products > Export to create a CSV, edit columns like:

    • ID, SKU, manage_stock, stock, backorders, stock_status, low_stock_amount.

  • Products > Import to apply updates; test with a small batch first.

Operational workflows that keep stock accurate

Receiving and purchase orders

  • Create a PO with supplier, items, cost, and expected date.

  • On receiving:

    • Match items and quantities to the PO.

    • Record discrepancies, damages, and substitutions.

    • Update landed cost if freight/duties apply.

    • Mark items received and update stock immediately or after QC.

Cycle counts and stock adjustments

  • Count frequently sold SKUs more often (ABC method).

  • Freeze picks for the bin/location being counted.

  • Record variances with reason codes (shrinkage, mispick, damage).

  • Post adjustments and review trends monthly.

Returns, RMAs, and damaged goods

  • Approve RMA with an RMA number and return window.

  • On arrival:

    • Inspect, decide Restockable, Refurb, or Scrap.

    • Restock only sellable units; quarantine suspect stock.

  • Issue refunds/credits and attach reason codes.

Kitting/assemblies and disassembly

  • Light assembly:

    • Backflush components when the kit is built.

    • Update finished goods and component counts together.

  • Disassembly:

    • Break returns into components when viable.

    • Track yield to spot quality issues.

Lot/expiry tracking for regulated goods

  • Record lot number, mfg date, and expiry per receipt.

  • Pick FEFO (first-expire-first-out).

  • Prevent sale of expired lots; quarantine and write off as needed.

Prevent overselling and handle high-velocity SKUs

Reserve stock during checkout

  • Use “Hold stock (minutes)” so pending orders reserve quantities.

  • Calibrate the timer to typical checkout time; too short risks oversells, too long ties up stock.

Hold stock for pending payments

  • Ensure gateways update order status promptly.

  • For delayed payment methods, consider manual review queues before releasing reserved stock.

Preorders and backorders best practices

  • Enable backorders only with reliable lead times.

  • Show clear messaging and expected ship dates.

  • Split shipments when in-stock and backordered items are mixed.

Cancellations, refunds, and restocks

  • When canceling or refunding, use the “Restock items” option to return inventory.

  • Automate restock on failed payments with order status transitions.

  • Log reasons for cancellations to refine safety stock and checkout UX.

Flash sales and concurrency tips

  • Warm caches and test with staging load.

  • Increase PHP workers and DB connections for the event window.

  • Keep “Hold stock” enabled; shorten to match faster checkouts.

  • Limit cart quantities per SKU to protect inventory during spikes.

Forecasting and replenishment

Data you need: demand, lead time, service level

  • Clean order history by SKU (exclude one-time bulk orders if not recurring).

  • Supplier lead times (average and variability).

  • Target service level (e.g., 95% fill rate).

Reorder point and safety stock formulas

  • Average daily demand (d) = total demand over N days / N.

  • Lead time (L) in days.

  • Demand variability:

    • σd = standard deviation of daily demand.

    • σLT ≈ σd × sqrt(L) if lead time is stable.

  • Safety stock (SS) = Z × σLT, where Z is the z-score for your service level:

    • 90% = 1.28, 95% = 1.65, 99% = 2.33.

  • Reorder point (ROP) = d × L + SS.

Example:

  • d = 10 units/day, L = 12 days, σd = 4, Z = 1.65.

  • σLT = 4 × sqrt(12) ≈ 13.86; SS ≈ 22.9.

  • ROP = 10 × 12 + 22.9 ≈ 143 units.

Build and test these formulas in your spreadsheet, or use purpose-built inventory planning tools to speed up calculations and scenario testing.

EOQ and supplier MOQs

  • EOQ = sqrt((2 × D × S) / H)

    • D = annual demand, S = ordering cost, H = holding cost per unit per year.

  • Compare EOQ to supplier MOQ and price breaks; order the higher of EOQ and MOQ unless cash or space is tight.

Seasonality and promotions

  • Use 12–24 months of data to identify peaks.

  • Apply uplift factors for planned promos.

  • Separate trend, seasonality, and random error; update after each cycle.

Replenishment cadence and review cycles

  • For stable SKUs, review weekly; for volatile SKUs, review daily.

  • Use min/max per SKU-location:

    • Min = ROP. Max = ROP + EOQ (or 1–2 cycles of demand).

  • Align order cutoffs to supplier schedules to reduce partial POs.

For stores on WordPress that also sell on Shopify, a dedicated forecasting tool can unify planning across channels. If you operate both storefronts, explore Shopify inventory forecasting to keep buys aligned across platforms.

Multi-location and omnichannel sync

Single vs multiple warehouses: data model

  • Single location:

    • One on-hand quantity per SKU; simple and fast.

  • Multiple locations:

    • Track on-hand, available, reserved per location.

    • Sum for storefront availability or route orders by rules.

Store + warehouse + dropshipper splits

  • Own warehouse: primary fulfillment; fastest updates.

  • Retail store/POS: buffer stock for walk-ins; frequent syncs.

  • Dropshippers/3PLs: treat as virtual locations with SLA and feed-based updates.

POS and marketplace integrations

  • Sync orders and stock deltas in near real-time.

  • Use webhooks for order-created and order-updated events.

  • Avoid double-deducting stock when multiple apps touch quantities.

Transfer orders and stock reservations

  • Use transfer orders to move inventory between locations.

  • Deduct from source when shipped; add to destination when received.

  • Reserve stock for high-priority orders or B2B allocations.

BOPIS and local delivery considerations

  • Expose per-store availability.

  • Promise accurate pickup windows by separating store stock from online pools.

  • Reconcile pickups not collected within the window back to sellable stock.

Barcodes, labeling, and physical counts

SKU strategy and barcode types

  • Use consistent, human-readable SKUs (brand-category-attribute).

  • Barcode types:

    • UPC/EAN for retail scans.

    • Code 128 for internal operations (supports longer SKUs/lot).

    • QR for URLs and complex data when needed.

Generating/printing labels

  • Print labels when receiving or kitting.

  • Include SKU, product name, and barcode; add lot/expiry if applicable.

  • Use standard label sizes compatible with your printer fleet.

Mobile scanners and app options

  • Bluetooth 1D/2D scanners paired with phones or tablets are affordable and flexible.

  • Prioritize ruggedness, battery life, and keyboard wedge mode for easy input into Woo screens or apps.

Conducting counts and recounts

  • Pre-count:

    • Freeze picks for target zones.

    • Print location-based count sheets.

  • Count:

    • Scan each item; flag unknown barcodes.

  • Recount:

    • Investigate large variances before posting adjustments.

Reconciling variances

  • Post adjustments with reason codes.

  • Analyze variance by SKU, location, and counter to spot training or process gaps.

  • Update procedures to prevent repeat issues.

Reporting, KPIs, and dashboards

Stock valuation methods

  • FIFO for most retail; aligns with physical flow.

  • Weighted average for simplicity when prices vary.

  • Export stock on hand and costs to accounting for valuation and COGS.

Inventory turns, GMROI, and Days of Stock

  • Inventory turns = COGS / Average inventory cost.

  • GMROI = Gross margin dollars / Average inventory cost.

  • Days of stock (DOS) = On-hand / Average daily demand.

Track these monthly and by category to see where cash gets stuck.

Dead stock and aging reports

  • Flag SKUs with no sales in 90/120/180 days.

  • Age buckets (0–30, 31–60, 61–90, 90+) guide markdowns and liquidation.

  • Compare aged stock to incoming POs to pause rebuys.

Alerts and exception-based management

  • Low-stock alerts when available drops below ROP.

  • PO past-due alerts by supplier.

  • Oversold/backorder spikes by SKU for rapid recovery.

Dashboard template and automation

  • Core dashboard widgets:

    • Top stockouts and forecasted stockouts.

    • Inbound POs and days late.

    • Turns, GMROI, DOS by category.

    • Dead stock value and weeks on hand for top SKUs.

  • Automations:

    • Low stock → create PO draft and assign buyer.

    • PO received → send QC checklist.

    • Return received → triage task for restock/scrap.

For more frameworks and walkthroughs, browse our inventory management blog for deep dives on KPIs, alerts, and replenishment playbooks.

Scaling, performance, and security

Large catalog performance tips

  • Enable High-Performance Order Storage (HPOS) to reduce postmeta load.

  • Use object caching and optimized hosting for database-heavy operations.

  • Archive or hide legacy SKUs to trim queries and admin lists.

Background jobs and queues

  • Leverage WooCommerce Action Scheduler for imports, syncs, and emails.

  • Stagger heavy jobs (CSV imports, stock sync) during off-peak windows.

  • Add idempotency to webhooks to avoid duplicate deductions.

Database hygiene and indexing

  • Clean orphaned postmeta/transients regularly.

  • Keep image sizes reasonable to speed admin/product pages.

  • Monitor slow queries from inventory plugins and adjust indexes with your DBA.

Roles, permissions, and audit trails

  • Separate duties: buyer creates POs, receiver posts receipts, manager approves adjustments.

  • Limit admin access; use Shop Manager role for day-to-day operations.

  • Keep a changelog of stock moves with user, timestamp, and reason code.

Backup, staging, and rollback plans

  • Nightly backups with point-in-time recovery.

  • Staging site for plugin updates and flash-sale load tests.

  • Rollback plan for inventory sync incidents, including a “freeze updates” switch.

Soft CTA: If you’re wrestling with stockouts or excess inventory, start by defining ROP and safety stock for your top 50 SKUs, then pilot a weekly PO review. Small, consistent steps compound into reliable availability.

FAQs

Can WooCommerce manage inventory without plugins?

Yes. Core WooCommerce supports per-product and per-variation stock, low/out-of-stock alerts, backorders, CSV import/export, and hold stock for unpaid orders. For purchase orders, barcodes, multi-location, and advanced forecasting, you’ll likely add extensions or connect to a WMS/ERP. To extend forecasting natively, consider WooCommerce inventory forecasting.

How do I set low-stock and out-of-stock alerts in WooCommerce?

Go to WooCommerce > Settings > Products > Inventory. Enable notifications and set default thresholds. You can also set a per-product “Low stock threshold” in the Inventory tab. Ensure the notification email recipient is correct and deliverability is verified.

What’s the best way to handle inventory for variable products and bundles?

  • Variable: Assign unique SKUs and stock to each variation; avoid parent-level stock unless all variations share a single pool.

  • Bundles/kits: Use a bundling/composite extension. Deduct component stock on order or assemble kits in advance and treat them as finished goods with their own SKU.

How can I prevent overselling during peak traffic?

Enable “Hold stock (minutes)” to reserve items for pending payments. Test checkout under load, limit per-SKU cart quantities, and ensure payment webhooks update orders quickly. For extreme spikes, pre-allocate inventory to channels and shorten hold times to match faster checkouts.

Can WooCommerce support multiple warehouses or store locations?

Core WooCommerce tracks a single stock per SKU. For multiple locations, use extensions or connect a WMS/ERP to manage per-location on-hand, transfers, and routing rules. Keep one system as the source of truth to avoid conflicting updates.

What formula should I use for reorder points and safety stock?

  • Safety stock = Z × σLT, where Z is your service level z-score and σLT is demand variability during lead time.

  • Reorder point (ROP) = average daily demand × lead time + safety stock.

Calculate these per SKU-location and update as demand or lead time changes.

How do I perform cycle counts and adjust stock accurately?

Schedule counts by ABC priority, freeze picks for the area, scan each item, and investigate large variances before posting. Record reason codes (shrinkage, damage, mispick) and review trends monthly to improve processes.

Which inventory reports matter most for WooCommerce?

Focus on stockouts, forecasted stockouts, inbound PO status, inventory turns, GMROI, days of stock, and dead stock/aging. Use exception-based alerts so your team works from prioritized lists each week.

Ditch CSV Exports and Excel Formulas

Ditch CSV Exports and Excel Formulas

AI Forecasting For Shopify Merchants

AI Forecasting For Shopify Merchants