Lead Scoring Keywords
General Bots includes native lead scoring capabilities through BASIC keywords, enabling automated lead qualification, AI-enhanced scoring, and CRM integration directly from conversational flows.
Overview
Lead scoring assigns numeric values to prospects based on their attributes and behaviors. Higher scores indicate greater sales readiness. General Bots provides both rule-based and AI-enhanced scoring approaches.
SCORE LEAD
Calculate a lead score based on profile and behavior data using configurable rules.
Syntax
score = SCORE LEAD lead_data
Example
lead_data = NEW OBJECT
lead_data.email = "john@company.com"
lead_data.name = "John Smith"
lead_data.company = "Acme Corp"
lead_data.job_title = "VP of Engineering"
lead_data.industry = "Technology"
lead_data.company_size = "Enterprise"
score = SCORE LEAD lead_data
TALK "Score: " + score.score
TALK "Grade: " + score.grade
TALK "Status: " + score.status
TALK "Top recommendation: " + score.recommendations[0]
Return Object
The SCORE LEAD keyword returns an object containing:
| Property | Type | Description |
|---|---|---|
score | Integer | Numeric score (0-100) |
grade | String | Letter grade (A, B, C, D, F) |
status | String | hot, warm, cold, or unqualified |
breakdown | Object | Score components by category |
recommendations | Array | Suggested next actions |
Score Breakdown
score = SCORE LEAD lead_data
TALK "Demographic score: " + score.breakdown.demographic
TALK "Firmographic score: " + score.breakdown.firmographic
TALK "Behavioral score: " + score.breakdown.behavioral
TALK "Engagement score: " + score.breakdown.engagement
AI SCORE LEAD
Use AI/LLM-enhanced scoring for more nuanced lead evaluation.
score = AI SCORE LEAD lead_data
TALK "AI Score: " + score.score
TALK "Confidence: " + score.breakdown.ai_confidence
TALK "Reasoning: " + score.breakdown.ai_reasoning
AI scoring considers factors that rule-based scoring might miss, such as company news, market conditions, and subtle signals in communication patterns.
When to Use AI Scoring
AI scoring works best for complex B2B scenarios where context matters significantly. Rule-based scoring is faster and sufficient for high-volume B2C leads with clear qualification criteria.
' Use AI for enterprise leads, rules for SMB
IF lead_data.company_size = "Enterprise" THEN
score = AI SCORE LEAD lead_data
ELSE
score = SCORE LEAD lead_data
END IF
GET LEAD SCORE
Retrieve an existing lead score from the database.
score = GET LEAD SCORE "lead-id"
TALK "Current score: " + score.score
TALK "Last updated: " + score.updated_at
QUALIFY LEAD
Check if a lead meets the qualification threshold for sales handoff.
Default Threshold (70)
result = QUALIFY LEAD "lead-id"
IF result.qualified THEN
TALK "Lead is qualified: " + result.status
' Notify sales team
SEND MAIL TO "sales@company.com" SUBJECT "New Qualified Lead" BODY result
ELSE
TALK "Lead needs more nurturing. Score: " + result.score
END IF
Custom Threshold
' Enterprise deals require higher qualification
result = QUALIFY LEAD "lead-id", 85
IF result.qualified THEN
TALK "Enterprise lead qualified for sales"
END IF
Qualification Result
| Property | Type | Description |
|---|---|---|
qualified | Boolean | Meets threshold |
score | Integer | Current score |
threshold | Integer | Applied threshold |
status | String | Current lead status |
gap | Integer | Points needed if not qualified |
UPDATE LEAD SCORE
Manually adjust a lead’s score based on specific actions or behaviors.
Add Points
' Lead attended webinar
new_score = UPDATE LEAD SCORE "lead-id", 10, "Attended product webinar"
TALK "Score updated to: " + new_score.score
Deduct Points
' Lead unsubscribed from newsletter
new_score = UPDATE LEAD SCORE "lead-id", -15, "Unsubscribed from email"
Behavioral Scoring
ON "webinar:attended"
UPDATE LEAD SCORE params.lead_id, 15, "Webinar attendance"
END ON
ON "pricing:viewed"
UPDATE LEAD SCORE params.lead_id, 20, "Viewed pricing page"
END ON
ON "demo:requested"
UPDATE LEAD SCORE params.lead_id, 30, "Requested demo"
END ON
ON "email:bounced"
UPDATE LEAD SCORE params.lead_id, -25, "Email bounced"
END ON
Complete Lead Nurturing Flow
' lead-nurturing.bas
PARAM email AS string
PARAM name AS string
PARAM company AS string
PARAM source AS string
DESCRIPTION "Process and score new leads"
' Build lead profile
WITH lead
.email = email
.name = name
.company = company
.source = source
.created_at = NOW()
END WITH
' Initial scoring
score = SCORE LEAD lead
' Store lead
INSERT "leads", lead
SET BOT MEMORY "lead_" + email + "_score", score.score
' Route based on score
IF score.status = "hot" THEN
' Immediate sales notification
SEND MAIL TO "sales@company.com" SUBJECT "Hot Lead: " + name BODY score
SEND TEMPLATE "hot-lead-welcome", "email", email, #{name: name}
ELSEIF score.status = "warm" THEN
' Schedule nurture sequence
SEND TEMPLATE "welcome", "email", email, #{name: name}
SET SCHEDULE DATEADD(NOW(), 3, "day"), "nurture-day-3.bas"
ELSE
' Cold lead - educational content
SEND TEMPLATE "educational", "email", email, #{name: name}
END IF
TALK "Lead " + name + " processed with score " + score.score + " (" + score.status + ")"
Lead Scoring Configuration
Configure scoring weights in your bot’s config.csv:
key,value
lead-score-job-title-weight,20
lead-score-company-size-weight,15
lead-score-industry-weight,10
lead-score-engagement-weight,25
lead-score-behavioral-weight,30
lead-score-qualification-threshold,70
Title-Based Scoring
| Job Title Pattern | Points |
|---|---|
| C-Level (CEO, CTO, CFO) | 25 |
| VP / Vice President | 20 |
| Director | 15 |
| Manager | 10 |
| Individual Contributor | 5 |
Company Size Scoring
| Company Size | Points |
|---|---|
| Enterprise (1000+) | 20 |
| Mid-Market (100-999) | 15 |
| SMB (10-99) | 10 |
| Small (1-9) | 5 |
Behavioral Actions
| Action | Typical Points |
|---|---|
| Demo request | +30 |
| Pricing page view | +20 |
| Case study download | +15 |
| Webinar attendance | +15 |
| Blog subscription | +10 |
| Email open | +2 |
| Email click | +5 |
| Unsubscribe | -15 |
| Email bounce | -25 |
Scheduled Score Decay
Implement score decay for inactive leads:
' score-decay.bas
SET SCHEDULE "every day at 2am"
' Find leads with no activity in 30 days
stale_leads = FIND "leads", "last_activity < DATEADD(NOW(), -30, 'day') AND score > 20"
FOR EACH lead IN stale_leads
UPDATE LEAD SCORE lead.id, -5, "Inactivity decay"
NEXT lead
TALK "Processed " + LEN(stale_leads) + " stale leads"
Integration with CRM
Push qualified leads to external CRM systems:
result = QUALIFY LEAD lead_id
IF result.qualified THEN
' Push to Salesforce
crm_payload = NEW OBJECT
crm_payload.email = lead.email
crm_payload.name = lead.name
crm_payload.score = result.score
crm_payload.status = "Qualified"
POST "https://api.salesforce.com/leads", crm_payload
' Mark as synced
UPDATE "leads", "id = " + lead_id, #{crm_synced: true, synced_at: NOW()}
END IF
Best Practices
Start with simple rules. Begin with basic demographic and firmographic scoring, then add behavioral triggers as you gather data.
Align scoring with sales. Work with your sales team to define what makes a “qualified” lead. Their input ensures scores reflect actual sales readiness.
Review and adjust regularly. Analyze conversion rates by score range monthly. Adjust weights if high-scoring leads aren’t converting.
Combine rule-based and AI scoring. Use rule-based scoring for speed and consistency, AI scoring for complex enterprise deals requiring nuanced evaluation.
Implement score decay. Leads that go cold should have their scores decrease over time to keep the pipeline accurate.
Track score history. Store score changes with timestamps and reasons for audit trails and analysis.
' Log all score changes
ON "lead:score:changed"
INSERT "score_history", #{
lead_id: params.lead_id,
old_score: params.old_score,
new_score: params.new_score,
reason: params.reason,
changed_at: NOW()
}
END ON
See Also
- SEND TEMPLATE - Nurture campaign emails
- SET SCHEDULE - Automated scoring jobs
- ON Keyword - Event-driven score updates
- GET / POST - CRM integration