Excel Report Automation in the Wild: n8n + Claude + Notion Cuts a 4-Hour Weekly Report to 12 Minutes

Automation Case Excel Report Automation n8n Claude Notion

n8n runs the flow, Claude writes the summary, Notion keeps the versions. A 38-person B2B company cut its weekly report from 4 hours to 12 minutes — saving 12.6 hours/month at NT$1,420/month, built in two weeks.

Why the n8n + Claude + Notion Stack (Not a Single Tool)

Owners often ask: “Isn’t Excel report automation just one tool? Doesn’t an RPA solve this?”

After implementing in three SMBs, we confirmed it: a single tool can’t pull this off. Each tool owns one segment, and the division of labor is what makes the workflow stable.

n8n Owns the “Flow Skeleton”: Scheduling, File Pickup, Branching, Retries

n8n is a flow engine, not a business logic engine. Its job: trigger Monday 09:00, fetch Excel from Google Drive, retry three times if file missing, ping Slack on failure.

It doesn’t write judgments like “why did revenue drop this week” — that’s Claude’s job. n8n’s value: it doesn’t complain about repeating, doesn’t take vacations, doesn’t forget the next step mid-flow.

Claude Owns the “Semantic Layer”: Reading Numbers, Interpreting Variance, Writing Human-Readable Summaries

This is the blocker traditional RPA can’t solve. RPA can merge two Excel files for you and extract WoW variance columns, but it can’t produce a summary like “first response time on the third shift went from 12 minutes to 28 minutes, mainly driven by 2 new agents still in training on Thursday night.”

Claude can read the structure, catch the anomalies, and write something a manager can read directly. See also: Claude + MCP for internal enterprise applications.

Notion Owns “Result Persistence”: Versions, Decision Trail, Cross-Team Sharing

Notion isn’t used here as a database — it’s used as “conversation log + decision trail.” Every weekly summary, every question the manager left behind, every follow-up action goes into a Notion DB. Next time the manager asks “what did we end up doing about that anomaly last month?”, you flip through the log and answer.

The price of not storing in Notion: three months later, the manager questions where a number came from, and your only option is to pull the original Excel and recalculate.

We mix the three tools because each one alone hits a wall: pure n8n can’t write semantic summaries, pure Claude can’t schedule, pure Notion can’t pull source data.

Case Background: A 38-Person B2B’s “Weekly Report Pain Point”

This company sells SaaS to mid-sized manufacturers. The customer service team is 6 people, owing a “weekly customer service performance report” to the ops lead every week.

The Original 4-Hour Flow: CS Exports → Manual Merge → Hand-Written Notes → Email to Manager

Every Monday morning, the CS lead did these 5 steps:

  1. Export 3 Excel files from the CS system (volume, response time, satisfaction)
  2. vlookup-merge into a master sheet
  3. Compute WoW and vs-monthly-average for each column
  4. Write a ~600-character “weekly highlights + anomalies + next-week focus” section
  5. Email the ops lead + upload to Notion

The whole thing took 4 hours, usually 09:00 to 13:00, interrupted by engineers asking about CS system bugs.

The Real Blocker Isn’t the Merge — It’s the 90 Minutes of “Weekly Variance Notes”

Once we unpacked the flow, we saw the first 4 steps add up to 90 minutes — the real time sink is step 5, “write the variance notes.”

What the manager wants: “Why did the third shift’s response time suddenly spike this week? Turnover, training, or scheduling?” That kind of judgment requires looking at last week, last month, customer complaints in the same window, and the shift roster.

The CS lead spends 90 minutes a week on this section, and over time the writing turns formulaic — the manager stops reading the difference.

Why Past RPA / Zapier Attempts Failed (The Semantic Layer Wasn’t Solvable)

The company had tried automation twice:

The first attempt with UiPath wrapped the first 4 steps into a robot, but the robot couldn’t write step 5’s human-readable summary. The CS lead still spent 90 minutes writing it.

