4 weeks, 20 sessions
10 hrs per week
Goal, n8n + AI workflows

How to use this guide

This single page is the whole course. Each session is 2 hours. Open the session, follow the checklist in order, click the video link, then do the build steps in n8n.

1
Watch
One YouTube video, take notes.
2
Build
Hands-on in n8n, follow exact actions.
3
Verify
Test with sample inputs, fix errors.
4
Document
Write a short README for each workflow.
Non negotiables
Always build while watching. Always return structured JSON. Always add basic error handling. Always write a README.

What you need

  • n8n, n8n Cloud or self-hosted.
  • A notes doc, Notion or Google Doc.
  • Optional, OpenAI API key for Week 3+, or swap to any other LLM provider node available in your n8n.

Recommended workflow naming convention:

W1S2 - Webhook Intake (v1)
W2S7 - Error Handling Sandbox (v1)
W4 Capstone - Daily Digest (v1)

Week 1, n8n fundamentals

Goal, learn the n8n editor, triggers, nodes, and data. Build 5 small workflows and document each one.

Outcome, build + run 5 workflows
Core, JSON, triggers, data flow
1
W1S1, Setup + first workflow Install, create workspace, run first workflow, learn the UI.
2 hours

Watch, 0:00 to 0:25

Build, 0:25 to 1:35

  • Create n8n account, or run self-hosted n8n.
  • Create workflow W1S1 - Hello Workflow.
  • Add nodes: Manual Trigger , Set.
  • In Set node, set fields: message = Hello from n8n, createdAt = current time using expression {{new Date().toISOString()}}.
  • Run workflow, inspect output, take a screenshot.
// Set node fields
message: "Hello from n8n"
createdAt: {{new Date().toISOString()}}

Verify + document, 1:35 to 2:00

  • Verify output is valid JSON with both fields present.
  • Create README notes: Purpose, Nodes, Inputs, Outputs, How to run.
  • Write 3 ways you could use a workflow like this in real life.
2
W1S2, APIs + HTTP Request node Call a public API, map fields, and return structured output.
2 hours

Watch, 0:00 to 0:25

Build, 0:25 to 1:35

  • Create workflow W1S2 - Quote API.
  • Add nodes: Manual Trigger , HTTP Request , Set.
  • HTTP Request, Method GET, URL: https://api.quotable.io/random.
  • Set node, output only these fields: quote, author, length, fetchedAt.
  • Use expressions to map from HTTP output.
// Example Set node expressions
quote: {{$json["content"]}}
author: {{$json["author"]}}
length: {{$json["length"]}}
fetchedAt: {{new Date().toISOString()}}

Verify + document, 1:35 to 2:00

  • Verify Set node returns only the 4 fields, no extra clutter.
  • Run 3 times, confirm quote changes.
  • README, include the API URL, and a note about rate limits.
3
W1S3, Webhooks intake Receive data from the outside world using a webhook trigger.
2 hours

Watch, 0:00 to 0:20

Build, 0:20 to 1:40

  • Create workflow W1S3 - Webhook Intake.
  • Add nodes: Webhook , Set , Respond to Webhook.
  • Webhook, Method GET, Path: /intake (or anything).
  • Execute workflow, then open the test URL with query params: ?name=Sam&topic=n8n.
  • Set node maps: name, topic, receivedAt, source = webhook.
  • Respond to Webhook returns JSON { ok: true, name, topic }.
// Response JSON
{
  "ok": true,
  "name": "{{$json["name"]}}",
  "topic": "{{$json["topic"]}}"
}

Verify + document, 1:40 to 2:00

  • Verify browser shows JSON response, not hanging.
  • Test missing params, open URL without name, handle fallback with expression default.
  • README includes how to test the webhook and example URL.
4
W1S4, Data items + looping Understand items arrays, transform lists, and map each item.
2 hours

Watch, 0:00 to 0:20

Build, 0:20 to 1:40

  • Create workflow W1S4 - Multi Item Greetings.
  • Manual Trigger , Function , Set.
  • Function returns multiple items with names.
  • Set node adds a greeting using expression.
// Function node
const names = ["Alice","Bob","Charlie","Dana"]; 
return names.map(n => ({ json: { name: n } }));
// Set node expression
message: {{`Hello, ${$json.name}!`}}
createdAt: {{new Date().toISOString()}}

Verify + document, 1:40 to 2:00

  • Verify 4 output items exist and each has a unique message.
  • Write README and include what changes if items length is 1000.
5
W1S5, Conditions, If, Switch Branch a workflow and route outputs based on rules.
2 hours

