Education · Sales funnel

Enrollment funnel with forecast and targets

How many prospects came in, where the funnel loses them and how much will close this month, with every number on the right date and the forecast checked against the target.

UsageWidely used
EffortMedium
ForSchools, colleges, short-course providers and corporate education companies that sell enrollments or courses through a sales team working in a CRM.
Source

CRM: deals, pipelines, stages, loss reasons and tasks

Rule

Entry by creation date, sale and loss by close date

Outcome

Funnel, losses by stage, cycle time and forecast against the target

Activation

Leadership dashboard, AI agent and email report

What it solves

  • Leads and sales stop contradicting each other: each metric uses the right date, entry or close.
  • Leadership knows at which stage the funnel loses the most deals and why.
  • The monthly forecast accounts for qualification and the historical loss rate of each stage, and shows whether the target will be met.

Business questions it answers

Ask your agent these questions once the case is live.

How many prospects entered the funnel this month, by campus and by course?
Are we going to hit this month's sales target?
At which stage does the funnel lose the most deals, and for what reason?
What is the average time between a lead coming in and the sale?
Which deals have been stuck in the proposal stage for more than a week?
How many deals have overdue tasks, by salesperson?

What you need

  • CRM connected to Nekt (deals, pipelines, stages, loss reasons and, if available, stage history and tasks)
  • The list of pipelines that are new sales and the school's monthly target
  • The qualification rule used in the forecast (for example, the deal score)

What you get

  • A table with one row per deal: pipeline, canonical stage, status, entry and close dates, amount, loss reason and cycle time
  • Dashboard with leads, open pipeline, sales, losses by stage and target projection
  • An AI agent that answers questions about the funnel without calling a prospect an enrolled student
  • Daily or weekly email report with new deals and pending items

Where to activate

Leadership dashboard

Leads, pipeline, sales, losses by stage and target projection, with each metric's date stated explicitly.

AI agent via MCP

Coordinators ask about prospects and deals and get answers that never confuse a deal with an enrollment.

Email report

Previous day's new deals by pipeline, and weeks running Sunday to Saturday in America/Sao_Paulo.

Ready to build?

One source, but it requires agreeing on pipeline scope, stage map and forecast rule with the school. The detailed view has the business rules, the pitfalls and the acceptance test. Or send everything straight to your agent with the Nekt MCP.

The problem

The CRM stores one row per deal with several dates, and each question needs a different one. Counting sales by creation date or leads by close date produces a funnel that does not match the CRM's own report. On top of that come pipelines that are not new sales, stages named after enrollment that are not enrollment, deals duplicated by joins with contacts and a forecast that treats every open deal as a sure sale.

How it is usually done, and the rule

Each row is a mistake that already happened in practice.

The common wayThe rule
01
Counting the month's sales as the deals created in the month.
Each metric has its own date

Leads in the funnel, open pipeline and distribution by stage use the entry date (`created_at`, `add_time`). Sales, revenue, losses, conversion and cycle time use the close date (`closed_at`, `won_time`, `lost_time`). Convert everything to America/Sao_Paulo before truncating to the day.

02
Adding up every CRM pipeline in the same dashboard.
Explicit pipeline scope

Only new-sales pipelines are included. In-company sales, waiting list, renewal, CS, partnership and event pipelines stay out of the leadership dashboard. Store the pipeline type as a column in the base table and filter in the final layer, instead of hiding the filter. Confirm the real pipeline by how it is used: in one case, the new-sales pipeline had a test name.

03
Counting rows after joining deals with contacts or products.
Count distinct deals

A deal has several contacts, products and tasks. After any join, count the distinct deal id. Contacts, tasks and products are counted by their own id.

04
Classifying a win by the stage name.
CRM status defines open and closed

Use the native status: won (`won`), lost (`lost`), in progress (`ongoing`) and paused (`paused`). Closed = won + lost. Open = in progress + paused. Deleted deals (`deleted`) are excluded; in Pipedrive, join `deals` with `deals_archived` so you do not lose history.

05
Answering how many students were enrolled by counting won deals.
A CRM stage is not an enrollment

A stage or field called Enrollment completed is a sales classification. Official enrollment comes from the academic system. A CRM contact may be a mother, father or guardian, not the student. In answers, talk about deals, prospects and sales.

06
Lost deals at the stage / deals that passed through the stage.
Loss by stage is share of losses

Where the funnel loses = lost deals at the stage / total lost deals in the close month. Do not compute a loss rate within the stage: wins only happen at the last stage, so the rate becomes 100% at every other stage.

07
Adding the value of the entire open pipeline as the month's forecast.
The forecast weighs qualification and stage loss

Only in-progress deals in the proposal and negotiation stages are included. Weighted value = amount × qualification probability × (1 - stage loss rate over the last 3 months). The probability for each score is the school's rule (for example, 80%, 60% and 40%); scores without a rule count as unqualified, not as 100%.

08
Paused deals added to the forecast.
Paused stays out of the forecast

A paused deal counts as open in the pipeline, but does not enter the month's forecast. Awaiting payment is also a stage: in B2B sales, closing can take about 14 days until the client's purchasing department pays.

