Measure Shopify abandoned checkouts and how many you win back

Every Monday: how many Shopify checkouts were abandoned last week, the value left behind, and how many from the week before were recovered.

Runs
Mondays at 7:00
Uses
Shopify
Posts
Stat tile

From your apps to your board

How the skill works: your agent reads last week's abandoned checkouts from Shopify; store domain from What you tell it, mondays at 7:00, and gives you abandoned checkout value and the report in the chat.

Reads

  • ShopifyLast week's abandoned checkouts
  • What you tell itStore domain
reads
Your agentClaude Code, Codex, Cursor or GeminiMondays at 7:00
posts

You get

  • Abandoned checkout valueA stat tile on your board, with its trend
  • The report in the chatEvery run, with or without Briefkin

What you get

  • Abandoned value last week, with an 8-week trend.
  • Abandoned checkouts: count and average value.
  • Recovery rate and recovered value, measured on the week before so reminders had time to work.
  • Products that appear most in abandoned checkouts.
  • Value bands, when most of the loss sits in large carts.

The card on the right is a sample. Yours shows your own numbers and updates in place every run.

What lands on your board

Acme StoreAbandoned checkout value$14,380+3% vs previous period, worsevs last report
Checkouts212
Recovery rate10.6%
Recovered$1,512
An example with made-up numbers. Your agent posts your real ones.

What it does

An abandoned checkout is a customer who got as far as giving you an email address and then left. Shopify records each one and sends the reminder, but the Abandoned checkouts page is a list, not a trend, and the recovery rate is nowhere on it.

The agent counts them every week, totals the value left in carts, checks how many from the week before were completed in the end, and lists the products that keep coming up. Founders see the money on the table; marketers see whether the recovery emails earn their place.

How it works

  1. 1Pull last week's abandoned checkouts

    Query the Admin GraphQL API abandonedCheckouts(first: 250, query: "created_at:>=<last Monday>"), paging with pageInfo.endCursor, and keep createdAt, completedAt, totalPriceSet.shopMoney.amount and the lineItems titles and quantities.

  2. 2Check the week before for recoveries

    Run the same query for checkouts created 8 to 14 days ago. Those with a completedAt were recovered (the recovery_state:recovered query filter gives the same set); dividing them by the total gives a recovery rate on checkouts that had a full week to come back.

  3. 3

    3Total and group

    Sum and count last week's checkouts, and group line items by product to find the ones abandoned most. Bucket by cart value too: a store that loses most of its value above $150 has a shipping or payment question.

  4. 4

    4Post the tile

    Abandoned value is the number, where lower is better, with 8 weeks of history. The glance shows the count, recovery rate and recovered value; the card opens to the products table.

  5. Post it to the board

    With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.

Install and run it

Pick your agent, where the data comes from and how to schedule it; the commands below follow.

Agent
Data
Schedule
  1. Install the skill

    One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.

    shellcurl -fsSL https://briefkin.dev/skills/shopify-abandoned-checkouts/install | sh
  2. Run it

    Ask Claude Code:

    promptRun the shopify-abandoned-checkouts skill

    Or paste the prompt instead of installing:

    promptUsing the Shopify Admin GraphQL API (abandonedCheckouts), report last week's abandoned checkouts for my store: count, total value (totalPriceSet) and average value, compared with the previous weeks. For checkouts created 8 to 14 days ago, work out the recovery rate (the share with a completedAt date) and the recovered value. Group line items to show the 5 products that appear most in abandoned checkouts, with checkouts and value. Tell me whether most of the abandoned value sits in carts over $150, and end with one thing to try.
  3. Put it on a schedule

    Mondays at 7:00, from cron on any machine where Claude Code is signed in:

    crontab0 7 * * 1 claude -p "Run the shopify-abandoned-checkouts skill"

    Add it with crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.

  4. Send it to your board

    Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a stat tile. How setup works

View the SKILL.mdRaw file
SKILL.md---
name: shopify-abandoned-checkouts
description: "Every Monday: how many Shopify checkouts were abandoned last week, the value left behind, and how many from the week before were recovered. Use when the user asks for this, or when it runs on a schedule."
---

