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

Shopify Admin Email Deliverability Audit

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

shopify-admin-email-deliverability-audit is a Shopify Admin skill that scans a store's customer emails and flags addresses that would hurt email deliverability.

About

A Shopify Admin skill that scans the customer list and flags email addresses likely to hurt deliverability: syntactically invalid, role accounts, disposable domains, and bounce-suspect patterns. It is read-only and can restrict the scan to customers who accept marketing. The output is a suppression list ready to import into an email platform. Developers run it before a marketing send to protect sender reputation.

  • Flags invalid, role, disposable, and bounce-suspect customer emails
  • Produces an import-ready suppression list
  • Read-only Shopify Admin customers query

Shopify Admin Email Deliverability Audit by the numbers

  • 2 all-time installs (skills.sh)
  • Ranked #1,839 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-email-deliverability-audit capabilities & compatibility

Free; requires an authenticated Shopify CLI session with read_customers scope.

Capabilities
email hygiene audit · deliverability check · customer data audit
Use cases
email · data analysis
Pricing
Free
From the docs

What shopify-admin-email-deliverability-audit says it does

Output is a suppression list ready to import into your email platform. Read-only — no mutations.
SKILL.md
Read-only skill — no mutations are executed. Safe to run at any time. No emails are sent, no marketing consent is changed.
SKILL.md
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-email-deliverability-audit

Add your badge

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

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

What it does

Scan a Shopify customer list for invalid, role, disposable, and bounce-suspect email addresses and produce a suppression list before a marketing send.

Who is it for?

Building a suppression list of risky customer emails before a marketing campaign.

Skip if: Sending email or changing marketing consent; it makes no mutations.

When should I use this skill?

Before a marketing email send, to protect sender reputation.

What you get

A suppression list flagging each risky address with its most severe deliverability issue.

  • Suppression list of flagged emails
  • Per-flag counts

By the numbers

  • 6 detection flags (invalid_syntax, role_account, disposable_domain, plus_alias, bounce_suspect, duplicate)
  • 9 default role-account local parts

Files

SKILL.mdMarkdownGitHub ↗

Purpose

Scans the entire customer list and flags addresses that will hurt email deliverability if included in marketing sends: syntactically invalid addresses, role accounts (info@, admin@, sales@), known disposable / temporary domains, and suspected hard-bounce patterns. Output is a suppression list ready to import into your email platform. 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)
marketing_consent_onlyboolnotrueOnly scan customers who currently accept marketing — those are the ones at risk of being mailed
disposable_domainsarraynobuilt-in listOverride built-in disposable-domain list
role_localpartsarrayno["info","admin","sales","support","contact","noreply","help","webmaster","postmaster"]Local-part prefixes to flag as role accounts
formatstringnohumanOutput format: human or json

Safety

ℹ️ Read-only skill — no mutations are executed. Safe to run at any time. No emails are sent, no marketing consent is changed.

Detection Rules

For each customer email, run these checks in order and assign one or more flags:

1. `invalid_syntax` — fails RFC 5322 local-part / domain validation, missing @, contains whitespace, double dots, leading/trailing dot 2. `role_account` — local part exactly matches a role_localparts entry (case-insensitive) 3. `disposable_domain` — domain matches the disposable-domain list (mailinator, guerrillamail, tempmail-style domains, etc.) 4. `plus_alias` — contains + in local part (informational; not a deliverability problem on its own, but useful for de-duplication) 5. `bounce_suspect` — heuristics: numeric-only local part, length > 64 chars, ALL-CAPS, repeated characters (aaaaa), keyboard rolls (asdfghjk) 6. `duplicate` — same normalized email already seen in the customer set

A customer can carry multiple flags; the most severe (invalid_syntax > bounce_suspect > disposable_domain > role_account > plus_alias) drives the recommended action.

Workflow Steps

1. OPERATION: customers — query Inputs: first: 250, select id, defaultEmailAddress { emailAddress, marketingState }, numberOfOrders, tags, pagination cursor. If marketing_consent_only: true, filter query: "email_marketing_state:subscribed" Expected output: All targeted customers with email; paginate until hasNextPage: false

2. Run detection rules over each email; collect flags

3. Aggregate counts per flag, build suppression list

GraphQL Operations

# customers:query — validated against api_version 2025-01
query DeliverabilityAudit($query: String, $after: String) {
  customers(first: 250, after: $after, query: $query) {
    edges {
      node {
        id
        displayName
        defaultEmailAddress {
          emailAddress
          marketingState
        }
        numberOfOrders
        amountSpent {
          amount
          currencyCode
        }
        tags
        createdAt
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}

Session Tracking

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

On start, emit:

╔══════════════════════════════════════════════╗
║  SKILL: Email Deliverability Audit           ║
║  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):

══════════════════════════════════════════════
EMAIL DELIVERABILITY AUDIT
  Customers scanned:       <n>
  Subscribed customers:    <n>
  ─────────────────────────────
  Invalid syntax:          <n> (<pct>%)   🔴 suppress
  Role accounts:           <n> (<pct>%)   ⚠️ suppress
  Disposable domains:      <n> (<pct>%)   ⚠️ suppress
  Bounce-suspect patterns: <n> (<pct>%)   ⚠️ review
  Plus aliases:            <n> (<pct>%)   ℹ️ informational
  Duplicates:              <n> (<pct>%)   ℹ️ informational

  Recommended suppression: <n>  (<pct>% of subscribed)
  Output: deliverability_audit_<date>.csv
══════════════════════════════════════════════

For format: json, emit:

{
  "skill": "email-deliverability-audit",
  "store": "<domain>",
  "customers_scanned": 0,
  "flags": {
    "invalid_syntax": 0,
    "role_account": 0,
    "disposable_domain": 0,
    "bounce_suspect": 0,
    "plus_alias": 0,
    "duplicate": 0
  },
  "recommended_suppressions": 0,
  "output_file": "deliverability_audit_<date>.csv"
}

Output Format

CSV file deliverability_audit_<YYYY-MM-DD>.csv with columns: customer_id, email, flags, recommended_action, marketing_state, order_count, total_spent, created_at

recommended_action is one of: suppress, review, keep.

Error Handling

ErrorCauseRecovery
THROTTLEDAPI rate limit exceededWait 2 seconds, retry up to 3 times
Customer with no emailPhone-only / POS accountSkip, do not include in suppression list
Disposable list out of dateNew temp-mail domain not in built-in listCaller can override via disposable_domains parameter
Unicode local partsInternationalized email addressesNormalize via NFC; do not flag valid IDN domains

Best Practices

  • Run before every large promotional send — high invalid / bounce rates above 2% put your sending domain reputation at risk.
  • Treat role_account flags as soft-suppression: those addresses rarely consent to marketing meaningfully and frequently mark mail as spam.
  • Re-audit quarterly even if the customer list is static — domain reputation lists change, and disposable-email providers add new domains.
  • Pair with marketing-consent-report to confirm consent state aligns with what your email service provider has on file.
  • Hand the resulting suppression CSV to your email service provider's import-suppression-list feature; do not silently delete customers from Shopify based on this audit.

Related skills

FAQ

Does it change marketing consent or send emails?

No. It is read-only: no emails are sent and no marketing consent is changed.

Can I limit it to subscribed customers?

Yes. marketing_consent_only defaults to true, scanning only customers who currently accept marketing.

This week in AI coding

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

unsubscribe anytime.