09
Dividing the sum of days by all wins, including those without a date.
Average cycle only over deals with a cycle

Average cycle = sum of cycle days / number of wins with cycle filled in. The cycle starts at the card creation date recorded by an automation when one exists, because the native date changes when the deal is duplicated or recreated.

10
Comparing stages by raw text across different pipelines.
Stages normalized in a canonical map

Stage names come with emoji, spaces and variations across pipelines. Remove emoji and spaces and map each stage of each pipeline to a canonical phase (lead, contact, qualification, proposal, negotiation, closing) through a reference table, not through a rule repeated in every query.

Status and stage: what each one counts

Native deal status and canonical stage phase.

status wonSale, on the close dateclosed_at / won_time
status lostLoss, on the close date, with reasonlost_reason
status ongoingOpen, enters the forecast if in proposal or negotiationongoing
status pausedOpen, out of the forecastpaused
Lead, MQLTop: prospect who converted through a form or conversation
Contact, SALQualification: profile and ability to pay confirmed
Presentation, Proposal, SQLProposal sent with syllabus, price and installments
NegotiationNegotiating terms and conditions
ClosingApproved, awaiting payment
Enrollment completed (stage or field)Sales classification, not official enrollment

Definitions

Leads in the funnel
distinct deals in new-sales pipelines with entry date in the period
Open pipeline
sum of the amount of in-progress and paused deals, by entry date
Closed sales
distinct deals with won status and close date in the period
Sales revenue
sum of the amount of won deals, by close date
Conversion rate
won / (won + lost) with close date in the month
Stage loss share
lost deals at the stage / lost deals in the close month; adds up to 100% in the month
Average cycle
sum of days between entry and win / wins with cycle filled in, by close month
Weighted forecast
sum of amount x qualification probability x (1 - stage loss over the last 3 months), only in-progress deals in the proposal and negotiation stages
Target projection
revenue closed in the month + weighted forecast, compared with the monthly target; alongside, the projection at the daily run rate

Pitfalls that already happened

Pipeline with a misleading name

At one school, the new-sales pipeline used by SDRs and closers was named like a test pipeline, and anyone who filtered by the expected name got zero sales.

Validate the pipeline scope with the sales team and record the list in the context document.

Current source erases history

In CRMs like Clint, the card only stores the current source and pipeline. Lost deals are moved to a win-back pipeline and the original entry disappears.

Use the stage history (`deal_history`) to rebuild the journey and measure time in stage by median, never by sum or average of averages.

Open task on a lost deal

Lost deals still had open tasks and inflated each salesperson's overdue list.

Overdue task = open status, due date before today in America/Sao_Paulo and deal still open; a weekly routine can clean up tasks on lost deals.

Date in a text field

Prospecting and connection dates came in custom fields as `YYYY-MM-DD HH:MM` text, sometimes with a single-digit hour, and Spark's strict parser broke the load.

Use lenient parsing (in Spark, `timeParserPolicy` LEGACY) and treat invalid text as null.

Consultant status is not conversion

In a sales ERP, the funnel status set by the consultant said sale on leads that never became a contract.

Converted = an actual sale originated from the lead exists, not the status chosen by the salesperson.

Customer type almost empty

The CRM's PJ or PF field (company or individual) was filled in on few deals, and Not informed became the largest slice.

Use the answer from the qualification questionnaire as a fallback, matched by the contact's email, and show how many came from the fallback.

Acceptance test

The case is done when every item passes.

Agent package

Paste into Claude, ChatGPT or any client with the Nekt MCP connected.

Full Markdown
Enrollment sales funnel
- Scope: only the new-sales pipelines <list of pipelines>. In-company, waiting list, renewal, CS, partnerships and events stay out of the leadership dashboard.
- Leads in the funnel, open pipeline and distribution by stage: entry date (created_at). Sales, revenue, losses, conversion and cycle time: close date (closed_at). Time zone America/Sao_Paulo.
- Status: won = sale, lost = loss, ongoing and paused = open. Paused deals do not enter the forecast.
- Count deals with a distinct count of the deal id, never a row count after joining contacts, products or tasks.
- A CRM stage or field named Enrollment completed is a sales classification, not official enrollment. A CRM contact may be a guardian, not the student.
- Loss by stage = lost deals at the stage / lost deals in the month. Do not use a loss rate within the stage.
- Forecast = amount x qualification probability x (1 - stage loss over the last 3 months), only in-progress deals in the proposal and negotiation stages.
- Average cycle = sum of days / wins with cycle filled in.
- Overdue task = open status and due date before today in America/Sao_Paulo.
- State the date of the last load in every answer with a time range. Null is not zero.
Client exceptions:
- <client>: monthly target of R$ <value>; probability by score: <score> = <x>%.
- <client>: the real new-sales pipeline is <pipeline name>, despite its name.
- <client>: B2B sales stay in Closing for about <n> days until payment.

Variations

SDR and campuses

An SDR pipeline separate from each campus's pipeline or from PJ and PF (company and individual) segments, with handoff from the SDR to the campus.

Team productivity

Conversations, messages and tasks by salesperson, counting only named human operators; events and notes are not conversations.

Targets by source

Monthly target by product and source from a spreadsheet, compared with actuals from the CRM.