The Claude Code Intake Layer That Kills 60% of Bad Leads

Abstract tech illustration: The Claude Code Intake Layer That Kills 60% of Bad Leads

Forty inbound leads a week. Twenty-four get killed before I touch a code editor. Not because they're bad people — because each one would cost me a build hour I don't have, and I run three live products solo.

Every Claude Code tutorial opens with a fresh repo and a to-do app. That's the easy 20%. The 80% that decides whether a one-person AI shop survives is the layer before the repo exists: what you take on, what you refuse, what you scope before you write a single line. This is that layer. Three folders, two prompts, one hard rule: the sales artifact is the build artifact.

The three-folder pipeline that runs the whole intake

The intake layer is three folders inside a single intake/ directory: inbound/, qualify/, scope/. Each does exactly one job. No CRM, no Zapier chain, no Notion database. Markdown files and Claude Code, run locally.

intake/
├── inbound/              # raw capture, zero thinking
│   ├── 2026-06-24-acme-services.md
│   ├── 2026-06-24-referral-voice-note.md
│   └── 2026-06-25-typeform-1847.md
├── qualify/
│   ├── qualify.md        # the prompt + 5 disqualifying signals
│   └── verdicts/
│       └── 2026-06-24-acme-services.verdict.md
└── scope/
    ├── scope.md          # the scoping prompt
    └── briefs/
        └── 2026-06-24-acme-services.brief.md

Why separate inbound/ from qualify/? Trust. If I know every raw email, form submission, and voice-note transcript is preserved untouched in inbound/, I can be brutal in qualify/ without worrying I'm losing signal. Every file is dated. Every file keeps the original sender language. No pre-processing.

The rule I enforce on myself: nothing moves to the next folder without Claude Code running against a prompt file. No manual triage, no vibes. This is the discipline that makes 40 leads a week tractable for one person.

What each folder holds

  • inbound/ — raw text, dated, one file per lead. Attach transcripts of any pre-qualification voice notes here too.
  • qualify/ — one prompt (qualify.md) plus a verdict file per lead: go, hold, or kill with a one-paragraph reason.
  • scope/ — one prompt (scope.md) plus a one-page brief per surviving lead. This brief becomes the seed of CLAUDE.md in the eventual build repo.

The five disqualifying signals in qualify.md

qualify.md is a single prompt that tells Claude Code to read the raw inbound file and flag which of five signals fire. About 60% of leads trigger enough signals to get killed here. Killed doesn't mean ghosted — it means a templated polite decline that takes 30 seconds to send.

Here's the actual prompt structure I run:

# qualify.md

You are triaging an inbound lead for a solo AI/automation shop.
Read the file in ./inbound/{filename} and evaluate against the five
signals below. For each signal, output: TRIGGERED or CLEAR, plus
one sentence of evidence quoted from the source.

At the end, return a single verdict: GO, HOLD, or KILL, and one
paragraph explaining the call.

## Signal 1 — Budget shape
Not the number. The shape. Do they talk in ranges? Mention ROI?
Ask what things cost? Vague budget language ("whatever it takes",
"reasonable", "we're flexible") = TRIGGERED. No budget mention
at all = TRIGGERED.

