agentsclimarketplace

Woo product lifecycle manager

Skill navarroido/Woocommerce-skill/skills/merchandising/woo-product-lifecycle-manager

Move products between draft, pending, private, and publish statuses in bulk based on age or sales thresholds with dry-run preview.From its SKILL.md

Install
npx -y skills add navarroido/Woocommerce-skill --skill woo-product-lifecycle-manager

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

6.0 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it

woo-product-lifecycle-manager

Purpose

Automate WooCommerce product lifecycle transitions: archive slow-moving products to draft, publish pending products that meet criteria, or move discontinued items to private status. Filters by product age, days since last sale, or zero-sale count. Includes dry-run preview before any status changes.

Prerequisites

  • WooCommerce store with REST API enabled
  • Consumer Key with Read/Write scope
  • Minimum WooCommerce version: 3.5.0

Parameters

ParameterTypeRequiredDefaultDescription
store_urlstringyesBase URL of the WooCommerce store
consumer_keystringyesWooCommerce REST API consumer key (ck_...)
consumer_secretstringyesWooCommerce REST API consumer secret (cs_...)
dry_runboolnotruePreview changes without executing
formatstringnohumanOutput format: human or json
source_statusstringyesCurrent product status: publish, draft, pending, private
target_statusstringyesNew status to apply
filter_no_sales_daysintnoOnly include products with no sales in last N days
filter_min_age_daysintnoOnly include products created at least N days ago
category_idintnoLimit to this category

Authentication

WooCommerce uses OAuth 1.0a for HTTP and Basic Auth over HTTPS.

For HTTPS stores (recommended):

Authorization: Basic base64(consumer_key:consumer_secret)

For HTTP stores (development only): Use OAuth 1.0a — include oauth_consumer_key, oauth_nonce, oauth_signature, oauth_signature_method=HMAC-SHA1, oauth_timestamp, oauth_version=1.0

Never log or output consumer_key or consumer_secret values.

See docs/AUTHENTICATION.md for full setup instructions.

Safety

Step 3 changes product visibility. Drafting or privatizing published products removes them from the storefront immediately. Always run with dry_run: true first (the default). Verify the product list carefully.

Workflow Steps

Step 1 — Fetch products in source_status

GET /wp-json/wc/v3/products
  ?status=<source_status>&per_page=100&page=1
  [&category=<category_id>]

Filter client-side by date_created for filter_min_age_days.

Step 2 — Check sales for each product (if filter_no_sales_days set)

GET /wp-json/wc/v3/orders
  ?status=completed&after=<now - filter_no_sales_days days>&per_page=100&page=1

Build set of product IDs with recent sales. Exclude these from the transition list.

Step 3 — Preview or execute

If dry_run: true: output transition preview table and stop.

If dry_run: false and confirmed:

PUT /wp-json/wc/v3/products/{id}
  Body: { "status": "<target_status>" }

API Endpoints Used

GET  /wp-json/wc/v3/products         — products in source status
GET  /wp-json/wc/v3/orders           — sales check for filter_no_sales_days
PUT  /wp-json/wc/v3/products/{id}    — update product status

Pagination Strategy

WooCommerce REST API uses page/per_page pagination (not cursor-based).

Standard pattern:

page = 1
while True:
  response = GET /endpoint?per_page=100&page=page
  process(response)
  if len(response) < 100: break
  page += 1

Maximum per_page is 100 for most endpoints. The X-WP-Total and X-WP-TotalPages response headers report totals. Always read X-WP-TotalPages on the first request to estimate job size.

Session Tracking

Claude MUST emit the following output at each stage. This is mandatory.

STARTUP:

╔══════════════════════════════════════════╗
║  SKILL: woo-product-lifecycle-manager    ║
║  STORE: <store_url>                      ║
║  TIME:  <ISO-8601 UTC>                   ║
║  MODE:  <DRY RUN | LIVE>                 ║
╚══════════════════════════════════════════╝

PER-OPERATION (emit after each API call batch):

[N/TOTAL] <METHOD> <endpoint> → <result_count> records | params: <key>=<val>

COMPLETION (human format):

╔══════════════════════════════════════════╗
║  COMPLETE: woo-product-lifecycle-manager ║
║  RECORDS PROCESSED: <n>                  ║
║  OUTPUT: stdout                          ║
╚══════════════════════════════════════════╝

COMPLETION (json format):

{
  "skill": "woo-product-lifecycle-manager",
  "store": "<store_url>",
  "completed_at": "<ISO-8601>",
  "records_processed": <n>,
  "output_file": null,
  "dry_run": <bool>
}

Output Format

Human format: table listing product ID, name, current status, new status, and filter criteria matched.

Error Handling

ErrorCauseResolution
401 UnauthorizedInvalid credentialsVerify consumer_key and consumer_secret
403 ForbiddenKey lacks Read/Write scopeRegenerate with Read/Write scope
429 Too Many RequestsRate limitWait 2 seconds and retry

Best Practices

  • Always run with dry_run: true first (the default). Unpublishing products is immediately visible to customers.
  • Use filter_no_sales_days: 180 to archive products that genuinely haven't sold recently.
  • Set filter_min_age_days: 30 to avoid archiving newly-listed products that need time to gain traction.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most product growth skills give in ~1.4k tokens

Counted across 728 of the 1,010 authors here whose files we hold, read 2026-08-07

  • Read product marketing context before asking questionsin 24 of 728, across 18 files
  • Define the ideal customer profilein 21 of 728, across 3 files
  • Document a rollback plan before deploymentin 21 of 728, across 12 files
  • Analyze the codebase to understand the productin 19 of 728, across 1 file
  • Ask clarifying questions about the value propositionin 19 of 728, across 1 file
  • Search for companies matching the criteriain 19 of 728, across 1 file
  • Look for signals of immediate needin 19 of 728, across 1 file
  • Assign a fit score from one to tenin 19 of 728, across 1 file
  • Identify the target decision-maker rolein 19 of 728, across 1 file
  • Suggest a personalized contact strategyin 19 of 728, across 1 file
  • Provide conversation starters for outreachin 19 of 728, across 1 file
  • Format results in a scannable markdown templatein 19 of 728, across 1 file

Said here and by no other author read

  • filter products client-side by creation date
  • exclude products with recent sales from transitions
  • run with dry run enabled by default
  • paginate products using page and per_page parameters
  • read the total pages response header first
  • emit the startup session block immediately

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 326,679. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.