Changelog
Follow up on the latest improvements and updates.
RSS
Mechanic now supports Shopify bulk operation mutations
Mechanic can now monitor Shopify
bulkOperationRunMutation
jobs the same way it already monitors bulk operation queries, and return the completed JSONL results to your task using the existing mechanic/shopify/bulk_operation
event.Bulk operation mutations are useful when you need to run the same Shopify Admin API mutation many times. Your task prepares a JSONL file where each line contains the variables for one mutation run, uploads that file to Shopify, starts the bulk mutation, and then waits for Shopify to finish processing it asynchronously.
How it works
- Create a staged upload in Shopify.
- Upload a JSONL variables file.
- Start bulkOperationRunMutationwith the staged upload path.
- Wait for Mechanic to receive the completed mechanic/shopify/bulk_operationevent.
- Read the completed results from bulkOperation.objects.
Each result object represents the GraphQL response for one JSONL input line. This lets your task inspect which mutation runs succeeded, and which returned GraphQL errors or mutation
userErrors
.This uses the same
bulkOperation
variable as bulk operation queries. If a task handles both operation types, check bulkOperation.type
: QUERY
for bulk operation queries, or MUTATION
for bulk operation mutations.Code editor snippets
We also added task code editor snippets for common bulk operation starters:
boilerplate:bulk_operation_query
boilerplate:staged_upload_jsonl
boilerplate:bulk_operation_mutation
Learn more
Mechanic now supports custom Shopify webhooks.
This gives advanced users a new way to receive Shopify webhook events in Mechanic, with Shopify filtering deliveries before they arrive, customizing payload fields, including metafields, and routing events onto custom
user/...
event topics. This also unlocks something new for Mechanic: Shopify metaobject webhook event topics.
You can now create custom Shopify webhooks for:
shopify/metaobjects/create
shopify/metaobjects/update
shopify/metaobjects/delete
Each metaobject webhook uses a
type:
filter, so you can subscribe to the exact metaobject definition your task cares about. This filter is required by Shopify.What this is good for:
- receiving only matching Shopify webhook deliveries
- routing product updates to one specific task instead of triggering every task subscribed to shopify/products/update
- including known metafields directly in the webhook payload
- subscribing to Shopify metaobject events
A practical example: product updates.
With a regular
shopify/products/update
subscription, every enabled task listening to that topic receives every product update. If you have 20 product-update tasks, all 20 are triggered, and each task has to decide whether the update matters.With a custom Shopify webhook, Shopify can filter first, and Mechanic can route only the matching deliveries to a purpose-specific
user/...
topic, like user/products/active_update
. That gives you a cleaner one-to-one path from a Shopify event to the task or workflow that should respond.Most Shopify-triggered tasks should still use regular
shopify/...
subscriptions. Custom Shopify webhooks are for cases where Shopify-side filtering, payload customization, metafields, or metaobject events matter before the event reaches Mechanic.A few gotchas:
- Shopify webhook filters are not exactly the same as Shopify Admin search queries.
- Payload customization does not make a webhook unique. Shopify only allows one enabled webhook for the same Shopify topic and filter, you can work around this with neutral filters like id:*andcreated_at:*.
- Metaobject webhooks require a concrete type: filter.
We also cleaned up Mechanic’s Settings area, removing the old tab layout and making the growing set of settings easier to scan and navigate.
Learn more:
When preparing event webhooks to send to apps like Mechanic, Shopify uses payloads as defined by a specific version of their Webhook API.
Effective immediately, Shopify events in Mechanic now use webhook payloads from version 2026-04 of the Shopify Webhook API.
‼️ Shopify has flagged these webhook API changes as "Action Required" (source):
References
Mechanic now has app-wide keyboard shortcuts.
Use
Cmd/Ctrl + J
to toggle Ask Mechanic (our built-in AI assistant), ?
to open the shortcuts sheet, and sequence shortcuts like g then g
to jump home.You can also jump straight to the task library, events, settings, help, or a new task without reaching for the mouse.
Small feature, big quality-of-life upgrade.

