
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)
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
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.
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-gift-message-extractionAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 2 |
|---|---|
| repo stars | ★ 173 |
| Last updated | June 26, 2026 |
| Repository | 40rty-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
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
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| store | string | yes | — | Store domain (e.g., mystore.myshopify.com) |
| days_back | integer | no | 7 | Lookback window of orders to scan |
| status | string | no | unfulfilled | Order status filter: unfulfilled, partial, any |
| message_keys | array | no | ["gift_message","gift_note","Gift Message","Gift Note","message","note_to_recipient"] | Custom attribute keys (any case) that may contain a gift message |
| recipient_keys | array | no | ["gift_recipient","recipient_name","Gift Recipient","To"] | Custom attribute keys that may contain a recipient name |
| flag_keys | array | no | ["is_gift","gift","Gift Wrap","gift_wrap"] | Custom attribute keys whose presence/value marks an order as a gift |
| include_order_note | bool | no | true | Also scan the order-level note field for free-text gift messages |
| format | string | no | human | Output 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 asgift_message - If
key∈recipient_keys→ capture asgift_recipient - If
key∈flag_keysAND value is truthy (true,yes,1, non-empty string) → setis_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 status → fulfillment_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
| Error | Cause | Recovery |
|---|---|---|
THROTTLED | API rate limit exceeded | Wait 2 seconds, retry up to 3 times |
| Custom attribute key naming inconsistent across themes | Different storefront templates write different keys | Caller can extend message_keys / recipient_keys / flag_keys |
| Encoded HTML in messages | Storefront stored HTML entities | Decode &, ', " before printing |
| Multi-line messages | Customer pressed Enter inside the input | CSV 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_keysif your theme uses non-default keys. - For peak gifting seasons (Mother's Day, Valentine's, December), expand
days_backto 14 and switchstatus: anyto 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_addressso 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.