Funnel block
A progressive-stage chart for a sequence like visits → signups → purchases, where each stage is measured against the stage that started the sequence. It exists to answer one question a plain bar chart can't: not just how big each stage is, but how much of the original audience made it that far.
How it works
The chart draws each authored stage as a horizontal bar, narrowing left to right as the value drops — the same visual language used elsewhere in the product for engagement funnels, colored by an ordinal ramp (one hue, stepped lighter or darker by each stage's position in the sequence) rather than the categorical palette bar/line/pie charts use. That distinction matters: a funnel stage isn't an independent identity like a pie slice or a bar-chart series, it's a position in an ordered sequence, and the color says so.
Underneath the image sits the always-visible data table — never optional, since it's what makes the block usable in text-only clients, image-blocked inboxes, and screen readers. The funnel's table carries two numbers the image alone doesn't show:
- % of first — this stage's value as a percentage of the very first stage, the "how much of the original audience is left" read.
- % of previous — this stage's value as a percentage of the stage directly before it, the step-by-step drop-off a funnel exists to surface.
Stage order is the data. Because a funnel's meaning depends entirely on the order you typed the stages in, there's no folding an overflow stage into an "Other" bucket the way the pie or treemap chart does when it runs out of room — merging two stages together would misrepresent the sequence's shape. Instead, past 8 stages, anything beyond the cap is simply not drawn (or tabled). A blank label, an unparseable value, or a negative value is skipped outright — a funnel stage can't be negative, so a value below zero is treated as unfilled rather than a real stage worth zero.
Configurable fields:
- Chart title — optional heading text above the chart.
- Stages (in order) — the row-list itself: a Stage label and a numeric Value per row, authored in the order the stages progress. There's no per-row color field — a stage's color is always derived from its position, not picked per row.
- Ramp color — overrides the ordinal ramp's base hue; leave blank to use the project's brand color.
- Background color, padding, border and border radius on the card.
- Title color/size and legend color/size — text styling for the heading and the legend/table text beneath the image.
If no stages are authored yet, the block renders its title and card chrome with a plain "Add at least one row of data to render this chart" notice in place of the image — never a broken or empty chart mid-edit.
Examples
A signup-to-purchase conversion report — Visited, Signed up, Added to cart, Purchased — dropped into a weekly growth digest gives the team a drop-off read without a dashboard link. A support or onboarding email can track a multi-step setup flow (Account created → Profile completed → First project → Invited a teammate) to see exactly where new users stall. A content team running a webinar can chart Registered → Attended → Asked a question → Requested a follow-up to see how much of the registration list actually engaged live.
What the static fallback looks like
<div style="margin:12px 0;background-color:#ffffff;padding:16px">
<p style="margin:0 0 8px;font-weight:600;font-size:15px;color:#111827">Signup funnel</p>
<img src="https://mailinapp.com/api/analytics/chart?d=eyJ0eXBlIjoi...&s=3f9a2b1c..." width="560" height="280"
alt="Funnel: Visited 1,000 (100%) → Signed up 420 (42%) → Added to cart 180 (18%) → Purchased 95 (9.5%)" />
<table style="width:100%;border-collapse:collapse;margin-top:4px">
<tr>
<th style="text-align:left;padding:4px 8px;font-weight:600">Stage</th>
<th style="text-align:left;padding:4px 8px;font-weight:600">Value</th>
<th style="text-align:left;padding:4px 8px;font-weight:600">% of first</th>
<th style="text-align:left;padding:4px 8px;font-weight:600">% of previous</th>
</tr>
<tr>
<td style="padding:4px 8px">Signed up</td>
<td style="padding:4px 8px">420</td>
<td style="padding:4px 8px">42%</td>
<td style="padding:4px 8px">42%</td>
</tr>
</table>
</div>
The <img> carries a full text description of every stage in its alt text, and the table beneath it repeats the same numbers as selectable HTML — including the drop-off column the image itself doesn't draw.
Related
- Analytics & chart blocks — the family overview, covering all thirteen chart/KPI blocks
- Binding charts to real data — only the KPI scorecard, bar, line and pie charts can bind to a data source or campaign results; the funnel is author-typed rows only
- Block reference overview