GODRICH

9 n8n Workflow Examples, Zero Accounts Needed

n8n connects apps into automated tasks without writing code. If you're building with AI tools and just ran into this name, these n8n workflow examples run

Auto-plays · click a tile to jump to its section · all nine in one zip

All nine execute the moment you hit Manual Trigger, and every item calling a public API was checked for a real 200. The nine are ordered the way real automation grows. Three receive data first (01 RSS, 02 a public API, 03 a webhook), two run on a schedule (04 a weekly report, 05 batching), three combine and clean data (06 merging, 07 tidying, 08 extracting), and one routes by condition (09 switching). Most automations you build later will follow this same shape.

01RSS daily digest

A Schedule Trigger wakes up every morning at 7am (Manual Trigger runs it on demand too), RSS Read pulls the Hacker News front page, Limit keeps the first 10 entries, and a Code node bundles titles and links into one markdown block in a digest field. Reach for this when you want a team morning briefing on autopilot, or just following blogs in one place instead of checking each site by hand.

Schedule + ManualRSS Read → Limit → CodeV2 실행 확인
{
  "name": "Build Digest",
  "type": "n8n-nodes-base.code",
  "typeVersion": 2,
  "parameters": {
    "jsCode": "const lines = $input.all().map(item => `- [${item.json.title}](${item.json.link})`);\nconst digest = '# Daily Digest\\n\\n' + lines.join('\\n');\nreturn [{ json: { digest } }];"
  }
}

02Public API to HTML table

HTTP Request calls the keyless open-meteo weather API, Set keeps only temperature, wind speed, and the timestamp, and the HTML node's Convert to HTML Table operation turns them into a table. Its output field is named table, not html. Use it to fill a dashboard widget or to drop straight into an email body table.

HTTP RequestSet → HTMLV2 실행 확인
{
  "name": "Build Table",
  "type": "n8n-nodes-base.html",
  "typeVersion": 1.2,
  "parameters": {
    "operation": "convertToHtmlTable",
    "options": {
      "capitalize": true,
      "caption": "Seoul current weather"
    }
  }
}

03Webhook validate and respond

A Webhook receives a POST, IF checks that both email and name are present, and Respond to Webhook returns 200 or 400 depending on the branch. This item is import-verified only — running it for real needs a live webhook URL, which only exists once n8n is running. This is the skeleton to reach for when you're receiving forms or handling external service callbacks that hit you first.

WebhookIF → RespondV1 가져오기 확인
{
  "conditions": [
    {
      "id": "c1",
      "leftValue": "={{ $json.body.email }}",
      "rightValue": "",
      "operator": {
        "type": "string",
        "operation": "notEmpty",
        "singleValue": true
      }
    },
    {
      "id": "c2",
      "leftValue": "={{ $json.body.name }}",
      "rightValue": "",
      "operator": {
        "type": "string",
        "operation": "notEmpty",
        "singleValue": true
      }
    }
  ],
  "combinator": "and"
}

04Weekly report skeleton

Schedule fires every Monday at 09:00, HTTP fetches a post list from jsonplaceholder, Aggregate rolls titles and a count into arrays, and a Markdown node turns those arrays into report text written to a report field. Timezone lives in the workflow settings. Reach for this when you need weekly KPIs pulled automatically or an ops summary waiting in your inbox every Monday morning.

Schedule triggerAtHour 9Aggregate → MarkdownV2 실행 확인
{
  "name": "Build Report",
  "type": "n8n-nodes-base.markdown",
  "typeVersion": 1,
  "parameters": {
    "mode": "markdownToHtml",
    "markdown": "={{ '# Weekly Report\\n\\n' + $json.postId.length + ' posts fetched this week.\\n\\n- ' + $json.title.slice(0, 5).join('\\n- ') }}",
    "destinationKey": "report",
    "options": {}
  }
}

05Loop over items in batches

Code generates 25 rows, and Loop Over Items splits them into batches of 5, each flowing through a Set node that stamps the batch number and index before looping back into Loop Over Items — skip that back-edge and it only runs once. Aggregate stitches everything together at the end. This shape is what you want for bulk sending or any time staying under API rate limits matters.

Loop Over Items 5AggregateV2 실행 확인
{
  "name": "Loop Over Items",
  "type": "n8n-nodes-base.splitInBatches",
  "typeVersion": 3,
  "parameters": {
    "batchSize": 5,
    "options": {}
  }
}

06Merge two sources by key

Two HTTP nodes fetch users and posts separately, and Merge pairs a user's id against a post's userId, combining matches into one row using Keep Matches mode. This is the shape you reach for whenever two sources name their join field differently. Reach for this when joining customers with orders, or joining two sheets that don't share a column name.

HTTP ×2Merge combine by fieldV2 실행 확인
{
  "name": "Merge By User",
  "type": "n8n-nodes-base.merge",
  "typeVersion": 3.2,
  "parameters": {
    "mode": "combine",
    "combineBy": "combineByFields",
    "advanced": true,
    "mergeByFields": {
      "values": [
        {
          "field1": "id",
          "field2": "userId"
        }
      ]
    },
    "joinMode": "keepMatches",
    "outputDataFrom": "both",
    "options": {}
  }
}

