Install
openclaw skills install @artificialintelligently/shopify-audit-proRead-only Shopify store audits and reporting for OpenClaw. Safety first: it cannot write to your store (mutations are refused in code and the app holds read_* scopes only), your token goes only to your own *.myshopify.com store (no relay, no third-party plugin), secrets are never typed in chat, and a PII-free audit log records every call. Then the audit power: pre-opening store audits, catalog, shipping, theme, policy and discount checks, orders, customers, inventory, bulk exports and sales/ops briefs via the Admin GraphQL API. Need to make changes too? Use shopify-admin-pro.
openclaw skills install @artificialintelligently/shopify-audit-proRead-only Shopify Admin GraphQL access for auditing and reporting. One helper
(scripts/shopify_api.py, Python standard library only, no installs) does all store I/O,
so the safety rules are enforced by code, not by good intentions.
Helper path: {baseDir}/scripts/shopify_api.py (below: shopify).
query, paginate and bulk-query refuse any GraphQL document containing a
mutation or subscription (comments and strings are stripped first, so they cannot hide one).
The recommended app also has read_* scopes only, so Shopify itself would reject a write.<store>.myshopify.com
(strict domain check), never to another service.bulk-query downloads Shopify's result file, and only
from https://storage.googleapis.com. No credentials are sent and an existing file is never overwritten.~/.openclaw/logs/shopify-audit.jsonl (mode 600):
time, store, API version, a hash of the query, counts. Never the token, never customer data.--redact-pii masks email, phone, names and addresses in output.| What | Why |
|---|---|
https://<your-store>.myshopify.com | Token exchange and Admin GraphQL queries |
https://storage.googleapis.com (only for bulk-query) | Downloading Shopify's bulk-export result file |
~/.openclaw/secrets/shopify.env (optional, you create it, must be mode 600) | Holds SHOPIFY_STORE_DOMAIN, SHOPIFY_CLIENT_ID, SHOPIFY_CLIENT_SECRET on hosts where the secret store is not injected. Only those SHOPIFY_* keys are read. |
~/.openclaw/logs/shopify-audit.jsonl | Append-only audit log (mode 600) |
--file / --vars-file / --out paths you pass | Query text (.graphql/.gql/.txt), variables (.json), and a new output file |
It never runs other programs, never installs anything, never edits memory or agent settings, and never sends data anywhere except Shopify.
bulk-query internally starts Shopify's bulkOperationRunQuery. That is an asynchronous
read export. It needs only read scopes and changes no store data.
references/safety-and-scopes.md), release a version, install it on
the store, then copy the Client ID and Client Secret from the app's Settings.
Legacy apps created before 2026 still work: use their static SHOPIFY_ACCESS_TOKEN.secrets tool), or, on a node host, create
~/.openclaw/secrets/shopify.env yourself with hidden input and chmod 600 it. The agent must
never create that file with the secret value and must never ask for the secret in chat.
Lines: SHOPIFY_STORE_DOMAIN=my-store.myshopify.com, SHOPIFY_CLIENT_ID=..., SHOPIFY_CLIENT_SECRET=....shopify scopes (should list only read_* handles) and shopify versions.--redact-pii)references/workflows.md)shopify query --query '<graphql>' [--vars '{}'] [--file q.graphql] [--vars-file v.json] [--redact-pii]
shopify paginate --query '<graphql with $cursor + pageInfo>' --path products [--max-pages 20]
shopify bulk-query --file q.graphql --out ~/.openclaw/workspace/tmp/x.jsonl # large exports, new file only
shopify scopes | versions
shopify --version
Exit codes: 0 ok, 1 error (including a refused document).
read_all_orders. Customer fields
may come back null until the app is approved for protected customer data. Say so rather than silently
returning partial data.{ __type(name:"X"){ fields{ name } } }) before retrying. Shopify changes fields between versions.--redact-pii unless the task needs the real values. Don't paste customer
details into memory files, group chats or logs.query, paginate, scopes and versions commands have been used on a live store.
Playbooks other than the pre-opening audit are untested on a store with orders.| Need | Use |
|---|---|
| A few records / lookups | query |
| Up to a few thousand rows | paginate |
| Whole catalog / all orders / history | bulk-query (async JSONL; one at a time per shop) |
| Sales/traffic analytics | ShopifyQL via shopifyqlQuery (needs read_reports), see the cookbook |
references/graphql-cookbook.md: ready read queries for products, orders, customers, inventory, fulfillment, shipping, themes, policies and ShopifyQL.references/workflows.md: playbooks including the pre-opening audit and daily ops brief.references/report-template.md: the report skeleton and launch-readiness checklist for turning an audit into one actionable report.references/safety-and-scopes.md: the read-only scope list, PII rules, token hygiene, incident response.Changing store data is deliberately not included. For writes (products, inventory, fulfillment, refunds and
more, each behind preview and confirmation) use the companion skill shopify-admin-pro, which includes everything
this skill does. If you only have this skill, give the user the exact change to make in Shopify admin.