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

Shopify Admin Customer Timeline Export

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

shopify-admin-customer-timeline-export is a read-only Claude Code skill that exports one Shopify customer's complete chronological history (orders, refunds, returns, addresses, notes, consent, lifetime spend) as a single

About

This Claude Code skill builds a complete chronological dossier for one Shopify customer, pulling their record plus every order with line items, fulfillments, refunds, and returns into a single merged CSV and human-readable timeline. Support agents run it when handling escalations, data-export requests, or before an account merge or deletion. It is read-only, so it is safe to run at any time.

  • Exports a single customer's full chronological history to one consolidated CSV
  • Pulls orders, refunds, returns, addresses, notes, tags, marketing consent, and lifetime spend
  • Read-only, with no mutations executed

Shopify Admin Customer Timeline Export 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-customer-timeline-export capabilities & compatibility

Free skill; requires an authenticated Shopify store session with read_customers and read_orders

Capabilities
customer history export · support timeline · data export
Use cases
data analysis · documentation
Runs
Runs locally
Pricing
Free
From the docs

What shopify-admin-customer-timeline-export says it does

Produces a complete, chronological dossier for a single customer.
SKILL.md
Used by support agents handling escalations, by data export requests, and as the source-of-truth dump before an account merge or deletion.
SKILL.md
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-customer-timeline-export

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

Export a single Shopify customer's complete order and account history as a consolidated timeline CSV.

Who is it for?

Support escalations, data-export (DSAR) requests, and pre-merge or pre-deletion customer dumps

Skip if: Bulk exports across many customers or any write/merge operation

When should I use this skill?

A support case or export request needs one customer's full history in one file

What you get

One merged CSV and timeline capturing every event for the customer.

  • Consolidated customer CSV
  • Human-readable chronological timeline

By the numbers

  • 2 GraphQL operations (customer query, orders query)
  • max_orders defaults to 250 per run

Files

SKILL.mdMarkdownGitHub ↗

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 <domain> --scopes read_customers,read_orders
  • API scopes: read_customers, read_orders

Parameters

ParameterTypeRequiredDefaultDescription
storestringyesStore domain (e.g., mystore.myshopify.com)
formatstringnohumanOutput format: human or json
customer_idstringyesGID of the customer (e.g., gid://shopify/Customer/12345)
include_line_itemsboolnotrueInclude per-line-item rows in the CSV (one row per line item)
include_refundsboolnotrueInclude refunds and returns as separate rows in the timeline
max_ordersintegerno250Cap 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: <customer_id>, select identity fields, lifetime aggregates, tags, note, marketing consent, addresses, createdAt Expected output: Customer header record; abort with a clear error if null

2. OPERATION: orders — query Inputs: query: "customer_id:<numeric_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

3. 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: <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):

══════════════════════════════════════════════
CUSTOMER TIMELINE
  Customer:        <name> (<email>)  ID: <customer_id>
  Joined:          <createdAt>
  Lifetime spend:  $<amount> <currency>   Total orders: <n>   Refunds total: $<amount>
  Tags:            <list>
  Email consent:   <state> (since <date>)   SMS consent: <state> (since <date>)

  Recent timeline (most recent first):
    <date>  ORDER   <name>  $<amount>  <financial> / <fulfillment>
    <date>  REFUND  <id>    $<amount>
    <date>  RETURN  <id>    items: <n>
    ...
  Output: customer_timeline_<customer_id>_<date>.csv
══════════════════════════════════════════════

For format: json, emit:

{
  "skill": "customer-timeline-export",
  "store": "<domain>",
  "customer_id": "<gid>",
  "header": {
    "name": "<string>", "email": "<string>", "phone": "<string>",
    "joined": "<ISO8601>", "lifetime_spend": 0, "currency": "USD",
    "total_orders": 0, "tags": [],
    "email_consent": "<state>", "sms_consent": "<state>"
  },
  "totals": { "orders": 0, "refunds_count": 0, "refunds_amount": 0 },
  "output_file": "customer_timeline_<customer_id>_<date>.csv"
}

Output Format

CSV file customer_timeline_<customer_id>_<YYYY-MM-DD>.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

ErrorCauseRecovery
THROTTLEDAPI rate limit exceededWait 2 seconds, retry up to 3 times
Customer not foundWrong GIDUse order-lookup-and-summary to find a recent order, then read customer.id
0 ordersNew account or guest-onlyEmit header-only timeline
Order anonymizedGDPR data wipeSkip line items; emit placeholder row
Pagination beyond max_ordersCap reachedStop, 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.

Related skills

FAQ

Is this skill safe to run in production?

Yes, it is read-only and executes no mutations, so it is safe to run at any time.

What does the export contain?

Identity, marketing consent, lifetime totals, tags, notes, addresses, and every order with line items, fulfillments, refunds, and returns.

This week in AI coding

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

unsubscribe anytime.