Skip to main content
Goal: Pull deal and meeting data from whatever CRM the user tracks their pipeline in, analyze it over a chosen period, and produce a report that answers the questions a founder, sales leader, or AE actually cares about.
ToolPurposeRequired
Salesforce / HubSpot / Pipedrive / ClosePull deal and pipeline data via API or CSV exportNo (one required)
SupabaseQuery deals or outreach tables directlyNo (optional)
Google SheetsRead pipeline data from a spreadsheetNo (optional)
Notion MCPQuery a Notion pipeline databaseNo (optional)
Trigger: Run on demand when the user asks for a pipeline review, deal review, 1:1 prep, board meeting prep, weekly sales review, or asks about meeting quality, conversion rates, or pipeline health. Also runs when an upstream workflow (Pipeline Ops, daily BDR rhythm) triggers an end-of-period review.

Setup

On first run, collect and store these preferences. Skip on subsequent runs. Data Source Config
QuestionOptionsStored As
Where do you track your pipeline?Salesforce / HubSpot / Pipedrive / Close / Supabase / Google Sheets / CSV / Notion / Othercrm_tool
How do we access it?API / Export CSV / MCP tools / Direct queryaccess_method
What object represents a “deal” in your system?Opportunity / Deal / Lead / Meeting / Customdeal_object
Pipeline Stage Definitions
QuestionPurposeStored As
What are your pipeline stages in order?Map data to a standard funnelpipeline_stages
Which stage means “qualified”?Qualification rate calculationqualified_stage
Which stage means “closed won”?Win rate calculationwon_stage
Which stage means “closed lost”?Loss analysislost_stage
What is your expected sales cycle length? (days)Identify stuck dealsexpected_cycle_days
Field Mapping Different CRMs use different field names. Map the user’s fields to standard analysis fields:
Standard FieldPurposeStored AsExamples
Deal nameIdentificationfield_deal_name”Name”, “Deal Name”, “Opportunity Name”
CompanyAccount groupingfield_company”Company”, “Account”, “Organization”
StageFunnel positionfield_stage”Stage”, “Pipeline Stage”, “Status”
OwnerRep-level analysisfield_owner”Owner”, “Assigned To”, “Rep”
SourceChannel attributionfield_source”Lead Source”, “Source”, “Channel”
Created datePeriod filteringfield_created_date”Created Date”, “Created At”, “Date Added”
Close dateVelocity trackingfield_close_date”Close Date”, “Expected Close”, “Closed At”
AmountRevenue analysisfield_amount”Amount”, “Deal Value”, “ARR”, “MRR”
Last activity dateStale deal detectionfield_last_activity”Last Activity”, “Last Modified”, “Last Touched”
Loss reasonLoss analysisfield_loss_reason”Loss Reason”, “Closed Lost Reason”
Minimum viable data: deal name + stage + created date. All other fields enrich but aren’t required. Benchmarks (Optional)
QuestionPurposeStored As
Target meeting volume per week/month?Compare actuals to goalstarget_meetings
Target qualification rate?Flag if below targettarget_qual_rate
Target win rate?Flag if below targettarget_win_rate
Target pipeline value?Revenue gap analysistarget_pipeline_value
Store config in: clients/<client-name>/config/pipeline-review.json or equivalent. Do not ask again in future runs.

Step 1: Pull Pipeline Data

Pull deal and meeting data from the configured CRM for the specified time period. Ask the user for the review period if not provided:
“What period should I analyze? Options: last 7 days, last 14 days, last 30 days, last 90 days, or a custom date range.”
Based on crm_tool and access_method, pull data as follows:
CRMAccess MethodHow to Pull
SalesforceAPI / CSVSOQL query or user uploads CSV export
HubSpotAPI / CSVDeals API or user uploads CSV export
PipedriveAPI / CSVDeals API or CSV export
CloseAPI / CSVLeads/Opportunities API or CSV
SupabaseDirect queryQuery deals/outreach_log tables
Google SheetsSheets API / CSVRead sheet or user exports CSV
NotionNotion MCPQuery database
CSVFile readUser provides file path
Pull two datasets:
  • Current period: All deals created or active within the specified date range
  • Comparison period: Same-length prior period (e.g., if reviewing last 2 weeks, also pull the 2 weeks before that)
