n8n Tutorial: Quarterly Sales Forecast → Slides Email + Slack + Sheets Automation
Every quarter, your leadership team asks the same question: "Where are we going to land?" And every quarter, someone on the ops or RevOps team loses a day pulling numbers from the CRM, wrestling them
Every quarter, your leadership team asks the same question: "Where are we going to land?" And every quarter, someone on the ops or RevOps team loses a day pulling numbers from the CRM, wrestling them into a spreadsheet, guessing at a best-case and worst-case scenario, and pasting it all into a deck nobody reads until the QBR. By the time the forecast is finished, it's already stale. This tutorial shows you how to build an n8n workflow that generates a three-scenario quarterly sales forecast automatically — conservative, expected, and stretch — and delivers it as a Google Slides deck, a Slack summary, and an archived Google Sheet before anyone has to ask.
The problem: forecasting is manual, late, and inconsistent
Sales forecasting fails in the same three ways at almost every company. First, it's manual — the data lives in your CRM or a pipeline sheet, but the transformation into a forecast happens in someone's head and a fragile spreadsheet. Second, it's late — the forecast reflects the pipeline from the day someone had time to build it, not the day leadership reads it. Third, it's inconsistent — the methodology changes depending on who built it, so quarter-over-quarter comparisons are meaningless.
The result is that forecasting becomes a defensive ritual instead of a decision-making tool. Leadership doesn't trust the number, so they discount it. Reps don't see the logic, so they don't buy into it. And because the whole thing takes a day to produce, nobody refreshes it when the pipeline shifts. You end up steering a quarter with a snapshot that was already wrong when it was taken.
The solution: one workflow, three scenarios, three destinations
The fix is to treat forecasting as a data pipeline, not a document. n8n is well suited to this because it can read your pipeline data, apply a consistent weighted model, branch into three scenarios, and fan the output out to Slides, Slack, and Sheets in a single run. The logic is deterministic and version-controlled inside the workflow, so the methodology never drifts.
The core model is simple and defensible. For each open deal you have an amount and a stage probability. The expected scenario is the sum of amount × probability (a classic weighted pipeline). The conservative scenario applies a haircut — say 0.75× the expected — to account for slippage and optimism bias. The stretch scenario assumes strong close rates, e.g. 1.25× expected, capped at total pipeline value. Add closed-won revenue already booked this quarter as a floor under all three, and you have a range leadership can actually reason about.
Step-by-step: building it in n8n
Here is the node-by-node structure. The whole thing runs on a schedule and finishes in seconds.
1. Schedule Trigger
Start with a Schedule Trigger node set to run on the first business day of each quarter (a Cron expression like 0 7 1 1,4,7,10 * fires at 07:00 on Jan/Apr/Jul/Oct 1). Fire it a day before your quarterly review cadence so the deck is waiting when leadership logs in.
2. Pull the pipeline data
Use the connector for your CRM — HubSpot, Pipedrive, or Salesforce all have native n8n nodes. Configure the operation to Get All / Search Deals, filter to status = open and close_date within current quarter, and return the fields you need: amount, stage, probability, and owner. If your CRM stores stage-to-probability mapping externally, pull it from a Google Sheets node instead so RevOps controls the weights without touching the workflow.
3. Compute the three scenarios (Code node)
A single Code node does the math. Iterate the deals, compute weighted expected value, then derive the three scenarios and a per-owner breakdown:
const deals = $input.all().map(i => i.json);
const expected = deals.reduce((s,d) => s + (d.amount * (d.probability/100)), 0);
const booked = /* closed-won this quarter */ 0;
const conservative = booked + expected * 0.75;
const stretch = booked + expected * 1.25;
return [{ json: { booked, conservative, expected: booked + expected, stretch, deal_count: deals.length } }];
Keep every constant (0.75, 1.25) at the top of the node as named variables. That is your single source of forecasting methodology — change it once and every future quarter stays consistent.
4. Generate the Slides deck
The cleanest approach is a Google Slides template deck with placeholder tokens like {{expected}}, {{conservative}}, and {{stretch}}. Use the Google Drive node to copy the template into a new file named Q3 2026 Forecast, then an HTTP Request node calling the Slides API presentations.batchUpdate endpoint with replaceAllText requests to swap each token for the computed number. Authenticate with a Google OAuth2 or service-account credential. The output is a finished, branded deck — no manual editing.
5. Post to Slack and archive to Sheets
Branch the workflow after the Code node. On one path, a Slack node (operation Send Message) posts a compact summary to your #leadership channel using Block Kit — headline number, the three-scenario range, deal count, and a link to the Slides deck. On the other path, a Google Sheets node (operation Append) writes one row per quarter to a running "Forecast History" tab: date, booked, conservative, expected, stretch. That archive is what makes quarter-over-quarter accuracy tracking possible — you can later compare each forecast against actuals.
The benefits: trust, speed, and accountability
Once this runs, forecasting stops being a person's job and becomes infrastructure. The speed gain is obvious — a day of work collapses into a scheduled run. But the deeper wins are trust and accountability. Because the methodology is codified in one Code node, the number is consistent every quarter; when leadership questions it, you point at the weights instead of defending a spreadsheet. Because every forecast is archived in Sheets, you can measure your own forecasting accuracy over time and tune the 0.75/1.25 multipliers with real data instead of gut feel.
And because it's proactive — delivered before the QBR, not scrambled together the night before — leadership gets the range early enough to actually change what the quarter does. That is the difference between reporting and forecasting.
Common pitfalls to avoid
Trusting raw CRM probabilities. Many teams never calibrate stage probabilities, so a "60%" stage actually closes at 30%. Before you trust the expected number, back-test it against a few closed quarters and adjust the mapping in your Google Sheet.
Forgetting the closed-won floor. If your model only weights open pipeline, early-quarter forecasts will look absurdly low. Always add revenue already booked this quarter as the floor under all three scenarios.
Timezone and quarter-boundary bugs. A Schedule Trigger running in UTC can fire on the wrong local day, and "current quarter" filters break at boundaries. Pin the trigger timezone in n8n settings and compute quarter start/end dates explicitly in the Code node rather than relying on relative filters.
Silent failures. If the CRM node returns zero deals because a filter changed, the workflow will happily forecast $0. Add an IF node that checks deal_count > 0 and routes to an error Slack alert instead of publishing a broken deck. A forecast nobody can trust is worse than no forecast.
Hardcoding credentials in the HTTP node. Use n8n's credential store for the Slides API call, not a pasted token — it keeps the workflow portable and safe to export.
Build it once, and every quarter your leadership team gets a calibrated three-scenario forecast — in Slides, in Slack, and archived in Sheets — before they think to ask for it. That is forecasting that actually steers the business.
Ja construimos isso pra voce
Nao comece do zero. O Quarterly Sales Forecast → Slides Email + Slack + Sheets e um workflow n8n pronto para instalar — conecta suas ferramentas em minutos, sem codigo.
Instalar por $29 →