Kalyxi

Kalyxi: Intelligent Lead Data Processing

Built sophisticated n8n workflow for lead validation, cleaning, and scoring using ZeroBounce API and AI-powered data enhancement.

Duration: October 2024 - Present
Role: Automation Engineer (Part-time)
n8nZeroBounce APIOpenAI GPT-4JavaScriptGoogle SheetsData Processing
Data Quality
80% Improved
Processing Speed
2h → 15min
Email Validation
95% Accuracy
Manual Review
70% Reduced
Published January 1, 2025
October 2024 - Present

The Challenge

Kalyxi was receiving lead data from multiple sources with inconsistent quality, formatting, and completeness. The manual cleaning process was:

  • Time-Intensive: 2-3 hours per batch of 500-1000 leads
  • Inconsistent Results: Different team members applied different cleaning standards
  • High Error Rates: Manual email validation missed deliverability issues
  • Bottleneck: Lead processing delays affected campaign launch times

Specific Data Issues

  • Inconsistent Formatting: Names in various cases (john smith, JOHN SMITH, John Smith)
  • Company Name Variations: "Google Inc.", "Google LLC", "Google, Inc."
  • Job Title Inconsistency: "VP Sales", "Vice President of Sales", "sales vp"
  • Email Quality: No systematic validation of email deliverability
  • Missing Data: Incomplete records requiring manual research

The Solution

I developed a hybrid n8n workflow combining rule-based cleaning with AI-powered enhancement for complex data quality issues.

Intelligent Processing Architecture

Multi-Stage Data Pipeline

// Core lead cleaning logic from n8n workflow
function cleanAndScoreLead(rawLead) {
    // Stage 1: Rule-based normalization
    const cleanLead = {
        email: sanitizeEmail(rawLead.email),
        firstName: properCase(rawLead.firstName),
        lastName: properCase(rawLead.lastName),
        company: cleanCompanyName(rawLead.company),
        title: normalizeJobTitle(rawLead.title),
    };

    // Stage 2: Quality assessment
    const qualityChecks = {
        emailValid: validateEmailFormat(cleanLead.email),
        nameComplete: checkNameCompleteness(cleanLead),
        titleRelevant: assessTitleRelevance(cleanLead.title),
        companyValid: validateCompanyName(cleanLead.company),
    };

    // Stage 3: Determine processing path
    const needsAI = !(
        qualityChecks.emailValid &&
        qualityChecks.nameComplete &&
        qualityChecks.titleRelevant &&
        qualityChecks.companyValid
    );

    return { ...cleanLead, qualityChecks, needsAI };
}

Key Features

1. Hybrid Processing Approach

  • Rule-Based Cleaning: Handles 85% of standard cases efficiently
  • AI Enhancement: OpenAI processes complex edge cases
  • Cost Optimization: Minimizes API usage while maximizing quality

2. Advanced Email Validation

  • ZeroBounce Integration: Professional email verification service
  • Deliverability Scoring: Multi-factor email quality assessment
  • Bounce Prevention: Reduces email campaign failure rates

3. Intelligent Data Normalization

  • Name Standardization: Proper case handling with cultural awareness
  • Company Cleaning: Removes legal suffixes (Inc., LLC, Ltd.)
  • Title Normalization: Standardizes job titles and hierarchies

4. Quality Scoring System

  • Multi-Factor Assessment: Email, completeness, business relevance
  • Lead Prioritization: Automatic segmentation for campaign targeting
  • Review Flagging: Identifies records needing manual attention

Implementation Process

Phase 1: Rule Engine Development (Week 1)

Data Analysis

  • Analyzed 5,000+ historical lead records
  • Identified common data quality patterns
  • Documented cleaning rules and exceptions
  • Designed scoring algorithm weights

Core Cleaning Functions