Normalize all data into a standard structure regardless of source:
deals: [
  {
    id, name, company, stage, owner, source,
    created_date, close_date, last_activity_date,
    meeting_date, amount, qualification_status,
    loss_reason, days_in_current_stage, total_age_days
  }
]
Present a human checkpoint:
Data Pulled Source: [CRM name] Current period: [start] to [end] — [N] deals Comparison period: [start] to [end] — [N] deals Fields available: [list] Fields missing: [list — analysis will adapt] Data looks correct? (Y/n)“

Step 2: Analyze Pipeline

Run all seven analyses on the current period data. Where comparison period exists, calculate period-over-period trends. Analysis 1 — Volume Metrics Calculate: total deals created, meetings booked, meetings held, no-show rate, weekly run rate, period-over-period change, vs. target_meetings. Analysis 2 — Qualification Breakdown Calculate: qualified deals, unqualified deals, pending qualification, qualification rate, top disqualification reasons, vs. prior period, vs. target_qual_rate. A deal is qualified if it reached or passed qualified_stage. A deal is unqualified if it was closed lost before reaching qualified_stage. Analysis 3 — Source Attribution Group by field_source: count deals, meetings, qualified deals, won deals. Calculate qualification rate and win rate per source. Flag if any single source drives more than 60% of pipeline. Analysis 4 — Stage Distribution and Velocity Group active deals by stage. Calculate deal count, revenue, weighted revenue, average days in stage, and stage-to-stage conversion rates. Use these stage probability defaults unless actual data is available:
StageProbability
Lead5%
Meeting Booked10%
Meeting Held20%
Qualified40%
Proposal Sent60%
Negotiation80%
Closed Won100%
Closed Lost0%
Analysis 5 — Stuck Deals and At-Risk Pipeline A deal is “stuck” if days_in_current_stage exceeds 2× the average for that stage, or exceeds expected_cycle_days total. Default stuck thresholds (use if stage-average data is insufficient):
StageExpected Max Days
Lead3
Meeting Booked7
Meeting Held5
Qualified10
Proposal Sent14
Negotiation14
Also flag: deals with no activity for more than 14 days; deals where total_age_days > 1.5× expected_cycle_days; any single deal > 30% of total pipeline value. Analysis 6 — Win/Loss Analysis Calculate: win rate overall, win rate by source, win rate by owner, average deal size (won), average days to close, top loss reasons, loss stage distribution. Analysis 7 — Forecast and Coverage Only run if target_pipeline_value or revenue targets are configured. Calculate: pipeline coverage ratio (weighted pipeline / remaining quota), commit forecast (Negotiation + Proposal stage deals), best case forecast (commit + Qualified deals × historical win rate), gap to target, required deals and meetings to close the gap. Coverage assessment:
CoverageAssessment
3x+Healthy
2–3xAdequate
<2xAt risk
<1xCritical

Step 3: Generate Report

Generate two formats from the analysis output. Executive Summary — one page, numbers and trends, what a founder reads in 60 seconds:
# Pipeline Review — [Period Type]: [Start Date] to [End Date]

## Snapshot

| Metric             | This Period | Prior Period | Change   |
| Meetings booked    | [N]         | [N]          | [+/-Z%]  |
| Meetings held      | [N]         | [N]          | [+/-Z%]  |
| Qualification rate | [X%]        | [Y%]         | [+/-Z pts] |
| Win rate           | [X%]        | [Y%]         | [+/-Z pts] |
| Pipeline value     | $[X]        | $[Y]         | [+/-Z%]  |
| Avg deal size      | $[X]        | $[Y]         | [+/-Z%]  |
| Avg days to close  | [X]         | [Y]          | [+/-Z]   |