# Shopify abandoned checkouts

Every Monday: how many Shopify checkouts were abandoned last week, the value left behind, and how many from the week before were recovered.

An abandoned checkout is a customer who got as far as giving you an email address and then left. Shopify records each one and sends the reminder, but the Abandoned checkouts page is a list, not a trend, and the recovery rate is nowhere on it.

The agent counts them every week, totals the value left in carts, checks how many from the week before were completed in the end, and lists the products that keep coming up. Founders see the money on the table; marketers see whether the recovery emails earn their place.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- A Shopify custom app or connector with the `read_orders` scope, which covers abandoned checkouts; add `read_customers` only if you want names in the report.
- The Admin API access token in `SHOPIFY_ADMIN_TOKEN` with the store's `myshopify.com` domain, or a Shopify MCP server the agent can call.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **Pull last week's abandoned checkouts** (Shopify): Query the Admin GraphQL API `abandonedCheckouts(first: 250, query: "created_at:>=<last Monday>")`, paging with `pageInfo.endCursor`, and keep `createdAt`, `completedAt`, `totalPriceSet.shopMoney.amount` and the `lineItems` titles and quantities.
2. **Check the week before for recoveries** (Shopify): Run the same query for checkouts created 8 to 14 days ago. Those with a `completedAt` were recovered (the `recovery_state:recovered` query filter gives the same set); dividing them by the total gives a recovery rate on checkouts that had a full week to come back.
3. **Total and group**: Sum and count last week's checkouts, and group line items by product to find the ones abandoned most. Bucket by cart value too: a store that loses most of its value above $150 has a shipping or payment question.
4. **Post the tile**: Abandoned value is the number, where lower is better, with 8 weeks of history. The glance shows the count, recovery rate and recovered value; the card opens to the products table.

## Route B: the browser

### What you need

- Signed in to the Shopify admin as a staff member with the Orders permission, which includes abandoned checkouts, and with Export allowed.

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://admin.shopify.com/checkouts. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **Open Abandoned checkouts for last week**: Open `https://admin.shopify.com/checkouts` (Orders, then `Abandoned checkouts`; pick the store first if you have several). Add a `Date` filter from last Monday to last Sunday and read the number of checkouts and the `Total` column.
2. **Export when the list is long**: The list shows 50 checkouts per page. Over about 100, click `Export`, choose the current filter and CSV; the file includes line items, which the next step needs.
3. **Measure recovery on the week before**: Change the date filter to 8 to 14 days ago and add `Recovery status` `Recovered`. Recovered count over the total for that range is the recovery rate; sum their totals for recovered value.
4. **Group products and value bands**: From the export (or by opening checkouts), count how often each product appears and its value, and count checkouts over $150 with their share of the value.
5. **Write it up**: Abandoned value and count for last week, recovery rate and recovered value for the week before, the top 5 products, the value bands, and one thing to try.

Note: Shopify only records a checkout once the shopper enters an email or phone number, and deletes abandoned checkouts older than three months, so the history in the UI is short. Recovered means the order was completed by any route, not only through the reminder email.

## The report

