- Brand
- Shopify
- Category
- Commerce
- Primary Subcategory
- Ecommerce Operations Platforms
Integration details
Description
Shopify for ChatGPT makes starting, running, and growing an online store as easy as having a conversation. Turn a small business idea into an ecommerce website with Shopify’s AI store builder: describe what you sell, create your store, add products, and sell online. Already have a Shopify store? Connect it to manage inventory across locations, create discount codes, review orders and customer details, and pull analytics on your store’s performance. Shopify supports selling online, in person, B2B, on marketplaces, and selling internationally. Whether you run a print on demand business, sell digital products, operate an online boutique, dropship, or serve wholesale buyers, Shopify gives you the foundation to build, sell, and grow.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Ecommerce Operations Platforms
- Secondary Subcategories
- None listed
- Brand
- Shopify
- Access
- Account optional
- First tracked
- 2026-09-04
- Tool count
- 56
- Market
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Agent DiscoverabilityChatGPT Discoverability ScoreUpdated dailyThe first to track the ChatGPT, Claude, Muse, Grok & Google ecosystems, with the largest database on the core platforms. Tracked daily since .
88/100
Winning#2of 71
in Ecommerce Operations Platforms- Picked
- 88.2/100
- Found
- 99.1/100
- Positioned
- –/100
Category leaderboard
Ecommerce Operations Platforms
- 1R
Run With AI88
- 2S
Shopify88
- 3A
AfterShip Post-Purchase0
- 4A
auction.fish0
- 5A
AutoQuote3D0
Get alerts for Shopify
Get updates when Shopify’s Discoverability Score or category rank changes.
Competing in ChatGPT Ecommerce Operations Platforms
View Category56 tools agents can invoke
Add one or more products to a collection in the connected Shopify store. Use this when the user wants to organize products into a collection. Find the collection's GID with search_collections first.
add-to-collection
Mint a signed upload URL for one file on a Digital Products variant. Called by the upload widget, not by the model: it hands back a write credential and does not attach anything on its own. Attachment is recorded afterwards by finalize-digital-file-attachment.
attach-digital-file
Mint a staged upload target for one media image on a digital product. Called by the media image upload widget, not by the model: it hands back a write credential and attaches nothing on its own. The image is attached afterwards by finalize-digital-product-media.
attach-digital-product-media
Update the status of multiple products at once. Accepts a list of product IDs or a collectionId and a target status (ACTIVE, DRAFT, or ARCHIVED). Each product is updated individually so partial failures are possible. When using collectionId, only the first 50 products in the collection will be updated.
bulk-update-product-status
Create a new collection in the connected Shopify store and publish it to the Online Store. Use this when the user wants to organize products into a new group. COLLECTION TYPES: - Manual collection: pass `productIds` to add specific products. - Smart collection: pass `ruleSet` with conditions to auto-populate products. - `productIds` and `ruleSet` are mutually exclusive — provide one or neither. SMART COLLECTION RULES: - Common rule columns: TAG, VENDOR, TYPE, TITLE, VARIANT_PRICE. - Common relations: EQUALS, NOT_EQUALS, CONTAINS, NOT_CONTAINS, STARTS_WITH, ENDS_WITH, GREATER_THAN, LESS_THAN. - `appliedDisjunctively: true` means products matching ANY rule are included (OR logic). - `appliedDisjunctively: false` means products must match ALL rules (AND logic). IMAGE REQUIREMENTS: - Images must be publicly accessible HTTPS URLs (e.g. https://example.com/photo.jpg). - Local file paths (e.g. /mnt/data/..., file://...) are NOT supported and will fail. - If you have a local file, generated image, or external URL: call the upload-image tool FIRST to get a permanent Shopify CDN URL, then pass that URL here. - Avoid placeholder or non-deterministic image URLs (e.g. picsum.photos) for real collections.
create-collection
Create a draft product through Shopify Digital Products. The result includes the product and first variant identifiers used to attach and deliver the digital file. To set the price and the buyer-facing description, call update-product with productId as its 'id' and variantId in 'variants' — prices are in the shop's own currency, so ask the merchant for the amount rather than guessing one. Do not rename the product through update-product: Digital Products keeps its own copy of the title. This tool does not publish the draft.
create-digital-product
Create a draft digital product that delivers an external link to the buyer — a Notion template, an online course, a booking page. Use this instead of create-digital-product when the merchant is selling access to something that already lives on the web, and skip the file upload entirely. The link must be hosted by a provider Shopify Digital Products supports; if it is not, the reply names the ones that are. To set the price and the buyer-facing description, call update-product with productId as its 'id' and variantId in 'variants' — prices are in the shop's own currency, so ask the merchant for the amount rather than guessing one. This tool does not publish the draft.
create-digital-product-from-link
Create a percentage-based discount code for the connected Shopify store. Use this when the merchant wants to set up a new discount code with a specific percentage off — including one limited to particular products or to a collection — with optional minimum purchase or quantity requirements. SCOPE — what the discount applies to: - Call both search_products and search_collections on whatever the merchant named, even if the first one already matches — a product and a collection can share a name. If both match, ask the merchant which they meant rather than picking one. - Specific products ("20% off the Snake Plant", "put these three items on sale"): pass productIds with their product GIDs, up to 50 of them. Look the GIDs up with search_products or get-product first. - An existing collection ("20% off everything in Summer Sale"), or any set larger than 50 products: pass collectionId. - Every product in the store: omit both. - productIds and collectionId are mutually exclusive. Passing both is rejected before anything is created. Do NOT create a collection just to scope a discount to products. This tool discounts products directly in one call, so a collection made only as a stepping stone leaves the merchant with one they never asked for. This is not a restriction on create-collection itself: if the merchant asked for a collection, create it and then scope the discount to it with collectionId. What matters is why the collection exists — one the merchant wants is fine, one invented to work around productIds is not. BEFORE CALLING — get two answers from the merchant, in one message if both are missing. Do not call this tool until you have both, and do not fill either in yourself: there is no default start date and no default audience. - When the discount starts: right away, or on a specific date. Pass startsAt as an ISO 8601 timestamp: the current date and time for "right away", or the date the merchant chose. - Who can use it: every customer, or only certain customer segments. Pass customerEligibility="all_customers" once the merchant confirms everyone, or customerSegments with the names of segments that exist on this store. One exception: if the merchant wants the discount limited to a customer segment and you do not know which segments this store has, call with startsAt set and both customerEligibility and customerSegments omitted. Nothing is created; the tool replies with the store's segment names. Show them to the merchant, then call again with the one they choose.
create-discount
Create a new product in the connected Shopify store. If create-product-interactive is available, prefer it over create-product. Use this when the user wants to add a product with a title, description, variants, images, or other product details. VARIANTS & OPTIONS: - When providing `variants`, you MUST also provide the `options` field as a string array of option names. - Example: for a single default variant use `options: ['Title']`, for Size/Color variants use `options: ['Size', 'Color']`. - The `options` field must be an array of strings (e.g. `['Size', 'Color']`), NOT an array of objects. - Each variant's `optionValues` must reference option names declared in the `options` array. INVENTORY TRACKING: - To enable inventory tracking on variants, set `inventoryItem: { tracked: true }` on each variant. - If omitted, inventory defaults to untracked and set-inventory will not work as expected. IMAGE REQUIREMENTS: - Images must be publicly accessible HTTPS URLs (e.g. https://example.com/photo.jpg). - Local file paths (e.g. /mnt/data/..., file://...) are NOT supported and will fail. - If you have a local file, generated image, or external URL: call the upload-image tool FIRST to get a permanent Shopify CDN URL, then pass that URL here. - Avoid placeholder or non-deterministic image URLs (e.g. picsum.photos) for real products. - The first image provided becomes the product's featured image. COLLECTION: - Optionally pass `collectionId` to add the product to a collection after creation. - To add to multiple collections, use add-to-collection afterward.
create-product
Open an interactive product creation app for the connected Shopify store. Use this when the user wants to add a product and would benefit from reviewing or editing the product details before creation. Pre-fill as much product information as the user has provided. Do NOT invent values for the title. If the user has not told you what they're trying to sell and has not added an image of their product, ask them what the product is or ask for an image before calling this tool. If the user has not provided an exact product title or description, generate a sensible merchant-ready draft title and description from the available product details before opening the app, then let the user review or adjust them. AFTER THE APP SAVES A PRODUCT: It tells you it saved and gives you the product GID. To change that saved product's name, description, or first-variant price in the app, call the interactive editing app with that product GID and the full rendered product state the product should have now. Calling this creation app again starts a new product draft. That editing call only re-seeds the app, so do not report a change as saved until the merchant saves it, and do not write those three fields with update-product while the app holds the product — the merchant's next Save would overwrite you. Every other field, including status, images, and the product's other variants, is still yours to update directly. IMAGE REQUIREMENTS: - Images must be publicly accessible HTTPS URLs (e.g. https://example.com/photo.jpg). - Local file paths (e.g. /mnt/data/..., file://...) are NOT supported and will fail. - If you have a local file, generated image, or external URL: call the upload-image tool FIRST to get a permanent Shopify CDN URL, then pass that URL here.
create-product-interactive
Explore the Shopify Admin GraphQL schema to discover types, fields, and arguments. You MUST call this tool before building ANY GraphQL operation — every graphql_query and every graphql_mutation starts here, not just mutations. It is step 1 of the GraphQL Workflow and the only source of truth for exact type, field, argument, and input-type names — never guess them. For INPUT_OBJECT types (e.g. 'ProductInput', 'DiscountCodeBasicInput') the response includes the full transitive closure of every nested input type — you do NOT need to call again per nested type. Each inputFields[] entry whose type unwraps to an INPUT_OBJECT carries an 'expanded' key with that type's inputFields recursively. Cycles are emitted as { "$ref": "TypeName" }. ENUM-typed fields have their values inlined under 'enumValues'. Pass a type name to inspect. Common starting points: - 'Mutation' — list all available mutations (search here first for mutations) - 'QueryRoot' — list all available queries - 'Product', 'Order', 'Customer' — inspect entity fields for queries - 'ProductInput', 'ProductVariantInput' — inspect mutation input types (returned with full nested closure) Workflow for mutations: graphql_schema('Mutation') → find the mutation → graphql_schema('InputTypeName') → construct the mutation → validate_graphql_codeblocks → graphql_mutation. Workflow for queries: graphql_schema('QueryRoot') → find the query → graphql_schema('TypeName') → construct the query → validate_graphql_codeblocks → graphql_query. While building an operation, search_docs_chunks supplements this tool with worked examples from shopify.dev; it does NOT replace it and is not where the workflow starts. A standalone documentation question, with no operation to build, goes straight to search_docs_chunks.
graphql_schema
Record a digital file that was uploaded directly to storage by the widget, then enable automatic delivery for the variant. Called only by the widget after a successful upload to the URL from attach-digital-file; never invoke directly from the model. Does not publish the product.
finalize-digital-file-attachment
Attach a media image that was uploaded straight to storage by the widget, as the digital product's media. Called only by the media image upload widget after a successful upload to the target from attach-digital-product-media; never invoke directly from the model. Leaves the price, description, status and attached digital file untouched, and does not publish the product.
finalize-digital-product-media
Find ready-made sample catalogs (from mock.shop) that fit the merchant's business, so they can pick one to seed their store with realistic products and collections instead of starting empty. WHEN TO USE: - The merchant has a new or empty store and wants sample products, a starter catalog, demo data, or "something to look at" before adding their own products. - The merchant describes what they sell (or plan to sell) and wants a store populated quickly. WHEN NOT TO USE: - The merchant wants one-off placeholder products rather than a whole catalog — use find-sample-product. - The merchant wants real products to source or resell — this returns sample data, not supplier inventory. - The merchant wants to browse products already in their store — use search-products. INPUT: a short description of the business or what it sells (e.g. "handmade soy candles", "supplies for a new puppy", "streetwear for teens"). Take it from what the merchant said. If they gave no hint at all, ask one question — what do they plan to sell? — then call. OUTPUT: up to `limit` catalogs (default 3), best match first. Each has a name, short description, categories, collection titles, product and collection counts, currency, and a `storefrontUrl` the merchant can open to browse it as a live storefront. Present them as a short list with the storefront links and ask the merchant which one they want. Pass the chosen catalog's `subdomain` to import-mock-shop-catalog to copy it into their store. An empty list means nothing matched well — suggest the merchant describe their business differently.
find-mock-shop-catalogs
Find placeholder sample products that help a merchant visualize a store or get product inspiration. These are placeholder examples, not real supplier inventory. WHEN TO USE: - The user explicitly asks for sample, example, placeholder, or mock products. - The user wants inspiration to visualize a store rather than products to source or import. WHEN NOT TO USE: - The user wants real products they can source, import, or sell. This tool returns placeholders, not sourceable inventory. - The user wants to browse products that already exist in their store — use search-products. - The user wants to create their own product listing from a description — call create-product directly. INPUT — the ONLY thing you need from the user is a product or category: - As soon as the user asks for samples or inspiration and names a product or category, call the tool immediately with it. Do not ask anything else. - Do NOT ask about style, audience, price, brand, quantity, or any other detail — the widget refines everything through its own search bar. - ONLY if the user asked for samples or inspiration but gave no product or category, ask a single question: what kind of products are they thinking of? Then call the tool. Never ask more than this one question. Each card has an 'Add this product' button. When the user clicks it, the widget adds that sample product to their store on its own — you do not need to take any further action.
find-sample-product
Generate business name ideas for someone starting a Shopify store. WHEN TO USE: - The user wants name ideas for a new business or store. - The user has described a business but has not named it yet. - The user has a name and wants alternatives in the same vein. WHEN NOT TO USE: - The user already knows the name they want and only needs to set it — that is done in the Shopify admin, not here. - The user wants a product name, a slogan, or a tagline rather than a business name. INPUT: a short description of the business in the user's own words — what they sell, who it is for, or the feeling they want ('hand-poured soy candles for dark, woody scents'). Max 255 characters. Pass what the user actually said; do NOT invent a business they have not described. Every name comes back with a `signupUrl`, the link that acts on it, so present it rather than describing it. Where it goes depends on the user: with no Shopify store connected it opens store signup with the name already filled in; with a store connected it opens the store name setting in that store's Shopify admin, where they save the new name themselves. Either way the tool only hands back a link — it creates and renames nothing. A store name is not exclusive, so the user can take any of these for their store. Nothing here is verified, though — no trademark search, no business registry, no check of whether someone else is already trading under the name — so tell them to check that before building a brand on it.
generate-business-names
Suggest available domain names for a new Shopify store. Every domain returned has been checked against the domain registry and was available at the time of the call. WHEN TO USE: - The user wants a domain for a business or store name. - The user's preferred domain is taken and they want alternatives. - The user asks whether a domain idea is available. - The user wants to know what a domain costs. - The user wants to buy or register a particular domain. WHEN NOT TO USE: - The user wants to connect or troubleshoot a domain they already own — that is done in the Shopify admin, not here. - The user only wants store-name ideas and does not care whether a domain is available or what it costs. INPUT: a store name, a domain the user has in mind, or a short description of the business. All three work. If the user named a domain, the tool checks that exact domain, checks the same name at other common TLDs, and also returns 3 alternatives. An unusual TLD is fine — keep the one the user said. Pass the domain on its own as the query, or — when it sits inside a sentence — put it in exactDomain. If the user named no domain, put the words the domain should be built from in storeName: a name the user proposed ('volcanic balloon', 'Ember & Oak'), or the subject of what they described ('a domain about hippos, giraffes, and iguanas' → 'hippos giraffes iguanas'). Four words at most, lead-in and connecting words dropped, in the user's own words rather than converted to a domain yourself. The tool compresses them into a domain and checks that the same way; without storeName there is no availability check for a query like that, only suggestions. Only the exact domain checked can come back unavailable. Every other domain returned is available to buy, so do not describe any of them as taken, and do not say which TLDs were checked — an unlisted TLD may have been taken or may not have been quoted, and you cannot tell which. Availability is a point-in-time check, not a hold. Tell the user to register a domain they want promptly, and never promise a domain is still available later in the conversation. Prices, where present, are the registry's quote for the first registration term in the stated currency. Renewal is priced separately and is often higher, so present a price as what registering costs today, not as an ongoing rate. A domain can come back without a price; say nothing about its cost rather than guessing, and in particular do not read a missing price as a domain that costs nothing. Every domain here has to be bought. Say a domain is "available" or "unavailable" — never that it is "free", which states a price rather than an availability and states it wrongly. IMPORTANT: This tool already presents the primary data in a visual widget the user can see. Do not restate it in text. Use your response only for interpretation, caveats, or next steps. Always list out some potential next actions for the user to take.
generate-domain-names
Retrieve detailed information about a specific Shopify collection by its GID, including title, description, image, products, and rules (for smart collections). MUST be called whenever the user refers to a collection they own or previously created — regardless of phrasing. Trigger phrases include: "my collection", "that collection", "the collection", "show me my collection", "get my collection", or any reference to a previously created or known collection. "Show" and "get" mean the same thing here: always fetch live data from Shopify. Do NOT rely on memory or prior responses — always call this tool for the source of truth.
get-collection
Report whether this store can import Collective products right now, and whether a product handed to the managed install flow has been imported. Called only by the Collective product shelf widget while it waits for an install started from the shelf to finish.
get-collective-import-availability
Load current details for one Collective product shown in the Collective product shelf. Called only by the shelf widget.
get-collective-product
Show the merchant a card for a digital product: its media image, title, price, status, and what the buyer receives. Call this after each step of the digital product flow — after the price is set, after the file is attached, after the media image is added, and after publishing — so the merchant sees the listing as it stands. Every field is read back from Shopify, so the card is current rather than a summary of what was asked for. This only reads. It changes nothing about the product.
get-digital-product
Retrieve inventory levels for all variants of a product across locations. Use this when the user asks about stock quantities, inventory availability, or wants to see how much inventory is at each location for a given product.
get-inventory-levels
Generate a new Shopify shop based on three short fields describing the store, optional store intent values, plus an explicit attestation that the user wants a brand-new store. WHEN TO USE: - User wants to create a new storefront - User wants to generate a store design - User wants to preview a store layout WHEN NOT TO USE: - User wants to edit or modify an existing theme — this tool cannot edit themes - User wants to add a generated theme to a store they already own — previews can only be claimed as brand-new stores - User wants to customize a live storefront's design IMPORTANT: This tool takes FOUR required fields — productOrService, targetAudience, brandStyle (each compressed from what the user said), and userUnderstandsNewStoreOnly — plus optional storeIntents. See the userUnderstandsNewStoreOnly field's own description for the rules on when to set it silently versus when to confirm with the user first; do not invent a confirmation step when none of those rules apply. Do NOT invent values for the descriptive fields. If the user has not told you what they sell, who their customers are, or what visual style they want, ASK THEM before calling this tool. Make sure you have enough concrete detail from the user that there's something meaningful to compress — at least varieties or specifics for the product, real audience traits, and concrete visual cues. The previews are much better when each field is grounded in something the user actually said. Each descriptive field (productOrService, targetAudience, brandStyle) is a comma-delimited keyword phrase (max 78 characters), compressed from what the user said — no synonyms, no inferred attributes, no full conversation history. Drop filler words and keep nouns and concrete descriptors. Returns up to 3 storefront previews. Generation typically takes about 3 minutes. After calling this tool, let the user know their previews are on the way and may take a few minutes. Remind them that the previews can only be claimed as brand-new stores; they cannot be applied to an existing storefront or used to edit an existing theme. Keep the conversation going while they wait. IMPORTANT: This tool already presents the primary data in a visual widget the user can see. Do not restate it in text. Use your response only for interpretation, caveats, or next steps. Always list out some potential next actions for the user to take.
get-new-store-previews
Retrieve detailed information about a specific Shopify order including line items, fulfillment status, shipping address, and tracking. Use this when the user asks about a particular order's details or status.
get-order
Retrieve detailed information about a specific Shopify product by its GID, including title, status, vendor, variants, images, tags, and inventory. MUST be called whenever the user refers to a product they own or previously created — regardless of phrasing. Trigger phrases include: "my product", "that product", "the product", "show me my product", "get my product", "pull up the product", "open my product", or any reference to a previously created or known product. "Show" and "get" mean the same thing here: always fetch live data from Shopify. Do NOT rely on memory or prior responses — always call this tool for the source of truth.
get-product
Retrieve basic information about the connected Shopify store including name, domain, email, plan, currency, timezone, and country. Use this when you need store context to tailor advice (e.g. plan limitations, currency for pricing, timezone for scheduling), when the user asks about their store details, or to verify which store is connected.
get-shop-info
Execute a GraphQL mutation against the Shopify Admin API. The Shopify Admin API supports hundreds of mutations. Built-in tools cover common write operations, but when the user asks to modify a resource that has no dedicated tool (e.g. metafields, metaobjects, pages, blogs, translations, publications, etc.), use this tool. Note: Some dangerous mutations are blocked for safety (e.g. refunds, gift card writes, staff management, theme deletion, theme publishing). Theme file writes (themeFilesCopy, themeFilesUpsert) are allowed on unpublished themes only — writes that target the live/MAIN theme are blocked. If a mutation is blocked, inform the user and suggest they perform the action in Shopify admin. The host app will prompt the user for confirmation before executing. Before calling this tool, follow the GraphQL Workflow: 1. Call graphql_schema FIRST to look up the exact mutation name (type_name='Mutation') and input type fields — do NOT guess, and do NOT skip this step. 2. Optionally supplement with search_docs_chunks for mutation examples in Shopify documentation; it never replaces graphql_schema. 3. Construct the operation. 4. Call validate_graphql_codeblocks to verify the operation — do NOT skip validation. 5. Only then call this tool to execute the mutation. IMPORTANT: After executing, present the results clearly to the user. Do NOT dump raw JSON — summarize what changed in a helpful, readable way.
graphql_mutation
Execute a read-only GraphQL query against the Shopify Admin API. The Shopify Admin API exposes hundreds of resources. Built-in tools cover common operations, but when the user asks about a resource that has no dedicated tool (e.g. gift cards, metafields, metaobjects, pages, blogs, markets, translations, publications, etc.), use this tool to fetch the data. Before calling this tool, follow the GraphQL Workflow: 1. Call graphql_schema FIRST to discover the correct types and fields — do NOT guess field names, and do NOT skip this step. 2. Construct the operation. search_docs_chunks is optional here for worked examples; it supplements graphql_schema and never replaces it. 3. Call validate_graphql_codeblocks to verify the operation — do NOT skip validation. 4. Only then call this tool to execute the query. Pagination: include `pageInfo { hasNextPage endCursor }` in your query. Pass the endCursor value as the `after` variable for the next page. IMPORTANT: After calling this tool, present the results clearly to the user. Do NOT dump raw JSON — summarize the key information in a helpful, readable way.
graphql_query
Check availability and queue one Collective product for import, or return the required next step. Reports alreadyImported when the store already has the product. Called only by the Collective product widget.
import-collective-product
Copy a mock.shop sample catalog's starter set — its first 2 collections and up to 8 products from each (with variants, prices, images), so at most 16 products — into the merchant's connected store, publishing everything to the Online Store. Use it after the merchant picks a catalog from find-mock-shop-catalogs. One call does the whole import. RE-RUNNING IS SAFE AND NEVER OVERWRITES: calling again (after a timeout or `partial: true`) adds only what is missing — products not yet imported, memberships and publications not yet made. A product already imported from this catalog is left exactly as it is — including any edits the merchant has made since, and including whether it is published — and counted under `unchanged`; if it is not published, it is listed under `unpublished` for the merchant to publish or delete in Admin. A product the merchant already has at the same handle from elsewhere is left untouched and reported under `skipped`. A collection the merchant already has at the same handle is reused when its title matches the catalog's (missing imported products are added to it) and skipped when it does not. Collections are created only with their imported products, so none is ever left empty. INPUT: `subdomain` from the chosen catalog (e.g. "pets"). Nothing else. OUTPUT: counts of products created/unchanged/skipped and collections created/reused/skipped, and `currency`. If `partial` is true Shopify rate-limited the call: wait a few seconds, then call again with the same `subdomain`. Prices are copied as plain amounts; when `currency.mismatch` is true tell the merchant prices came from a ${currency.source} catalog and were not converted, so they should review them.
import-mock-shop-catalog
Open a Shopify Admin install handoff for Digital Products on the authenticated store. Use this only after the merchant has explicitly asked to install or prepare Digital Products for their store. The app identity is fixed by Shopify; this tool cannot install arbitrary apps and does not install anything silently. The merchant must click the widget button and complete the Shopify Admin install flow before Digital Products connector tools can continue.
open-digital-products-install
Retrieve a list of customers from the connected Shopify store, including name, email, phone, order count, and total spent. Use this when the user asks about their customers, wants to look up a specific customer, or needs customer data for analysis. SEARCH SYNTAX: When the user is looking for a specific customer (by name, email, tag, etc.), ALWAYS pass a structured `query` using Shopify's customer search syntax. Do NOT pass a bare free-text term like `Smith` for a name search — Shopify's default fields match addresses, tags, company names, and notes, which returns unrelated customers. Field filters use `field:value`. Combine with `AND` / `OR` / `NOT`; parenthesize subqueries. Ranges use `:<`, `:<=`, `:>`, `:>=` on numeric / date fields. Name lookups should query BOTH first and last name, e.g. for "customers named Smith" use `first_name:Smith OR last_name:Smith`. Supported filter fields: - Name: `first_name`, `last_name` - Contact: `email`, `phone` - Location: `country` (full name or code, e.g. `Canada` / `CA`) - Account state: `state` (`enabled` | `invited` | `disabled` | `declined`) - Marketing: `accepts_marketing` (boolean), `email_marketing_state` (`subscribed` | `not_subscribed` | `pending` | `invalid` | `redacted`) - Tags: `tag`, `tag_not` - Numeric (support ranges): `orders_count`, `total_spent`, `id` - Date (support ranges): `created_at`, `updated_at`, `order_date`, `last_abandoned_order_date` — use ISO 8601 in quotes, e.g. `created_at:>'2024-01-01'` RECENCY OF ORDERS: To filter by when a customer placed an order, use `order_date` — NOT `updated_at`. `order_date` matches customers who have at least one order within the given date range. `updated_at` is bumped by profile edits too, so it's a leaky proxy. For abandoned-checkout recency, use `last_abandoned_order_date`. Compose either with the same date syntax shown for `created_at` / `updated_at` above; for relative windows ("last N days"), compute the cutoff from the current date in your context. Examples: - `Find customers named Smith` → `first_name:Smith OR last_name:Smith` - `Customers with gmail addresses` → `email:*@gmail.com` - `Customers with more than 5 orders` → `orders_count:>5` - `Customers from Canada` → `country:Canada` - `VIP customers` → `tag:vip` - `Subscribed to email` → `email_marketing_state:subscribed` IMPORTANT — invalid field names are silently ignored and return everything. Only use the fields listed above. Do NOT invent fields like `name:`, `full_name:`, `customer_name:`, or `city:`.
list-customers
Retrieve recent orders from the connected Shopify store. Returns order name, customer, totals, financial and fulfillment status. Use this when the user asks about their orders, wants an overview of recent sales, or needs to find a specific order.
list-orders
Take a draft digital product live through Shopify Digital Products, so buyers can purchase and download it. Activates the product and requests its Online Store listing. Refuses to publish a product with nothing attached, so attach the file first with upload-digital-product-file. Digital Products does not report whether the Online Store listing succeeded, so tell the merchant to check the product in their Online Store if buyers cannot find it.
publish-digital-product
Report current import availability and per-product offer terms for products already shown in the Collective product shelf. Called only by the shelf widget to reconcile a shelf rendered before Shopify Collective was installed.
refresh-collective-products
Record the outcome of a file upload the widget sent straight to storage. Called only by the upload widget; never invoke directly from the model. Records telemetry and changes nothing about the product.
report-digital-file-upload
Run a ShopifyQL analytics query. Returns tabular results with automatic chart visualization. IMPORTANT: Always use FROM...SHOW syntax. Use TIMESERIES for time charts, GROUP BY for categories. ## Sales & Revenue - FROM sales SHOW gross_sales TIMESERIES day SINCE -30d UNTIL today - FROM sales SHOW orders, gross_sales, discounts, sales_reversals, net_sales, shipping_charges, taxes, total_sales TIMESERIES day SINCE -30d UNTIL today - FROM sales SHOW total_sales TIMESERIES day SINCE -30d UNTIL today COMPARE TO previous_period - FROM sales SHOW gross_sales, discounts, sales_reversals, net_sales, shipping_charges, taxes, total_sales - FROM sales SHOW average_order_value TIMESERIES day SINCE -30d UNTIL today ## Orders - FROM sales SHOW orders TIMESERIES day SINCE -7d UNTIL today - FROM fulfillments SHOW orders_fulfilled, orders_shipped, orders_delivered TIMESERIES day SINCE -30d UNTIL today ## Products - FROM sales SHOW gross_sales, net_sales, orders GROUP BY product_title ORDER BY gross_sales DESC LIMIT 10 - FROM inventory SHOW starting_inventory_units, ending_inventory_units, inventory_units_sold, sell_through_rate GROUP BY product_title, product_variant_title ## Customers - FROM sales SHOW returning_customers, customers, returning_customer_rate TIMESERIES day SINCE -30d UNTIL today - FROM sales SHOW new_customers, returning_customers TIMESERIES day SINCE -30d UNTIL today ## Sessions & Conversion - FROM sessions SHOW sessions, online_store_visitors TIMESERIES day SINCE -30d UNTIL today - FROM sessions SHOW sessions, sessions_with_cart_additions, sessions_that_reached_checkout, sessions_that_completed_checkout, conversion_rate TIMESERIES day SINCE -30d UNTIL today - FROM sessions SHOW sessions GROUP BY session_device_type SINCE -30d UNTIL today - FROM sessions SHOW sessions GROUP BY session_country SINCE -30d UNTIL today ## Marketing & Referrals - FROM sales SHOW orders, total_sales GROUP BY order_referrer_source, order_referrer_name SINCE -30d UNTIL today - FROM sessions SHOW sessions WHERE referrer_source = 'social' GROUP BY referrer_name SINCE -30d UNTIL today ## Tables: sales, sessions, customers, fulfillments, inventory, payments. There is no orders table: count orders with FROM sales SHOW orders ## Time grouping: TIMESERIES day/week/month. Category grouping: GROUP BY column ## Comparison: COMPARE TO previous_period. Aggregates: WITH TOTALS, PERCENT_CHANGE
run-analytics-query
Search and browse collections on a Shopify store. Use this whenever the user wants to see, find, or look at collections in their store. Trigger phrases include: 'show me my collections', 'what collections do I have', 'list my collections', 'find a collection', 'search collections', or any reference to viewing multiple collections. 'Show' and 'get' mean the same thing: always fetch live data from Shopify. Do NOT summarize from memory. Use this when the user wants to: - list or search collections - find a collection by name - check what collections exist in their store - find a collection GID to use with add-to-collection or create-product Returns collection data from the connected store via the Shopify Admin API. Results are capped at 50 per call. When `pageInfo.hasNextPage` is true, more matches exist than were returned. Tell the user you are showing the first N results and offer two paths: (a) load more via `after: pageInfo.endCursor`, or (b) refine the search with a stricter query. Only act on one of those paths when the user asks; do not auto-paginate. SEARCH SYNTAX: Free text matches across default fields (e.g. `summer`, `"new arrivals"`). Field filters use `field:value`. Combine with `AND` / `OR` / `NOT`; parenthesize subqueries. Ranges use `:<`, `:<=`, `:>`, `:>=` on numeric/date fields. Example: `collection_type:smart AND title:sale*`. IMPORTANT — invalid field names are silently ignored and return everything. Only use the fields listed below, as flat names. Do NOT invent dotted paths like `collection.title` or `rules.column`. Supported filter fields: - Text / exact: `title`, `handle`, `collection_type` (custom|smart) - Numeric (support ranges): `id` - Date (support ranges): `updated_at`, `published_at` — use ISO 8601 in quotes, e.g. `updated_at:>'2024-01-01'` - ID: `product_id` (collections containing the given product) - Publication: `published_status` (e.g. `published`, `unpublished`, `online_store_channel`) Note: there is no server-side filter for product count, rules, or sort order. For those, filter by `collection_type` and inspect the returned `productsCount` / `sortOrder` fields client-side, or narrow with `title:` / `handle:`.
search_collections
Find and judge Shopify Collective products PRIVATELY before showing one selected shelf. This is the only entry point for real supplier products a merchant wants to source, import, or sell. A request for products "I can sell" means real supplier products: ALWAYS use this tool, never placeholder samples, unless the user explicitly asks for samples, examples, placeholders, or mocks. Use it for straightforward concrete product requests as well as curation, recommendations, audiences, themes, aesthetics, store ideas, and refinements. The user does not need to say "curate." Never expose raw or intermediate search results. HARD QUERY LIMIT: make ONE initial call with a queries array; attempt defaults to INITIAL when omitted. For a broad brief, choose 1–3 independent product lanes upfront; the server searches them concurrently. For a precise product-type brief, include exactly ONE query. Wait for the entire result before selecting, correcting, or calling show-collective-products. Never issue multiple candidate-tool calls in one assistant turn or another initial batch. Only when the whole batch has NO on-brief candidates may you make ONE corrective call with attempt CORRECTION and exactly ONE new query. Mixed relevant/irrelevant results and empty lanes beside on-brief lanes do not earn a correction. Never exceed FOUR queries total (not four batches). Stop after the correction, and stop immediately after any upstream failure, including a rate limit. For a broad audience/theme brief, put distinct concrete 2–5 word product-noun searches in the same queries array, not vague vibes or synonym rewrites. Explore different product types that fit the brief. Choose only the independent lanes needed; three is a maximum, not a target. Compare all returned candidates globally, discard weak lanes, avoid near-duplicates, and prefer no more than two products from one vendor. Begin searching rather than only listing hypothetical product ideas. For a concrete product request, search its product type and useful attributes first, with exactly one query in the array. If even ONE candidate matches every explicit constraint, finalize immediately without another search. Never spend the broad three-query budget on a precise brief or search to add variety. If the private search has no matches, use only the single corrective call. To broaden retrieval: try a simpler product noun, a parent category, or another relevant angle instead of repeating the unsuccessful query. Broader retrieval is not permission to relax selection constraints: preserve explicit product type, color, material, and exclusions when choosing the final IDs. Explore adjacent product types only when the brief leaves the type open. Prefer fewer relevant products over padding, and ask before relaxing a hard constraint if no matches remain. For refinement, reuse candidates already in context when they satisfy the feedback. Otherwise search broader relevant lanes privately. Never reintroduce rejected products or display interim shelves while trying new angles. Select only candidate IDs you observed. Call show-collective-products once with at most 10 ordered IDs after the batch results have returned and you have selected across the candidates. Never call the finalizer in the same assistant turn as a candidate search. These searches do not render a shelf; do not narrate their individual products to the user. Never call show-collective-products with an empty selection. If the bounded search and correction produce no on-brief candidates, stop without rendering a shelf and follow the fallback instruction in the tool result. When verified market context is available, a result for a connected store outside the US includes a market-specific catalog advisory. This is best-effort guidance, not an eligibility decision: continue the normal bounded workflow without asking for extra confirmation. Do not assume an absent advisory means the store is US-based.
search-collective-product-candidates
Search and browse products on a Shopify store. MUST be called whenever the user wants to see, find, or look at products in their store. Trigger phrases include: 'show me my products', 'what products do I have', 'list my products', 'browse my catalog', 'find a product', 'search for', or any reference to viewing multiple products. 'Show' and 'get' mean the same thing: always fetch live data from Shopify. Do NOT summarize from memory. Use this when the user wants to: - list or search products - look up a specific product by ID or handle - check product status or details - browse what's in their catalog Returns product data from the connected store via the Shopify Admin API. Results are capped at 50 per call. When `pageInfo.hasNextPage` is true, more matches exist than were returned. Tell the user you are showing the first N results and offer two paths: (a) load more via `after: pageInfo.endCursor`, or (b) refine the search with a stricter query. Only act on one of those paths when the user asks; do not auto-paginate. SEARCH SYNTAX: Free text matches across default fields (e.g. `shoes`, `"green hoodie"`). Field filters use `field:value`. Combine with `AND` / `OR` / `NOT`; parenthesize subqueries. Ranges use `:<`, `:<=`, `:>`, `:>=` on numeric/date fields. Example: `price:<=25 AND status:active`. IMPORTANT — invalid field names are silently ignored and return everything. Only use the fields listed below, as flat names. Do NOT invent dotted paths like `variants.price`, `product.tag`, or `variant.sku`. Supported filter fields: - Text / exact: `title`, `vendor`, `product_type`, `handle`, `sku`, `barcode`, `variant_title`, `tag`, `tag_not`, `status` (active|archived|draft) - Numeric (support ranges): `price` (matches products with ANY variant whose price satisfies the condition), `inventory_total`, `id`, `variant_id` - Date (support ranges): `created_at`, `updated_at`, `published_at` — use ISO 8601 in quotes, e.g. `created_at:>'2024-01-01'` - Boolean: `gift_card`, `bundles`, `is_price_reduced`, `out_of_stock_somewhere`, `tracks_inventory`, `has_only_default_variant` - ID: `collection_id`, `category_id` Price examples (cross-variant semantics): - `price:<=25` — products with at least one variant priced $25 or less - `price:>100 price:<=500` — products with at least one variant in $100–$500 - `price:25` — products with at least one variant priced exactly $25 SHOULD populate `search_summary` with a concise but descriptive plain-text heading in the user's language. Use a noun phrase that identifies the results as products instead of repeating only the search term—for example, "Your sneaker products", not "Your sneakers". The widget displays this text verbatim, so do not use Markdown. For a min/max of every variant or a product-wide price band, this tool cannot express it server-side; tell the user and suggest narrowing with `price:` plus another filter (e.g. `product_type:`, `vendor:`, `tag:`).
search_products
Set the available inventory quantity for a specific inventory item at a given location. Always call get-inventory-levels first to get the inventoryItemId, locationId, and current available quantity. Pass the current quantity as compareQuantity so the update fails safely if stock changed since you read it.
set-inventory
Open the integrated Shopify app.
shopify-app
Render one curated Shopify Collective product shelf from canonical product IDs. Call this only after the entire search-collective-product-candidates batch has returned and you have privately judged its candidates, or when refining IDs already shown in a prior Collective shelf. Never call this in the same assistant turn as a candidate search. Supply 1–10 IDs in the exact display order. Use only IDs you observed; do not invent or alter IDs. The server re-fetches canonical, currently visible product data, removes duplicates, and omits stale, ineligible, or non-displayable products. It does not require conversation history, so a valid visible ID can be finalized regardless of which Collective search first returned it. The title is a short user-facing shelf heading. productIds must be a JSON array of ID strings, never one JSON-encoded string. Pass IDs rather than product objects. Call this once per curation attempt. If every selected ID has become unavailable, you may retry this tool once with different on-brief candidate IDs you already observed. Never fall back to presenting the uncurated candidate pool. Importing is a merchant action in the widget, not something you can do. Never offer to import products (individually or in bulk), or recreate them with product-creation tools, including as drafts. Direct the merchant to use the Import product button on cards where it is available; respect any installation or eligibility guidance in the result.
show-collective-products
Switch to a different Shopify store. Call this tool whenever the user wants to work with a different store — including when they ask to fetch data, manage products, or perform any action on another shop. Revokes the current store's access token so the next tool call will prompt authorization for a new store. IMPORTANT: You must always make a follow-up tool call after this tool returns. If the user requested a specific action (e.g. fetch products), call that tool next. Otherwise, you MUST call get-shop-info to complete the shop switch.
switch-shop
Verify that the connected store can exchange its Admin token and reach the Digital Products connector. This read-only check returns no credentials or connector data.
test-digital-products-connection
Update an existing collection's title, description, image, sort order, or rules. Use this when the user wants to modify, change, or edit collection details. Trigger phrases include: "update my collection", "change the collection", "edit the collection", "rename the collection". IMAGE REQUIREMENTS: - Images must be publicly accessible HTTPS URLs (e.g. https://example.com/photo.jpg). - Local file paths (e.g. /mnt/data/..., file://...) are NOT supported and will fail. - If you have a local file, generated image, or external URL: call the upload-image tool FIRST to get a permanent Shopify CDN URL, then pass that URL here. - Avoid placeholder or non-deterministic image URLs (e.g. picsum.photos) for real collections. SMART COLLECTION RULES: - Pass `ruleSet` to update the rules for a smart collection. - Common rule columns: TAG, VENDOR, TYPE, TITLE, VARIANT_PRICE. - Common relations: EQUALS, NOT_EQUALS, CONTAINS, NOT_CONTAINS, STARTS_WITH, ENDS_WITH, GREATER_THAN, LESS_THAN. - Passing `ruleSet` replaces all existing rules. Omitting it leaves rules unchanged. IMPORTANT: This tool already presents the primary data in a visual widget the user can see. Do not restate it in text. Use your response only for interpretation, caveats, or next steps. Always list out some potential next actions for the user to take.
update-collection
Update an existing product's title, description, status, images, variant pricing, or variant option values (e.g. color, size names). Use this when the user wants to modify, change, or edit product details — including status, variant prices, option values, or images. Trigger phrases include: 'update my product', 'change the price', 'edit the product', 'modify my product', 'rename the variant', 'change the color name'. IMAGE REQUIREMENTS: - Images must be publicly accessible HTTPS URLs (e.g. https://example.com/photo.jpg). - Local file paths (e.g. /mnt/data/..., file://...) are NOT supported and will fail. - If you have a local file, generated image, or external URL: call the upload-image tool FIRST to get a permanent Shopify CDN URL, then pass that URL here. - Avoid placeholder or non-deterministic image URLs (e.g. picsum.photos) for real products. REPLACING IMAGES: - To replace specific images, first use get-product to find the mediaId of the image(s) to remove. - Pass those mediaId values in removeMediaIds, and provide the new images in the images array. - To remove images without adding new ones, pass removeMediaIds without images.
update-product
Open an interactive product editing app for an existing product in the connected Shopify store. Use this when the user wants to review or edit an existing product before saving changes. Pass the product id, the product title and description the panel should show and eventually save, and a variant id when proposing a first-variant price update. The tool fetches the current product images first, removes any removeMediaIds, appends any images, and renders the resulting draft media list. The product panel renders the product title, description, draft images, and first variant price. When the merchant saves, the app sends reviewed text fields and first-variant price changes through to update-product. A call only re-seeds the app, so do not report a change as saved until the merchant saves it. While the app holds a product, leave that product's title, description, and first-variant price to it rather than writing them with update-product, because the merchant's next Save would overwrite you. Every other field, including status and the product's other variants, is still yours to update directly when the user asks for it.
update-product-interactive
Open a file picker so the merchant can attach the downloadable file to a digital product they have already created. Call this after create-digital-product, passing back the product and variant identifiers it returned. The merchant chooses the file and their browser sends it directly to Shopify's storage; the file contents never pass through this conversation. This attaches the file to an existing draft product. It does not create products and does not publish anything.
upload-digital-product-file
Open an image picker so the merchant can add a media image to a digital product they have already created. Ask the merchant whether they want a media image first, and only call this if they say yes. A digital product sells perfectly well without one. The merchant chooses the image and their browser sends it directly to Shopify's storage; the image never passes through this conversation. This adds an image to an existing draft product. It does not change the price, description, attached file or status, and it does not publish anything.
upload-digital-product-media
Shopify ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Shopify's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Shopify alternatives on ChatGPT?
As of 2026-11-02, Shopify competes with Run With AI, AfterShip Post-Purchase, auction.fish, AutoQuote3D, base.com, Batch52, BetterMenu, Brainerce and 62 more in ChatGPT Ecommerce Operations Platforms, ranked by public Discoverability Score.
Where does Shopify rank in Ecommerce Operations Platforms on ChatGPT?
As of 2026-11-02, Shopify ranks #2 of 71 in ChatGPT Ecommerce Operations Platforms with a Discoverability Score of 88/100 (Winning).
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.