name: lead-qualification-playbook description: Guides sales reps through structured lead qualification using BANT+ methodology. Evaluates leads, suggests discovery questions, scores quality, and recommends next steps. Use when user says "qualify this lead", "help me qualify", "BANT analysis", "score this lead", "should I convert this lead", "lead qualification questions", or "assess lead quality". metadata: author: Dataverse version: 1.0.0 category: sales-process
Lead Qualification Playbook
Consistent lead qualification is critical for sales efficiency. This skill provides a structured playbook that helps SDRs qualify leads effectively, ensures all qualification criteria are captured in Dataverse, and provides AI-assisted recommendations on lead disposition.
Instructions
Step 1: Retrieve Lead Information
When user provides a lead to qualify, retrieve current lead data:
SELECT leadid, subject, firstname, lastname, fullname, companyname, jobtitle,
emailaddress1, telephone1, mobilephone, description,
leadsourcecode, industrycode, numberofemployees, revenue,
budgetstatus, budgetamount, need, purchasetimeframe, purchaseprocess,
decisionmaker, leadqualitycode, msdyn_leadscore, msdyn_leadgrade,
estimatedamount, estimatedclosedate, qualificationcomments,
createdon, modifiedon, statecode, statuscode, ownerid
FROM lead
WHERE leadid = '[lead_id]'
Also retrieve any related activities:
SELECT activityid, subject, activitytypecode, createdon, description, statecode
FROM activitypointer
WHERE regardingobjectid = '[lead_id]'
ORDER BY createdon DESC
Step 2: Assess Current Qualification Status
Display Lead Summary:
LEAD QUALIFICATION WORKSHEET
════════════════════════════════════════════════════
Lead: [fullname] at [companyname]
Title: [jobtitle]
Source: [leadsourcecode]
Created: [createdon]
Current Grade: [msdyn_leadgrade]
AI Score: [msdyn_leadscore]/100
CURRENT BANT STATUS:
════════════════════════════════════════════════════
Budget: [budgetstatus] - [budgetamount if set]
Authority: [decisionmaker status]
Need: [need]
Timeline: [purchasetimeframe]
Process: [purchaseprocess]
Calculate Initial Qualification Score:
| Criteria | Current Value | Score (0-20) |
|---|---|---|
| Budget | [value] | [score] |
| Authority | [value] | [score] |
| Need | [value] | [score] |
| Timeline | [value] | [score] |
| Fit | [value] | [score] |
| Total | /100 |
Step 3: Guide Through BANT+ Discovery
3.1 Budget Qualification
Current Status: budgetstatus field value
- 0 = No Committed Budget
- 1 = May Buy
- 2 = Can Buy
- 3 = Will Buy
Discovery Questions to Ask:
If budgetstatus is NULL or 0 (No Budget):
- "Do you have budget allocated for this initiative?"
- "What's the approval process for projects like this?"
- "Have you invested in similar solutions before? What was the range?"
If budgetstatus is 1 (May Buy):
- "Is budget already approved, or does it need to go through a process?"
- "Who needs to sign off on the budget?"
- "What's your target investment range?"
If budgetstatus is 2 (Can Buy):
- "What's the specific budget you're working with?"
- "Are there any constraints on timing of spend?"
Update Guidance:
Based on responses, update lead record:
- budgetstatus: [0-3 based on response]
- budgetamount: [$ amount if confirmed]
- qualificationcomments: Append budget notes
3.2 Authority Qualification
Current Status: decisionmaker field (BIT: true/false)
Discovery Questions:
If decisionmaker is NULL or false:
- "Who else is involved in evaluating solutions like ours?"
- "What's the decision-making process at [companyname]?"
- "Will you be the one signing the contract, or is there another stakeholder?"
If jobtitle suggests individual contributor:
- "Who on your team would champion a project like this?"
- "Does your manager know you're exploring solutions?"
- "Who would need to approve moving forward?"
Authority Mapping:
Based on job title and responses, classify:
- Economic Buyer (signs checks): C-level, VP, Director
- Technical Buyer (evaluates): Manager, Sr. Engineer, Architect
- User Buyer (end user): Analyst, Associate, Individual Contributor
- Champion (internal advocate): Any level, shows enthusiasm
- Blocker (potential resistance): IT Security, Procurement
Update Guidance:
Update lead record:
- decisionmaker: true/false (is this person the decision maker?)
- qualificationcomments: Append "Decision Process: [notes]"
- description: Add stakeholder mapping if multiple people mentioned
Consider creating related contacts if additional stakeholders identified
3.3 Need Qualification
Current Status: need field
- 0 = Must have
- 1 = Should have
- 2 = Good to have
- 3 = No need
Discovery Questions:
If need is NULL or 3 (No need):
- "What prompted you to look into [solution type] now?"
- "What challenges are you trying to solve?"
- "What happens if you don't address this?"
If need is 2 (Good to have):
- "How is this problem impacting your business today?"
- "What's the cost of inaction?"
- "Is this tied to any strategic initiatives?"
If need is 0-1 (Strong need):
- "Can you quantify the impact of this problem?"
- "What have you tried before to solve this?"
- "What would success look like?"
Pain Point Framework (capture in notes):
- Problem: What specific problem are they experiencing?
- Impact: What's the business impact (cost, time, risk)?
- Root Cause: Why hasn't this been solved before?
- Desired Outcome: What does the ideal solution look like?
Update Guidance:
Update lead record:
- need: [0-3 based on response]
- description: Append pain points and requirements
- qualificationcomments: Append need summary
3.4 Timeline Qualification
Current Status: purchasetimeframe field
- 0 = Immediate
- 1 = This Quarter
- 2 = Next Quarter
- 3 = This Year
- 4 = Unknown
Discovery Questions:
If purchasetimeframe is NULL or 4 (Unknown):
- "When are you looking to have a solution in place?"
- "Is there a specific event or deadline driving this?"
- "What happens if this slips to next quarter/year?"
If purchasetimeframe is 2-3 (Next Quarter/This Year):
- "What's driving that timeline?"
- "Is there flexibility, or is it a hard deadline?"
- "What needs to happen between now and then?"
If purchasetimeframe is 0-1 (Immediate/This Quarter):
- "What's the compelling event?"
- "What could delay the decision?"
- "Who needs to be involved to meet that timeline?"
Urgency Signals to Listen For:
- Contract renewals (existing vendor)
- Regulatory compliance deadlines
- Fiscal year budget cycles
- Business initiatives or transformations
- Competitive pressure
- Executive mandates
Update Guidance:
Update lead record:
- purchasetimeframe: [0-4 based on response]
- estimatedclosedate: Set based on timeline
- qualificationcomments: Append timeline notes and compelling event
3.5 Fit Assessment (Additional Qualification)
Evaluate if the lead matches your ideal customer profile:
Company Fit:
Query industry and size signals:
- industrycode: Does it match target industries?
- numberofemployees: Is company size in range?
- revenue: Does revenue indicate right market segment?
Fit Questions:
- "How many people would use this solution?"
- "What systems would this need to integrate with?"
- "Are you currently using any similar tools?"
- "What's your technology stack?"
Fit Scoring Matrix:
| Criteria | Good Fit | Moderate Fit | Poor Fit |
|---|---|---|---|
| Company Size | [your range] | Borderline | Outside range |
| Industry | Target vertical | Adjacent | Unserved |
| Use Case | Core product | Possible | Not supported |
| Tech Stack | Compatible | Workable | Incompatible |
Step 4: Calculate Final Qualification Score
BANT+ Scoring Model:
| Criteria | Weight | Scoring |
|---|---|---|
| Budget | 25% | 3=25, 2=20, 1=10, 0=0 |
| Authority | 20% | Decision Maker=20, Champion=15, User=10, Unknown=0 |
| Need | 25% | 0=25, 1=20, 2=10, 3=0 |
| Timeline | 15% | 0=15, 1=12, 2=8, 3=4, 4=0 |
| Fit | 15% | Good=15, Moderate=10, Poor=0 |
Total Score Interpretation:
- 80-100: Hot - Highly qualified, ready for opportunity
- 60-79: Warm - Qualified but needs nurturing on gaps
- 40-59: Cold - Significant gaps, may need more development
- 0-39: Disqualify - Poor fit or no real opportunity
Step 5: Update Lead Record
Use update_record tool with tablename: lead
Update these fields based on discovery:
{
"leadqualitycode": [1=Hot, 2=Warm, 3=Cold],
"budgetstatus": [0-3],
"budgetamount": [if confirmed],
"need": [0-3],
"purchasetimeframe": [0-4],
"purchaseprocess": [0=Individual, 1=Committee, 2=Unknown],
"decisionmaker": [true/false],
"estimatedamount": [deal value estimate],
"estimatedclosedate": [based on timeline],
"qualificationcomments": "[Updated qualification notes]",
"description": "[Updated with pain points and requirements]"
}
Step 6: Recommend Next Steps
Based on Qualification Score:
If Score >= 80 (Hot Lead):
RECOMMENDATION: QUALIFY TO OPPORTUNITY
════════════════════════════════════════════════════
This lead is well-qualified. Recommended actions:
1. Convert to Opportunity
- Create opportunity with extracted BANT data
- Set appropriate sales stage (Qualify or Develop)
- Link to existing or new Account
2. Create Account (if new company)
- Use companyname, industrycode, revenue, numberofemployees
3. Create Contact
- Use lead's contact information
- Set accountrolecode based on authority assessment
4. Schedule Next Activity
- Book discovery call or demo
- Invite decision maker if different from lead
If Score 60-79 (Warm Lead):
RECOMMENDATION: CONTINUE NURTURING
════════════════════════════════════════════════════
This lead has potential but gaps exist:
Gap Analysis:
- [List specific gaps, e.g., "Budget not confirmed"]
- [e.g., "Decision maker not identified"]
Recommended Actions:
1. Schedule follow-up call to address gaps
2. Send relevant content to build value
3. Request introduction to additional stakeholders
Create Task:
- Subject: "Follow-up: Address qualification gaps"
- Due: [appropriate date]
- Description: [specific gap to address]
If Score 40-59 (Cold Lead):
RECOMMENDATION: LONG-TERM NURTURE
════════════════════════════════════════════════════
This lead is not ready for active pursuit:
Issues:
- [List significant gaps]
Recommended Actions:
1. Add to nurture campaign
2. Set re-engagement reminder for [timeline]
3. Continue light-touch engagement
Update Lead:
- statuscode: 2 (Contacted)
- Set follow-up date in future
If Score < 40 (Disqualify):
RECOMMENDATION: DISQUALIFY
════════════════════════════════════════════════════
This lead does not meet qualification criteria:
Disqualification Reasons:
- [Specific reasons, e.g., "No budget and no timeline"]
Recommended Actions:
1. Mark lead as disqualified
2. Document reason for future reference
3. Consider referral if poor fit for us but good fit for partner
Update Lead:
- statecode: 2 (Disqualified)
- statuscode: 6 (No Longer Interested) or appropriate code
- qualificationcomments: "Disqualified: [reason]"
Step 7: Convert Lead (if qualified)
If user confirms conversion to opportunity:
Create Account (if needed):
Use create_record with tablename: account
{
"name": "[companyname]",
"telephone1": "[telephone1]",
"emailaddress1": "[company email domain]",
"industrycode": "[industrycode]",
"numberofemployees": "[numberofemployees]",
"revenue": "[revenue]",
"address1_line1": "[address]",
"address1_city": "[city]",
"address1_stateorprovince": "[state]",
"address1_postalcode": "[postal]"
}
Create Contact:
Use create_record with tablename: contact
{
"firstname": "[firstname]",
"lastname": "[lastname]",
"jobtitle": "[jobtitle]",
"emailaddress1": "[emailaddress1]",
"telephone1": "[telephone1]",
"mobilephone": "[mobilephone]",
"accountid": "[new account id]",
"accountrolecode": [1=Decision Maker, 2=Employee, 3=Influencer]
}
Create Opportunity:
Use create_record with tablename: opportunity
{
"name": "[Deal name based on subject]",
"customerid": "[account or contact id]",
"estimatedvalue": "[estimatedamount from lead]",
"estimatedclosedate": "[estimatedclosedate from lead]",
"budgetstatus": "[budgetstatus]",
"need": "[need]",
"purchasetimeframe": "[purchasetimeframe]",
"purchaseprocess": "[purchaseprocess]",
"decisionmaker": "[decisionmaker]",
"description": "[description from lead]",
"currentsituation": "[current situation notes]",
"customerneed": "[customer needs from discovery]",
"originatingleadid": "[leadid]",
"salesstage": 0 (Qualify)
}
Update Lead Status:
Use update_record with tablename: lead
{
"statecode": 1 (Qualified),
"statuscode": 3 (Qualified),
"qualifyingopportunityid": "[new opportunity id]"
}
Dataverse Tables Used
| Table | Purpose |
|---|---|
lead | Primary entity being qualified |
account | Created upon conversion |
contact | Created upon conversion |
opportunity | Created upon qualification |
activitypointer | Review engagement history |
task | Create follow-up tasks |
phonecall | Log qualification calls |
Key Fields Reference
lead:
leadqualitycode(CHOICE) - Hot(1), Warm(2), Cold(3)budgetstatus(CHOICE) - No Committed Budget(0), May Buy(1), Can Buy(2), Will Buy(3)budgetamount(MONEY) - Confirmed budget amountneed(CHOICE) - Must have(0), Should have(1), Good to have(2), No need(3)purchasetimeframe(CHOICE) - Immediate(0), This Quarter(1), Next Quarter(2), This Year(3), Unknown(4)purchaseprocess(CHOICE) - Individual(0), Committee(1), Unknown(2)decisionmaker(BIT) - Is this contact the decision makermsdyn_leadscore(INT) - AI predictive score (0-100)msdyn_leadgrade(CHOICE) - Grade A(0), B(1), C(2), D(3)msdyn_leadscoretrend(CHOICE) - Improving(0), Steady(1), Declining(2), Not enough info(3)msdyn_scorereasons(MULTILINE TEXT) - JSON with AI scoring factorsstatecode(STATE) - Open(0), Qualified(1), Disqualified(2)statuscode(STATUS) - New(1), Contacted(2) [Open]; Qualified(3) [Qualified]; Lost(4), Cannot Contact(5), No Longer Interested(6), Canceled(7) [Disqualified]leadsourcecode(CHOICE) - Advertisement(1), Employee Referral(2), External Referral(3), Partner(4), Public Relations(5), Seminar(6), Trade Show(7), Web(8), Word of Mouth(9), Other(10)
opportunity (created on conversion):
originatingleadid(LOOKUP) - Links back to source leadqualifyingopportunityid(LOOKUP) - Set on lead when qualifiedsalesstage(CHOICE) - Qualify(0), Develop(1), Propose(2), Close(3)
Qualification Best Practices
- Always capture the "why": Don't just check boxes, understand the context
- Listen for buying signals: Urgency, specific requirements, stakeholder engagement
- Watch for red flags: Unrealistic timelines, no budget, tire-kickers
- Document everything: Future opportunities may come from disqualified leads
- Re-qualify over time: Circumstances change, revisit cold leads periodically
Examples
Example 1: Qualify a New Lead
User says: "Help me qualify the lead from John Smith at Contoso"
Actions:
- Retrieve lead record for John Smith at Contoso
- Display current BANT status and qualification score
- Identify gaps (e.g., budget unknown, timeline unclear)
- Suggest discovery questions to fill gaps
- Recommend next steps based on current score
Result:
LEAD QUALIFICATION WORKSHEET
Lead: John Smith at Contoso
Current Score: 55/100 (Warm)
GAPS IDENTIFIED:
- Budget: Unknown (ask about allocated budget)
- Authority: Unclear (confirm decision-making process)
RECOMMENDED QUESTIONS:
1. "Do you have budget allocated for this initiative?"
2. "Who else is involved in evaluating solutions?"
NEXT STEP: Schedule discovery call to complete qualification
Example 2: Should I Convert This Lead?
User says: "Should I convert this lead to an opportunity?"
Actions:
- Calculate BANT+ score from lead fields
- Compare against qualification thresholds
- Analyze engagement history
- Provide recommendation with reasoning
Result:
QUALIFICATION ASSESSMENT: READY TO CONVERT ✅
Score: 82/100
- Budget: Will Buy ($75K confirmed)
- Authority: Decision maker confirmed
- Need: Must have (pain point documented)
- Timeline: This Quarter
RECOMMENDATION: Convert to opportunity. Strong qualification signals.
Example 3: Disqualify a Cold Lead
User says: "This lead isn't going anywhere, should I disqualify?"
Actions:
- Review lead history and engagement
- Assess qualification gaps
- Recommend disqualification with appropriate reason code
- Suggest nurture actions if applicable
Result:
DISQUALIFICATION RECOMMENDED
Reason: No Longer Interested (statuscode: 6)
- No response to 5 outreach attempts over 60 days
- Last activity: Email bounced
ACTION: Add to marketing nurture campaign for re-engagement in 6 months
Troubleshooting
Error: Lead not found
Cause: Invalid lead ID or lead has been merged/deleted Solution:
- Search by name and company instead of ID
- Check if lead was already qualified (statecode = 1)
- Verify lead exists in active records
Error: Cannot convert lead - missing required fields
Cause: Account or contact creation requires populated fields Solution:
- Ensure companyname is populated for account creation
- Verify email or phone exists for contact creation
- Prompt user to provide missing information
Error: AI Lead Score not available
Cause: Sales Insights not enabled or insufficient data Solution:
- Fall back to manual BANT scoring
- Check if msdyn_leadscore field exists in org
- Use leadqualitycode (Hot/Warm/Cold) as alternative