// Name normalization with cultural awareness
function properCaseName(name) {
    const particles = ["van", "von", "de", "del", "della", "der", "den"];

    return name
        .split(/\s+/)
        .map((word, index) => {
            // Handle name particles (van der Berg, de la Cruz)
            if (index > 0 && particles.includes(word.toLowerCase())) {
                return word.toLowerCase();
            }

            // Handle hyphenated names and apostrophes
            return word
                .split(/([-'])/)
                .map((segment, i) => {
                    if (i % 2 === 1) return segment; // Keep delimiters
                    if (!segment) return segment;

                    // Preserve acronyms (FBI, CIA)
                    if (/^[A-Z]{2,}$/.test(segment)) return segment;

                    return (
                        segment.charAt(0).toUpperCase() +
                        segment.slice(1).toLowerCase()
                    );
                })
                .join("");
        })
        .join(" ");
}

// Company name standardization
function cleanCompanyName(company) {
    if (!company) return null;

    // Remove common legal suffixes
    const cleanName = company
        .replace(/[,\s]+(inc\.?|llc|ltd\.?|corp\.?|co\.?|plc)\.?$/i, "")
        .trim();

    return cleanName || company; // Fallback to original if empty
}

// Job title normalization
function normalizeJobTitle(title) {
    if (!title) return null;

    let normalized = title
        .replace(/senior|sr\.?/gi, "Sr")
        .replace(/vice\s*president|vp\s*of/gi, "VP of")
        .replace(/\s*,\s*/g, " & ") // Commas to ampersands
        .replace(/\s+/g, " ")
        .trim();

    // Capitalize common acronyms
    normalized = normalized.replace(
        /\b(CEO|CTO|CFO|COO|CMO|VP|HR|IT|PR|BD|CS|SDR|AE)\b/gi,
        (match) => match.toUpperCase()
    );

    return normalized;
}

Phase 2: Email Validation Integration (Week 2)

ZeroBounce API Integration

// Email validation with detailed scoring
async function validateEmailWithZeroBounce(email) {
    try {
        const response = await fetch(`https://api.zerobounce.net/v2/validate`, {
            method: "GET",
            headers: {
                Accept: "application/json",
            },
            params: {
                api_key: process.env.ZEROBOUNCE_API_KEY,
                email: email.toLowerCase().trim(),
            },
        });

        const data = await response.json();

        return {
            email: data.address,
            status: mapValidationStatus(data.status),
            deliverabilityScore: calculateDeliverabilityScore(data),
            suggestions: data.did_you_mean || null,
            provider: data.smtp_provider || "unknown",
        };
    } catch (error) {
        // Fallback to basic validation
        return {
            email,
            status: "unknown",
            deliverabilityScore: 50,
            error: "API_ERROR",
        };
    }
}

// Multi-factor deliverability scoring
function calculateDeliverabilityScore(validationData) {
    let score = 0;

    // Base score from validation status
    switch (validationData.status) {
        case "valid":
            score += 40;
            break;
        case "catch-all":
            score += 25;
            break;
        case "invalid":
            score += 0;
            break;
        default:
            score += 15;
    }

    // Domain reputation factors
    if (validationData.mx_found === "true") score += 20;
    if (validationData.smtp_check === "true") score += 15;
    if (validationData.smtp_provider !== "unknown") score += 10;

    // Negative factors
    if (validationData.free_email === "true") score -= 10;
    if (validationData.disposable === "true") score -= 30;
    if (validationData.toxic === "true") score -= 25;

    return Math.max(0, Math.min(100, score));
}

Phase 3: AI Enhancement Layer (Week 3)

OpenAI Integration for Complex Cases

// AI-powered data enhancement for edge cases
const AI_CLEANING_PROMPT = `
You are a deterministic lead cleaner. Follow the rules exactly.

Output MUST be a single JSON object with a key "leads" containing an array.
Each lead object must have exactly these keys:
- email: string (lowercased)
- first_name: string
- last_name: string  
- job_title: string|null
- company_name: string|null
- needs_review: boolean
- review_reasons: string

Rules:
1. Names: proper-case; keep compounds (de la, van)
2. Job titles: humanize; acronyms uppercase; commas → " & "
3. Companies: strip ONE legal suffix (Inc, LLC, Ltd, Corp, Co)
4. Flag for review: ambiguous names, unclear titles, suspicious data
`;

async function enhanceWithAI(problematicLeads) {
    const prompt = `${AI_CLEANING_PROMPT}
  
  Clean these leads: ${JSON.stringify(problematicLeads)}`;

    const response = await openai.chat.completions.create({
        model: "gpt-4",
        messages: [{ role: "user", content: prompt }],
        response_format: { type: "json_object" },
    });

    return JSON.parse(response.choices[0].message.content);
}

Phase 4: Quality Scoring & Workflow Integration (Week 4)

Comprehensive Lead Scoring

// Multi-dimensional lead quality assessment
function calculateLeadScore(lead, validationResult) {
    const scores = {
        emailQuality: validationResult.deliverabilityScore,
        dataCompleteness: calculateCompleteness(lead),
        businessRelevance: assessBusinessValue(lead),
        titleSeniority: scoreTitleSeniority(lead.title),
    };

    // Weighted composite score
    const weights = {
        emailQuality: 0.4,
        dataCompleteness: 0.2,
        businessRelevance: 0.3,
        titleSeniority: 0.1,
    };

    const totalScore = Object.entries(scores).reduce(
        (sum, [key, score]) => sum + score * weights[key],
        0
    );

    return {
        overallScore: Math.round(totalScore),
        breakdown: scores,
        segment: determineSegment(totalScore),
        priority: determinePriority(totalScore, lead),
    };
}

function determineSegment(score) {
    if (score >= 80) return "A"; // High-value prospects
    if (score >= 60) return "B"; // Standard prospects
    if (score >= 40) return "C"; // Nurture candidates
    return "D"; // Low priority/quality
}

The Results

Data Quality Transformation

Processing Efficiency

  • Speed Improvement: 2-3 hours reduced to 15 minutes per batch
  • Batch Size: Handling 1000+ leads vs. 500 manual limit
  • Accuracy: 95% email validation vs. 70% manual checking
  • Consistency: 100% standardized formatting vs. variable manual results

Data Quality Metrics

  • Email Deliverability: 95% valid emails vs. 75% before validation
  • Data Completeness: 85% complete records vs. 60% raw data
  • Standardization: 100% consistent formatting vs. 40% manual consistency
  • Duplicate Detection: 98% duplicate identification and flagging

Business Impact

  • Campaign Performance: 25% improvement in email open rates
  • Team Productivity: 70% reduction in manual review requirements
  • Scalability: 10x increase in lead processing capacity
  • Cost Efficiency: 80% reduction in data cleaning labor costs

Technical Performance

Workflow Reliability

  • Success Rate: 98% successful batch processing
  • Error Handling: Robust fallbacks for API failures
  • Processing Speed: Average 1.2 seconds per lead
  • API Optimization: Smart batching reduces ZeroBounce costs by 40%

Technical Innovations

1. Intelligent Cost Optimization

  • Rule-First Approach: Handles 85% of cases without API calls
  • Batch Processing: Optimizes ZeroBounce API usage
  • Smart Caching: Reduces duplicate validations

2. Human-AI Collaboration

  • AI Augmentation: Complex cases get AI enhancement
  • Human Oversight: Flagged records get manual review
  • Feedback Loop: Manual corrections improve automated rules

3. Scalable Architecture

  • Modular Design: Easy to add new data sources
  • Configurable Rules: Adjustable cleaning parameters
  • Error Recovery: Graceful handling of partial failures

Key Learnings

  1. Hybrid Approach: Combining rules and AI optimizes both cost and quality

  2. Data Quality Investment: Upfront cleaning dramatically improves campaign performance

  3. User Adoption: Visual n8n workflows help non-technical users understand and trust the system

  4. Iterative Improvement: Starting with basic rules and enhancing based on real data patterns

  5. Error Transparency: Clear flagging of uncertain cases builds user confidence

Client Feedback

"The lead cleaning automation transformed our data quality overnight. We went from dreading data prep to trusting our lead database. The hybrid approach of rules plus AI gives us both speed and accuracy we never had with manual processing."

— Data Operations Manager, Kalyxi

Technical Stack

Automation Platform

  • n8n for visual workflow orchestration
  • JavaScript for custom data processing logic
  • Webhook triggers for real-time processing

Data Validation & Enhancement

  • ZeroBounce API for professional email validation
  • OpenAI GPT-4 for complex data cleaning scenarios
  • Custom scoring algorithms for lead prioritization

Data Management

  • Google Sheets integration for pipeline management
  • CSV/Excel file processing for batch operations
  • Error logging and audit trail capabilities

Future Development

  • Custom TypeScript application using Mastra AI
  • Enhanced ML models for predictive lead scoring
  • Real-time API for instant lead validation

Technologies Used

n8nZeroBounce APIOpenAI GPT-4JavaScriptGoogle SheetsData Processing

Want Similar Results?

Let's discuss how I can help your business achieve growth through strategic development.