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".
npx skills add https://github.com/microsoft/dataverse-business-skills --skill 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.
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
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 |
3.1 Budget Qualification
Current Status: budgetstatus field value
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
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):
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
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:
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 |
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:
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]"
}
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]"
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]"
}
| 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 |
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)User says: "Help me qualify the lead from John Smith at Contoso"
Actions:
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
User says: "Should I convert this lead to an opportunity?"
Actions:
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.
User says: "This lead isn't going anywhere, should I disqualify?"
Actions:
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
Cause: Invalid lead ID or lead has been merged/deleted
Solution:
Cause: Account or contact creation requires populated fields
Solution:
Cause: Sales Insights not enabled or insufficient data
Solution:
Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Build and distribute Expo development clients locally or via TestFlight
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Take microsoft/lead-qualification-playbook from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.