The second attempt chained ChatGPT through Zapier — the prompt was too loose, the weekly style was inconsistent, and sometimes the numbers were misremembered. After three weeks the manager stopped trusting it.

When we walked in, the CS lead said: “Don’t hand me another half-solution. Either save my time, or let me keep doing it by hand.”

Stack Architecture and Data Flow

The pipeline has five stages: trigger → file pickup → processing → write-back → failure handling. Each stage maps to one or more n8n nodes.

Trigger Layer: n8n Cron (Monday 09:00) + Webhook Fallback

The main flow is n8n’s Schedule Trigger set to Monday 09:00. But the CS system sometimes delays export until 09:30, so a webhook is also wired up — when the CS system finishes export, it pings n8n to run the same workflow.

Both entry points share the downstream nodes. Whichever runs successfully marks the week complete and won’t re-run.

For n8n self-hosted vs cloud deployment costs, see n8n self-hosted vs cloud 2026 deployment costs.

File Pickup Layer: n8n Google Drive Node Fetches CS-Exported Excel + Simple Column Validation

The n8n Google Drive node uses a service account to fetch this week’s Excel from a fixed folder. Filename rule: weekly-cs-{YYYY-MM-DD}.xlsx.

Once fetched, three checks: file size > 10KB (avoid empty files), required columns present (volume, response time, satisfaction), data types correct (numbers aren’t strings).

If any check fails, jump to the failure handling layer — don’t waste Claude tokens.

Processing Layer: Claude via n8n HTTP Request Node, Fed This Week + Last Week’s Data

n8n reads in both this week’s and last week’s Excel files, uses a Code node to extract the comparison columns, and packs them into a slim JSON.

