Shopify Products
Create, update, and bulk-import Shopify products. Produces live products in the store via the GraphQL Admin API or CSV import.
Prerequisites
- Admin API access token (use the shopify-setup skill if not configured)
- Store URL and API version from
shopify.config.jsonor.dev.vars
Workflow
Step 1: Gather Product Data
Determine what the user wants to create or update:
- Product basics: title, description (HTML), product type, vendor, tags
- Variants: options (size, colour, material), prices, SKUs, inventory quantities
- Images: URLs to upload, or local files
- SEO: page title, meta description, URL handle
- Organisation: collections, product type, tags
Accept data from:
- Direct conversation (user describes products)
- Spreadsheet/CSV file (user provides a file)
- Website scraping (user provides a URL to extract from)
Step 2: Choose Method
Step 3a: Create via GraphQL (Recommended)
productCreate
Variables:
Curl example:
Batching multiple products: Create products sequentially with a short delay between each to respect rate limits (1,000 cost points/second).
productUpdate
Variables include id (required) plus any fields to update.
productDelete
productVariantsBulkCreate
Add variants to an existing product:
productVariantsBulkUpdate
Step 3b: Bulk Import via CSV
For 20+ products, generate a CSV and import through Shopify admin.
CSV Column Reference
Required columns:
Variant columns:
Image columns:
SEO columns:
Multi-Variant Row Format
The first row has the product title and details. Subsequent rows for the same product have only the Handle and variant-specific columns:
CSV Rules
- UTF-8 encoding required
- Maximum 50MB file size
- Handle must be unique per product -- duplicate handles update existing products
- Leave variant columns blank on variant rows for fields that don't change
- Images can be on any row -- they're associated by Handle
Published=TRUEmakes the product immediately visible
Import Steps
- Generate CSV using the column format above
- Use the template from
assets/product-csv-template.csvif available - Navigate to
https://{store}.myshopify.com/admin/products/import - Upload the CSV file
- Review the preview and confirm import
Use browser automation to assist with the upload if needed.
Step 4: Upload Product Images
Images require a two-step process -- staged upload then attach.
stagedUploadsCreate
Input per file:
Then upload to the staged URL, and attach with productCreateMedia:
productCreateMedia
Shortcut: If images are already hosted at a public URL, pass src directly in the product creation:
Step 5: Assign to Collections
collectionAddProducts
To find collection IDs:
Step 6: Set Inventory
inventorySetQuantities
Input:
To find location IDs:
Step 7: Verify
Query back the created products to confirm:
Provide the admin URL for the user to review: https://{store}.myshopify.com/admin/products
Critical Patterns
Product Status
New products default to DRAFT. To make them visible:
Always confirm with the user before setting status to ACTIVE.
Variant Limits
Shopify allows max 100 variants per product and 3 options (e.g. Size, Colour, Material). If you need more, split into separate products.
Price Formatting
Prices are strings, not numbers. Always quote them: "price": "29.95" not "price": 29.95.
HTML Descriptions
Product descriptions accept HTML. Keep it simple -- Shopify's editor handles basic tags:
<p>,<strong>,<em>,<ul>,<ol>,<li>,<h2>-<h6><a href="...">for links<img>is stripped -- use product images instead
Bulk Operations for Large Imports
For 50+ products via API, use Shopify's bulk operation:
This accepts a JSONL file with one product per line, processed asynchronously.
Asset Files
assets/product-csv-template.csv-- Blank CSV template with Shopify import headers

