GODRICH
#css-animation#button#loader#transition#scroll#dashboard#ui#design-trends

Automate Repetitive Tasks in n8n, No Account First

n8n is a no-code tool that wires apps and APIs into automations. Before you set up a single account, here are 9 workflows to automate repetitive tasks, ready

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

The nine are ordered the way a real recurring task actually gets automated. Start with three basic fire-on-a-schedule patterns (01 daily, 02 weekly, 03 monthly), move through the two things that trip these up most — a timezone trap (04) and trigger syntax (05) — then a condition gate that decides whether to even run (06) and a way to catch up after a missed run (07), and finish with two that shape the output into something you'd actually send (08 an email body, 09 a full fetch-transform-format pipeline). Most schedules that automate weekly reports get refined in exactly this order — get it firing, check the clock, filter the exceptions, then make it presentable. The back half — reshaping what a run produced into JSON, CSV, or Excel — belongs to Excel Automation Examples, and the front half of sending and receiving requests belongs to n8n No Code Automation.

01Daily to-do summary

What it automates

A Schedule Trigger wakes up every morning at 8 (Manual Trigger tests it instantly), HTTP Request fetches a to-do list, Filter keeps one person's items, and a Code node writes a five-line summary with a checkbox for each one.

Daily to-do summary
Open in a new tab

01 · Daily to-do summary — Measured area 6.786% · moving frames 23/23Original by GODRICH · SCSS and React ship in the zip · See the password

Schedule triggerAtHourFilter → CodeV2 실행 확인

In the workflow JSON

Use it for a morning work briefing, or just checking what got done each day.

{
  "name": "Build Summary",
  "type": "n8n-nodes-base.code",
  "typeVersion": 2,
  "parameters": {
    "jsCode": "const items = $input.all();\nconst lines = items.map(item => `- [${item.json.completed ? 'x' : ' '}] ${item.json.title}`);\nconst summary = `# Daily Summary\\n\\n${items.length} to-dos for user 3 today\\n\\n` + lines.join('\\n');\nreturn [{ json: { summary } }];"
  }
}

02Weekly window aggregate

What it automates

Schedule wakes up every Monday at 9, HTTP fetches every comment, and a Code node keeps only this week's slice. Unlike Aggregate, the Summarize node here groups by post before it counts.

Weekly window aggregate
Open in a new tab

02 · Weekly window aggregate — Measured area 6.14% · moving frames 23/23Original by GODRICH · SCSS and React ship in the zip · See the password

Schedule triggerAtDayCode → SummarizeV2 실행 확인

In the workflow JSON

Reach for it when you need a weekly engagement report, or per-post reaction counts you check every Monday.

{
  "name": "Count Per Post",
  "type": "n8n-nodes-base.summarize",
  "typeVersion": 1.1,
  "parameters": {
    "fieldsToSummarize": {
      "values": [
        { "aggregation": "count", "field": "id" }
      ]
    },
    "fieldsToSplitBy": "postId",
    "options": { "outputFormat": "separateItems" }
  }
}

03Monthly report skeleton

What it automates

Schedule wakes up on the 1st of every month at 9, HTTP fetches the user list, and one single Code node writes the report sentence directly — no Aggregate, no Markdown node in between. Fewer nodes mean fewer places for it to break.

Monthly report skeleton
Open in a new tab

03 · Monthly report skeleton — Measured area 4.968% · moving frames 23/23Original by GODRICH · SCSS and React ship in the zip · See the password

Schedule 매월 1일Code 단독 리포트V2 실행 확인

In the workflow JSON

It's the shape you'd use for a monthly status email or a signup-count report.

{
  "name": "Build Monthly Report",
  "type": "n8n-nodes-base.code",
  "typeVersion": 2,
  "parameters": {
    "jsCode": "const users = $input.all().map(item => item.json);\nconst lines = users.map(u => `- ${u.name} <${u.email}>`);\nconst monthlyReport = `# Monthly Report\\n\\n${users.length} users on file this month.\\n\\n` + lines.join('\\n');\nreturn [{ json: { monthlyReport } }];"
  }
}

04Workflow clock vs server clock

What it automates

Pin a timezone in the workflow settings and Schedule fires on that clock — but print $now (which follows the workflow timezone) next to a plain JS Date (always UTC) inside a Code node, and the two describe the same instant differently.

Workflow clock vs server clock
Open in a new tab