## Signal 2 — Timeline
Impossible timeline (2 weeks for a 3-month build) = TRIGGERED.
No timeline at all = TRIGGERED (worse than impossible — means
they haven't thought about it).

## Signal 3 — Tech debt posture
Starting clean = CLEAR. Replacing an existing system = TRIGGERED
unless they name the system. Integrating with 3+ existing tools
= TRIGGERED (requires a paid discovery).

## Signal 4 — Decision maker
Email signed by the person who signs contracts = CLEAR.
Middle layer (office manager, exec assistant, "the team") =
TRIGGERED. Verdict becomes HOLD with instruction to ask for
the signer.

## Signal 5 — Scope drift within the message itself
Does the ask change between paragraph 1 and paragraph N of
their message? If yes, TRIGGERED. They don't know what they
want and won't pay me to figure it out.

## Verdict rules
- 0-1 triggered = GO
- 2 triggered, at least one is Signal 4 = HOLD (ask, then decide)
- 2 triggered, neither is Signal 4 = KILL
- 3+ triggered = KILL

That's the whole file. No agent framework, no tool calls, no MCP server. Claude Code reads two markdown files and writes one. Ninety seconds per lead on average.

Signal 1 is the one people get wrong most often. "Whatever it takes" sounds like a green light. It's a kill flag. It means the client hasn't priced their own problem, which means every quote you give will feel too high to them regardless of the number.

The scoping prompt that turns an email into a one-page brief

Leads that survive qualify.md go to scope.md. The scoping prompt extracts exactly five things — no more, no less. This is the artifact I use to quote and, later, the seed of the build repo's CLAUDE.md.

# scope.md

Read ./inbound/{filename} and ./qualify/verdicts/{filename}.verdict.md.
Produce a one-page brief with exactly these five sections. Do not
invent detail. If a section requires info the client didn't provide,
write "UNKNOWN — needed for firm quote" and put the question in
section 5.

## 1. Core outcome
What the client actually wants, in one sentence. NOT the feature
they asked for. Feature: "AI email assistant." Outcome: "Cut
inbox time by 70% so the owner stops working Sundays."

## 2. Milestones (3-5)
Concrete, demoable steps from zero to core outcome. Each one
must be independently shippable.

## 3. Risks
Technical risks (integrations, data quality, rate limits) AND
human risks (unclear stakeholders, culture, adoption).
Name both categories separately.

## 4. Fixed-price range with confidence
Give a range (e.g. $8k–$14k) and a confidence label:
HIGH / MEDIUM / LOW. Explain what would move the range.

## 5. The one question I need answered before I quote firm
Exactly one. The single unknown that most changes the estimate.

The one-question rule matters. Claude Code doesn't pretend to know everything, and neither do I. Forcing a single blocking question surfaces the real gap and gives the client a concrete, cheap next step. It also filters: clients who won't answer one clean question are the same clients who will drift scope in month two.

A real lead, start to finish, in under four minutes

Anonymized but real. Small services business, inbound Typeform submission asking for "an AI assistant that handles our email and books calls."

Step one, drop the raw submission into inbound/2026-06-24-acme-services.md. Step two, run qualify.md:

claude-code run intake/qualify/qualify.md \
  --input intake/inbound/2026-06-24-acme-services.md \
  --output intake/qualify/verdicts/2026-06-24-acme-services.verdict.md

Verdict came back HOLD. Two signals triggered: Signal 1 ("whatever it takes to get this working" — vague budget) and Signal 4 (email came from the office manager, not the owner). Because Signal 4 fired, the rule says ask before killing.

I sent a two-sentence reply: What's your current monthly cost of the manual process, and who signs off on new tools? They answered both cleanly within a day — roughly $2,400/month in staff time, owner signs, cc'd on the reply. That's a real lead.

Ran scope.md. Output:

  • Core outcome — Cut owner's inbox time by 70%, eliminate Sunday triage.
  • Milestones — (1) inbox triage rules + labels, (2) draft-reply generation with owner approval, (3) calendar handoff for booking-intent emails.
  • Risks — Technical: shared Google Workspace with delegated permissions (quirky). Human: office manager may resist automation of tasks she owns.
  • Fixed range — $9k–$13k, MEDIUM confidence. Range collapses once CRM lock-in is confirmed.
  • Blocking question — Are you contractually locked into your current CRM through 2026, or can we swap the calendar layer?

Total time from inbound email to scoped brief: three minutes forty seconds. I quoted the next morning.

The trick nobody tells you: the sales artifact IS the build artifact

Here's the piece that ties it all together. The scoped brief doesn't die in scope/briefs/. When the client signs, I copy it into the new build repo as the seed of CLAUDE.md:

  • Core outcome → the "Project mission" section at the top of CLAUDE.md.
  • Milestones → the task breakdown in PLAN.md.
  • Risks → the "Guardrails" section Claude Code reads on every session start.
  • Fixed range + confidence note → a BUDGET.md file that logs actuals against the estimate.
  • Blocking question → the first agenda item on the kickoff call.

Nothing gets lost between sales and build because the sales artifact and the build artifact are the same document at different stages. Claude Code on the build side reads CLAUDE.md and already knows the outcome, the constraints, and the risks — because I wrote them once, four minutes into the intake.

This is also why the intake layer scales down to one person. There's no handoff. No re-briefing. No losing context between the discovery call and the first commit. The pipeline is the memory.

What this replaces

  • No CRM. The intake/ directory is the CRM.
  • No proposal tool. The scope brief is the proposal.
  • No project kickoff template. CLAUDE.md starts pre-populated.

Real numbers from my week

Rough weekly pass, over the last quarter:

Stage Volume Time per lead Weekly hours
Inbound capture ~40 30 sec 0.3
Qualify (Claude Code) ~40 90 sec 1.0
Killed with template decline ~24 30 sec 0.2
Hold — one clarifying question ~6 2 min 0.2
Scope brief (survivors) ~10 4 min 0.7
Total intake overhead ~2.4 hrs/week

Compare that to my pre-pipeline reality: twenty forty-minute discovery calls a month, most of which ended in a decline. That was thirteen-plus hours of talking to people I was never going to work with. The pipeline gave me back a work week every month, and — more importantly — every hour I spend now is with a lead that already passed a written filter.

Two related posts on this site worth pairing with this one: AI Agents Die Without Context. Here's Where. explains why the CLAUDE.md hand-off matters, and What is Claude Code? It Refactored 1,847 Lines I Feared covers the tool itself if you're new to it.

Where bizflowai.io fits in

For the solo operators and small teams who don't want to babysit markdown files and CLI runs, bizflowai.io already automates the same intake shape as a hosted flow: raw inbound in, qualified verdict and scoped brief out, with the brief exportable straight into a CLAUDE.md seed for the build side. Same three-stage discipline — capture, qualify, scope — running against your inbox and forms instead of a local directory. Useful if the folder-and-prompt version above feels right but you'd rather not run it yourself.

Copy this, don't admire it

The intake layer is not glamorous. It's three folders and two prompts. It runs on the free tier of Claude Code and a text editor. It has no dashboard. It's the reason I can run three products alone without burning out on discovery calls.

If you're a solo operator or a two-to-three person shop doing custom builds, start today: make the three folders, paste the qualify.md above, adapt the five signals to your context, and route your next inbound lead through it before you reply. You'll kill the first one that would have eaten your Saturday, and you'll never go back.


Want more like this?

I publish practical AI automation, GenAI engineering, and faceless content workflows on YouTube every week.

Subscribe to bizflowai.io on YouTube — never miss a new tutorial.

Planning an AI automation project or need a second opinion on your architecture?

Connect with me on LinkedIn — Lazar Milicevic, GenAI Engineer & bizflowai.io Founder.

Visit bizflowai.io for our services, case studies, and AI consulting.

Frequently asked questions

What is the real bottleneck for a one-person AI business?

The bottleneck isn't building, it's qualifying. Solo operators lose a full work week per month taking 40-minute discovery calls with leads whose budget is a third of what the scope needs, whose timelines are impossible, or who can't actually sign a contract. Twenty unqualified conversations a month burns the time you need to deliver work, making lead qualification the survival skill, not code output.

How do I use Claude Code to qualify inbound leads?

Set up three folders: inbound, qualify, and scope. Drop every raw lead into inbound as a dated markdown file. Then run it through a qualify.md prompt containing five disqualifying signals (budget shape, timeline, tech debt, decision maker, scope drift). Claude Code returns a go, hold, or kill verdict with one paragraph of reasoning. No CRM or Zapier needed, just markdown files and prompts.

What are the five disqualifying signals for lead qualification?

Signal one: budget shape, meaning vague ranges or asking what things cost. Signal two: timeline, either impossibly short or completely absent. Signal three: tech debt, since replacements and integrations require a discovery deposit. Signal four: decision maker, where middle layers must loop in a signer or get killed. Signal five: scope drift, where the request changes between the first and last paragraph of the message.

Why does separating inbound from qualification matter?

Separation creates trust in the process. When every raw lead is preserved untouched in the inbound folder, you can be brutal during qualification without worrying you're losing information. It also removes formatting and thinking from capture, so leads never get dropped because you were too busy to process them. Inbound is a dumping ground; qualify is the decision layer.

How does a scope.md prompt turn an email into a brief?

The scope.md prompt tells Claude Code to extract five things from a qualified lead: the core outcome the client actually wants (not the feature they asked for), three to five milestones, the technical and human risks you'd carry, a fixed-price range with a confidence note, and the one question you need answered before quoting firm. That last item surfaces the gap rather than faking certainty.