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

Shopify Admin Chargeback Watchlist Tagger

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

shopify-admin-chargeback-watchlist-tagger is a Claude Code skill that identifies Shopify customers with disputed or charged-back orders and tags their records for proactive review on future orders.

About

This skill scans a Shopify store's historical orders for chargebacks or disputes and tags the associated customer records with a configurable watchlist tag. Store operators use it to flag repeat-chargeback customers so future orders can be filtered or held for manual review. It runs against the Shopify Admin GraphQL API, defaults to dry_run mode, and excludes won disputes to avoid false positives.

  • Scans historical Shopify orders for disputes and tags at-risk customers via customerUpdate
  • Excludes won disputes by default and defaults to dry_run:true before applying tags
  • Outputs a CSV watchlist so future orders from flagged customers can be held for review

Shopify Admin Chargeback Watchlist Tagger 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-chargeback-watchlist-tagger capabilities & compatibility

Free skill; requires an authenticated Shopify store session (read_orders, read_customers, write_customers scopes).

Capabilities
customer tagging · chargeback review · order audit · csv export
Works with
stripe
Use cases
data analysis
Pricing
Bring your own API key
From the docs

What shopify-admin-chargeback-watchlist-tagger says it does

Identifies customers with disputed or charged-back orders and tags their customer record for proactive review on future orders.
SKILL.md
Reduces repeated chargeback losses without blocking customers outright. Defaults to `dry_run: true`.
SKILL.md
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-chargeback-watchlist-tagger

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

Tag Shopify customers who have prior chargebacks or disputes so ops teams can proactively review their future orders.

Who is it for?

Shopify merchants who want to reduce repeat chargeback losses by flagging risky customers without blocking them outright.

Skip if: Real-time fraud scoring at checkout or blocking orders automatically; it only tags for later manual review.

When should I use this skill?

You need to build a watchlist of Shopify customers with a history of chargebacks or disputes.

What you get

Customers with lost or open disputes are tagged with a chargeback-history label and exported to a CSV watchlist.

  • CSV watchlist chargeback_watchlist_<date>.csv
  • customer records tagged with chargeback-history

By the numbers

  • 730-day default lookback window
  • queries orders in batches of 250
  • 3 retry attempts on THROTTLED errors

Files

SKILL.mdMarkdownGitHub ↗

Purpose

Scans historical orders for any associated chargeback or dispute, then tags the customer record with chargeback-history (configurable). Future orders from these customers can be filtered or held for manual review by ops. Reduces repeated chargeback losses without blocking customers outright. Defaults to dry_run: true.

Prerequisites

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

Parameters

ParameterTypeRequiredDefaultDescription
storestringyesStore domain (e.g., mystore.myshopify.com)
days_backintegerno730Historical window to scan for disputes (2 years default)
watchlist_tagstringnochargeback-historyTag applied to flagged customers
include_won_disputesboolnofalseIf false, only tag customers whose disputes were lost or are open
dry_runboolnotruePreview without applying tags
formatstringnohumanOutput format: human or json

Safety

⚠️ customerUpdate modifies customer tags that are visible to staff and may drive segmentation rules. Tag a customer incorrectly and you may downgrade their experience or block their orders. Run with dry_run: true first and review the list before committing. Won disputes (where the merchant won) are excluded by default to avoid false positives.

Workflow Steps

1. OPERATION: orders — query Inputs: query: "created_at:>='<NOW - days_back days>' chargeback_status:*" (any chargeback state), first: 250, select disputes { id, status, initiatedAs, finalizedOn }, customer { id, displayName, tags, defaultEmailAddress { emailAddress } }, totalPriceSet, pagination cursor Expected output: All orders that have at least one dispute in the window

2. Group disputes by customer. For each customer:

  • Skip if every dispute has status WON and include_won_disputes: false
  • Skip if customer already carries watchlist_tag
  • Otherwise add to tagging queue

3. OPERATION: customerUpdate — mutation Inputs: input: { id, tags: [<existing tags>, watchlist_tag] } for each queued customer Expected output: Updated customer with new tag list; userErrors

4. If dry_run: true, do not call mutation — just report the queue.

GraphQL Operations

# orders:query — validated against api_version 2025-01
query OrdersWithDisputes($query: String!, $after: String) {
  orders(first: 250, after: $after, query: $query) {
    edges {
      node {
        id
        name
        createdAt
        totalPriceSet {
          shopMoney {
            amount
            currencyCode
          }
        }
        disputes {
          id
          status
          initiatedAs
          finalizedOn
        }
        customer {
          id
          displayName
          defaultEmailAddress {
            emailAddress
          }
          numberOfOrders
          amountSpent {
            amount
            currencyCode
          }
          tags
        }
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}
# customerUpdate:mutation — validated against api_version 2025-01
mutation TagChargebackCustomer($input: CustomerInput!) {
  customerUpdate(input: $input) {
    customer {
      id
      tags
    }
    userErrors {
      field
      message
    }
  }
}

Session Tracking

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

On start, emit:

╔══════════════════════════════════════════════╗
║  SKILL: Chargeback Watchlist Tagger          ║
║  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):

══════════════════════════════════════════════
CHARGEBACK WATCHLIST  (<days_back> days)
  Orders with disputes:    <n>
  Unique customers:        <n>
  Disputes lost/open:      <n>
  Disputes won (excluded): <n>
  Already tagged:          <n>
  ─────────────────────────────
  Customers to tag:        <n>
  Tags applied:            <n>   (or [DRY RUN] would apply)
  Errors:                  <n>
  Output: chargeback_watchlist_<date>.csv
══════════════════════════════════════════════

For format: json, emit:

{
  "skill": "chargeback-watchlist-tagger",
  "store": "<domain>",
  "dry_run": true,
  "orders_with_disputes": 0,
  "unique_customers": 0,
  "customers_to_tag": 0,
  "tags_applied": 0,
  "errors": 0,
  "output_file": "chargeback_watchlist_<date>.csv"
}

Output Format

CSV file chargeback_watchlist_<YYYY-MM-DD>.csv with columns: customer_id, email, name, dispute_count, latest_dispute_status, latest_dispute_initiated_as, total_disputed_amount, currency, existing_tags, tag_to_apply, action

Error Handling

ErrorCauseRecovery
THROTTLEDAPI rate limit exceededWait 2 seconds, retry up to 3 times
userErrors on customerUpdateCustomer not found / archivedLog error, skip, continue
Order without a customerGuest checkout disputeCannot tag — record in CSV with action: skipped_guest
Dispute with status nullVery recent dispute, not yet categorizedTreat as open / not won

Best Practices

  • Always start with dry_run: true and audit the CSV — false positives damage customer trust.
  • Combine watchlist_tag with a Shopify Flow or order-routing rule that holds new orders from tagged customers for manual approval.
  • Re-run quarterly so the watchlist stays current — chargeback patterns change as your store and customer base grow.
  • Keep include_won_disputes: false (default). If you won, the bank ruled in your favor — do not penalize the customer.
  • For repeat offenders (multiple disputes), consider escalating beyond a tag — review manually before allowing further orders.

Related skills

FAQ

Does it block customers with chargebacks?

No. It only tags the customer record so ops can filter or hold future orders for manual review; it does not block anyone.

Are won disputes included?

No. By default it excludes disputes the merchant won (include_won_disputes:false) to avoid false positives, and defaults to dry_run:true.

Automation & Workflowsecommercepaymentsfinance

This week in AI coding

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

unsubscribe anytime.