07Dedupe, filter, sort

Remove Duplicates clears repeat rows by email, Filter keeps only scores of 60 or higher, and Sort puts the highest score first. Three of the most common data-cleanup moves, lined up in one row. It's built for cleaning up leads before an import, or turning raw scores into a ranking table.

Remove DuplicatesFilter ≥60 → SortV2 실행 확인
{
  "conditions": {
    "options": {
      "caseSensitive": true,
      "leftValue": "",
      "typeValidation": "strict",
      "version": 2
    },
    "conditions": [
      {
        "id": "c1",
        "leftValue": "={{ $json.score }}",
        "rightValue": 60,
        "operator": {
          "type": "number",
          "operation": "gte"
        }
      }
    ],
    "combinator": "and"
  },
  "options": {}
}

08Extract titles from a public page

HTTP fetches a public page that robots.txt allows, as plain text, and the HTML node pulls just titles and links with the .titleline a CSS selector before Set tidies the result. Not a pattern to point at login-walled or personal-data pages. Use this for watching for announcements on a page that changes, or collecting a public list without an API.

HTTP → HTML extractCSS 선택자V2 실행 확인
{
  "operation": "extractHtmlContent",
  "sourceData": "json",
  "dataPropertyName": "data",
  "extractionValues": {
    "values": [
      {
        "key": "title",
        "cssSelector": ".titleline a",
        "returnValue": "text",
        "returnArray": true
      },
      {
        "key": "link",
        "cssSelector": ".titleline a",
        "returnValue": "attribute",
        "attribute": "href",
        "returnArray": true
      }
    ]
  },
  "options": {}
}

09Route by condition (Switch)

Code builds six sample orders, Switch routes them three ways by amount (under 50, 50 to 150, 150 and up), each branch's Set stamps a route label, and Merge gathers all three back together. If IF gives you two branches, Switch gives you N. This is the shape for tiered processing by amount or status, or automatically assigning an owner to each branch.

Switch 3 routesSet ×3 → MergeV2 실행 확인
{
  "mode": "rules",
  "rules": {
    "values": [
      {
        "conditions": {
          "conditions": [
            {
              "id": "r1",
              "leftValue": "={{ $json.amount }}",
              "rightValue": 50,
              "operator": {
                "type": "number",
                "operation": "lt"
              }
            }
          ],
          "combinator": "and"
        },
        "outputKey": "small"
      }
    ]
  }
}

Prerequisites — accounts, permissions, version

Every row below reads "none," yet the table still earns its place: grade and n8n version differ per item. Grade runs V0 (structure) through V1 (import-verified) to V2 (execution-verified) — in this set, only 03 stops at V1, and the other eight all reach V2.

Item Grade Prerequisites n8n version
01 RSS daily digest V2 none 2.38.5
02 Public API to HTML table V2 none 2.38.5
03 Webhook validate and respond V1 (import-verified; running it needs your own webhook URL) none 2.38.5
04 Weekly report skeleton V2 none 2.38.5
05 Loop over items in batches V2 none 2.38.5
06 Merge two sources by key V2 none 2.38.5
07 Dedupe, filter, sort V2 none 2.38.5
08 Extract titles from a public page V2 none 2.38.5
09 Route by condition (Switch) V2 none 2.38.5

There are three ways to import a workflow: paste the raw JSON straight onto the n8n canvas with Ctrl/Cmd+V, use Import from File from the canvas menu and pick a file from the zip, or run n8n import:workflow --input=file.json from the CLI. Once it's in, hit Test workflow in the top-left corner (or the play icon on the Manual Trigger node) to run it right there. If your n8n is older than this table, you'll hit a typeVersion error — see the trap below.

Where this breaks — one trap

The easiest way to get burned here is guessing an output field name instead of checking it: the HTML node in item 02 looks like it should produce an html field, but Convert to HTML Table actually names its output table — skip that check and the workflow runs fine while the next node quietly finds nothing where it expected data. The zip password is jj9hgmc4, and once it's unlocked, workflows/ holds all nine JSON files exactly as imported here. typeVersion breaks the same way for the same reason — guess a number and an older n8n throws "typeVersion not supported," so it's worth checking what your installed n8n actually supports before writing one in.

FAQ

Does this work on n8n cloud too?

Yes. None of these workflows use community nodes or credentials that need an account, so they import cleanly through the Import menu. Only 03 needs a real webhook URL from your n8n cloud instance to actually run.

What if my n8n version is different?

If you hit a typeVersion error, build that node fresh on your canvas, export it, and read off the version it actually saved. This zip was import- and execution-verified against n8n 2.38.5 on Node 24.

How do I add a node that needs an API key?

Add credentials through the HTTP Request node's Authentication option, or drop an expression like {{ $env.API_KEY }} into a header so the key lives in an environment variable instead of the file. Keeping keys out of the workflow JSON you share is also what the n8n docs recommend.

New to n8n? The automation category has more examples in the same vein, and the about page explains how this site verifies what it publishes.

Enter the archive password

The password is inside this article. You will find it as you read.