Then the HTTP Request node calls the Anthropic API (https://api.anthropic.com/v1/messages), passing the prompt + JSON data, and receives a markdown summary in response.

The full Claude call uses about 8,500 tokens per week (input 6,200 + output 2,300), costing about NT$18.

Write-Back Layer: Claude Returns Markdown → n8n Writes to Notion DB → Push to Slack

After Claude returns markdown, n8n parses it into Notion DB columns:

After writing Notion, push to Slack with a Notion page link + the first 200 characters of the summary. The manager reads it on Slack on their phone.

Failure Handling: Keep Raw Payload in Notion + Notify a Human via Slack

If any node fails, n8n jumps to the Error Trigger sub-flow: write the error + the current raw data into a Notion failures DB, ping engineering on Slack.

That way, even if the workflow breaks, raw data isn’t lost — a human can take over the summary.

Claude Prompt Design Key: Don’t Hand It the Whole Excel

Many people implementing Excel automation just dump the entire Excel as csv into Claude, assuming that’s the simplest approach. Run it and you’ll see: tokens 3x, the model can’t grasp column semantics, and sometimes even gets the column order wrong.

Use n8n First to Transform Excel Into Slim JSON (Only Comparison Columns + Last Week’s Same Period)

We do this preprocessing in n8n’s Code node. The Excel has 60 columns; the weekly report actually needs only 12.

The JSON structure looks roughly like this:

{
  "week": "2026-W19",
  "previous_week": "2026-W18",
  "metrics": {
    "incoming_count": {"current": 1842, "previous": 1601, "change_pct": 15.1},
    "first_response_min": {"current": 14.2, "previous": 12.1, "change_pct": 17.4},
    "csat": {"current": 4.6, "previous": 4.7, "change_pct": -2.1}
  },
  "shift_breakdown": [
    {"shift": "morning", "agents": 3, "incoming": 612, "first_response_min": 11.8},
    {"shift": "afternoon", "agents": 2, "incoming": 824, "first_response_min": 13.5},
    {"shift": "evening", "agents": 3, "incoming": 406, "first_response_min": 28.1}
  ],
  "anomalies_hint": ["evening shift first_response_min +132% vs previous"]
}

Token usage drops from ~28,000 (feeding Excel directly) to ~6,200, and response quality improves.

Three-Section Prompt: Context + Data + Output Format

The prompt structure is fixed in three sections — don’t mix them. Context describes the company situation, product, team size; data takes the JSON; output format mandates markdown, which sections, mark anomalies with ⚠️.

The benefit of a fixed structure: weekly style is consistent — the manager gets used to a specific section order.

Why Not Just Feed csv: Tokens Double, Model Loses Column Semantics

We measured this. Same Excel, fed two ways:

MethodInput tokensOutput qualityAnomaly detection
csv direct~28,000Disorganized sectionsMissed 2/5
JSON first~6,200Clear structure5/5

The difference isn’t Claude getting dumber — csv has no column semantics. The model seeing evening,3,406,28.1 vs {"shift": "evening", "agents": 3, "incoming": 406, "first_response_min": 28.1} — the latter tells it 28.1 is first_response_min at a glance.

A Drop-In Prompt Template (With Placeholders)

This is the slim version our customer uses — copy it directly:

You are the customer service operations analyst at {{COMPANY_NAME}}, responsible for the weekly CS performance report summary.

# Context
- Company size: {{TEAM_SIZE}} people, CS team {{CS_TEAM_SIZE}} people
- Product: {{PRODUCT_TYPE}}
- Manager focus: response time, volume, satisfaction
- Anomaly threshold: single metric WoW change > 15% counts as anomaly

# Data (JSON)
{{METRICS_JSON}}

# Output format (strict)
- Output markdown only, no preamble or postscript
- 4-section structure: ## Weekly highlights (≤3 lines) / ## Anomalies (item by item) / ## Next-week focus (≤2 lines) / ## Notes
- Prefix anomalies with ⚠️
- Append percent change after numbers (e.g., response time 14.2 min ⚠️ +17.4%)
- No phrases like "Here is the analysis" or "Hope this report is useful"

Placeholders are filled in n8n’s Set node before going to the HTTP Request.

For the full node-ization approach for this workflow, see n8n + Claude Skills + MCP workflow node-ization. Token billing rules: see Anthropic Claude API messages documentation.

Real Cost and Time: Built in Two Weeks, NT$1,420/Month to Run

The two things owners care about most: how fast can it run, how much do I pay monthly.

Build Cost: 1 Week Consulting to Unpack Flow + 3 Days n8n Build + 3 Days Prompt Calibration

Our build order is fixed:

Two weeks assumes experienced outsourcing. First-time in-house builds take about 4 weeks.

Monthly Run: Claude API ~NT$720, n8n Cloud ~NT$600, Notion Existing

Actual monthly spend:

ItemMonthlyNotes
Claude API (sonnet 4.6)NT$7204 weeks × ~18 = 72, plus failure retries and other workflows sharing usage
n8n cloud (Starter plan)NT$6005,000 executions/month; this case uses ~200
Notion0Existing company license
Google Workspace0Existing
TotalNT$1,320Plus NT$100 buffer for misc = NT$1,420

Self-hosted n8n (VPS NT$300/month) shaves another NT$300.

Time Saved: 3.5 Hours/Week for CS Lead + 0.5 for Manager = 12.6 Hours/Month

The CS lead saves 3.5 hours/week (was 4 hours → 12 minutes review + tweaks). The ops lead saves 0.5 hours (was flipping 5 Excels → reads the summary directly).

At 4.2 weeks/month, 4 × 4 = 16 hours of CS lead time, plus 2 hours of ops lead time, totals ~18 hours. Subtract 5.4 hours that still need human intervention when something goes sideways (estimated 3 minor incidents/month × 1.8 hours each), net savings = 12.6 hours.

6-Month Payback Line: NT$36,000 ÷ NT$8,820/Month = ~4.9 Months to Break Even

Payback math:

Round up to within 6 months. Revisit How to calculate before/after ROI for automation — this case is the classic “save time first, then calculate per-account ROI” path.

90-Day Rollout Path: Get One Report Working Before Expanding

Many companies start overly ambitious, wanting to automate all reports at once. Implementations all fail because rules differ wildly across departments — one set of edge cases stalls the whole project.

D0~D14: Pick One “Weekly, Not Complex” Report to Start

Three selection criteria: weekly recurring (not monthly or quarterly), column logic doesn’t shift every month, failure won’t immediately enrage a department.

Common fits: CS weekly report, sales weekly report, product usage weekly report. Pick exactly one. Expand after it’s done.

D15~D45: Add the 3 Comparison Columns the Manager Asks About Most (WoW, YoY, Alert Threshold)

After v1 launches, you’ll typically get manager requests “I also want to see X.” Pick the 3 most-asked. Don’t add everything.

Usually: WoW (vs last week), YoY (vs same week last year), alert threshold (red flag after 2 consecutive weeks over).

D46~D90: Replicate the Template to the Second Report, Then Hand a Self-Service Template to Other Departments

By day 45, with the first report running steadily, copy the whole workflow and swap prompt variables for the second report — usually done in 1 week.

By day 90 you’ll have 2 standing reports + a template inside the company. When other departments want one, hand them the template and teach them how to edit the prompt.

5 Pitfalls to Skip

After 3 implementations, here are the 5 pitfalls — avoid them.

Pitfall 1: n8n Self-Hosted Without Backup → One Restart and the Whole Workflow Is Gone

Fix: weekly export workflow JSON to Notion versioning and a git repo; snapshot before container upgrades. For community node usage, see n8n official docs community node.

Pitfall 2: Claude Prompt Too Loose → Summary Style Inconsistent Week to Week

Fix: in the prompt, write strict output format, fix section order, list banned phrases. We had one customer who explicitly listed “don’t write ‘in summary’” in the prompt.

Pitfall 3: Pasting the Whole Excel Into the Prompt → Token Blowout

Fix: n8n must do column filtering + JSON-ification first, give Claude only what it really needs to see. A 60-column Excel usually only needs 10~15 columns.

Pitfall 4: Notion DB Schema Not Designed Up Front → Backtracking Reports Later Is Painful

Fix: pin the schema in week 1, with at least 5 columns: week, summary, anomalies, WoW, raw payload link. Set up views in advance (manager view, team view, audit view).

Pitfall 5: No Audit Trail → No Way to Verify When Manager Questions a Number

Fix: keep raw JSON in R2 / S3 for 90 days, put the link in the Notion record. Any “where did this number come from” question gets answered in 1 minute.


If your company has a similar pain point — weekly reports, monthly reports, customer reports stuck at the “merging is easy, summary writing is killing me” segment — we can help unpack it.

Book a 30-minute strategy call. We lay out your most painful report on the table and give you an actionable checklist you can take back. Inside 30 minutes — specific, quantifiable next step, no hand-waving.

FAQ

What size company fits Excel report automation with n8n + Claude + Notion?

20~150 people is the sweet spot. Under 20, report frequency usually isn’t fixed and rules are still shifting — automating becomes self-imposed handcuffs. Over 150, there’s usually already a BI tool (Tableau / Power BI), and in that scenario the stack complements what BI can’t do (semantic summaries) rather than replacing it.

Can we maintain it ourselves after the two-week build?

The n8n flow rarely needs to change — what needs maintenance is the Claude prompt. Pick someone inside the company who knows the process and can write markdown (usually a business analyst or ops specialist) and spend 4 hours doing prompt-tuning training with us. After that they can edit it themselves. The prompt typically needs 1~2 edits/month, under 30 minutes each.

What if it fails?

Three layers of fallback:

  1. Single-week failure: n8n Error Trigger pings Slack, CS lead manually writes one (back to the old flow)
  2. Whole workflow breaks: last week’s version is still in Notion, raw JSON is in R2 — re-run a single execution
  3. Claude API unavailable: n8n switches to a backup prompt template (shorter, pure structured) to get through the week, manager receives a “downgraded summary” tag