// execute
Lead Handoff & SLA Check
Use when the user wants to check whether the marketing-to-sales lead handoff works: MQLs followed up within the SLA, sales accepting what marketing sends, and the MQL threshold in the right place. Also use when the user mentions lead response time, speed to lead, MQL SLA, SLA compliance, MQL rejection, sales acceptance rate, lead scoring threshold, or "sales never follows up our leads." Produces SLA compliance, acceptance and conversion rates with honest intervals, a threshold check by score band, the volume-promise check, and three fixes.
npx skills add sarojkjha/aaj-marketing-skills --skill lead-handoff-slaClaude 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 check whether the marketing-to-sales lead handoff works: MQLs followed up within the SLA, sales accepting what marketing sends, and the MQL threshold in the right place. Also use when the user mentions lead response time, speed to lead, MQL SLA, SLA compliance, MQL rejection, sales acceptance rate, lead scoring threshold, or "sales never follows up our leads." Produces SLA compliance, acceptance and conversion rates with honest intervals, a threshold check by score band, the volume-promise check, and three fixes.
// what you give
The lead scoring model (fit criteria, behavior signals, MQL threshold), the SLA terms, and a lead export with MQL, first-touch and outcome times.
// what you get
SLA compliance, never-touched MQLs, acceptance and conversion rates with 90% ranges, a threshold check by score band, the volume-promise check, and a verdict with three fixes.
Engine spec
// decision it supports
Is sales working our MQLs within the SLA, accepting what marketing sends, and is the MQL threshold in the right place?
// inputs
The lead scoring model (fit criteria, behavior signals, MQL threshold), the SLA terms, and a lead export with MQL, first-touch and outcome times.
// output
SLA compliance, never-touched MQLs, acceptance and conversion rates with 90% ranges, a threshold check by score band, the volume-promise check, and a verdict with three fixes.
// 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
- Times are calendar hours. With businessHours on it only counts late leads that became MQLs outside Mon-Fri 09:00-17:00; it does not recompute the times.
- Rates on fewer than 30 leads are directional (AAJ's rule of thumb), and a band difference is clear only when the 90% ranges do not overlap. Do not move the threshold on a small band.
- fitMatches and signals are scored at full points with no decay. If you decay behavior points, pass the decayed number or the score bands will be wrong.
- It is only as good as the CRM timestamps. Mixed time zones or missing touch times change the rates; read the data notes before the rates.
// review before acting
// setup
npx skills add sarojkjha/aaj-marketing-skills --skill lead-handoff-slahttps://aaj-engines-mcp.sarojkjha10.workers.dev/mcpAgents listed: Claude Code, Cursor, OpenAI Codex, Windsurf, Cline. Tested and recorded: Claude Code.
Lead Handoff & SLA Check
Check the marketing-to-sales handoff against the SLA both teams signed, with numbers each side can verify, so the weekly review argues about fixes instead of anecdotes.
When to use
When marketing says sales ignores its leads and sales says the leads are junk; when an SLA exists but nobody measures it; before changing the MQL threshold or the scoring points; or as the monthly check on a lead scoring and SLA sheet.
Before you start
- Read the brand/product context first. Pull the ICP and the sales motion from
.agents/product-marketing.md(or.agents/aaj-brand.md). If none exists, ask the user for the essentials. - Gather inputs:
- Scoring model: fit criteria and behavior signals with points, and the MQL threshold. If the team uses the AAJ Lead Scoring and SLA Sheet, take them from its Fit criteria, Behavior criteria and Stages sheets.
- SLA terms: the first-touch target in hours, the window for sales to accept or reject, marketing's promised MQLs per week, and the compliance target. If any is missing, say so; a term nobody wrote down cannot be checked.
- Lead export (CSV from the CRM): id, created_at, fit and behavior points (or the criteria each lead met), became_mql_at, first_sales_touch_at, outcome (accepted, rejected, converted, open), and ideally decided_at and a rejection reason.
- Confirm the objective: a check of the handoff the team already agreed, not a new scoring model. If there is no scoring model or SLA yet, build those first with the AAJ sheet, then come back.
Method
A handoff fails in a few countable ways: MQLs touched late, MQLs never touched, MQLs nobody accepts or rejects, leads sales turns down, a threshold in the wrong place, or too few MQLs. Measure each from timestamps, never from impressions. Every rate carries its count and a 90% Wilson interval, and any rate on fewer than 30 leads is labelled directional (30 is AAJ's rule of thumb, not a statistical law). The threshold is judged by conversion per score band: if MQLs just above the line convert clearly worse than higher-scoring ones, it is too low; if leads below the line that sales worked anyway convert as well, it may be too high. "Clearly" means the 90% ranges do not overlap; anything less is a hint.
Workflow
- Collect the model, the SLA terms and the export. Keep every time column in the same time zone.
- Run the engine (below) on the JSON. Do not compute the rates by hand.
- Read the data notes first. Unreadable dates, outcomes without touch times and leads that scored as MQLs but were never marked change what the rates mean.
- Report response time: compliance against target with its range, the median time to first touch and how many leads it covers, the slowest lead, and every MQL never touched.
- Report acceptance and conversion: acceptance rate, decisions inside the window, MQLs in limbo, rejection reasons, and conversion of accepted MQLs.
- Report the threshold check by score band, with the engine's wording on whether a difference is clear or a hint.
- Report the volume promise: MQLs per week against the promise, and how many full weeks fell short.
- Give the verdict and the three fixes the engine ranks, owned by marketing, sales or both.
The math
due MQL = touched, or untouched and older than the response target (as of "asOf")
compliance = touched within target / due MQLs
never touched = untouched and older than the target
acceptance = (accepted + converted) / (accepted + rejected + converted)
conversion = converted / (accepted + converted)
limbo = open and older than the acceptance window
band conversion = converted / leads with a sales decision, per band:
under T | T to T+w | T+w to T+2w | T+2w and up (T = threshold, w = 10 by default)
interval = Wilson score interval, z = 1.645 (90%)
directional = denominator under 30 (AAJ's rule of thumb)
volume = MQLs in the period / weeks in the period, against the promise
clock = calendar hours; with businessHours: true, late leads that became MQLs
outside Mon-Fri 09:00-17:00 are counted so misses can be judged
Run the tool
node resources/handoff-sla.js --demo
node resources/handoff-sla.js '<json-config>'
node resources/handoff-sla.js '<json-config>' --json
node resources/handoff-sla.js --help
analyze(config) returns response time, acceptance, conversion, score bands, the threshold read, the volume check, data notes, a verdict ("The handoff is leaking", "The handoff is holding", or not enough data) and the three highest-priority fixes. The schema is in the header of resources/handoff-sla.js. The same engine runs in the free Lead Handoff & SLA Checker at aajconsult.com/tools/lead-handoff-sla-checker, which also parses a pasted CSV.
Reference
The scoring model and SLA terms follow the AAJ Lead Scoring and SLA Sheet: fit points from ICP criteria plus behavior points from buying signals, a total at or above the MQL threshold makes an MQL, and the SLA compliance target starts at 90%. Those are the sheet's starting values, not benchmarks. This skill bundles no benchmark data; every number comes from the user's own export.
Present the result
- Verdict in one line, with "directional" if fewer than 30 MQLs were due.
- Response time: compliance (k of n, 90% range), median and slowest time to first touch with the number of leads behind each, never-touched MQL IDs.
- Acceptance and conversion: each rate with k of n and its range; MQLs in limbo; rejection reasons.
- Threshold check: the band table and the engine's read, quoting whether it is clear or a hint.
- Volume: per-week MQLs against the promise.
- Three fixes, each with an owner (marketing, sales or both).
- Data notes that change how the numbers read.
Guardrails & common mistakes
- No invented benchmarks. Do not tell the user how fast "good teams" respond or quote a lead-response multiplier unless you have opened the original study and cite it exactly. Their own SLA is the standard.
- Mind the sample. Label every rate on fewer than 30 leads as directional and give the range. Do not move a threshold on a band of eight leads.
- Untouched leads are not slow leads. The median covers touched MQLs only; report never-touched MQLs separately, or the median flatters the team.
- Calendar hours are not business hours. A Friday-evening MQL called on Monday looks 60 hours late. Say which clock the SLA uses before calling anything a miss.
- Do not lower the threshold to hit a volume promise. Sales rejects the difference, and the acceptance rate falls.
- Fix the scoring before the threshold. If won deals do not score highest, moving the line will not help.
- Separate the teams' fixes. Late touches are a sales fix; low acceptance is usually a definition fix both teams own; volume is a marketing fix.
Related AAJ resources
- Lead Handoff & SLA Checker (same engine) - https://aajconsult.com/tools/lead-handoff-sla-checker
- Lead Scoring and SLA Sheet - https://aajconsult.com/templates/lead-scoring-and-sla-sheet
- How to Align Sales and Marketing at a Startup - https://aajconsult.com/blog/sales-marketing-alignment
- Pipeline Forecast & Coverage Calculator - https://aajconsult.com/tools/pipeline-forecast-calculator
- ICP Fit Scorer - https://aajconsult.com/tools/icp-fit-scorer
Related skills
target-account-list · pipeline-and-forecast · sales-process-design · win-loss-analysis · marketing-report
// faq
// install
npx skills add sarojkjha/aaj-marketing-skills --skill lead-handoff-sla// worked example
Get the worked example for Lead Handoff & SLA Check
One email. The filled-in config, the output, and how to read it.
// sprint
GTM & Pipeline Launch — from $9,500, 4–8 weeks
This skill is one of the engines behind the GTM & Pipeline Launch — from $9,500, four to eight weeks.
A segment plan, launch sequence, and pipeline model — go to market with the metrics baked in.
// 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.