Watch, 0:00 to 0:25

Build, 0:25 to 1:35

  • Create workflow W1S5 - Score Router.
  • Manual Trigger , Set , If , Set (Pass) , Set (Fail).
  • Set node sets score to 75.
  • If checks score >= 60.
  • Pass branch outputs result: pass, Fail branch outputs result: fail.
// Pass Set node
result: "pass"
score: {{$json.score}}

// Fail Set node
result: "fail"
score: {{$json.score}}

Verify + document, 1:35 to 2:00

  • Run twice, once with score 75, once with score 50.
  • README includes the condition and what it is used for.

Week 2, reliable workflows

Goal, add scheduling, useful nodes, error handling, debugging, and sharing.

Outcome, one mini automation shipped
Core, logging, retries, stability
6
W2S6, Useful nodes, Cron + Merge Scheduled triggers and combining data streams.
2 hours

Watch, 0:00 to 0:25

Build, 0:25 to 1:35

  • Create workflow W2S6 - Scheduled Quote + Time.
  • Nodes: Cron , HTTP Request , Set (Time) , Merge , Set (Final).
  • Cron, every 5 minutes for testing.
  • HTTP, fetch quote from quotable API.
  • Set (Time), create now fields: runAt, timezone.
  • Merge, combine quote + time into one item.
  • Final Set, return quote, author, runAt.
// Merge mode suggestion
Use "Merge By Position" if both branches output one item.

// Final output
quote: {{$json.content}}
author: {{$json.author}}
runAt: {{$json.runAt}}

Verify + document, 1:35 to 2:00

  • Run manually first, then activate Cron briefly to observe an automatic run.
  • Deactivate Cron after testing if you do not want ongoing runs.
  • README includes why Merge is needed and which merge mode you used.
7
W2S7, Error handling patternsContinue on fail, error trigger, and graceful fallbacks.
2 hours

Watch, 0:00 to 0:25

Build, 0:25 to 1:35

  • Create workflow W2S7 - Failure Sandbox.
  • Manual Trigger , HTTP Request (bad URL) , Set (Fallback) , IF (error exists).
  • HTTP Request URL: https://api.this-domain-should-not-exist-123.com.
  • Enable Continue On Fail on HTTP node.
  • If checks {{$json.error}} is not empty.
  • True branch sets status: failed, includes errorMessage.
  • False branch sets status: ok.
// If condition expression idea
{{$json.error !== undefined}}

// Fallback Set fields
status: "failed"
errorMessage: {{$json.error.message || "unknown"}}
failedAt: {{new Date().toISOString()}}

Verify + document, 1:35 to 2:00

  • Verify workflow completes even when HTTP fails.
  • README includes your chosen failure strategy, stop, continue, alert.
8
W2S8, Debugging like a proExecution logs, node-by-node runs, pinning data.
2 hours

Watch, 0:00 to 0:20

Build, 0:20 to 1:40

  • Pick any previous workflow and introduce a bug on purpose, wrong field name or bad expression.
  • Use node execution view to find the exact node where data changed.
  • Use pin data, if available, to reuse output while adjusting downstream nodes.
  • Create workflow W2S8 - Debug Notes and paste your debugging checklist into a Set node so it lives in n8n.
// Example Debug Checklist text to store
1) What is the trigger input
2) What does each node output
3) Are expressions referencing the right fields
4) Any credential errors
5) Any rate limit or timeout
6) Does final output match schema

Verify + document, 1:40 to 2:00

  • Write 3 bugs you encountered and the fix pattern you used.
  • README includes your checklist and a real example from today.
9
W2S9, Sharing workflowsExport, import, handover documentation.
2 hours

Watch, 0:00 to 0:20

Build, 0:20 to 1:40

  • Each learner chooses their best workflow from Week 1 or 2.
  • Export workflow as JSON and swap.
  • Import the other person’s workflow.
  • Update any missing credentials and re-run to confirm it works.
  • Create a standard README template in your notes doc, reuse it for every workflow.
# README template
Name:
Purpose:
Trigger:
Nodes:
Inputs:
Outputs:
Credentials needed:
How to test:
Failure modes:
Version notes:

Verify + document, 1:40 to 2:00

  • Verify you can run your partner’s workflow without them touching your setup.
  • Add missing credential notes to the README.
10
W2S10, Mini project, practical automationShip a useful workflow and document it properly.
2 hours

Watch, 0:00 to 0:15

