Leed gates 26 named capabilities by plan. This page lists all of them. There are two ways to read it: find the capability you want and read across to the plan it needs, or pick a plan heading and read everything it turns on.
How to read this table
Every gated capability has exactly one minimum plan, and access is a rank comparison: free → starter → growth → enterprise, and you have the capability when your plan’s rank is at least the minimum’s. There is no partial access and no per-capability purchase.
The column that matters is Below its plan, because Leed does not gate uniformly. Some capabilities return an error you can see and a prompt telling you which plan to buy. Others hide a control, strip part of a response, return an empty list, return a 404, or quietly skip a step when your site builds. That non-uniformity is deliberate — a visitor’s browser must never receive a billing error from your published site — but it means “nothing happened” is sometimes the correct gated behavior rather than a fault.
| Behavior | What you see |
|---|---|
| Upgrade prompt | The surface is replaced by a panel or banner naming the capability and the plan it needs. A write attempt against the API returns 402. |
| Hidden control | The editing UI is not rendered at all. The read path still works. |
| Withheld data | The record loads, part of the payload is removed, and an existence flag survives — so the UI can honestly say a thing is there and still not show it. |
| Empty response | A public endpoint on your published site answers 200 [] or 200 {}. The block on the page renders nothing. |
| Not found | A public endpoint answers 404, so the surface is indistinguishable from “not a thing here” rather than from a billing problem. |
| Skipped at build | Your site builds successfully, without the feature. |
| Badge shown | The “Powered by Leed” link appears in your documentation footer. |
Behind an upgrade prompt is a single, consistent error shape:
{
"error": "upgrade_required",
"reason": "feature_gated",
"feature": "campaignPlanner",
"requiredTier": "growth",
"currentTier": "free"
}402 is used deliberately rather than 403, which Leed reserves for permission problems — a different fix, asked of a different person. What a gate looks like from the inside, including the quota variant of that body and all five observable behaviors, is covered in When a feature is gated.
Starter and up
Nine cataloged capabilities unlock at Starter. Two more Starter-gated things are not catalog entries at all and are listed underneath, because a reader meeting them cannot tell the difference.
| Feature | Minimum plan | Where you meet it in Leed | Below its plan |
|---|---|---|---|
| Marketing email | Starter | Sending a marketing email — the send flow from a contact group | Upgrade prompt. The send route returns 402; the Free allowance is 0, so the meter card is replaced by a gate banner rather than an empty bar. |
| Reader-level identity | Starter | Lead profiles and visitor identity — a contact’s timeline, and the Engage engagement panels | Withheld data. The profile itself loads on every plan; page views, form fills and sessions come back empty with readerIdentityGated: true. |
| Release notes email | Starter | Page workflows — the Workflows tab in the page editor | Upgrade prompt on create and enable. Reading, disabling and deleting an existing channel stay open on every plan, so a downgrade never traps a configuration you cannot clean up. |
| Badge removal | Starter | Documentation header, footer and logos — the footer of your published documentation | Badge shown. The footer renders a Powered by Leed link where a paid site renders your copyright line. |
| Auto-linking | Starter | Autolinks — configured in Settings, applied when your site builds | Skipped at build. The build succeeds and no automatic links are inserted; nothing fails in the foreground of the build log. |
| Auto-transcription & content extraction | Starter | Transcription and text extraction — video, audio and document assets | Withheld data. Transcription still runs and is still stored; the text is stripped from responses and the payload carries contentExtractionGated: true. |
| Content-level RBAC | Starter | Resource-level access overrides — the override columns on page types and labels | Hidden control. The editors go remove-only with a banner; creating a page-type or label override returns 402. Per-page overrides are ungated on every plan. |
| Custom theme & font names | Starter | Themes, fonts and code themes — naming your own color theme, code theme or font | Hidden control. Gated on change only: echoing back the stored value, clearing it, or swapping one built-in for another passes on every plan. |
| AI-powered docs search | Starter | Live documentation search — the search box on your published documentation | Not found. The search endpoints answer 404, and the build ships the static index instead, so readers still get search — without live results. |
| Ejectable documentation header template | Starter | leed site eject — replacing the docs header in your repository | Hidden control. The template is not listed by leed site eject and cannot be ejected; the default header always renders. |
| Ejectable documentation footer template | Starter | leed site eject — replacing the docs footer in your repository | Hidden control. Same as the header — and this is precisely what keeps the Powered by Leed badge on a Free site: you cannot override the footer that carries it. |
The last two rows are Starter-gated by a plain tier check rather than by the feature catalog. The user-facing answer is identical; the mechanism differs, which matters only if you are reading the templates themselves. Tier gating helpers covers both hasTier and hasFeature for template authors, and defers to this page for every minimum.
Content-level RBAC — exactly what is and is not gated
The gate covers one thing: creating an access override whose resource is a page type or a label. That request returns 402 below Starter, and the override editors on Settings → Page Types and Settings → Labels render remove-only with an upgrade banner.
Everything adjacent stays open on every plan, including Free:
- Per-page overrides. Granting one person elevated access to one page is not gated at any tier.
- Every read. Listing and inspecting overrides works on every plan.
- Every delete. This is deliberate: a workspace that downgrades must be able to clean up overrides it can no longer create.
- Enforcement of existing overrides. An override created on Starter keeps working after a downgrade to Free. It is grandfathered, not suspended.
- Base roles. The six-role model is not a paid feature and never has been.
- Approval workflows. The pricing page bundles “approval workflows” into this row; they carry no plan gate anywhere. See Roles and permissions for what the Content Approver role actually does.
Transcription and extraction — the file is processed either way
Uploading is never blocked, and the transcription or extraction job runs and stores its result on every plan, Free included. The gate is on retrieval.
Below Starter, asset responses have transcription, transcriptionSummary and extracted document text removed, and carry contentExtractionGated: true. The existence flags — hasTranscription, hasExtractedText — survive the strip. That is why the asset panel can tell you a transcript exists while refusing to show it: it is not guessing, and the text is genuinely there.
The practical consequence is that upgrading is instant and retroactive. There is no reprocessing step and no re-upload — the transcripts for everything you uploaded while on Free appear the moment the plan changes.
Reader-level identity — the profile loads, the history does not
Identified contacts are a Free capability. A contact record, its email, its fields and its opt-in state are all readable on every plan, and the contacts list works on Free.
What Starter buys is the per-reader history attached to that record: which pages this person read, which forms they filled, which sessions they had. Below Starter the profile still loads and those three collections come back empty, with readerIdentityGated: true on the response.
A contact profile that opens with a populated header and a completely empty timeline is this gate, not a tracking failure. Capture continues on every plan, so the timeline fills in retroactively on upgrade.
Live documentation search — why it 404s instead of prompting
Search on your published documentation is the one gated capability your readers meet rather than your team. A visitor’s browser must never receive a payment error from your site, so below Starter the live search endpoints answer 404 — the surface reads as “not a thing here”, which is exactly what it is for that site.
Your readers are not left without search. The build detects the tier and ships the prebuilt static index and its client instead, so the search box still works; what it loses is live, server-side, AI-ranked results and faceting. Live documentation search covers the difference between the two, and Search for your documentation covers configuring either.
The 404 is enforced twice — once at your site’s edge worker and once at the API behind it — so it holds even for a request that bypasses the edge.
Growth and up
Twelve capabilities unlock at Growth. This is the campaign and funnel-analytics rung.
| Feature | Minimum plan | Where you meet it in Leed | Below its plan |
|---|---|---|---|
| Custom themes & layouts | Growth | Design workspace — the Email Templates and Site Layouts editors | Upgrade prompt. Each editor renders a panel in place of itself. Naming your own documentation theme is a different, Starter capability — see the row above. |
| Custom highlight themes | Growth | No surface reads this entry | Nothing observable. Choosing among the built-in code-highlighting themes is free on every plan, and naming your own code theme is Starter, under Custom theme & font names. |
| Lead workflows | Growth | Page workflows — the Workflows tab in the page editor | Upgrade prompt on create and enable; reads, disables and deletes stay open. |
| Campaign planner | Growth | Campaigns and deliverables — the Campaigns section of Engage | Upgrade prompt. Every campaign route returns 402. The plan calendar is deliberately left ungated, so the calendar itself keeps working. |
| Auto social posting | Growth | Page workflows — the social channel rows | Upgrade prompt. Locked rows carry a Growth plan note; a channel already switched on can still be switched off. |
| Dynamic CTAs | Growth | Dynamic CTAs — configured in Settings, rendered in a slot on your site | Upgrade prompt in the CMS; empty response on your published site — the CTA endpoint returns 200 {} and the slot stays blank. |
| Short-URL tracking | Growth | Short links and attribution — the short-link surfaces in Engage | Upgrade prompt. Every shortcode route, including its metrics, returns 402. |
| Agent analytics | Growth | No surface in the product today | Nothing to meet. See Cataloged but not built yet. |
| Recommendation engine | Growth | Recommendations — configured in Settings, rendered as a block on your site | Upgrade prompt in the CMS; empty response on your site — the endpoint returns 200 [], the block renders nothing, and the recommendation stub template is not ejectable. |
| Video & audio engagement analytics | Growth | Media engagement analytics — the media widgets on the Know dashboard | Upgrade prompt. The eight video and audio metrics return 402; every other widget on the same dashboard keeps working. |
| Menu click analytics | Growth | Click tracking and the overlay — element and internal-link click metrics | Upgrade prompt for the metrics. The in-page click overlay shows nothing at all rather than a prompt — a known defect, recorded in Known limitations. |
| Full-journey attribution | Growth | Journeys, funnels and attribution — the inbound attribution metric | Upgrade prompt. The metric returns 402; capture continues on every plan, so the history is there when you upgrade. |
Analytics gating deserves one sentence of its own: capture never stops. The site trackers record on every plan and the data lands in storage regardless of tier. Only reporting on the gated metrics is withheld, which is why an upgrade produces a populated chart immediately rather than starting a clock.
Recommendation engine — the block that renders nothing
Recommendations are the clearest example of a gate you will mistake for a broken embed. On Free and Starter:
- The public endpoint answers
200 []— a successful, empty response. Nothing is logged as an error and the vector lookup is skipped entirely. - The block on your page therefore renders nothing at all. No placeholder, no message, no gap you can style around.
- The recommendation stub template does not appear in
leed site eject’s list, so a developer looking for something to customize finds an absence rather than a refusal.
If a recommendation block on your site is silently empty and your workspace is below Growth, this is why — check the plan before checking the template. Recommendations covers what it does once it is on.
Enterprise
Five capabilities are cataloged at Enterprise. One of them is built and enforced; the other four have no surface in the product today.
| Feature | Minimum plan | Where you meet it in Leed | Below its plan |
|---|---|---|---|
| Custom syntax languages | Enterprise | Code blocks — highlighting languages beyond the built-in set | Upgrade prompt. Adding an extra language, and reading one back, both return 402. Every built-in language is free on every plan. |
| Account-based qualification | Enterprise | No surface in the product today | Nothing to meet. See below. |
| Cluster analytics | Enterprise | No surface in the product today | Nothing to meet. See below. |
| CRM integration | Enterprise | No gated surface today — CRM integration describes what does exist | Nothing to meet. See below. |
| SSO | Enterprise | No surface in the product today | Nothing to meet. See below. |
What every plan includes
The mirror image of the three tables above, and the section that prevents the most dead ends. Absence from the gate list means ungated — these work identically on Free and on Enterprise.
| Capability | Note |
|---|---|
| Unlimited users, templates and pages | No seat price, no page ceiling, no editor count anywhere in the product. |
| Your own custom domain | On Free too. |
| Real-time collaborative editing and AI authoring | The full editor, on every plan. |
| The Leed Assistant | Ungated. |
| Operator MCP | Free on every plan, including Free. No tier badge appears on any MCP page — see AI in Leed. |
| Docs MCP | Free on every plan. Gated on a per-workspace switch that is on by default, never on the tier. |
| WebMCP and the A2A agent card | Same per-workspace switch, same default. |
| Lead-capture forms and form submissions | Capture is never blocked on any plan — including past your contact quota. |
| Forms as general data collection | Ungated. |
| The menu builder | Ungated. |
| Aggregate analytics | Every metric not named in the Growth table above. The 30-day window on Free is a quota, not a feature gate. |
| Standard themes and all three documentation layouts | And there are exactly three layouts — no custom layout is possible at any plan. |
| Built-in code-highlighting themes | Choosing among them is free; naming your own is Starter. |
| Page scheduling | Governed by the page:publish privilege, never by plan. See Scheduling and automatic publishing. |
| Approval workflows | Role-driven, with no entitlement gate anywhere in the product. See Roles and permissions. |
| Per-page access overrides | Ungated, unlike page-type and label overrides. Resource-level access overrides draws the line. |
| Reads and deletes on every gated write surface | A downgrade never leaves you unable to inspect or remove what you configured while paying. |
Features that are cataloged but not built yet
Five catalog entries have a minimum plan and no surface in the product: agent analytics (Growth), and account-based qualification, cluster analytics, CRM integration and SSO (Enterprise).
One further entry, custom highlight themes, is cataloged at Growth and read by nothing at all. It is listed in the Growth table for completeness, with the honest observation that no behavior changes at that boundary.
Where this table and the pricing page differ
This page describes the product. The plan comparison on leed.ai describes the offer, and in eleven places the two do not line up. Every one is listed here rather than quietly reconciled, because the difference is visible to you and you should not have to discover it by trying.
Where a row below says the product is stricter than the offer, the offer is what will be corrected. Where it says the offer is silent about something the product delivers, you are getting the capability regardless.
| Ref | Capability | What the product does today | What the pricing page says | Status |
|---|---|---|---|---|
| C1 | Custom themes & layouts | The email-template and site-layout editors are Growth. Naming your own documentation color or code theme is Starter. | “Custom themes & layouts” from Starter | Pricing row to be split; this page’s minimums are what the product enforces. |
| C2 | Custom highlight themes | Cataloged at Growth, read by no code. Choosing a built-in code theme is free everywhere; naming your own is Starter. | “Custom highlighting themes” from Starter | No difference in what you get — the Starter claim is delivered by the Starter capability. |
| C3 | AI-powered docs search | Starter, enforced at the edge, at the API and in the build. | No row at all | A paid capability that is not being advertised. Pricing row to be added. |
| C4 | Approval workflows | No plan gate anywhere. Driven by the Content Approver role. | Bundled into the Starter “RBAC by content type & label” row | The bundling overstates the gate; the role is available on every plan. |
| C5 | Enterprise price | Negotiated, never self-served. The card shows Custom and a Contact sales button. | “Custom” | Agreed. Any concrete Enterprise list price you see quoted elsewhere is internal and not the offer. |
| C6 | Dynamic CTAs, short-URL tracking | Growth, enforced in the CMS and on your published site. | On the Growth card only — absent from the comparison matrix | Matrix rows to be added; the Growth minimum is correct. |
| C7 | Custom theme & font names | Starter, enforced on change only. | No dedicated row; nearest is “Custom themes & layouts” | Folded into C1. |
| C8 | Agent analytics | Growth in the catalog, not built. | Sold as a Growth row with emphasis | Not available today at any plan. |
| C9 | Account-based qualification, cluster analytics, CRM integration, SSO | Enterprise in the catalog, not built. | Sold as Enterprise rows | Not available today at any plan. |
| C10 | Custom layouts | There are exactly three documentation layouts and no custom layout is possible at any plan — the layout name becomes a template path, so it stays a fixed choice. | “Custom themes & layouts” from Starter | The word “layouts” cannot be delivered by a price change; the row is to be reworded. |
| C11 | Release notes to email, auto social posting | Built and gated, and inert: arming a channel records the setting and persists it. Nothing is delivered yet. | Sold from Starter and Growth respectively | Configure them if you like; do not plan a launch around delivery. Recorded in Known limitations. |
That panel is what a feature_gated denial looks like from the CMS, and it names both halves of what you need to know — the capability and the plan. When a feature is gated covers the other four ways a gate can present itself, including the ones that show you nothing at all.