ForgeSendDocs

Pipeline Funnel

Pipeline Funnel is a card at the top of /dashboard/analytics, above the per-campaign performance grid — it's workspace-wide and runs entirely independently of that grid's own search/status/tag filters below it. It visualizes how pipeline records move through six of Pipeline's seven stages: Active → Engaged → Interested → Meeting Requested → Meeting Booked → Handed to Client.

Disqualified is deliberately never shown as a 7th funnel row. It only ever appears as a small "N disqualified from here" badge on whichever stage a record was disqualified from, plus a running total in the footer — the funnel itself only visualizes the six-stage forward chain.

The funnel visualization

Each of the six stages is one row — a tapering trapezoid band, all in one consistent emerald hue, darkest at Active and progressively lighter toward Handed to Client (a deliberate single-hue gradient representing one shrinking population, not per-stage rainbow colors the way the Pipeline board itself uses). A band's top edge width is that stage's own entered-count relative to Active's; its bottom edge tapers to match the next stage's entered-count, so adjacent bands join with no visual gap. Handed to Client, having no next stage, renders as a plain rectangle instead of a taper.

Rows are collapsed by default and expand one at a time (opening a second row collapses whichever was open) — see Per-stage detail below for what's inside. A collapsed row shows a small warning dot when it has overdue in-flight leads (amber) or disqualified leads (red); a short legend explaining those dots only appears when at least one row actually has one.

Pipeline Funnel — read only

Pipeline Funnel

Overall conversion18.4%
Median cycle9d 4h(n=42)
From Jul 1To Sep 1
overdue in-flight leads heredisqualified leads here
Active240
62%
Engaged149
61%
Interested90
68%
Meeting Requested61
78%
Meeting Booked48
92%
Handed to Client44

240 leads · 12 total disqualified

Headline stats

Two figures sit next to the title, shown once there's at least one pipeline record in the workspace:

  • Overall conversion — of every record that ever reached Active, what percentage reached Handed to Client. Record-level, not per-attempt (see Footer totals for the attempt-vs-record distinction).
  • Median cycle time — the median number of hours from a record's first entry into Active to its first entry into Handed to Client, shown with its own sample size (n=). Both read "—" if there isn't yet a record that's completed the full journey.

Date range filter

A From / To date pair, filtering by a pipeline record's own first entry into Active — not by when any individual stage transition happened. A record's entire journey is either wholly included or wholly excluded by the filter; there's no partial slicing of a record's history. Leaving both fields empty (the default) means all-time. A Clear button appears once either field is set.

This filter is independent of the campaign performance grid's own search/status/tag filters further down the page — changing one has no effect on the other.

Per-stage detail

Clicking a row expands it into a detail panel with up to five stats, each shown only when relevant:

Engaged — expanded detail — read only

7 disqualified from here

Converted

90

Time to next stage

median 3d 6h · P90 8d 1h

n=90

In-flight

36 on track · 16 overdue

estimated — not enough history yet

Pipeline value

$186,000

from 31 of 52 records with a value set

  • Disqualified from here — a red badge at the top, shown only when at least one record was disqualified while sitting in this stage.
  • Converted — how many records left this stage by advancing to the literal next stage (never credited for a skip).
  • Time to next stage — median and P90 hours to the next stage, with its own sample size. Not shown on the last stage (there's no next stage). Reads "No data yet" if no record has completed this transition yet.
  • In-flight — records currently sitting in this stage right now, split into on-track vs. overdue. Overdue is judged against roughly double this same stage's own real median time-to-next-stage — falling back to a fixed 7-day threshold (and flagged as an estimate) when there isn't yet enough completed-transition history to compute a real median.
  • Other — records that left this stage some other way (not converting, not being disqualified from it, not still there) — shown only when nonzero.
  • Pipeline value — the sum of Estimated Value across every record currently in this stage, in the workspace's own display currency. Always shown with a coverage caveat ("from N of M records with a value set") rather than as a bare number, since Estimated Value is manual-only and most records may not have one set.

Footer totals

Below the rows: total leads, total disqualified, and — only when it differs from the lead count — total attempts, with a note that some leads were disqualified and later reactivated. A record can be disqualified and then manually moved back out of Disqualified, starting a fresh "attempt"; per-stage counts above are counted per-attempt, while the two headline stats and Pipeline value are counted per-record (a record counts once even if it made more than one attempt).

The Meeting Requested KPI — a separate count

Inside each campaign's own analytics workbench (the detail overlay you open by clicking a campaign card below this funnel), there's a "Meeting Requested" hero stat card next to "Interested" — plus a matching "N meeting requested" chip shown inline on the campaign's own card in the grid.

Campaign workbench — read only

Replied

62

8.1%

Interested

21

2.7%

Meeting Requested

9

1.2%

This KPI and the funnel's Meeting Requested row count two genuinely different things. The KPI counts inbound replies tagged or AI-classified Meeting Requested and attributed to that campaign — a reply-level count. The funnel row counts pipeline records currently at (or that ever passed through) the Meeting Requested stage — a Pipeline automation state. A reply can be tagged Meeting Requested before its record reaches that stage — the once-a-minute automatic-movement job may not have processed it yet, or the lead may have no linked pipeline record at all — so the two numbers can disagree, and aren't kept in sync.

Where to go next

Next: Pipeline overview