Build, 0:15 to 1:45

  • Create workflow W2S10 - Daily Quote Digest.
  • Use Cron daily at a chosen time, or manual trigger for now.
  • Fetch a quote via HTTP, format a message, then send to one output channel.
  • Output options, Email node, Slack, or just a Respond to Webhook.
  • Add basic error handling, if HTTP fails, send a different message.
// Message format example
subject: "Daily Quote"
body: "\"{{$json.content}}\"\n\n- {{$json.author}}\n\nSent: {{new Date().toISOString()}}"

Verify + document, 1:45 to 2:00

  • Run end-to-end, confirm the final message arrives.
  • Write a proper README with failure modes and credentials.

Week 3, add AI

Goal, integrate an LLM node, create structured outputs, route based on AI classification, and practice prompt design.

Outcome, 2 AI workflows built
Core, prompts, schemas, guardrails
11
W3S11, OpenAI node setupCredentials, first AI call, structured JSON output.
2 hours

Watch, 0:00 to 0:25

Build, 0:25 to 1:35

  • Create workflow W3S11 - First AI Call.
  • Manual Trigger , Set (Input) , OpenAI node , Set (Normalize).
  • Set (Input) creates: question = a real question.
  • OpenAI prompt references question and forces JSON response.
  • Normalize Set extracts: answer, confidence, sourcesSuggested.
// Prompt template
You are a helpful assistant.
Return ONLY valid JSON with keys: answer, confidence (0-1), sourcesSuggested (array).
Question: {{$json.question}}

Verify + document, 1:35 to 2:00

  • Verify response parses as JSON, no extra text.
  • Run 3 different questions.
  • README includes your JSON schema and why structure matters.
12
W3S12, AI classification + routingClassify inbound messages and route to different paths.
2 hours

Watch, 0:00 to 0:20

Build, 0:20 to 1:40

  • Create workflow W3S12 - Support Triage.
  • Webhook trigger receives message.
  • OpenAI node returns JSON with category and priority.
  • Switch node routes category, billing, tech, sales, other.
  • Each route ends with a Respond to Webhook JSON acknowledging route.
// Classification prompt
Return ONLY JSON: {"category":"billing|tech|sales|other","priority":"low|medium|high","reason":"..."}
Message: {{$json.message}}

Verify + document, 1:40 to 2:00

  • Test with 6 sample messages, confirm routing makes sense.
  • Write README and include your test messages and results.
13
W3S13, AI summariser workflowSummarise incoming text and format output cleanly.
2 hours

Build, 0:15 to 1:45

  • Create workflow W3S13 - Text Summariser.
  • Webhook receives text.
  • OpenAI returns JSON with summary, keyPoints, actionItems.
  • Respond to Webhook returns the JSON directly.
// Summariser prompt
Return ONLY JSON with keys: summary (max 60 words), keyPoints (array max 5), actionItems (array max 5).
Text: {{$json.text}}

Verify + document, 1:45 to 2:00

  • Test with a long paragraph and confirm summary length constraint.
  • README includes exact schema and sample input/output.
14
W3S14, Prompt engineering drillsMake outputs consistent, safe, and structured.
2 hours

Watch, 0:00 to 0:35

Build, 0:35 to 1:35

  • Pick W3S12 or W3S13 and improve its prompt.
  • Add a JSON schema example inside the prompt.
  • Add a refusal rule, if the input is empty, return {"error":"empty input"}.
  • Add a consistency rule, keep category values strict.
// Example schema snippet
Output example:
{"category":"tech","priority":"medium","reason":"password reset request"}
If message is empty, return: {"error":"empty input"}

Verify + document, 1:35 to 2:00

  • Re-test your 6 messages and compare routing accuracy before vs after.
  • In README, include prompt v1 vs prompt v2 and what improved.
15
W3S15, Capstone selection + blueprintPlan Week 4 capstone with exact nodes, schemas, and tests.
2 hours

Read, 0:00 to 0:20

Plan, 0:20 to 2:00

  • Pick ONE capstone per learner. Options below.
  • Create a blueprint in your notes doc with nodes, inputs, outputs, and test cases.
  • List credentials you will need and create them now.
  • Define a strict JSON output schema and a failure strategy.
// Capstone options
1) Daily digest, fetch RSS or API, summarise, email or slack
2) Lead qualifier, webhook intake, enrich, score, route
3) Support triage, classify, draft reply, send to review queue
Blueprint must include, workflow name, trigger type, node list in order, schemas, sample inputs, sample outputs, error paths, and how to test.

Week 4, capstone build

Goal, ship a production style workflow with logs, fallbacks, documentation, and a demo.

