AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Shopify Admin Customer Timeline Export

skill-40rty-ai-shopify-admin-skills-shopify-admin-customer-timeline-export · by 40RTY-ai

Read-only: exports a complete chronological history for a single customer — orders, refunds, returns, addresses, notes, tags, marketing consent, and lifetime spend — as one consolidated CSV.

No reviews yet
0 installs
37 views
0.0% view→install

Install

$ agentstack add skill-40rty-ai-shopify-admin-skills-shopify-admin-customer-timeline-export

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-40rty-ai-shopify-admin-skills-shopify-admin-customer-timeline-export)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Shopify Admin Customer Timeline Export? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Purpose

Produces a complete, chronological dossier for a single customer. Pulls the customer record (identity, marketing consent, lifetime totals, tags, notes, addresses) and every order they've placed (with line items, fulfillments, refunds, and returns) and emits one merged CSV plus a human-readable timeline. Used by support agents handling escalations, by data export requests, and as the source-of-truth dump before an account merge or deletion. Read-only — no mutations.

Prerequisites

  • Authenticated Shopify CLI session: shopify store auth --store --scopes read_customers,read_orders
  • API scopes: read_customers, read_orders

Parameters

| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | store | string | yes | — | Store domain (e.g., mystore.myshopify.com) | | format | string | no | human | Output format: human or json | | customerid | string | yes | — | GID of the customer (e.g., gid://shopify/Customer/12345) | | includelineitems | bool | no | true | Include per-line-item rows in the CSV (one row per line item) | | includerefunds | bool | no | true | Include refunds and returns as separate rows in the timeline | | max_orders | integer | no | 250 | Cap on orders fetched (most recent first); 0 = no cap |

Safety

> ℹ️ Read-only skill — no mutations are executed. Safe to run at any time. Output contains personally identifiable information — handle the resulting CSV with the same care as any customer export and delete it once the support case is closed.

Workflow Steps

  1. OPERATION: customer — query

Inputs: id: , select identity fields, lifetime aggregates, tags, note, marketing consent, addresses, createdAt Expected output: Customer header record; abort with a clear error if null

  1. OPERATION: orders — query

Inputs: query: "customer_id:", first: 250, sortKey: CREATED_AT, reverse: true, select id, name, createdAt, processedAt, displayFinancialStatus, displayFulfillmentStatus, totalPriceSet, totalShippingPriceSet, totalDiscountsSet, lineItems(first: 50) { node { id title quantity sku discountedTotalSet variant { sku } } }, fulfillments { id status deliveredAt trackingInfo { number url } }, refunds { id createdAt totalRefundedSet refundLineItems(first: 50) { node { lineItem { id title } quantity subtotalSet } } }, pagination cursor (stop at max_orders if set) Expected output: Full chronological order list with embedded refunds and fulfillments

  1. Build the merged timeline events: customer creation → each order → each refund/return per order. Sort all events by datetime ascending for the human-readable summary; the CSV is also sorted ascending.

GraphQL Operations

# customer:query — validated against api_version 2025-01
query CustomerHeaderForTimeline($id: ID!) {
  customer(id: $id) {
    id
    displayName
    firstName
    lastName
    defaultEmailAddress { emailAddress }
    phone
    note
    tags
    numberOfOrders
    amountSpent { amount currencyCode }
    emailMarketingConsent { marketingState marketingOptInLevel consentUpdatedAt }
    smsMarketingConsent { marketingState marketingOptInLevel consentUpdatedAt }
    addresses(first: 25) {
      id firstName lastName address1 address2 city provinceCode countryCodeV2 zip phone
    }
    defaultAddress { id }
    createdAt
    updatedAt
  }
}
# orders:query — validated against api_version 2025-01
query CustomerOrdersForTimeline($query: String!, $after: String) {
  orders(first: 250, after: $after, query: $query, sortKey: CREATED_AT, reverse: true) {
    edges {
      node {
        id
        name
        createdAt
        processedAt
        displayFinancialStatus
        displayFulfillmentStatus
        cancelledAt
        cancelReason
        totalPriceSet { shopMoney { amount currencyCode } }
        totalShippingPriceSet { shopMoney { amount currencyCode } }
        totalDiscountsSet { shopMoney { amount currencyCode } }
        lineItems(first: 50) {
          edges { node {
            id title quantity sku
            discountedTotalSet { shopMoney { amount currencyCode } }
            variant { id sku }
          } }
        }
        fulfillments {
          id status deliveredAt
          trackingInfo { number url company }
        }
        refunds {
          id
          createdAt
          totalRefundedSet { shopMoney { amount currencyCode } }
          refundLineItems(first: 50) {
            edges { node {
              quantity
              lineItem { id title }
              subtotalSet { shopMoney { amount currencyCode } }
            } }
          }
        }
      }
    }
    pageInfo { hasNextPage endCursor }
  }
}

Session Tracking

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

On start, emit:

╔══════════════════════════════════════════════╗
║  SKILL: Customer Timeline Export             ║
║  Store:                        ║
║  Started:              ║
╚══════════════════════════════════════════════╝

After each step, emit:

[N/TOTAL]   
          → Params: 
          → Result: 

On completion, emit:

For format: human (default):

══════════════════════════════════════════════
CUSTOMER TIMELINE
  Customer:         ()  ID: 
  Joined:          
  Lifetime spend:  $    Total orders:    Refunds total: $
  Tags:            
  Email consent:    (since )   SMS consent:  (since )

  Recent timeline (most recent first):
      ORDER     $   / 
      REFUND      $
      RETURN      items: 
    ...
  Output: customer_timeline__.csv
══════════════════════════════════════════════

For format: json, emit:

{
  "skill": "customer-timeline-export",
  "store": "",
  "customer_id": "",
  "header": {
    "name": "", "email": "", "phone": "",
    "joined": "", "lifetime_spend": 0, "currency": "USD",
    "total_orders": 0, "tags": [],
    "email_consent": "", "sms_consent": ""
  },
  "totals": { "orders": 0, "refunds_count": 0, "refunds_amount": 0 },
  "output_file": "customer_timeline__.csv"
}

Output Format

CSV file customer_timeline__.csv with columns: event_datetime, event_type, event_id, order_name, line_item_title, sku, quantity, amount, currency, financial_status, fulfillment_status, tracking_number, notes

Event types include: customer_created, order_placed, order_fulfilled, order_delivered, order_cancelled, refund_issued, return_initiated.

Error Handling

| Error | Cause | Recovery | |-------|-------|----------| | THROTTLED | API rate limit exceeded | Wait 2 seconds, retry up to 3 times | | Customer not found | Wrong GID | Use order-lookup-and-summary to find a recent order, then read customer.id | | 0 orders | New account or guest-only | Emit header-only timeline | | Order anonymized | GDPR data wipe | Skip line items; emit placeholder row | | Pagination beyond max_orders | Cap reached | Stop, set truncated: true |

Best Practices

  • Run before any merge, deletion, or escalation — pre-state is unreconstructable once a merge commits.
  • For high-volume customers set max_orders: 50; full lifetime is rarely needed for one support case.
  • CSV is event-sorted so downstream pivoting works without reshaping.
  • Pair with customer-merge: run on both winner and loser before merging for a permanent pre-merge record.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.