04 · Workflow clock vs server clock — Measured area 3.016% · moving frames 23/23Original by GODRICH · SCSS and React ship in the zip · See the password

timezone Asia/Seoul$now vs Date()V2 실행 확인

In the workflow JSON

Run this whenever you're diagnosing a schedule that fires at the wrong hour.

{
  "name": "Compare Clocks",
  "type": "n8n-nodes-base.code",
  "typeVersion": 2,
  "parameters": {
    "jsCode": "const workflowNow = $now.toFormat('yyyy-LL-dd HH:mm:ss');\nconst workflowZone = $now.zoneName;\nconst serverNow = new Date().toISOString();\nreturn [{ json: { workflowNow, workflowZone, serverNow } }];"
  }
}

05Interval field vs cron expression

What it automates

Two Schedule Triggers sit side by side — one sets the Hours field to 6, the other writes 0 */6 * * * into the Custom (Cron) field. The UI field is enough for a plain cadence, but something like "last weekday of the month" only exists in cron syntax.

Interval field vs cron expression
Open in a new tab

05 · Interval field vs cron expression — Measured area 3.878% · moving frames 23/23Original by GODRICH · SCSS and React ship in the zip · See the password

Schedule ×2cronExpressionV2 실행 확인

In the workflow JSON

In short: the UI for simple cadences, cron for complex conditions like this one.

{
  "name": "Every 6 Hours (Cron)",
  "type": "n8n-nodes-base.scheduleTrigger",
  "typeVersion": 1.4,
  "parameters": {
    "rule": {
      "interval": [
        { "field": "cronExpression", "expression": "0 */6 * * *" }
      ]
    }
  }
}

06Skip-weekend condition gate

What it automates

Code makes seven sample dates, Monday through Sunday, and IF splits them by weekend (dayOfWeek is 0 or 6) — weekdays fetch posts and build a report, weekends skip right away. Both branches meet after Merge in the same action field.

Skip-weekend condition gate
Open in a new tab

06 · Skip-weekend condition gate — Measured area 10.608% · moving frames 23/23Original by GODRICH · SCSS and React ship in the zip · See the password

IF 주말 분기HTTP → MergeV2 실행 확인

In the workflow JSON

Use it for alerts that only run on business days — muting weekends without deleting the schedule.

{
  "name": "Is Weekend",
  "type": "n8n-nodes-base.if",
  "typeVersion": 2.3,
  "parameters": {
    "conditions": {
      "conditions": [
        { "leftValue": "={{ $json.dayOfWeek }}", "rightValue": 0, "operator": { "type": "number", "operation": "equals" } },
        { "leftValue": "={{ $json.dayOfWeek }}", "rightValue": 6, "operator": { "type": "number", "operation": "equals" } }
      ],
      "combinator": "or"
    }
  }
}

07Catching up after a missed run

What it automates

Schedule is supposed to run every 15 minutes, but a Code node remembers the last run time in the workflow's own static data ($getWorkflowStaticData) and works out how many minutes passed and how many runs it missed. A way for n8n to notice its own downtime.

Catching up after a missed run
Open in a new tab

07 · Catching up after a missed run — Measured area 2.97% · moving frames 23/23Original by GODRICH · SCSS and React ship in the zip · See the password

Schedule 15분$getWorkflowStaticDataV2 실행 확인

In the workflow JSON

It's built for detecting gaps after a server restart, timing intervals without an execution log to check against.

{
  "name": "Detect Missed Runs",
  "type": "n8n-nodes-base.code",
  "typeVersion": 2,
  "parameters": {
    "jsCode": "const staticData = $getWorkflowStaticData('node');\nconst expectedIntervalMinutes = 15;\nconst now = Date.now();\nconst lastRun = staticData.lastRun || (now - expectedIntervalMinutes * 3 * 60000);\nconst elapsedMinutes = Math.round((now - lastRun) / 60000);\nconst missedRuns = Math.max(0, Math.floor(elapsedMinutes / expectedIntervalMinutes) - 1);\nstaticData.lastRun = now;\nreturn [{ json: { elapsedMinutes, missedRuns } }];"
  }
}

08Digest email body

What it automates

Schedule reads the newest RSS items every 3 hours, Sort puts them newest-first, Limit trims to 5, Code weaves titles and a greeting into markdown, and the Markdown node turns that into HTML ready to paste into an email.

Digest email body
Open in a new tab

