Stage a JSONL file where each line is a productVariantsBulkUpdate input object containing the variant ID and new price, uploadable via the stagedUploadsCreate mutation
Upload the JSONL file to the staged upload URL using a multipart PUT request, then pass the staged upload URL to the bulkOperationRunMutation mutation
Poll the bulkOperation query for status until it reaches COMPLETED, handling FAILED states by inspching the errorCode and partialDataUrl
Download the partial or full results JSONL from the objectUrl returned on completion and parse mutation outcomes for each variant
Flag variants where the mutation returned userErrors (e.g., price below cost or currency mismatch) and queue them for manual review
After the bulk operation completes, invalidate any CDN-cached product pages or price list cache entries that reference affected variants
Known gotchas
Shopify bulk mutations run asynchronously and can take minutes to hours for large catalogs; do not poll more frequently than every few seconds to avoid rate limit exhaustion
The bulkOperationRunMutation accepts only a single active bulk operation per shop at a time; check for an existing running operation before submitting a new one
JSONL line order is preserved in results but not guaranteed to match input order if partial failure occurs; always key results by variant ID, not array position
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp