Excel + AI for Sales Ops: Pipeline Cleanup, Forecasts, and Territory Reporting

Coding Liquids blog cover featuring Sagnik Bhattacharya for Excel and AI for Sales Ops, with pipeline and forecast visuals.
Coding Liquids blog cover featuring Sagnik Bhattacharya for Excel and AI for Sales Ops, with pipeline and forecast visuals.

Every Sales Ops team runs on spreadsheets, even when a CRM exists. The CRM holds the record; Excel holds the analysis, the cleanup, and the quarter-end pack that leadership actually reads. This tutorial shows how to combine Excel formulas with AI prompts to speed up the three tasks that consume most of a Sales Ops analyst's week: pipeline cleanup, weighted forecasting, and territory reporting.

Coming Soon

Complete Excel Guide with AI Integration

Master formulas, pivot tables, data analysis, and charts — with AI integration.

Learn more

The approach works with any AI assistant that accepts pasted tabular data — Copilot in Excel, ChatGPT, Claude, or Gemma 4 running locally. The formulas work on Excel 365, 2021, and 2019. For the broader Excel learning path see the Excel Formulas Guide hub.

Follow me on Instagram@sagnikteaches

If you need a deal-level operational tracker rather than an analytical workflow, see the sales pipeline tracker instead.

Connect on LinkedInSagnik Bhattacharya Subscribe on YouTube@codingliquids

Prerequisites

  • A CRM export in CSV or XLSX with at minimum: Deal Name, Stage, Owner, Value, Close Date, Last Activity Date.
  • Excel 365 / 2021 / 2019 (SUMIFS, COUNTIFS, and conditional formatting are universal; Forecast Sheet requires 365/2021).
  • Access to an AI assistant — Copilot in Excel, ChatGPT, Claude, or a local model via Gemma 4 in VS Code.

Step 1 — Import and clean the CRM export

Download the pipeline extract from your CRM. Open it in Excel and immediately convert to a Table (Ctrl + T). Name it tblPipeline. This matters — structured references make every formula self-documenting and auto-extending.

Remove duplicates

Data → Remove Duplicates → select the Deal ID column. A 4,000-row Salesforce export typically drops 40–120 rows here — merge artefacts, re-imported records, and test deals that were never deleted.

Standardise stage names

Free-text stage fields are the single biggest source of forecast error. Add a helper column:

=TRIM(PROPER([@Stage]))

Then use Data Validation (Data → Validation → List) sourced from a clean reference range to lock future entries to your canonical stages: Prospecting, Discovery, Proposal, Negotiation, Closed Won, Closed Lost.

Flag stale deals

=TODAY()-[@[Last Activity Date]]

Any deal over 30 days without activity is probably stuck. Add conditional formatting (Home → Conditional Formatting → Greater Than → 30 → red fill) to surface them instantly.

AI assist. Paste the 20 worst rows (highest staleness, messiest stage names) into your AI assistant with this prompt: "Standardise these deal records. Map each Stage value to one of: Prospecting, Discovery, Proposal, Negotiation, Closed Won, Closed Lost. Flag any row where the Close Date is in the past but Stage is not Closed Won or Closed Lost." Review the output before pasting back — AI occasionally merges two deals that share a company name.

Step 2 — Build a weighted pipeline forecast

Raw pipeline value is meaningless without win-rate weighting. Add two columns to tblPipeline:

Win probability by stage

Create a reference table (tblStageProb) mapping each stage to its historical win rate:

StageWin Probability
Prospecting10%
Discovery25%
Proposal50%
Negotiation75%
Closed Won100%
Closed Lost0%

Look it up in the pipeline:

=XLOOKUP([@Stage], tblStageProb[Stage], tblStageProb[Win Probability], 0)

For Excel 2019: =INDEX(tblStageProb[Win Probability], MATCH([@Stage], tblStageProb[Stage], 0))

Weighted value

=[@Value] * [@[Win Probability]]

Coverage ratio

In a summary cell:

=SUM(tblPipeline[Weighted Value]) / B1

where B1 holds the team quota. A healthy ratio is 3× to 4× depending on your segment. Below 2.5× and the quarter is at risk; above 5× and the pipeline is probably bloated with zombie deals.

AI assist. Paste the stage-level summary (stage name, deal count, total value, weighted value) and the coverage ratio into your AI assistant: "Write a 3-paragraph forecast commentary for leadership. Note any stage where deal count dropped vs last quarter. Flag if coverage is below 3×. Use cautious language — this is a draft for analyst review."

Step 3 — Territory reporting

Quarter-end territory packs typically need three views: territory totals, stage movement, and rep-level pipeline health. All three can be built from the same tblPipeline table.

Territory totals

=SUMIFS(tblPipeline[Value], tblPipeline[Territory], "EMEA")
=SUMIFS(tblPipeline[Weighted Value], tblPipeline[Territory], "EMEA")
=COUNTIFS(tblPipeline[Territory], "EMEA", tblPipeline[Stage], "<>Closed Won", tblPipeline[Stage], "<>Closed Lost")

Stage movement (quarter-over-quarter)

If you keep last quarter's export as tblPipelineQ3, compare deal counts per stage:

=COUNTIFS(tblPipeline[Stage], "Negotiation") - COUNTIFS(tblPipelineQ3[Stage], "Negotiation")

Positive = pipeline progressing. Negative = deals stalling or being disqualified faster than new ones enter.

Rep-level pipeline health

=SUMIFS(tblPipeline[Weighted Value], tblPipeline[Owner], "Jane Smith") / XLOOKUP("Jane Smith", tblQuotas[Rep], tblQuotas[Quota])

This gives a per-rep coverage ratio. Flag anyone below 2× in the territory pack.

AI assist. Paste the territory summary table and prompt: "Draft a territory narrative for the EMEA section of our QBR deck. Highlight the top 3 deals by weighted value, flag any territory where coverage dropped below 2.5×, and note the stage with the largest quarter-over-quarter decline. Keep it to 150 words."

Worked example — quarter-end territory pack

A 12-person SaaS sales team exports 340 deals from HubSpot. The Sales Ops analyst runs the three-step workflow above in 45 minutes:

  1. Cleanup: Remove Duplicates drops 18 rows. Stage standardisation catches 9 "Qualified" entries that should be "Discovery" and 4 blank stages. Staleness filter surfaces 23 deals untouched for 30+ days — analyst emails reps for status.
  2. Forecast: Weighted pipeline = £2.1M against a £680K quota → 3.1× coverage (healthy). AI drafts commentary noting that Negotiation count dropped from 14 to 9 vs Q3 — analyst adds context (two enterprise deals slipped to Q2).
  3. Territory pack: Three territories (EMEA, APAC, Americas). APAC coverage = 1.8× (below threshold). AI flags it; analyst adds a recruitment note. Pack is reviewed and sent to VP Sales before 3 PM.

Before this workflow, the same pack took two days of manual compilation. The AI did not make any decisions — it drafted narratives and flagged numbers. The analyst owned every word that left the spreadsheet.

Troubleshooting

  1. SUMIFS returns 0 for a territory that clearly has deals. Territory name has a trailing space in the CRM export. Fix: wrap the criteria in TRIM — =SUMIFS(tblPipeline[Value], TRIM(tblPipeline[Territory]), "EMEA") — or better, clean the source column with Find & Replace (find " " at end, replace with nothing).
  2. Weighted Value column shows £0 for every row. The Win Probability lookup is returning 0 because Stage names don't match the reference table exactly. Check for capitalisation differences ("negotiation" vs "Negotiation") or leading/trailing spaces. Use =EXACT([@Stage], XLOOKUP([@Stage], tblStageProb[Stage], tblStageProb[Stage])) to diagnose.
  3. Coverage ratio is absurdly high (10×+). Closed Won deals are still in the pipeline table, inflating the total. Filter out Closed Won and Closed Lost before calculating: =SUMIFS(tblPipeline[Weighted Value], tblPipeline[Stage], "<>Closed Won", tblPipeline[Stage], "<>Closed Lost") / quota.
  4. AI-drafted commentary contains made-up deal names. The AI hallucinated details not in the pasted data. Always paste the raw table, never summarise it verbally before prompting. Include the instruction "Only reference deals that appear in the data below" in your prompt.
  5. Quarter-over-quarter comparison shows wrong deltas. The Q3 export uses different stage names (e.g. "Qualified" instead of "Discovery"). Standardise both tables with the same stage-mapping helper column before comparing.

Common mistakes

  • Running AI on a pipeline that hasn't been deduplicated — the AI counts duplicates as real deals.
  • Treating AI forecast commentary as final guidance without checking deal-level accuracy.
  • Using raw (unweighted) pipeline value in the coverage ratio — overstates health by 2–4×.
  • Letting stage definitions drift between CRM and Excel — forecast becomes unreliable within one quarter.
  • Sending AI-drafted territory narratives to leadership without analyst review — tone and accuracy both need a human pass.

Frequently asked questions

Which Sales Ops tasks benefit most from AI in Excel?

Pipeline cleanup (deduplicating, standardising stages, flagging stale deals), weighted forecast first-drafts, territory summary narratives, and anomaly detection across CRM exports. All four produce a reviewable draft rather than a final decision, which keeps the human in control.

How do I build a weighted pipeline forecast in Excel?

Create a Pipeline table with columns for Deal, Stage, Value, and Win Probability. Add a Weighted Value column: =[@Value]*[@[Win Probability]]. Summarise with =SUMIFS(tblPipeline[Weighted Value], tblPipeline[Stage], stage_name) per stage. AI can then generate commentary on the coverage ratio and flag deals whose Days in Stage exceeds the historical median.

What is pipeline coverage ratio and why does it matter?

Coverage ratio = Total Weighted Pipeline ÷ Quota. A ratio of 3× means you need three pounds of pipeline for every pound of quota, based on your historical win rate. If coverage drops below your target, the forecast is at risk regardless of what individual reps commit.

Can AI replace a Sales Ops analyst for quarter-end reporting?

No. AI can draft territory summaries, flag anomalies, and generate first-pass commentary, but the analyst must verify deal-level accuracy, apply business context (e.g. contract timing, procurement cycles), and own the narrative before it reaches leadership. Treat AI output as a draft, not a deliverable.

How do I clean a messy CRM pipeline export in Excel?

Format as an Excel Table (Ctrl + T), then: 1) Remove Duplicates on the deal-ID column, 2) use Data Validation dropdowns for Stage to prevent free-text drift, 3) add a helper column =TODAY()-[@[Last Activity Date]] to surface stale deals, 4) use TRIM and CLEAN to strip whitespace from text fields.

Related tutorials