shopify-admin-product-data-completeness-score

SkillMedia

Read-only: scores each product on data completeness across description, images, SEO, weight, barcode, cost, and metafields.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the shopify-admin-product-data-completeness-score skill

What this skill tells your AI

The instructions your AI receives, as published by 40rty-ai/shopify-admin-skills in skills/merchandising/shopify-admin-product-data-completeness-score/SKILL.md and read by ahel’s review.

Purpose

Calculates a data completeness score (0–100) for each active product based on the presence of key fields: description, images, SEO title, SEO description, variant weight, barcode, cost, and specified metafields. Produces a ranked list of products needing the most data work. Read-only — no mutations. Catalog health report in a single pass.

Prerequisites

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

Parameters

ParameterTypeRequiredDefaultDescription
storestringyesStore domain (e.g., mystore.myshopify.com)
status_filterstringnoactiveProduct status to score: active, draft, or all
required_metafieldsarrayno[]List of namespace.key metafields that are required (e.g., ["custom.material"])
formatstringnohumanOutput format: human or json

Safety

ℹ️ Read-only skill — no mutations are executed. Safe to run at any time.

Scoring Rubric

FieldPoints
Description present (non-empty)15
At least 1 image15
SEO title present10
SEO description present10
At least 1 variant with barcode10
At least 1 variant with cost10
At least 1 variant with weight10
All required metafields present20 (split evenly)
Total100

Workflow Steps

  1. OPERATION: products — query Inputs: query: "status:<status_filter>", first: 250, select all completeness fields, pagination cursor Expected output: Products with all scored fields; paginate until hasNextPage: false

  2. Score each product per rubric; rank ascending by score

GraphQL Operations

# products:query — validated against api_version 2025-01
query ProductCompleteness($query: String!, $after: String) {
  products(first: 250, after: $after, query: $query) {
    edges {
      node {
        id
        title
        handle
        descriptionHtml
        images(first: 1) {
          edges {
            node {
              id
            }
          }
        }
        seo {
          title
          description
        }
        variants(first: 10) {
          edges {
            node {
              id
              barcode
              weight
              inventoryItem {
                unitCost {
                  amount
                }
              }
            }
          }
        }
        metafields(first: 20) {
          edges {
            node {
              namespace
              key
              value
            }
          }
        }
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}

Session Tracking

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

On start, emit:

╔══════════════════════════════════════════════╗
║  SKILL: Product Data Completeness Score      ║
║  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>

On completion, emit:

For format: human (default):

══════════════════════════════════════════════
PRODUCT DATA COMPLETENESS REPORT
  Products scored:  <n>
  Avg score:        <pct>/100
  Score < 50:       <n> products (need urgent attention)
  Score 50–79:      <n> products
  Score ≥ 80:       <n> products

  Lowest scoring products:
    "<title>"  Score: <n>/100  Missing: description, SEO title
  Output: completeness_<date>.csv
══════════════════════════════════════════════

For format: json, emit:

{
  "skill": "product-data-completeness-score",
  "store": "<domain>",
  "products_scored": 0,
  "avg_score": 0,
  "below_50_count": 0,
  "output_file": "completeness_<date>.csv"
}

Output Format

CSV file completeness_<YYYY-MM-DD>.csv with columns: product_id, title, score, has_description, image_count, has_seo_title, has_seo_description, has_barcode, has_cost, has_weight, missing_metafields

Error Handling

ErrorCauseRecovery
THROTTLEDAPI rate limit exceededWait 2 seconds, retry up to 3 times
No products match filterEmpty catalog or wrong filterExit with 0 results

Best Practices

  • Use this skill as a pre-launch gate — run before activating DRAFT products to ensure all required fields are filled.
  • Tune required_metafields to your store's specific needs (e.g., custom.material for apparel, custom.ingredients for food).
  • A score below 50 typically means a product is missing foundational content (description or images) and should be deprioritized from launch until fixed.
  • Run monthly to track catalog quality trends over time; improvements after a content sprint should be visible in the average score.

Signals

GitHub stars
188
Forks
19
Last commit
Aug 2026

ahel review

  • S4info
    community integration — published by 40rty-ai, not shopify

Automated review, not a security audit. Ruleset v1.

Advanced
Catalog kind
skill
Gateway key
shopify-admin-product-data-completeness-score
Source
github.com/40rty-ai/shopify-admin-skills