08 · Digest email body — Measured area 8.606% · moving frames 23/23Original by GODRICH · SCSS and React ship in the zip · See the password

Sort → LimitMarkdown → HTMLV2 실행 확인

In the workflow JSON

This is the shape for a recurring newsletter, or a Slack or email notification body you send on a timer.

{
  "name": "Markdown to HTML",
  "type": "n8n-nodes-base.markdown",
  "typeVersion": 1,
  "parameters": {
    "mode": "markdownToHtml",
    "markdown": "={{ $json.markdown }}",
    "destinationKey": "emailHtml",
    "options": {}
  }
}

09Fetch, transform, format — a 3-stage pipeline

What it automates

Schedule fetches a 3-day forecast from a keyless weather API every day at 6am, Code transforms it by averaging the daily highs and lows, and the Markdown node formats it into a report sentence. Most report workflows boil down to exactly these three stages.

Fetch, transform, format — a 3-stage pipeline
Open in a new tab

09 · Fetch, transform, format — a 3-stage pipeline — Measured area 6.193% · moving frames 23/23Original by GODRICH · SCSS and React ship in the zip · See the password

HTTP → CodeMarkdown 리포트V2 실행 확인

In the workflow JSON

Use it as a daily weather briefing, or swap the API for a generic report pipeline skeleton you reuse elsewhere.

{
  "name": "Build Report",
  "type": "n8n-nodes-base.markdown",
  "typeVersion": 1,
  "parameters": {
    "mode": "markdownToHtml",
    "markdown": "={{ '# Weather Report — ' + $json.reportDate + '\\n\\n3-day average high: ' + $json.avgHigh + '°C\\n3-day average low: ' + $json.avgLow + '°C' }}",
    "destinationKey": "report",
    "options": {}
  }
}

Prerequisites — accounts, permissions, versions

Every row below says "none" for prerequisites, but the table still matters because the grade and n8n version are what actually shift between items. Grades run V0 (structure), V1 (import verified), V2 (execute verified) — this post is 9 for 9 at V2.

Item Grade Prerequisites n8n version
01 Daily to-do summary V2 none 2.38.5
02 Weekly window aggregate V2 none 2.38.5
03 Monthly report skeleton V2 none 2.38.5
04 Workflow clock vs server clock V2 none 2.38.5
05 Interval field vs cron expression V2 none 2.38.5
06 Skip-weekend condition gate V2 none 2.38.5
07 Catching up after a missed run V2 none 2.38.5
08 Digest email body V2 none 2.38.5
09 Fetch, transform, format pipeline V2 none 2.38.5

You have three ways to load these in: paste the JSON straight into the n8n canvas with Ctrl/Cmd+V, use the canvas menu's Import from File to pick a file out of 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) and it runs right there.

Where this breaks — one real trap

automate weekly reports — where does it break?

The thing people trip on most is the timezone in item 04 — pin the workflow settings to a timezone and Schedule's firing time and any $now expression follow it, but reach for a plain new Date() inside a Code node without thinking and you get the server's system clock (usually UTC) instead. Mix the two and you get bugs like "this fires at 9am — why does the report say midnight?" The password for this zip is kenrd2uf, and once it's unzipped, all nine JSON files sit right there under workflows/. Item 02's Summarize node hides a smaller version of the same trap — its output field isn't a name you typed, it's an auto-built one like count_id, so guessing count leaves the next node with nothing to read. The screen-side counterpart of an automation's "it's running" signal is 9 button state css patterns, which carries loading-to-done states on the button itself.

FAQ

Do I need to make an account before trying n8n?

No. None of the nine workflows in this zip use community nodes or credentials that need an account — import them into any local or free n8n instance and the Manual Trigger runs them immediately.

What if my n8n version is different?

A typeVersion error means you should build that node fresh on your canvas, export it, and read off the value it actually supports. This zip was import- and execute-verified against n8n 2.38.5 on Node 24. For how the import-and-run verification itself was done, the prerequisites section of 9 n8n Workflow Examples walks the same procedure first.

How do I point this repetitive task automation at a real destination like Sheets or Slack?

Swap the last node — the HTTP Request or the Code node building the report — for whatever destination you need (Google Sheets, Slack, or email). Add credentials through the node's own Authentication option rather than typing a key into the workflow JSON where it'd get shared; that's the approach n8n's own docs recommend too.

If you want to keep learning n8n, the automation category has more examples in this pillar, 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.