Outcome, 1 capstone shipped per learner
Core, testing, monitoring, stability
16
W4S16, Capstone build, part 1Implement trigger, intake, and first processing steps.
2 hours

Action plan, 0:00 to 2:00

  • Create workflow named W4 Capstone - (your project name).
  • Add Trigger, webhook or cron or email trigger, based on blueprint.
  • Create Set node to normalise input schema, required fields only.
  • Add logging step, use a Set node to create runId and startedAt.
  • Implement first external call if needed, HTTP or integration node.
  • Stop after the first major milestone runs end to end.
// Run id helper in a Code or Function node
const runId = `${Date.now()}-${Math.random().toString(16).slice(2)}`;
return [{ json: { ...$json, runId, startedAt: new Date().toISOString() } }];

Deliverable

  • 1 workflow that triggers and produces a clean normalised JSON payload.
  • README section, Purpose, Trigger, Input schema, How to test.
17
W4S17, Capstone build, part 2Add AI step with strict JSON output schema.
2 hours

Action plan, 0:00 to 2:00

  • Add OpenAI node for the main intelligence step.
  • Force JSON only output and define schema explicitly.
  • Add validation, if output missing required keys, set status failed and return fallback.
  • Add routing with If or Switch based on AI output.
  • Keep outputs small and predictable.
// Prompt skeleton
Return ONLY JSON matching this schema:
{"decision":"...","reason":"...","nextSteps":["..."]}
Input: {{JSON.stringify($json)}}

Deliverable

  • AI step that outputs structured JSON reliably.
  • At least 2 routes based on AI output.
  • README, schema, 5 test cases with expected outputs.
18
W4S18, Capstone outputsSend results to email, sheets, slack, or CRM.
2 hours

Action plan, 0:00 to 2:00

  • Add final output integration, email, slack, sheets, or webhook response.
  • Format output for humans, keep a structured JSON version too.
  • Add a summary text field that is easy to read.
  • Run 10 tests, record outputs, fix formatting problems.
// Example human summary
summary: {{`Decision: ${$json.decision}\nReason: ${$json.reason}\nNext: ${($json.nextSteps||[]).join(", ")}`}}

Deliverable

  • End-to-end workflow that produces a useful output externally.
  • README updated with credentials and output format.
19
W4S19, Production hardeningLogging, retries, timeouts, and safe failure.
2 hours

Action plan, 0:00 to 2:00

  • Add error handling, continue on fail only when safe.
  • Add an error route that returns a predictable JSON error object.
  • Rate limit protection, use Wait or Split in Batches if calling AI multiple times.
  • Cost guardrail, limit items processed per run.
  • Add a logging output, store runId, status, and key fields to a sheet or database if possible.
// Error object format
{
  "ok": false,
  "runId": "{{$json.runId}}",
  "error": "...",
  "step": "openai",
  "timestamp": "{{new Date().toISOString()}}"
}

Deliverable

  • Workflow survives bad inputs and external failures.
  • README includes failure modes and how to recover.
20
W4S20, Demo + handoverPresent capstone like a client delivery.
2 hours

Action plan, 0:00 to 2:00

  • Prepare a 5 minute demo walk-through of your workflow.
  • Show, trigger, data flow, AI step, output, error case.
  • Export workflow JSON.
  • Write a final README that another person could use to run it.
  • Self assess using the final checklist below.
// Demo script outline
1) What problem this solves
2) Trigger and input schema
3) Key nodes and decisions
4) AI prompt and schema
5) Output and where it goes
6) Failure modes and safeguards

Deliverable

  • Capstone workflow JSON export.
  • README + test cases.
  • 5 minute demo complete.

Final skills checklist

Tick these when you can do them without help. This is the graduation standard.

n8n basics

I can create, run, and debug a workflow, and I can explain nodes, triggers, and data items.

APIs

I can use HTTP Request to call an API and map the response into a clean JSON output schema.

Webhooks

I can build a webhook intake that accepts params or JSON and returns a response.

Logic

I can route workflows using If or Switch, and I can explain the routing rules.

Error handling

I can add fallbacks, continue on fail where appropriate, and return predictable error objects.

AI integration

I can call an LLM node and force structured JSON output.

Prompting

I can improve prompts to increase consistency and reduce hallucinations.

Shipping

I can ship a workflow that produces an external output, email, slack, sheets, CRM, and runs reliably.

Handover

I can export a workflow and write a README that someone else can use to run it.

Capstone

I built a capstone workflow with logs, error handling, schemas, and a 5 minute demo.