- **Abandoned value** last week, with an 8-week trend.
- **Abandoned checkouts**: count and average value.
- **Recovery rate** and recovered value, measured on the week before so reminders had time to work.
- **Products** that appear most in abandoned checkouts.
- **Value bands**, when most of the loss sits in large carts.

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "shopify-abandoned-checkouts/<date of this run, e.g. 2026-10-16>",
  "item_key": "shopify-abandoned-checkouts",
  "project": "Acme Store",
  "source": "Shopify abandoned checkouts skill",
  "kind": "metric",
  "title": "$14,380 left in abandoned checkouts last week",
  "metric": {
    "label": "Abandoned checkout value",
    "value": 14380,
    "prefix": "$",
    "better": "lower",
    "period_start": "<start of the period, ISO 8601>",
    "period_end": "<end of the period, ISO 8601>"
  },
  "glance": {
    "type": "Grid",
    "props": {
      "columns": 3
    },
    "children": [
      {
        "type": "Stat",
        "props": {
          "label": "Checkouts",
          "value": 212,
          "better": "lower"
        }
      },
      {
        "type": "Stat",
        "props": {
          "label": "Recovery rate",
          "value": 10.6,
          "unit": "%"
        }
      },
      {
        "type": "Stat",
        "props": {
          "label": "Recovered",
          "value": 1512,
          "prefix": "$"
        }
      }
    ]
  },
  "widget": [
    {
      "type": "Table",
      "props": {
        "columns": [
          "Product",
          "Checkouts",
          "Value"
        ],
        "align": [
          "left",
          "right",
          "right"
        ],
        "rows": [
          [
            "Merino crew sweater",
            41,
            "$3,690"
          ],
          [
            "Waxed canvas tote",
            33,
            "$1,980"
          ],
          [
            "Leather card holder",
            29,
            "$1,015"
          ],
          [
            "Wool beanie",
            24,
            "$720"
          ],
          [
            "Linen shirt",
            18,
            "$1,170"
          ]
        ]
      }
    },
    {
      "type": "Callout",
      "props": {
        "text": "Carts over $150 are 38 of the 212 checkouts but $7,020 of the value. Check what shipping costs at that size before blaming the reminder emails.",
        "tone": "warn"
      }
    }
  ],
  "size": "md"
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

Set `period_start` and `period_end` to the window the number covers: the tile names it from them ("Last 7 days", "Today", "This month"). For a count right now (open items, a balance), send `"period_label": ""` so no period shows; for another name, send it as `period_label` (at most 24 characters).

## Run it on a schedule

Suggested: Mondays at 7:00 (`0 7 * * 1`). From cron, with the agent signed in on that machine:

```bash
0 7 * * 1 claude -p "Run the shopify-abandoned-checkouts skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/shopify-abandoned-checkouts#schedule

Source: https://briefkin.dev/skills/shopify-abandoned-checkouts

What your agent needs

  • A Shopify custom app or connector with the read_orders scope, which covers abandoned checkouts; add read_customers only if you want names in the report.

  • The Admin API access token in SHOPIFY_ADMIN_TOKEN with the store's myshopify.com domain, or a Shopify MCP server the agent can call.

Connecting Shopify

  1. Shopify AI Toolkit. Shopify's plugins for Claude Code, Codex and Cursor run store tasks through Shopify CLI's authenticated store context. Its Dev MCP server (npx -y @shopify/dev-mcp@latest) covers docs and API schemas, not your store's orders; for store data, community MCP servers exist.
  2. Admin API with an app token. Create an app for the store, install it with read scopes such as read_orders, read_products and read_inventory, and store SHOPIFY_STORE_DOMAIN (acme.myshopify.com) and SHOPIFY_ACCESS_TOKEN. Requests go to https://acme.myshopify.com/admin/api/2026-10/graphql.json with the X-Shopify-Access-Token header. Orders older than 60 days also need read_all_orders.

Request only read_ scopes when you install the app; Shopify enforces them per token, so the agent can't edit products, refund or cancel orders.

Questions

Why is this lower than the drop-off in my funnel?

Shopify only records an abandoned checkout once the shopper has entered an email or phone number at checkout. Carts left before that point are not in this data, so treat it as late-stage drop-off only.

Does a recovered checkout mean the reminder email worked?

Not always. A completed checkout counts as recovered whether the shopper came back from the email, from an ad or on their own. If your reminders carry UTM tags, the agent can check the orders' landing pages for them to estimate the email-only share.

Do I need Briefkin to use the Shopify abandoned checkouts skill?

No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a stat tile, so you can glance at it instead of asking again.

Which agents can run it?

Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.

Can it work without an API or MCP server, from my browser?

Yes. Switch the data source to "Your browser" and the steps change to the Shopify pages themselves: the agent opens admin.shopify.com/checkouts in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.

Watch abandoned checkout value on your board, run after run

Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.

Free during the open beta. No card.