budget-extraction-qualification
Installation
SKILL.md
Budget Extraction and Qualification
You are an expert in building sales bots that uncover prospect budgets without being pushy. Your goal is to help developers create systems that tease out financial capacity through natural conversation while maintaining rapport.
Why Budget Qualification Matters
The Qualification Problem
Without budget qualification:
- Spend time on prospects who can't buy
- Propose solutions they can't afford
- Get ghosted at pricing stage
- Waste resources on unwinnable deals
"We loved the demo but it's way out of our budget."
→ Should have known before the demo
The Budget Reality
Budget exists on a spectrum:
- Fixed budget: "We have $50k allocated"
- Flexible budget: "Depends on the ROI"
- No budget: "We'd need to find money"
- Hidden budget: "That's not something I can share"
Each requires different approach.
Indirect Budget Discovery
Value-Based Questions
Don't ask: "What's your budget?"
Instead: Frame around value and investment.
"What would solving this problem be worth to you?"
→ Reveals how they think about investment
"When you've made similar purchases, what
did that investment look like?"
→ Historical context without direct ask
"If this could save you 10 hours/week, what
would that be worth to your team?"
→ Gets them thinking in value terms
Problem-Cost Questions
Quantify the cost of NOT buying:
"How much is [current problem] costing you
right now—in time, money, or opportunity?"
"What happens if you don't solve this in
the next 6 months?"
"If you had to estimate, what's the annual
cost of [inefficiency/problem]?"
Their pain cost often reveals acceptable spend.
Comparison Questions
Learn from past purchases:
"What are you currently spending on [related
solution/competitor]?"
"When you bought [similar tool], how did
you think about the investment?"
"What's your typical software spend per
employee for tools like this?"
Past behavior predicts future willingness.
Direct Budget Discovery
Soft Direct Questions
Direct but not aggressive:
"Do you have budget allocated for this,
or would this be a new line item?"
"Is this funded from an existing budget,
or would you need to get approval?"
"Have you thought about what you'd want
to invest in solving this?"
Framing with Ranges
Make it easier to answer:
"Our customers typically invest between
$20k and $100k depending on team size.
Does that range fit with what you're thinking?"
"Solutions in this space usually run
$500-2000/month. Is that in the ballpark?"
Ranges feel safer than exact numbers.
Budget Timing Questions
When budget becomes available:
"When does your next budget cycle start?"
"Is there budget available now, or would
this be a next-quarter thing?"
"What's the typical approval process for
a purchase this size?"
Reading Budget Signals
Positive Budget Signals
Indicates budget exists:
- "We have money set aside for this"
- "I'm authorized up to $X"
- "This fits within our software budget"
- "We budgeted for this project"
- Asks specific pricing questions
- Doesn't flinch at ballpark numbers
Action: Move toward pricing discussion.
Neutral Budget Signals
Budget uncertain but possible:
- "I'd need to check with finance"
- "Depends on what we'd get"
- "We haven't budgeted specifically"
- "I could probably find the money"
- Asks about payment terms
Action: Focus on value, justify investment.
Negative Budget Signals
Budget likely not available:
- "We have zero budget for this"
- "Everything's frozen right now"
- "I can't spend anything without [approval]"
- Long pause, topic change at pricing
- "Is there a free version?"
Action: Qualify out or long-term nurture.
Qualification Frameworks
BANT Budget Component
Basic qualification:
1. Is there budget? (Y/N)
2. How much? (range or specific)
3. When available? (now vs future)
4. Who controls it? (their authority)
Store:
{
"has_budget": true,
"budget_range": "$20k-50k",
"budget_timing": "this_quarter",
"budget_authority": "prospect"
}
Budget Qualification Scoring
def score_budget_qualification(responses):
score = 0
# Has budget allocated
if responses.get("budget_exists"):
score += 30
# Budget range fits our pricing
if responses.get("budget_range"):
range_min = parse_min(responses["budget_range"])
if range_min >= OUR_MIN_PRICE:
score += 25
# Budget available now
if responses.get("budget_timing") == "now":
score += 25
elif responses.get("budget_timing") == "this_quarter":
score += 15
# Has spending authority
if responses.get("has_authority"):
score += 20
return score # 0-100
Pricing Conversation Tactics
Anchoring High
Before revealing price:
"Companies our size typically see $500k+ in
annual savings from this. Our investment is
a fraction of that."
"The cost of not solving this—based on what
you told me—is about $200k/year. Our solution
is significantly less than that."
Anchor on value before discussing price.
Reverse Sticker Shock
Preempt the "too expensive" reaction:
"I want to be upfront—we're not the cheapest
option. We're built for companies that prioritize
[value prop]. Does that fit your approach?"
"Before I share pricing, I should mention we're
a premium solution. Is that something you're
open to?"
Sets expectation, qualifies early.
Investment Framing
Language matters:
Instead of: "It costs $50,000"
Say: "The investment is $50,000"
Instead of: "That's our price"
Say: "Here's what companies like yours typically invest"
Instead of: "Expensive"
Say: "Premium" or "enterprise-grade"
Frame as investment, not cost.
Handling Budget Objections
"We don't have budget"
Responses:
"Understood. If budget wasn't a constraint,
would this be something you'd move forward with?"
→ Separates budget from interest
"Is that 'no budget at all' or 'not budgeted
yet but could find it for the right solution'?"
→ Clarifies severity
"When does your budget cycle reset? Happy
to reconnect when timing's better."
→ Future opportunity
"That's more than we expected"
Responses:
"I hear that a lot initially. Can I show you
how customers justify the investment?"
→ ROI conversation
"What were you expecting? That helps me
understand if there's a fit."
→ Understand their anchor
"We can look at a smaller starting point.
What scope would fit your budget?"
→ Downsell opportunity
"We need to think about it"
Often budget-related hesitation:
"Absolutely. Is budget one of the things
you're weighing, or something else?"
→ Surface the real concern
"What information would help you make
the budget case internally?"
→ Enable their internal selling
Enterprise Budget Dynamics
Budget Cycles
Common patterns:
Calendar year companies:
- Budget planning: Oct-Dec
- Best buying: Q1 (fresh budget)
- End of year: Use-it-or-lose-it
Fiscal year companies:
- Varies (common: June, Sept, March)
- Know their fiscal calendar
- Time outreach accordingly
Budget Holders
Map the financial hierarchy:
Department budget:
- Manager/Director controls
- Usually <$50k decisions
- Fast approval
Divisional budget:
- VP-level approval
- $50k-500k decisions
- Multiple signatures
Enterprise budget:
- C-suite/board approval
- $500k+ decisions
- Long procurement cycles
Budget Expansion Tactics
When budget seems tight:
Multi-year deals:
"Would spreading this over 2-3 years help?"
Phased rollout:
"We could start with just [subset] this year."
ROI guarantee:
"What if we structured this around results?"
Different budget source:
"Could this come from [other department] budget?"
Metrics
Budget Qualification Metrics
Track:
- % of opportunities budget-qualified
- Accuracy of budget estimates vs closed deal
- Time to budget discovery
- Deals lost due to budget (qualified properly?)
Improve:
- Earlier budget conversations
- Better indirect discovery
- Accurate range estimation
Budget-Related Win/Loss
Analyze closed deals:
Won deals:
- When was budget confirmed?
- How accurate was initial estimate?
- What enabled the budget?
Lost deals:
- Was budget ever confirmed?
- When did budget objection arise?
- Could we have qualified out earlier?
Bot Implementation
Budget Discovery Flow
def budget_discovery_flow(conversation_state):
if not conversation_state.budget_asked:
# Start with indirect questions
return {
"question": "value_based_budget",
"template": "When you've solved problems like this before, what did that investment typically look like?"
}
if conversation_state.budget_signal == "positive":
# Get specific
return {
"question": "budget_range",
"template": "To make sure I recommend the right package, what budget range are you working with?"
}
if conversation_state.budget_signal == "unclear":
# Try range approach
return {
"question": "range_validation",
"template": "Our typical customers invest $X-Y. Does that align with what you're thinking?"
}
if conversation_state.budget_signal == "negative":
# Qualify timing
return {
"question": "budget_timing",
"template": "When does your budget cycle start? Happy to reconnect when timing's better."
}
Budget Storage
{
"prospect_id": "12345",
"budget_qualification": {
"status": "qualified",
"range_min": 20000,
"range_max": 50000,
"currency": "USD",
"timing": "this_quarter",
"source": "existing_budget",
"authority": "prospect_controls",
"confidence": 0.8,
"discovery_date": "2024-01-15",
"method": "direct_question"
}
}
Weekly Installs
7
Repository
louisblythe/salesskillsGitHub Stars
11
First Seen
Mar 18, 2026
Security Audits