Task exports now include each task’s unique ID.
This doesn’t change how imports work. If you import task JSON that contains an ID, Mechanic ignores it during import. The ID is included only for external record keeping, so you can reliably identify a task outside of Mechanic even if the task title changes later.
This is especially useful if you work with exported tasks in another tool and need a stable reference that isn’t tied to the task name.
Mechanic now includes a built-in AI assistant called
Ask Mechanic
. It's available directly inside the app, look for the ✨ button in the bottom-right corner of any page.Ask Mechanic has access to Mechanic's complete documentation and Shopify's GraphQL Admin API schema and docs (Shopify Dev MCP), so it can answer platform questions, help you find the right task from the library, and explain how features work, all without leaving the app.
What it can do
Ask Mechanic can search Mechanic's task library, pull up full task code and documentation, look up Shopify's Admin API, and validate your GraphQL queries. When it suggests a task, you can open the code directly in the task editor with one click.
A few things worth knowing
- Conversations are preserved as you navigate between pages, and your last few conversations are saved so you can pick up where you left off.
- You can paste task exports, Liquid scripts, or logs directly into the chat for analysis. Ask Mechanic will walk through the code with you.
- Ask Mechanic identifies your installed tasks by name, but it can't see your task code or option values - your configuration stays private. To get help with a specific task's code, paste the relevant export or snippet into the chat.
For developers
Ask Mechanic is a great starting point, but if you're writing tasks in an AI coding tool like Claude or Codex, check out the full suite of AI tools for Mechanic — including the MCP server for searching docs and the task library, and Agent Skills for task-writing skillls.
You can now collect user input when running tasks from Shopify admin action links. If a task includes
__userform
options, the Run tasks page will show those fields and pass values into the run as input.<name> (with event.data
still supported for compatibility). This appears when exactly one task is selected; in batch mode, the same input is applied to every selected resource.How to use it
- Add __userform to task options.
- Subscribe the task to mechanic/user/{resource} (so it shows up in Run tasks).
- On the Run tasks page, select the task and fill in the form. In Liquid, read values via input.<name>.
Learn more:
- Admin action links: https://learn.mechanic.dev/core/shopify/admin-action-links
- User Form: https://learn.mechanic.dev/core/tasks/user-form
When preparing event webhooks to send to apps like Mechanic, Shopify uses payloads as defined by a specific version of their Webhook API.
Effective immediately, Shopify events in Mechanic now use webhook payloads from version 2026-01 of the Shopify Webhook API.
‼️ Shopify has flagged these webhook API changes as "Action Required" (source):
- Tax summary webhook "created_at" field now returns UTC timezone
- Tax webhook summary and calculation requests now use Global IDs
- Deprecation of the checkout_and_accounts_configurations/update webhook
References
__meta
works across positional, mapped, and GraphQL action tags. Add it inline; Mechanic moves the value into the action’s meta - no block syntax needed. __perform_event: false
skips the follow-up mechanic/actions/perform event, this can be your event history quieter.They can be used alongside each other.
Examples
{%- assign meta = hash -%}
{%- assign meta["source"] = "cache" -%}
{%- assign meta["trace"] = "abc123-random" -%}
{% action "cache", "set", "foo", "bar", __meta: meta, __perform_event: false %}
{%- assign meta = hash -%}
{%- assign meta["tagged_by"] = "thing" -%}
{% action "shopify", __meta: meta %}
mutation {
tagsAdd(id: "gid://shopify/Customer/1234567890", tags: ["vip"]) {
node { id }
userErrors { field message }
}
}
{% endaction %}
Mechanic now supports some new OAuth-powered connections, making it easier than ever to link your favorite tools. 🚀
New Actions:
- Airtable – connect Mechanic to your bases for seamless syncing and automation.
- Slack – send messages, alerts, and files directly from your tasks using the new Mechanic Slack app.
Advanced Google Action:
For power users! Interact directly with Google Drive, Sheets, and Docs APIs — unlocking full REST API access via OAuth2.
Can’t wait to see what you build! ✨
Load More
→