REM ============================================================================ REM Lead Nurturing Campaign with AI Scoring REM General Bots Marketing Automation Template REM ============================================================================ REM This campaign automatically nurtures leads based on their AI-calculated REM lead score, sending personalized content at optimal intervals. REM ============================================================================ DESCRIPTION "AI-powered lead nurturing campaign with dynamic scoring and personalized messaging" REM ============================================================================ REM Campaign Configuration REM ============================================================================ campaign_name = "lead-nurture-2025" campaign_duration_days = 30 min_score_threshold = 20 mql_threshold = 70 sql_threshold = 85 REM Email sending intervals (in days) email_interval_cold = 7 email_interval_warm = 3 email_interval_hot = 1 REM ============================================================================ REM Main Campaign Entry Point REM ============================================================================ REM This is triggered by ON FORM SUBMIT from landing pages ON FORM SUBMIT "landing-page" REM Extract lead data from form submission lead_email = fields.email lead_name = NVL(fields.name, "there") lead_company = fields.company lead_phone = fields.phone lead_source = metadata.utm_source TALK "đŸŽ¯ New lead captured: " + lead_email REM Create lead profile for scoring lead = NEW OBJECT lead.email = lead_email lead.name = lead_name lead.company = lead_company lead.source = lead_source lead.created_at = NOW() REM Calculate initial AI lead score score_result = AI SCORE LEAD lead TALK "📊 Lead Score: " + score_result.score + " (Grade: " + score_result.grade + ")" REM Save lead to CRM SAVE "leads", lead_email, lead_name, lead_company, lead_phone, lead_source, score_result.score, score_result.grade, NOW() REM Determine nurture track based on score IF score_result.score >= sql_threshold THEN REM Hot lead - immediate sales handoff CALL hot_lead_workflow(lead, score_result) ELSE IF score_result.score >= mql_threshold THEN REM Warm lead - accelerated nurture CALL warm_lead_workflow(lead, score_result) ELSE IF score_result.score >= min_score_threshold THEN REM Cold lead - standard nurture CALL cold_lead_workflow(lead, score_result) ELSE REM Very cold - add to long-term drip CALL drip_campaign_workflow(lead, score_result) END IF END ON REM ============================================================================ REM Hot Lead Workflow (Score >= 85) REM ============================================================================ SUB hot_lead_workflow(lead, score_result) TALK "đŸ”Ĩ HOT LEAD: " + lead.email + " - Initiating sales handoff" REM Send immediate welcome + calendar booking vars = NEW OBJECT vars.name = lead.name vars.score = score_result.score vars.company = NVL(lead.company, "your company") REM Send personalized welcome via multiple channels SEND TEMPLATE "hot-lead-welcome", "email", lead.email, vars IF NOT ISEMPTY(lead.phone) THEN SEND TEMPLATE "hot-lead-sms", "sms", lead.phone, vars END IF REM Create task for sales team CREATE TASK "Contact hot lead: " + lead.email, "sales-team", "high", NOW() REM Send Slack notification to sales sales_alert = "đŸ”Ĩ *HOT LEAD ALERT*\n" sales_alert = sales_alert + "Email: " + lead.email + "\n" sales_alert = sales_alert + "Score: " + score_result.score + "\n" sales_alert = sales_alert + "Company: " + NVL(lead.company, "Unknown") + "\n" sales_alert = sales_alert + "Action: Immediate follow-up required!" POST "https://hooks.slack.com/services/YOUR_WEBHOOK", #{text: sales_alert} REM Schedule follow-up if no response in 24 hours SET SCHEDULE "0 9 * * *", "hot-lead-followup.bas" TALK "✅ Hot lead workflow completed for " + lead.email END SUB REM ============================================================================ REM Warm Lead Workflow (Score 70-84) REM ============================================================================ SUB warm_lead_workflow(lead, score_result) TALK "đŸŒĄī¸ WARM LEAD: " + lead.email + " - Starting accelerated nurture" vars = NEW OBJECT vars.name = lead.name vars.company = NVL(lead.company, "your company") REM Day 0: Welcome email with case study SEND TEMPLATE "warm-welcome", "email", lead.email, vars REM Schedule Day 3: Value proposition email nurture_data = #{ lead_email: lead.email, lead_name: lead.name, template: "warm-value-prop", step: 2 } SET SCHEDULE DATEADD(NOW(), 3, "day"), "send-nurture-email.bas" REM Schedule Day 7: Demo invitation SET SCHEDULE DATEADD(NOW(), 7, "day"), "warm-demo-invite.bas" REM Schedule Day 14: Re-score and evaluate SET SCHEDULE DATEADD(NOW(), 14, "day"), "rescore-lead.bas" TALK "✅ Warm lead nurture sequence started for " + lead.email END SUB REM ============================================================================ REM Cold Lead Workflow (Score 20-69) REM ============================================================================ SUB cold_lead_workflow(lead, score_result) TALK "â„ī¸ COLD LEAD: " + lead.email + " - Starting standard nurture" vars = NEW OBJECT vars.name = lead.name vars.company = NVL(lead.company, "your organization") REM Day 0: Welcome email SEND TEMPLATE "cold-welcome", "email", lead.email, vars REM Day 7: Educational content SET SCHEDULE DATEADD(NOW(), 7, "day"), "cold-education-1.bas" REM Day 14: More educational content SET SCHEDULE DATEADD(NOW(), 14, "day"), "cold-education-2.bas" REM Day 21: Soft pitch SET SCHEDULE DATEADD(NOW(), 21, "day"), "cold-soft-pitch.bas" REM Day 30: Re-score and decide next steps SET SCHEDULE DATEADD(NOW(), 30, "day"), "rescore-lead.bas" TALK "✅ Cold lead nurture sequence started for " + lead.email END SUB REM ============================================================================ REM Long-term Drip Campaign (Score < 20) REM ============================================================================ SUB drip_campaign_workflow(lead, score_result) TALK "💧 LOW SCORE LEAD: " + lead.email + " - Adding to drip campaign" vars = NEW OBJECT vars.name = lead.name REM Simple welcome only SEND TEMPLATE "drip-welcome", "email", lead.email, vars REM Add to monthly newsletter SAVE "newsletter_subscribers", lead.email, lead.name, NOW() REM Schedule monthly check-in SET SCHEDULE "0 10 1 * *", "monthly-drip-check.bas" TALK "✅ Added " + lead.email + " to long-term drip campaign" END SUB REM ============================================================================ REM Scheduled: Re-score Lead and Adjust Campaign REM ============================================================================ SUB rescore_lead() PARAM lead_email AS string REM Get current lead data lead_data = FIND "leads", "email = '" + lead_email + "'" IF ISEMPTY(lead_data) THEN TALK "âš ī¸ Lead not found: " + lead_email RETURN END IF REM Get updated behavior data lead = NEW OBJECT lead.email = lead_email lead.name = lead_data.name lead.company = lead_data.company REM Recalculate score with latest behavior new_score = AI SCORE LEAD lead old_score = lead_data.score score_change = new_score.score - old_score TALK "📊 Lead Rescore: " + lead_email TALK " Old Score: " + old_score + " → New Score: " + new_score.score TALK " Change: " + IIF(score_change >= 0, "+", "") + score_change REM Update stored score UPDATE "leads", lead_email, #{score: new_score.score, grade: new_score.grade, updated_at: NOW()} REM Check if lead should be promoted to higher tier IF old_score < mql_threshold AND new_score.score >= mql_threshold THEN TALK "🎉 Lead promoted to MQL: " + lead_email CALL warm_lead_workflow(lead, new_score) REM Notify marketing team SEND TEMPLATE "mql-promotion-alert", "email", "marketing@company.com", #{ lead_email: lead_email, old_score: old_score, new_score: new_score.score } ELSE IF old_score < sql_threshold AND new_score.score >= sql_threshold THEN TALK "đŸ”Ĩ Lead promoted to SQL: " + lead_email CALL hot_lead_workflow(lead, new_score) ELSE IF score_change < -20 THEN TALK "âš ī¸ Significant score drop for: " + lead_email REM Move to re-engagement campaign CALL reengagement_workflow(lead, new_score) END IF END SUB REM ============================================================================ REM Re-engagement Workflow for Declining Leads REM ============================================================================ SUB reengagement_workflow(lead, score_result) TALK "🔄 Starting re-engagement for: " + lead.email vars = NEW OBJECT vars.name = lead.name REM Send re-engagement email SEND TEMPLATE "reengagement", "email", lead.email, vars REM If we have phone, send SMS too IF NOT ISEMPTY(lead.phone) THEN SEND TEMPLATE "reengagement-sms", "sms", lead.phone, vars END IF REM Schedule unsubscribe if no engagement in 14 days SET SCHEDULE DATEADD(NOW(), 14, "day"), "check-reengagement.bas" TALK "✅ Re-engagement campaign started for " + lead.email END SUB REM ============================================================================ REM Utility: Send Nurture Email by Step REM ============================================================================ SUB send_nurture_email() PARAM lead_email AS string PARAM template_name AS string PARAM step AS integer REM Get lead data lead_data = FIND "leads", "email = '" + lead_email + "'" IF ISEMPTY(lead_data) THEN TALK "âš ī¸ Lead not found, skipping: " + lead_email RETURN END IF REM Check if lead has unsubscribed unsubscribed = FIND "unsubscribes", "email = '" + lead_email + "'" IF NOT ISEMPTY(unsubscribed) THEN TALK "âšī¸ Lead unsubscribed, stopping nurture: " + lead_email RETURN END IF REM Check current score - maybe they've become hot current_score = GET LEAD SCORE lead_email IF current_score.score >= sql_threshold THEN TALK "đŸ”Ĩ Lead is now hot! Switching to hot workflow: " + lead_email lead = #{email: lead_email, name: lead_data.name, company: lead_data.company} CALL hot_lead_workflow(lead, current_score) RETURN END IF REM Send the scheduled email vars = NEW OBJECT vars.name = lead_data.name vars.company = NVL(lead_data.company, "your organization") vars.step = step result = SEND TEMPLATE template_name, "email", lead_email, vars IF result[0].success THEN TALK "âœ‰ī¸ Nurture email sent: " + template_name + " to " + lead_email REM Track email send SAVE "email_tracking", lead_email, template_name, step, NOW(), "sent" REM Update lead score for engagement UPDATE LEAD SCORE lead_email, 2, "Nurture email " + step + " sent" ELSE TALK "❌ Failed to send nurture email: " + result[0].error END IF END SUB REM ============================================================================ REM Campaign Analytics REM ============================================================================ SUB get_campaign_analytics() TALK "📈 Campaign Analytics for: " + campaign_name TALK "================================" REM Total leads total_leads = AGGREGATE "leads", "COUNT", "email" TALK "Total Leads: " + total_leads REM Leads by grade grade_a = AGGREGATE "leads", "COUNT", "email", "grade = 'A'" grade_b = AGGREGATE "leads", "COUNT", "email", "grade = 'B'" grade_c = AGGREGATE "leads", "COUNT", "email", "grade = 'C'" grade_d = AGGREGATE "leads", "COUNT", "email", "grade = 'D'" TALK "Grade Distribution:" TALK " A (Hot): " + grade_a TALK " B (Warm): " + grade_b TALK " C (Neutral): " + grade_c TALK " D (Cold): " + grade_d REM Average score avg_score = AGGREGATE "leads", "AVG", "score" TALK "Average Lead Score: " + ROUND(avg_score, 1) REM Conversion rates mql_count = AGGREGATE "leads", "COUNT", "email", "score >= " + mql_threshold sql_count = AGGREGATE "leads", "COUNT", "email", "score >= " + sql_threshold IF total_leads > 0 THEN mql_rate = ROUND((mql_count / total_leads) * 100, 1) sql_rate = ROUND((sql_count / total_leads) * 100, 1) TALK "Conversion Rates:" TALK " MQL Rate: " + mql_rate + "%" TALK " SQL Rate: " + sql_rate + "%" END IF REM Email performance emails_sent = AGGREGATE "email_tracking", "COUNT", "id", "status = 'sent'" TALK "Emails Sent: " + emails_sent TALK "================================" RETURN #{ total_leads: total_leads, grade_a: grade_a, grade_b: grade_b, grade_c: grade_c, grade_d: grade_d, avg_score: avg_score, mql_count: mql_count, sql_count: sql_count, emails_sent: emails_sent } END SUB REM ============================================================================ REM Entry point for manual campaign trigger REM ============================================================================ TALK "🚀 Lead Nurturing Campaign Ready: " + campaign_name TALK "📊 MQL Threshold: " + mql_threshold TALK "đŸ”Ĩ SQL Threshold: " + sql_threshold TALK "⏰ Campaign Duration: " + campaign_duration_days + " days" TALK "" TALK "Waiting for form submissions..."