> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vortexiq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Draft Products >30d Old, WooCommerce

> Draft Products >30d Old. Counts products stuck in draft status for more than 30 days, catalogue work that was started but never published. How to read it, why it matters, and how to act on it.

**Card class:** [Non-Hero](/nerve-centre/overview#card-classes-explained)  •  **Category:** [Ecommerce Platform](/nerve-centre/connectors#connectors-by-type)

> Draft Products >30d Old for the selected period.

## At a glance

> The count of products sitting in `draft` status whose last modification is more than 30 days ago. These are listings someone started, photographed, or half-described and never finished. Each one is revenue that exists in your catalogue but is invisible to customers, the quiet backlog of unpublished work.

|                                |                                                                                                                                                                                                                                          |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **What it counts**             | `COUNT(products WHERE post_status = 'draft' AND modified_date < now - 30 days)`. A product is included when its WordPress post status is `draft` and it has not been touched for over a month.                                           |
| **REST API endpoint**          | `GET /wp-json/wc/v3/products?status=draft`. Each product exposes `status` (`draft`, `pending`, `private`, `publish`), `date_modified`, and `date_created`. The card filters `status = draft` then ages by `date_modified`.               |
| **Status treatment**           | WooCommerce products use WordPress post statuses. `draft` is unfinished and unpublished. Distinct from `pending` (submitted for review), `private` (published but hidden), and `publish` (live). This card targets `draft` specifically. |
| **Aging logic**                | The 30-day clock runs off `date_modified`, not `date_created`. A draft created six months ago but edited last week is not counted; a draft created and abandoned 31 days ago is. This catches genuinely stalled work, not active drafts. |
| **Variations**                 | Counts the parent draft product, not its individual variations. A draft variable product with twenty variations counts as one.                                                                                                           |
| **Self-hosted vs managed-Woo** | Identical on self-hosted LAMP, WordPress.com, and managed-Woo (Woo.com Cloud, WP Engine, Pressable, Kinsta). Import and product-feed plugins can create drafts in bulk, see FAQs. Self-hosted hosts add sync-lag risk during outages.    |
| **Time window**                | `RT` (real-time snapshot of the current catalogue state)                                                                                                                                                                                 |
| **Alert trigger**              | `>10`, driven by `sentiment_key: wc_draft_products_aging`                                                                                                                                                                                |
| **Roles**                      | owner, operations                                                                                                                                                                                                                        |

## Calculation

Calculated automatically from your WooCommerce data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

## Worked example

A UK lighting brand on self-hosted WooCommerce 8.6 with a product-import plugin (WP All Import) feeding a supplier catalogue. The catalogue was reviewed on 20 Jun 26 (the real-time snapshot date).

| Product                        | Status    | Last modified | Age      | Counts in this card?    |
| ------------------------------ | --------- | ------------- | -------- | ----------------------- |
| "Brass Floor Lamp"             | `draft`   | 02 Mar 26     | 110 days | Yes                     |
| "Linen Pendant Shade"          | `draft`   | 18 Apr 26     | 63 days  | Yes                     |
| "Walnut Desk Lamp"             | `draft`   | 14 Jun 26     | 6 days   | No (recently edited)    |
| "Copper Wall Sconce"           | `pending` | 01 May 26     | 50 days  | No (pending, not draft) |
| "Smoked Glass Globe"           | `publish` | 10 Jun 26     | 10 days  | No (live)               |
| ...plus 11 more stalled drafts | `draft`   | various, >30d | >30 days | Yes                     |

The card reads **13** draft products older than 30 days, above the `>10` threshold, so Vortex IQ Nerve Centre raises an alert. Four things to notice:

1. **A bulk import created most of them.** WP All Import brought in 13 supplier products as drafts in early March so the team could review pricing before publishing. The review never happened. This is the most common cause of an aging-draft pile: a bulk import that stalled at the review step.
2. **"Walnut Desk Lamp" is correctly excluded.** It is a draft, but it was edited six days ago, so the 30-day aging filter (on `date_modified`) leaves it out. The card targets abandoned work, not work in progress. This is why aging runs off `date_modified` rather than `date_created`.
3. **"Copper Wall Sconce" is `pending`, not `draft`.** Pending means submitted for editorial review, a different workflow state. It does not count here. If your team uses the pending workflow, those items need a separate eye; this card is draft-specific.
4. **Each draft is dormant revenue.** Thirteen finished-but-unpublished products is thirteen listings customers cannot buy. The fix is operational: triage the list in WP Admin, publish the ready ones, and delete the abandoned ones. Pair with [Products Missing Image](/nerve-centre/kpi-cards/woocommerce/products-missing-image) and [Products Missing SKU](/nerve-centre/kpi-cards/woocommerce/products-missing-sku), drafts often stall precisely because they are missing those fields.

## Sibling cards merchants should reference together

| Card                                                                                                                      | Why pair it with Draft Products >30d Old                                                                                                              |
| ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| [WC Products Missing Image](/nerve-centre/kpi-cards/woocommerce/products-missing-image)                                   | Drafts often stall because the imagery is not ready. The overlap tells you why work stopped.                                                          |
| [WC Products Missing SKU](/nerve-centre/kpi-cards/woocommerce/products-missing-sku)                                       | A missing SKU is another common reason a product never gets published.                                                                                |
| [WC Total Products](/nerve-centre/kpi-cards/woocommerce/total-products)                                                   | The catalogue denominator. Thirteen stalled drafts in a 50-product catalogue is a different story from thirteen in a 5,000-product one.               |
| [WC Variable Product Attribute Completeness](/nerve-centre/kpi-cards/woocommerce/variable-product-attribute-completeness) | Incomplete attributes block publishing of variable products, a frequent reason variable drafts stall.                                                 |
| [WC On-Backorder Products](/nerve-centre/kpi-cards/woocommerce/on-backorder-products)                                     | The other side of catalogue health: drafts are invisible, backorders are visible but unfulfillable. Read together for a full catalogue-state picture. |
| [WC Out-of-Stock Products](/nerve-centre/kpi-cards/woocommerce/out-of-stock-products)                                     | Another catalogue-health signal. Published but unbuyable versus drafted but unpublished.                                                              |

## Reconciling against WooCommerce

**Where to look in WooCommerce Admin:**

[WP Admin > Products > All Products](/wp-admin/edit.php?post_type=product\&post_status=draft) filtered to the **Draft** status link above the product table. WordPress shows a "Draft (N)" count there. To match this card's aging, sort the list by **Date** (the modified column) and count only those last edited more than 30 days ago, WP Admin's status filter shows all drafts regardless of age, so its number will be equal to or higher than this card.

Other WP Admin views that look related but are not:

* **Products list "All (N)" count**: includes every status. Far higher than the draft-only number.
* **WooCommerce > Status > Logs**: import logs show how many drafts a feed created, but not their current age.
* **The Bin (trash)**: trashed products are not drafts. Deleting a draft moves it out of this count entirely.

**Why our number may legitimately differ from WP Admin:**

| Reason                                                                                                                                                                                                                                                  | Direction of divergence                            |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| **Aging filter**. WP Admin's "Draft (N)" counts all drafts; this card counts only those older than 30 days by `date_modified`.                                                                                                                          | WP Admin equal or higher                           |
| **Time-zone**. `date_modified` is stored in WP-site timezone (*Settings > General > Timezone*); Vortex IQ ages on UTC. A draft modified right around the 30-day boundary can fall on either side.                                                       | +/- borderline drafts at the 30-day edge           |
| **Auto-draft noise**. WordPress creates `auto-draft` placeholder posts when an editor opens "Add Product" and walks away. The REST API `status=draft` filter excludes `auto-draft`, so this card ignores them; a raw database count might include them. | Ours lower than a naive DB query                   |
| **Self-hosted server uptime**. An outage during the indexer poll delays catalogue changes by up to 24 hours. Managed hosts are steadier.                                                                                                                | Ours temporarily stale; self-resolves at next sync |
| **Import-plugin behaviour**. Some feed plugins re-touch drafts on every run (updating `date_modified`), which resets the aging clock and hides genuinely stalled items.                                                                                 | Ours lower than the real stall count               |

The cleanest reconciliation is the Products list filtered to Draft and sorted by modified date, then count the rows older than 30 days by hand. WP Admin has no native "aging draft" report, which is why this card exists.

## Known limitations / merchant FAQs

**Why does it use `date_modified` instead of `date_created`?**
Because a product created long ago but edited recently is active work, not a stalled draft. Aging on `date_modified` catches the genuinely abandoned items and ignores ones the team is still touching. The trade-off: an import plugin that re-saves every draft on each run will reset the clock and hide real stalls, see the import question below.

**Does this include `pending` or `private` products?**
No. It targets `draft` only. `pending` means submitted for editorial review (a different workflow), and `private` means published but hidden from the public catalogue. Each is a separate state with its own implications. If your team relies on the pending-review workflow, those items are not surfaced here.

**My import plugin created hundreds of drafts, is that a problem?**
It depends. Many feed plugins (WP All Import, product CSV importers) deliberately land new products as drafts so a human can review pricing and imagery before publishing. That is fine if the review happens. It becomes a problem when the review never happens and the drafts age out, which is exactly what this card detects. If your importer re-touches drafts on every run, the aging clock resets and the card under-reports, check the importer's "skip unchanged" setting.

**What about auto-drafts?**
WordPress creates an `auto-draft` placeholder whenever someone opens "Add Product" and abandons it. These are noise, not real catalogue work. The REST API `status=draft` filter excludes `auto-draft`, so this card ignores them. A raw database count would include them and read higher.

**Does a draft variable product count its variations?**
No. The card counts the parent draft product as one, regardless of how many variations it has. A draft variable product with twenty colour variations is a single entry here. For the completeness of variations themselves, see [Variable Product Attribute Completeness](/nerve-centre/kpi-cards/woocommerce/variable-product-attribute-completeness).

**Is this real-time or refreshed on a schedule?**
It is a real-time snapshot of catalogue state, refreshed on the standard data refresh (typically every 30 to 60 minutes for live integrations). On self-hosted stores a host outage can delay the refresh; force a manual refresh if you have just published a batch and want the count to update immediately.

***

### Tracked live in Vortex IQ Nerve Centre

*Draft Products >30d Old* is one of hundreds of KPI pulses Vortex IQ tracks across WooCommerce and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English.

[Start for free](https://app.vortexiq.ai/login) or [book a demo](https://www.vortexiq.ai/contact-us) to see this metric running on your own data.
