Set up the rules and weights that determine how submissions are scored — from simple thresholds to multi-factor analysis.
Evaluation criteria are the foundation of your grader's intelligence. They define how form submissions are analyzed, weighted, and scored to determine lead quality. This guide covers setting up effective criteria that align with your sales process.
Direct evaluation of form field values:
{ "field": "company", "condition": "contains", "values": ["enterprise", "corporation", "international"], "weight": 25, "description": "Large company indicators" }
Common Field Patterns:
Analyze patterns and engagement:
Calculated values from multiple fields:
// Example: Company maturity score if (website && employees > 50 && revenue) { score += 20; // Established company } // Email domain reputation if (email.endsWith('.edu')) { score += 10; // Educational discount interest } else if (email.endsWith('.gov')) { score += 15; // Government prospect }
Before creating criteria, document your ICP:
| Attribute | Ideal | Good | Poor |
|---|---|---|---|
| Company Size | 100-500 employees | 50-100 or 500+ | <50 employees |
| Industry | SaaS, Tech, Healthcare | Financial, Retail | Agriculture, Non-profit |
| Job Title | VP, Director, Manager | Coordinator, Analyst | Intern, Student |
| Budget | $10k+ annually | $5k-10k | <$5k |
For each form field, define scoring rules:
{ "field": "email", "rules": [ { "condition": "domain_in", "values": ["fortune500domains.com"], "points": 30, "label": "Fortune 500 Company" }, { "condition": "domain_type", "values": ["business"], "points": 15, "label": "Business Email" }, { "condition": "domain_type", "values": ["personal"], "points": -10, "label": "Personal Email" } ] }
{ "field": "company", "rules": [ { "condition": "keywords", "values": ["enterprise", "corporation", "solutions", "systems"], "points": 20, "label": "Enterprise Keywords" }, { "condition": "length", "min": 3, "points": 10, "label": "Valid Company Name" } ] }
Assign importance weights to each criterion:
| Criterion | Weight | Rationale |
|---|---|---|
| Company Email Domain | 25% | Strong indicator of company size |
| Job Title Seniority | 20% | Decision-making authority |
| Industry Match | 15% | Product-market fit |
| Company Size | 15% | Budget capability |
| Form Completion | 10% | Engagement level |
| Geographic Location | 10% | Sales territory alignment |
| Other Factors | 5% | Miscellaneous signals |
// High-value prospect detection if (jobTitle.includes('VP', 'Director', 'Chief') && companySize > 100 && industry.includes('Technology', 'Healthcare')) { score += 40; // Premium prospect } // Risk mitigation if (email.includes('gmail.com', 'yahoo.com') && !website && phone.isEmpty()) { score -= 20; // Potential spam/low quality }
{ "industries": { "healthcare": { "keywords": ["hospital", "medical", "clinic", "health"], "job_titles": ["CTO", "IT Director", "CMIO"], "company_size_weight": 1.5, "base_score": 60 }, "manufacturing": { "keywords": ["manufacturing", "factory", "production"], "job_titles": ["Plant Manager", "Operations Director"], "geographic_preference": ["midwest", "south"], "base_score": 55 } } }
// Urgency indicators const urgencyKeywords = ['urgent', 'asap', 'immediate', 'deadline']; if (message.toLowerCase().includesAny(urgencyKeywords)) { score += 15; // Time-sensitive opportunity } // Seasonal adjustments if (currentMonth.in(['Q4']) && industry === 'retail') { score += 10; // Year-end budget cycles }
| Metric | Target | Calculation |
|---|---|---|
| Precision | >70% | True positives / All positive predictions |
| Recall | >80% | True positives / All actual positives |
| F1 Score | >75% | 2 × (Precision × Recall) / (Precision + Recall) |
Review past leads to calibrate criteria:
-- Example analysis query SELECT AVG(score) as avg_score, COUNT(*) as total_leads, SUM(CASE WHEN converted = 1 THEN 1 ELSE 0 END) as conversions, (SUM(CASE WHEN converted = 1 THEN 1 ELSE 0 END) * 100.0 / COUNT(*)) as conversion_rate FROM submissions WHERE score_range = 'high' AND created_date > DATE_SUB(NOW(), INTERVAL 90 DAY) GROUP BY score_range;
Begin with basic field-based criteria, then add behavioral and derived patterns as you gather data.
Don't just reward good signals — penalize bad ones:
Aim for this distribution:
Creating too many specific rules that don't generalize:
// Bad: Too specific if (company === 'Acme Corp' && jobTitle === 'VP Marketing') { score += 50; // Won't help with other prospects } // Good: Generalizable pattern if (companySize > 100 && jobTitle.includes('VP', 'Director')) { score += 25; // Applies to many prospects }
Unconsciously encoding preferences that limit opportunities:
Making criteria changes based on small sample sizes. Ensure you have at least 100 submissions before major adjustments.
After setting up evaluation criteria: