# Your First n8n Workflow: the one-page checklist

From Distru's No Bullshit AI Course, module 05, lesson 2. Version 1.0 (2026-09-17). CC0.
Print it. Tick it. Nothing on this page needs code.

## Before you build

- [ ] Write the rule in one sentence a new hire could follow. Example: "Every morning at 6, every order that is ready to ship and due today becomes Delivering." If the sentence has an "it depends", it is not ready to be a workflow.
- [ ] Count how many records it touches on a normal day. Under 5? Do it by hand for another month.
- [ ] Decide who gets the message when it runs, and who gets the message when it fails. Two names, written down.
- [ ] Make an API key that can only do what this workflow does (view orders, edit orders). Nothing else.

## Setting up n8n (one time)

- [ ] Pick where it runs: n8n Cloud (they host it) or self-hosted (your server, Docker). For a first workflow, either. Docs: https://docs.n8n.io/hosting/
- [ ] Set the instance or workflow **timezone**. Self-hosted defaults to America/New_York; a 6 a.m. schedule in the wrong zone runs at 3 a.m. https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/
- [ ] Put the API key in **Credentials**, never in a node. Header Auth, name `Authorization`, value `Bearer YOUR_TOKEN`.
- [ ] Add the Slack credential the same way.

## Import and check the workflow

- [ ] Import the JSON (Workflow menu > Import from file).
- [ ] Open every node once. Read the name. Does it match the sentence from step one?
- [ ] Config node: `DRY_RUN` is `true`. Leave it.
- [ ] Both HTTP nodes point at the credential you made, not at `REPLACE_ME`.
- [ ] Slack node points at a channel people actually read.

## First runs

- [ ] Click **Test workflow**. Read the output of the fetch node. Are those today's orders? Open two of them in Distru and compare.
- [ ] Read the Slack message. It should start with `DRY RUN:` and list the order numbers you expected.
- [ ] Do that for three mornings. Same list every time as you would have done by hand? Then flip `DRY_RUN` to `false`.
- [ ] First live run: watch it. Open one order it changed. Check the status and the timestamp.
- [ ] Turn the schedule on (toggle top right, **Active**).

## After it is live

- [ ] Workflow Settings > **Error workflow**: point it at a tiny workflow that starts with an Error Trigger and posts to Slack. Silence is not success. https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/
- [ ] Put the two names, the API key's location and "how to turn it off" on one page. That page is the runbook (lesson 4 has the template).
- [ ] Calendar reminder, first Monday of the month: open the executions list, count failures, read one success end to end.

## Signs you should stop and ask someone

- The fetch node returns more than you expected, or nothing, three days running.
- Failures say `400` with a message about fulfillment or a transfer. The workflow is fine; the order is not ready. Fix the order, not the workflow.
- You are tempted to add a second "if" to handle a special case. Write the special case down first. Then decide.
