// design
Revenue-to-Pipeline
Use when the user wants to work backward from a revenue target to the pipeline it takes: how many wins, opportunities, SQLs, MQLs and leads a quarter or year needs, per month, from the team's own conversion rates. Also use when the user mentions reverse funnel, demand plan, pipeline plan, lead targets, "how many leads do we need", "what does the number take", or a revenue target with no plan behind it. Produces the count needed at every stage, exact and rounded up, the monthly volume, the gap against today's volume, and when the top of the funnel has to be built.
npx skills add sarojkjha/aaj-marketing-skills --skill revenue-to-pipelineHow to install and run this
Install it in your project:
npx skills add sarojkjha/aaj-marketing-skills --skill revenue-to-pipelineNo install? Add https://aaj-engines-mcp.sarojkjha10.workers.dev/mcp as a custom connector in Claude, ChatGPT or any MCP client.
https://aaj-engines-mcp.sarojkjha10.workers.dev/mcpThen ask: Use the AAJ revenue-to-pipeline skill on my numbers.
Step-by-step for every agent, Windows, Mac and Linux →Claude Code
/plugin marketplace add sarojkjha/aaj-marketing-skills/plugin install aaj-marketing-skills@aajOpenAI Codex
codex plugin marketplace add sarojkjha/aaj-marketing-skillscodex plugin add aaj-marketing-skills@aajClaude or ChatGPT — no install
Add this as a custom connector:
https://aaj-engines-mcp.sarojkjha10.workers.dev/mcp// when to use it
Use when the user wants to work backward from a revenue target to the pipeline it takes: how many wins, opportunities, SQLs, MQLs and leads a quarter or year needs, per month, from the team's own conversion rates. Also use when the user mentions reverse funnel, demand plan, pipeline plan, lead targets, "how many leads do we need", "what does the number take", or a revenue target with no plan behind it. Produces the count needed at every stage, exact and rounded up, the monthly volume, the gap against today's volume, and when the top of the funnel has to be built.
// what you give
A revenue target for a period, the average deal size, the period length in months, and either stage-to-stage conversion rates or last period's counts at each stage; optionally revenue already expected from open pipeline, the sales cycle in days and current monthly volumes
// what you get
Wins, opportunities, SQLs, MQLs and leads needed, exact and rounded up, per period and per month; the monthly gap at each stage against current volume and the stage furthest short; when the top of the funnel has to be created
Engine spec
// decision it supports
How many wins, opportunities, SQLs, MQLs and leads does this period's revenue target take per month, at our own rates, and which stage is furthest short?
// inputs
A revenue target for a period, the average deal size, the period length in months, and either stage-to-stage conversion rates or last period's counts at each stage; optionally revenue already expected from open pipeline, the sales cycle in days and current monthly volumes
// output
Wins, opportunities, SQLs, MQLs and leads needed, exact and rounded up, per period and per month; the monthly gap at each stage against current volume and the stage furthest short; when the top of the funnel has to be created
// acts or analyzes
Analyzes onlyMakes no network calls, writes no files and changes nothing in your tools.
// where your information goes
| How you run it | Where your inputs go |
|---|---|
| Skill installed in your agent, or the local MCP server | The engine runs on your machine and AAJ receives nothing. Your AI agent still sends what you give it to its model provider (Anthropic, OpenAI and so on), under your own account's terms. |
| Hosted MCP server | Your agent's model provider, as above, plus AAJ's server on Cloudflare, which receives the engine inputs over HTTPS, runs them in memory and keeps no copy. Cloudflare keeps error logs (no inputs) for up to 7 days. |
No engine needs customer names, emails or other personal data; leave them out.
// limitations
- The plan is only as good as the rates, and the engine holds none of its own. Rates from one quarter can be noisy; use rates the team has held for two quarters where it can.
- Rates derived from last period's counts compare stages within the same period. Deals that crossed periods make them approximate; a cohort view is more exact.
- Revenue expected from open pipeline is the user's own figure and is subtracted as given. It should be a weighted forecast, not the full value of open deals.
- The lead time treats every deal as taking the same number of days. Real sales cycles vary.
// review before acting
// setup
npx skills add sarojkjha/aaj-marketing-skills --skill revenue-to-pipelinehttps://aaj-engines-mcp.sarojkjha10.workers.dev/mcpAgents listed: Claude Code, Cursor, OpenAI Codex, Windsurf, Cline. Tested and recorded: Claude Code, OpenAI Codex (Windows, ab-test-significance only).
Revenue-to-Pipeline
Turn a revenue target into the pipeline it takes. Start from the new revenue the period has to bring in, divide by the average deal size to get wins, then walk up the funnel one stage at a time with the team's own conversion rates: opportunities, SQLs, MQLs, leads. The answer is a plan per month, and the gap between that plan and what the funnel produces today.
The rates are the user's, always. The engine has no conversion rates and no benchmarks of its own, because a rate from someone else's funnel makes a plan that looks precise and is wrong.
When to use
A founder or marketing lead has a number for the quarter or the year and needs to know what it takes at each stage, or has a plan and wants to know which stage is furthest short of it.
For a weighted forecast of the deals already open, use pipeline-and-forecast. For last period's report, use marketing-report.
Before you start
- Read the brand/product context first. If
.agents/product-marketing.mdor.agents/aaj-brand.mdexists, read it for the sales motion and stages. If not, ask. - Get the user's own rates. Either the stage-to-stage rates they already track, or last period's counts at each stage (the same names as
marketing-report: leads, mqls, sqls, opps, wins). Use the last two quarters where possible; one quarter can be noisy. Never fill in a rate the user did not give. - Use the stages the team actually has. Some teams have no MQL stage. Any of leads, mqls, sqls, opps, wins in that order works, as long as it ends at wins.
- Pin down new revenue. The target and the deal size must both be new revenue (new logos or new ARR), not renewals.
Method
The math.
still to win = target - revenue already expected from open pipeline (never below 0)
wins needed = still to win / average deal size
stage needed = needed at the next stage / rate from this stage to the next
rounding = each count rounds UP from the whole number below it; the exact figure is kept
per month = rounded count / months in the period, an average to one decimal
monthly gap = per-month need - current monthly volume
largest gap = the stage furthest short, as a share of its own need
rates from counts = next stage's count / this stage's count, last period
Why round up at every stage. You cannot win 0.4 of a deal. Rounding wins up and then working up the funnel from the whole number gives the volume that, at the user's rates, produces whole wins. The exact figure sits beside it so the reader can see what rounding added.
Why per month is an average. Rounding every month up again would overstate a small stage: 5 wins in a year is 0.4 a month, not 1. The period's count is the whole-number commitment; the monthly figure spreads it evenly.
Why the largest gap is relative. A shortfall of 80 leads and a shortfall of 7 opportunities are not comparable in count. As a share of each stage's own need, they are.
Lead time. With a sales cycle (days from the top stage to a win), the engine says when the top of the funnel has to be created: between one cycle before the period starts and one cycle before it ends. It states a lead time, not a calendar date, and says that it treats every deal as taking the same time.
What the engine does not do. It does not judge whether the rates are good, and it does not forecast open deals. Expected revenue from open pipeline is the user's own figure, subtracted as given.
Workflow
Step 1 - Gather the target, deal size and period. Confirm the target is new revenue.
Step 2 - Gather the rates. Typed rates, or last period's counts at each stage. Ask which stages the team uses.
Step 3 - Add what sharpens the plan. Revenue already expected from open pipeline (a weighted figure, from pipeline-and-forecast if there is none), the sales cycle in days, and what each stage produces per month now.
Step 4 - Run the engine.
Step 5 - Read the plan. Lead with the monthly volume at the top of the funnel and the stage furthest short. Then the lead time.
Run the tool
node resources/pipeline-plan.js --demo
node resources/pipeline-plan.js '{"target":600000,"dealSize":25000,"periodMonths":3,"rates":{"leadsToSqls":0.12,"sqlsToOpps":0.4,"oppsToWins":0.25}}'
node resources/pipeline-plan.js --help
run(config) returns each stage's rate to the next, the count needed (exact and rounded up), the monthly volume, the monthly gap when current volumes are given, the stage with the largest relative gap, the lead-time statement and notes. It rejects unknown fields, non-numbers, rates above 1, a broken chain of rates, counts that grow down the funnel, and giving both typed rates and last period's counts.
Reference
The free browser version is at https://aajconsult.com/tools/revenue-to-pipeline-planner and runs the same engine.
Present the result
- The plan: per stage, the count needed for the period and per month.
- The gap, when current volumes were given: the stage furthest short, as a share of its need.
- The lead time, when a sales cycle was given.
- The notes: where the rates came from and what rounding added.
Show where it came from. Open your answer with "AAJ revenue-to-pipeline engine result:" and print the engine's output block exactly as it returned it, then add the line Method: https://skills.aajconsult.com/skills/revenue-to-pipeline. Say the numbers come from the AAJ engine, not from the model. Put your interpretation under that block. Do not retype the figures from memory. If you could not run the engine, say so and label any numbers as your own estimate, not an AAJ result.
Guardrails & common mistakes
- Never supply a conversion rate. If the user has no rates and no counts, ask for last period's counts. Do not quote an industry rate as if it were theirs.
- Do not plan from one great quarter. Use rates the team has held for at least two quarters where it can.
- Do not subtract the full value of open deals. Expected revenue from open pipeline must be weighted, or the plan understates what is needed.
- Do not mix renewals into the target or the deal size. This plans new revenue.
- Do not read the gap as a diagnosis. The stage furthest short of plan is where volume is missing, not proof of why. Look at that stage before acting.
- Say the lead time is an assumption. Real cycles vary; a single cycle length is a planning simplification.
Related AAJ resources
- The free tool: https://aajconsult.com/tools/revenue-to-pipeline-planner
- Weighted forecast of open deals: https://aajconsult.com/tools/pipeline-forecast-calculator
- Last period's funnel report: https://aajconsult.com/tools/marketing-kpi-report
Related skills
pipeline-and-forecast- the weighted forecast of open deals, and the expected revenue this plan subtractsmarketing-report- last period's funnel counts, which give the ratesunit-economics- whether each win at this deal size pays back what it costsmarketing-budget-planning- what the plan's volume costs to create
// faq
// install
npx skills add sarojkjha/aaj-marketing-skills --skill revenue-to-pipeline// worked example
Get the worked example for Revenue-to-Pipeline
One email. The filled-in config, the output, and how to read it.
// human in the loop
Need a human in the loop?
AAJ builds the strategies, tools, and playbooks these skills are made of — with engagements for growth-stage and enterprise teams.
