Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
40rty-ai avatar

Shopify Admin Product Lifecycle Manager

  • 7 installs
  • 173 repo stars
  • Updated June 26, 2026
  • 40rty-ai/shopify-admin-skills

shopify-admin-product-lifecycle-manager is a Claude Code skill that bulk-transitions Shopify products through DRAFT, ACTIVE, and ARCHIVED status using the Shopify Admin GraphQL API.

About

This skill queries Shopify products matching a tag, vendor, collection, or status filter and bulk-transitions them to a target status of ACTIVE, DRAFT, or ARCHIVED. Merchants use it for seasonal launches, end-of-season sunsetting, and pre-launch staging without editing products one by one in the admin. It runs against the Shopify Admin GraphQL API and defaults to a dry run so the product list can be reviewed first. It writes a CSV of every changed product.

  • Bulk-transitions Shopify products through DRAFT, ACTIVE, and ARCHIVED status by tag, vendor, collection, or status filte
  • Runs against the Shopify Admin GraphQL API (2025-01) via products query and productUpdate mutation
  • Defaults to dry_run:true so you can preview the product list before committing status changes

Shopify Admin Product Lifecycle Manager by the numbers

  • 7 all-time installs (skills.sh)
  • Ranked #1,587 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
  • Data as of Aug 1, 2026 (Skillselion catalog sync)
At a glance

shopify-admin-product-lifecycle-manager capabilities & compatibility

Free; requires an authenticated Shopify store session with read_products and write_products scopes

Capabilities
bulk product update · product archive · catalog management
Works with
github
Use cases
database
Pricing
Free
From the docs

What shopify-admin-product-lifecycle-manager says it does

Bulk transition products through DRAFT → ACTIVE → ARCHIVED status for seasonal launches and sunsetting.
SKILL.md
ARCHIVED products are hidden from all sales channels and cannot be purchased.
SKILL.md
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-product-lifecycle-manager

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs7
repo stars173
Last updatedJune 26, 2026
Repository40rty-ai/shopify-admin-skills

What it does

Bulk-transition a filtered set of Shopify products between DRAFT, ACTIVE, and ARCHIVED status for a seasonal launch or sunset.

Who is it for?

Seasonal launches, end-of-season sunsetting, and pre-launch staging of many products at once

When should I use this skill?

You need to activate, draft, or archive a batch of Shopify products by tag, vendor, or collection

What you get

Every product matching the filter is transitioned to the target status and logged to a CSV.

  • lifecycle_update CSV with product_id, title, previous_status, new_status, vendor, tags

By the numbers

  • 3 workflow steps
  • 2 GraphQL operations (products query, productUpdate mutation)

Files

SKILL.mdMarkdownGitHub ↗

Purpose

Queries products matching a tag, vendor, collection, or status filter and bulk-transitions them to a target status (DRAFT, ACTIVE, or ARCHIVED). Used for seasonal launches (DRAFT → ACTIVE), end-of-season sunsetting (ACTIVE → ARCHIVED), and pre-launch staging (creating as DRAFT, activating on a date).

Prerequisites

  • Authenticated Shopify CLI session: shopify store auth --store <domain> --scopes read_products,write_products
  • API scopes: read_products, write_products

Parameters

ParameterTypeRequiredDefaultDescription
storestringyesStore domain (e.g., mystore.myshopify.com)
filterstringyesProduct filter query (e.g., tag:summer-2026, vendor:Nike, status:draft)
target_statusstringyesTarget status: ACTIVE, DRAFT, or ARCHIVED
dry_runboolnotruePreview products without executing mutations
formatstringnohumanOutput format: human or json

Safety

⚠️ ARCHIVED products are hidden from all sales channels and cannot be purchased. ACTIVE products are immediately visible to customers. Run with dry_run: true to review the product list before committing — especially for ARCHIVED transitions which are hard to reverse in bulk.

Workflow Steps

1. OPERATION: products — query Inputs: query: <filter>, first: 250, pagination cursor Expected output: Products with id, title, status, tags; paginate until hasNextPage: false

2. Filter to products NOT already in target_status — skip those already correct

3. OPERATION: productUpdate — mutation Inputs: id: <product_id>, status: <target_status> Expected output: product { id, title, status }, userErrors

GraphQL Operations

# products:query — validated against api_version 2025-01
query ProductsByFilter($query: String!, $after: String) {
  products(first: 250, after: $after, query: $query) {
    edges {
      node {
        id
        title
        status
        vendor
        tags
        publishedAt
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}
# productUpdate:mutation — validated against api_version 2025-01
mutation ProductUpdateStatus($input: ProductInput!) {
  productUpdate(input: $input) {
    product {
      id
      title
      status
    }
    userErrors {
      field
      message
    }
  }
}

Session Tracking

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

On start, emit:

╔══════════════════════════════════════════════╗
║  SKILL: Product Lifecycle Manager            ║
║  Store: <store domain>                       ║
║  Started: <YYYY-MM-DD HH:MM UTC>             ║
╚══════════════════════════════════════════════╝

After each step, emit:

[N/TOTAL] <QUERY|MUTATION>  <OperationName>
          → Params: <brief summary of key inputs>
          → Result: <count or outcome>

If dry_run: true, prefix every mutation step with [DRY RUN] and do not execute it.

On completion, emit:

For format: human (default):

══════════════════════════════════════════════
OUTCOME SUMMARY
  Products matched:    <n>
  Already at target:   <n> (skipped)
  Status updated:      <n>
  Errors:              <n>
  Output:              lifecycle_update_<date>.csv
══════════════════════════════════════════════

For format: json, emit:

{
  "skill": "product-lifecycle-manager",
  "store": "<domain>",
  "started_at": "<ISO8601>",
  "completed_at": "<ISO8601>",
  "dry_run": true,
  "filter": "<query>",
  "target_status": "ACTIVE",
  "outcome": {
    "matched": 0,
    "skipped_already_correct": 0,
    "updated": 0,
    "errors": 0,
    "output_file": "lifecycle_update_<date>.csv"
  }
}

Output Format

CSV file lifecycle_update_<YYYY-MM-DD>.csv with columns: product_id, title, previous_status, new_status, vendor, tags

Error Handling

ErrorCauseRecovery
THROTTLEDAPI rate limit exceededWait 2 seconds, retry up to 3 times
userErrors on productUpdateProduct locked or invalid stateLog error, skip product, continue
No products match filterFilter too narrowExit with 0 matches, suggest broadening filter

Best Practices

  • Use tags to mark seasonal batches before running (e.g., tag products with launch:2026-05 before activating them) so the filter is precise.
  • ARCHIVED status removes products from all channels including the storefront, POS, and buy buttons — confirm this is the intent before running at scale.
  • For large catalogs (500+ products), rate limiting will slow execution — the skill retries automatically but large batches may take several minutes.
  • Pair with product-data-completeness-score before activating DRAFT products to ensure they have all required fields.

Related skills

FAQ

Is the status change reversible?

ARCHIVED products are hidden from all sales channels and hard to reverse in bulk, so the skill defaults to dry_run:true to let you review the list before committing.

How does it select which products to change?

It queries products matching a filter such as tag:summer-2026, vendor:Nike, or status:draft and skips any already at the target status.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.