Built a 15-workflow Shopify ops pack for non-devs - the edge cases that cost me the most time

Hey everyone,

I built a set of 15 workflows covering the repetitive half of running a Shopify store: support replies, order alerts, low-stock warnings, abandoned cart recovery, and daily sales reports. The design constraint was unusual and it shaped everything: the person importing these doesn’t write expressions and doesn’t read JSON. Sharing what that constraint taught me, because most of it isn’t in the docs.

The stack: Shopify Trigger / Shopify node, HTTP Request, Slack, Gmail, SMTP, Schedule Trigger, Code, IF, plus Basic LLM Chain + OpenAI Chat Model for the AI steps. Native nodes only, on purpose - no community nodes, so everything behaves the same on Cloud and self-hosted.

Five things that made the workflows survivable for non-devs:

  1. One CONFIG node per workflow. Every user-editable value (channel name, threshold, store name, tone) lives in a single Set node named CONFIG - Edit Me First, pinned next to a sticky note. Users never touch an expression. Hard rule: no secrets in CONFIG - API keys only in Credentials, never in a Set node that gets exported with the workflow.

  2. Schedule Trigger settings can’t come from CONFIG. Obvious in hindsight: the trigger fires before CONFIG runs, so “run at 8am” has to be edited on the trigger node itself. I document that explicitly instead of pretending it’s configurable.

  3. “Always output data” changes your math. The daily sales report must send even on a zero-order day (silence reads as “is it broken?”). Setting the lookup to always output data fixes that - but the placeholder item then pollutes the count, and a zero-sales day reports 1 order instead of 0 until the aggregation filters it out. Worth noting it’s a node-level setting, not a parameter.

  4. A second lookup multiplies your data unless you pin it. The report compares yesterday to the day before. Without Execute Once on the second lookup, it runs per incoming item and the day-before count gets multiplied by yesterday’s order count. Silent, plausible, wrong numbers - the worst kind of bug.

  5. Guest checkout breaks naive personalization. POS and API-created orders often arrive with a customer object whose first/last name are empty strings - so a null check isn’t enough, and you ship “Hi undefined undefined”. Every template needs a defensive fallback. I only caught this in end-to-end testing against a real dev store; it never showed up while building.

A sixth one that’s a product decision rather than a technical trick: decide per workflow whether silence is success. The low-stock alert stays quiet when nothing is low. The daily report always sends. Same “no news” situation, opposite correct behaviour.

The 4 free workflows, JSON + a setup guide for each, MIT, no signup:

  • New Order AI Notifier - one-line AI summary of each order to Slack or email
  • Low Stock AI Alert - daily threshold check with AI-written reorder note
  • Abandoned Cart AI Recovery - personalised recovery email, Gmail or SMTP
  • Daily Sales Numbers - yesterday vs. the day before, AI commentary

Full disclosure: these are the free part of a paid 15-workflow pack I sell. The free four are complete and include the AI layer - the paid pack is breadth (11 more workflows), PDF guides and support, not a crippled-demo situation.

Happy to answer anything about the build - especially the aggregation edge case in #3 and #4, those two cost me an evening each.