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

Shopify Admin Gift Message Extraction

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

shopify-admin-gift-message-extraction is a Shopify Admin skill that pulls gift messages, recipients, and gift flags from order attributes and notes for packing.

About

A Shopify Admin skill that extracts gift messages, gift-recipient names, and is_gift flags from order custom attributes and order notes for orders pending or in fulfillment. It applies configurable key lists and can also scan the free-text order note. It produces a single sheet the fulfillment team uses to print gift inserts and route gift orders. It is read-only and uses the Shopify Admin orders GraphQL query.

  • Pulls gift messages, recipients, and is_gift flags from order attributes and notes
  • Produces a packing sheet for pending/in-progress orders
  • Read-only orders query

Shopify Admin Gift Message Extraction 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-gift-message-extraction capabilities & compatibility

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

Capabilities
order data extraction · gift order detection · fulfillment support
Use cases
data analysis
Pricing
Free
From the docs

What shopify-admin-gift-message-extraction says it does

Pulls gift messages, gift-recipient names, and "is_gift" flags from order custom attributes and order notes for orders that are pending or in-progress fulfillment.
SKILL.md
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-gift-message-extraction

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

Extract gift messages, recipients, and gift flags from Shopify order attributes and notes for fulfillment teams to print on packing slips.

Who is it for?

Giving fulfillment teams a sheet of gift messages and recipients to print on inserts.

Skip if: Editing orders or generating the physical inserts; it only extracts the data.

When should I use this skill?

Before packing a batch of orders that may contain gift messages.

What you get

One report row per qualifying gift order with its message, recipient, and line items.

  • Report of qualifying gift orders with message and recipient
  • Line items for packing

By the numbers

  • Default 7-day lookback window
  • 6 default message keys, 4 recipient keys, 4 flag keys

Files

SKILL.mdMarkdownGitHub ↗

Purpose

Pulls gift messages, gift-recipient names, and "is_gift" flags from order custom attributes and order notes for orders that are pending or in-progress fulfillment. Produces a single sheet that the fulfillment team can use to print gift cards / inserts and route gift orders correctly. Read-only — no mutations.

Prerequisites

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

Parameters

ParameterTypeRequiredDefaultDescription
storestringyesStore domain (e.g., mystore.myshopify.com)
days_backintegerno7Lookback window of orders to scan
statusstringnounfulfilledOrder status filter: unfulfilled, partial, any
message_keysarrayno["gift_message","gift_note","Gift Message","Gift Note","message","note_to_recipient"]Custom attribute keys (any case) that may contain a gift message
recipient_keysarrayno["gift_recipient","recipient_name","Gift Recipient","To"]Custom attribute keys that may contain a recipient name
flag_keysarrayno["is_gift","gift","Gift Wrap","gift_wrap"]Custom attribute keys whose presence/value marks an order as a gift
include_order_noteboolnotrueAlso scan the order-level note field for free-text gift messages
formatstringnohumanOutput format: human or json

Safety

ℹ️ Read-only skill — no mutations are executed. Output may contain personal text written by customers — handle the resulting CSV with the same care as any customer data export.

Detection Rules

For each order:

1. Custom attributes — for each lineItem.customAttributes and order.customAttributes:

  • If key (case-insensitive) ∈ message_keys → capture as gift_message
  • If keyrecipient_keys → capture as gift_recipient
  • If keyflag_keys AND value is truthy (true, yes, 1, non-empty string) → set is_gift: true

2. Order note — if include_order_note: true and order.note matches /gift|recipient|deliver to|message:/i, capture the note as a note_hint 3. An order qualifies for the report if is_gift: true OR gift_message was captured OR gift_recipient was captured

Workflow Steps

1. Compute filter: created_at:>='<NOW - days_back days>' and translate statusfulfillment_status:unfulfilled / :partial / no filter

2. OPERATION: orders — query Inputs: query: <filter>, first: 250, select name, note, customAttributes { key, value }, lineItems { name, quantity, customAttributes { key, value } }, shippingAddress, customer { displayName, defaultEmailAddress { emailAddress } }, pagination cursor Expected output: Candidate orders

3. Apply detection rules to each order

4. Build report rows — one per qualifying order, including line items so packers know what to wrap

GraphQL Operations

# orders:query — validated against api_version 2025-01
query OrdersForGiftExtraction($query: String!, $after: String) {
  orders(first: 250, after: $after, query: $query) {
    edges {
      node {
        id
        name
        createdAt
        note
        displayFulfillmentStatus
        customAttributes {
          key
          value
        }
        shippingAddress {
          firstName
          lastName
          address1
          address2
          city
          provinceCode
          countryCodeV2
          zip
          phone
        }
        customer {
          id
          displayName
          defaultEmailAddress {
            emailAddress
          }
        }
        lineItems(first: 50) {
          edges {
            node {
              id
              name
              quantity
              sku
              customAttributes {
                key
                value
              }
            }
          }
        }
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}

Session Tracking

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

On start, emit:

╔══════════════════════════════════════════════╗
║  SKILL: Gift Message Extraction              ║
║  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):

══════════════════════════════════════════════
GIFT MESSAGE EXTRACTION  (<days_back> days, status: <status>)
  Orders scanned:        <n>
  Gift orders:           <n>
   ↳ With message:       <n>
   ↳ With recipient:     <n>
   ↳ Flag only:          <n>
  Found in order note:   <n>

  Output: gift_messages_<date>.csv
══════════════════════════════════════════════

For format: json, emit:

{
  "skill": "gift-message-extraction",
  "store": "<domain>",
  "period_days": 7,
  "orders_scanned": 0,
  "gift_orders": 0,
  "with_message": 0,
  "with_recipient": 0,
  "flag_only": 0,
  "from_order_note": 0,
  "output_file": "gift_messages_<date>.csv"
}

Output Format

CSV file gift_messages_<YYYY-MM-DD>.csv with columns: order_name, created_at, is_gift, gift_recipient, gift_message, note_hint, ship_to_name, ship_to_address, line_items_summary, customer_email

line_items_summary is a qty × title list joined with ; .

Error Handling

ErrorCauseRecovery
THROTTLEDAPI rate limit exceededWait 2 seconds, retry up to 3 times
Custom attribute key naming inconsistent across themesDifferent storefront templates write different keysCaller can extend message_keys / recipient_keys / flag_keys
Encoded HTML in messagesStorefront stored HTML entitiesDecode &amp;, &#39;, &quot; before printing
Multi-line messagesCustomer pressed Enter inside the inputCSV cells can contain newlines — quote properly when exporting

Best Practices

  • Run twice a day on the morning and afternoon pick wave — gift messages are time-sensitive and missing one ruins the experience.
  • Check custom-attribute key naming against your theme's gift-message implementation; extend message_keys / recipient_keys if your theme uses non-default keys.
  • For peak gifting seasons (Mother's Day, Valentine's, December), expand days_back to 14 and switch status: any to capture orders already in fulfillment.
  • Treat the CSV as PII — gift messages can contain personal sentiments. Restrict access to fulfillment staff who need it.
  • Sort the output by ship_to_address so packers can pull all gift orders going to the same address together.

Related skills

FAQ

Where does it look for gift messages?

In line-item and order custom attributes matching configurable message keys, and optionally the free-text order note.

Does it change the orders?

No. It is read-only and executes no mutations; output may contain customer text, so handle the CSV as customer data.

This week in AI coding

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

unsubscribe anytime.