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

Shopify Admin Marketing Consent Report

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

shopify-admin-marketing-consent-report is a read-only Claude Code skill that audits email and SMS marketing consent status across a Shopify customer base.

About

This Claude Code skill scans all Shopify customer records and reports the breakdown of email and SMS marketing consent (subscribed, unsubscribed, pending, never asked). Marketing and compliance teams use it for GDPR/CAN-SPAM reviews and to size the addressable marketing audience. It is read-only and runs no mutations.

  • Audits email and SMS marketing consent status across the customer base
  • Reports subscribed, unsubscribed, pending, and never-asked breakdown for compliance and segmentation
  • Read-only; runs a single customers query with consent fields

Shopify Admin Marketing Consent Report by the numbers

  • 7 all-time installs (skills.sh)
  • Ranked #702 of 853 Sales & Marketing skills by installs in the Skillselion catalog
  • Data as of Aug 1, 2026 (Skillselion catalog sync)
At a glance

shopify-admin-marketing-consent-report capabilities & compatibility

Free; needs the read_customers scope on a Shopify CLI session.

Capabilities
marketing consent audit · compliance report · audience sizing
Use cases
marketing
Pricing
Free
From the docs

What shopify-admin-marketing-consent-report says it does

Scans all customer records and reports the breakdown of email and SMS marketing consent status (subscribed, unsubscribed, pending, never asked).
SKILL.md
Used for compliance audits, GDPR/CAN-SPAM reviews, and understanding the addressable marketing audience.
SKILL.md
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-marketing-consent-report

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

Report email and SMS marketing consent breakdown across Shopify customers for compliance.

Who is it for?

Compliance audits and sizing the addressable marketing audience by consent status.

Skip if: Changing consent state or sending marketing; it runs no mutations.

When should I use this skill?

You need a breakdown of who has opted into email or SMS marketing before a campaign or compliance review.

What you get

A consent breakdown by channel showing addressable, at-risk, and unreachable audiences.

  • Consent breakdown by channel: addressable (subscribed), at-risk (pending), unreachable (unsubscribed/not asked)

By the numbers

  • 4 consent states audited (subscribed, unsubscribed, pending, never asked)
  • Single customers query workflow

Files

SKILL.mdMarkdownGitHub ↗

Purpose

Scans all customer records and reports the breakdown of email and SMS marketing consent status (subscribed, unsubscribed, pending, never asked). Used for compliance audits, GDPR/CAN-SPAM reviews, and understanding the addressable marketing audience. Read-only — no mutations.

Prerequisites

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

Parameters

ParameterTypeRequiredDefaultDescription
storestringyesStore domain (e.g., mystore.myshopify.com)
channelstringnobothConsent channel to audit: email, sms, or both
formatstringnohumanOutput format: human or json

Safety

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

Workflow Steps

1. OPERATION: customers — query Inputs: first: 250, select emailMarketingConsent { marketingState, consentUpdatedAt }, smsMarketingConsent { marketingState, consentUpdatedAt }, pagination cursor Expected output: All customers with consent states; paginate until hasNextPage: false

2. Count customers by consent state for each channel

3. Calculate: addressable audience (subscribed), at-risk (pending), unreachable (unsubscribed/not asked)

GraphQL Operations

# customers:query — validated against api_version 2025-01
query MarketingConsentAudit($after: String) {
  customers(first: 250, after: $after) {
    edges {
      node {
        id
        displayName
        defaultEmailAddress {
          emailAddress
        }
        emailMarketingConsent {
          marketingState
          consentUpdatedAt
          marketingOptInLevel
        }
        smsMarketingConsent {
          marketingState
          consentUpdatedAt
        }
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}

Session Tracking

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

On start, emit:

╔══════════════════════════════════════════════╗
║  SKILL: Marketing Consent Report             ║
║  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):

══════════════════════════════════════════════
MARKETING CONSENT REPORT
  Total customers: <n>

  Email Marketing:
    Subscribed:    <n>  (<pct>%)  ← addressable
    Unsubscribed:  <n>  (<pct>%)
    Pending:       <n>  (<pct>%)
    Not asked:     <n>  (<pct>%)

  SMS Marketing:
    Subscribed:    <n>  (<pct>%)
    Unsubscribed:  <n>  (<pct>%)
    Not asked:     <n>  (<pct>%)
  Output: consent_audit_<date>.csv
══════════════════════════════════════════════

For format: json, emit:

{
  "skill": "marketing-consent-report",
  "store": "<domain>",
  "total_customers": 0,
  "email": { "subscribed": 0, "unsubscribed": 0, "pending": 0, "not_asked": 0 },
  "sms": { "subscribed": 0, "unsubscribed": 0, "not_asked": 0 },
  "output_file": "consent_audit_<date>.csv"
}

Output Format

CSV file consent_audit_<YYYY-MM-DD>.csv with columns: customer_id, email, email_marketing_state, email_consent_updated_at, sms_marketing_state, sms_consent_updated_at

Error Handling

ErrorCauseRecovery
THROTTLEDAPI rate limit exceededWait 2 seconds, retry up to 3 times
No customersEmpty storeExit with 0 results

Best Practices

  • "Subscribed" is your addressable marketing audience — a low subscription rate may indicate checkout opt-in is not prominent enough.
  • "Pending" means a customer provided their email but has not confirmed consent — this is common for double opt-in flows.
  • Run before major campaigns to get an accurate count of the addressable audience; your ESP will show a different number if it has additional unsubscribes not synced back to Shopify.
  • GDPR compliance note: customers in the EU with marketingOptInLevel: SINGLE_OPT_IN may require a re-consent campaign depending on your legal basis for processing.

Related skills

FAQ

Which channels does it cover?

Email, SMS, or both, controlled by the channel parameter (default both).

Is it safe to run anytime?

Yes. It is read-only and executes no mutations.

This week in AI coding

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

unsubscribe anytime.