Here's a story I hear in some form almost every week.
A made-up bookkeeping office builds an n8n workflow on Friday. New-client intake forms go to a webhook, the details land in a Google Sheet, and the office manager gets an email. They test it. Row 2 fills in perfectly. Everyone goes home happy.
On Monday, three new clients have filled in the form. The sheet is empty. Nobody got an email. One client has already called to ask whether the form worked.
Nothing was broken. The workflow was never published.
What "publish" means in n8n
Publishing a workflow makes it live. After you click Publish, the workflow runs on its own every time its trigger fires: on a schedule, when an email arrives, or when a form calls its Production URL.
Before you publish, it only runs when you test it in the editor. It can look finished, show green checkmarks on every node, and still do nothing at all when real data shows up.
(If you're reading an older guide that says "activate the workflow" or mentions an Active toggle, that's the same idea. Older n8n versions used that wording.)
Save vs Execute workflow vs Publish
The three buttons sound similar, and mixing them up is the root of most "it worked when I tested it" problems.
| Action | What it does | Use it when |
|---|---|---|
| Save | Stores your edits. The live workflow keeps its last published version. | You want to keep a change without making it live yet. |
| Execute workflow | Runs it once, right now, in the editor. Webhooks answer on the test URL only. | You're building and testing. |
| Publish | Hands the workflow to its trigger. Webhooks answer on the Production URL. | A full test has passed. |
The row that surprises people is Save. Saving a change does not push it to the live version. If you edit a published workflow and only save, real runs keep using the old version.
The webhook trap
Webhooks make this extra confusing because each one has two addresses:
- The test URL (it has
/webhook-test/in it) only listens while you're testing in the editor. - The Production URL (it has
/webhook/in it) only answers once the workflow is published.
So the bookkeeping office's problem was actually two problems at once. The workflow wasn't published, and the form was still pointed at the test URL it had used during testing. Publishing alone wouldn't have fixed it. The form also needed the Production URL.
The second trap: republishing
Say the office fixes everything, publishes, and the form works. A week later they add a "service needed" field using an Edit Fields node, test it, and save.
Real forms keep arriving without the new field. Why? Because the live workflow is still the version they published last week. In n8n, the Publish button lights up again when your saved version differs from the live one. Until you click it, your changes aren't live.
My rule: after any edit to a live workflow, glance at the Publish button before you close the tab.
The routine I use before going live
- Build with a manual trigger or the test URL. Run it with Execute workflow until a full run produces the right output.
- Swap the manual trigger for the real one. A Manual Trigger never runs on its own, so a workflow that still starts with one will never fire after publishing.
- Ask what could go wrong on real data. I paste a test run's output into ChatGPT or Claude and ask: what happens with a blank field, a duplicate row, a different timezone? It's a cheap second pair of eyes.
- Attach an error workflow. Once it's live, a mistake repeats on every run. An error workflow (an Error Trigger plus an email or Slack message) means a failed live run reaches you instead of a client.
-
Publish. Then open the Webhook node, switch to Production URL, and copy the address with
/webhook/in it into your form. - Send one real test through the live path. Submit the actual form, not the editor. Check the sheet and the email.
- After every later edit, republish. Save is not enough.
Why this matters for a small business
The cost of an unpublished workflow isn't the workflow. It's the leads, invoices or client requests that quietly went nowhere while everyone assumed the automation was handling them. For the bookkeeping office, that was three new clients over a weekend and one awkward phone call.
The fix is small: know which button does what, and check the live path once before you trust it.
Learn it hands-on
The plain-English definition, with the Save, Execute and Publish table and the common confusions, is here: What does publishing a workflow mean in n8n?
To practice the whole routine, the free lesson n8n: Execute Step, Execute Workflow and Publish has you build a new-client form workflow for a made-up bookkeeping office, test it, publish it, switch to the Production URL, then add a field and republish. It takes about 6 minutes, and it's module 4 of the free n8n Jump Start course.
Top comments (0)