## Red Flags
- [Metric trending down significantly]
- [Stuck deals above threshold]
- [Pipeline coverage below 2x]
- [Single source >60% of pipeline]
- [No-show rate above 20%]

## Green Lights
- [Metrics trending up]
- [Sources performing well]
- [Stages moving faster than expected]

## Top 3 Actions
1. [Most impactful action this week]
2. [Second most impactful]
3. [Third most impactful]
Detailed Diagnostic — full data tables, stage-by-stage breakdown, source analysis, stuck deal list, and specific recommendations. Sections: Volume, Qualification, Source Effectiveness, Stage Distribution and Velocity, Stuck Deals, Win/Loss Analysis, Forecast and Coverage (if targets set), Recommendations. Each recommendation must cite the specific data point that drives it. Apply this logic:
PatternRecommendation
Qualification rate <40%Tighten ICP targeting — top DQ reason is [X]
No-show rate >20%Implement confirmation reminders 24h and 1h before meetings
One source >60% of pipelineDiversify — if this channel underperforms, pipeline collapses
High-quality source with low volumeScale it — [source] has [X]% qual rate but only [Y]% of volume
Deals stuck in a specific stageUnblock [stage] — [N] deals averaging [Y] days (2× normal)
Win rate decliningWin rate dropped from [X]% to [Y]% — top loss reason is now [Z]
Pipeline coverage <2xNeed [Z] more qualified deals — requires [W] meetings at current rates
Cycle lengtheningBottleneck at [stage] — deals [X] days slower vs prior period
Present the executive summary first, then offer the detailed diagnostic:
“[Executive Summary rendered]
Full detailed diagnostic is also available. Actions from this review:
  1. [High priority recommendation]
  2. [High priority recommendation]
  3. [Medium priority recommendation]
Stuck deals requiring immediate attention:
DealCompanyStageDays StuckAction
Want to see the full diagnostic? Or take action on any of these recommendations?”

Step 4: Export and Share

Save or share the report based on user preference:
DestinationHow
Markdown fileSave to clients/<client>/reports/pipeline-review-[date].md
Google SheetsExport data tables (metrics, deal list, source breakdown)
NotionPush to a Notion database page via Notion MCP
SlackSend executive summary to a specified channel
EmailSend via agentmail
Display onlyRender inline (default)

Output Format


Pipeline Review — [Period Type]: [Start] to [End] Snapshot
MetricThis PeriodPrior PeriodChange
Meetings booked[N][N][+/-Z%]
Meetings held[N][N][+/-Z%]
Qualification rate[X%][Y%][+/-Z pts]
Win rate[X%][Y%][+/-Z pts]
Pipeline value$[X]$[Y][+/-Z%]
Avg deal size$[X]$[Y][+/-Z%]
Avg days to close[X][Y][+/-Z]
Red Flags: [List or “None”] Green Lights: [List or “None”] Top 3 Actions:
  1. [Action]
  2. [Action]
  3. [Action]
Stuck Deals
DealCompanyStageDays StuckOwnerAction

Edge Cases

  • Missing amount field: Skip revenue metrics, weighted pipeline, and forecast. Volume and stage analysis still run.
  • Missing source field: Skip source attribution (Analysis 3). All other analyses still run.
  • Missing loss reason field: Skip loss reason breakdown. Win/loss rate still calculates.
  • Missing last activity date: Skip no-activity deal detection. Stuck deals are still detected via stage duration.
  • No comparison period data: Run single-period analysis only. Omit all period-over-period trend columns.
  • No targets configured: Skip forecast and coverage analysis (Analysis 7). Note in output that targets are not set.
  • Loss reasons mostly blank or “Other”: Flag data hygiene issue in recommendations. Note that loss analysis is unreliable until reps fill in reasons consistently.
  • CRM not connected or CSV not provided: Ask the user to either connect the CRM via MCP or upload a CSV export before proceeding.