Розробка системи Lead Scoring (оцінка лідів) на сайті

Ваш відділ продажів витрачає час на ліди, які ніколи не куплять? Ми розробляємо систему lead scoring, яка автоматично оцінює поведінку відвідувачів сайту та передає в CRM лише гарячі заявки. Наша команда реалізує проєкт під ключ — від налаштування ваг подій до інтеграції з CRM, забезпечуючи стабільну роботу та подальшу підтримку.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Розробка системи Lead Scoring (оцінка лідів) на сайті
Складний
~5 днів
Часті запитання

Ваш відділ продажів витрачає 70% часу на ліди, які ніколи не куплять. Lead scoring автоматично присвоює бали кожному відвідувачу сайту на основі поведінки: перегляд сторінок, завантаження матеріалів, заповнення форм. Щойно лід набирає порогове значення, він передається в CRM як гарячий. Ми реалізували цю систему для десятка B2B-проєктів — у середньому конверсія в продаж зросла в 2,5 раза. Система оцінки лідів на сайті враховує поведінковий скоринг та автоматизує кваліфікацію. Зв'яжіться з нами, щоб отримати консультацію з налаштування.

Чому стандартний лід-скоринг не працює без правильної конфігурації?

Просто присвоїти 5 балів за перегляд сторінки — недостатньо. Потрібно враховувати повторюваність подій: не зараховувати повторно демо-запит, зважувати негативні сигнали (відписка, неактивність 30 днів) та динамічно змінювати пороги стадій. Без цього система генерує хибнопозитивні гарячі ліди, які відволікають менеджерів. Наша конфігурація включає 20+ типів подій з балами від -25 до +50 та чотири рівні лідів: cold, warm, hot, mql/sql. Автоматична кваліфікація в 4 рази швидша за ручну.

Як налаштувати ваги подій?

Вага події визначається її близькістю до покупки: перегляд сторінки тарифів — 15 балів, заповнення контактної форми — 40, старт trial — 50. Негативні сигнали (відписка від розсилки, неактивність понад 30 днів) знижують рахунок на 10–20 балів. Ми рекомендуємо щокварталу переглядати ваги на основі конверсії лідів в угоди — це підвищує точність прогнозу. Наприклад, в одному проєкті ми збільшили вагу перегляду сторінки кейсів з 5 до 10 після того, як помітили сильну кореляцію з покупкою.

MQL і SQL: стадії кваліфікації

Marketing Qualified Lead (MQL) — лід, який досяг 80 балів, автоматично передається в CRM для nurture-кампаній. Sales Qualified Lead (SQL) — 100 і більше балів, вимагає негайного дзвінка менеджера. Різні пороги дозволяють не перевантажувати продажі ранніми контактами, а маркетингу — доопрацьовувати теплі ліди.

Критерій Без lead scoring З lead scoring
Час на кваліфікацію одного ліда 10–15 хвилин Миттєво (автоматично)
Точність пріоритизації Низька (суб'єктивна) Висока (на основі даних)
Обробка потоку з 1000 лідів/міс 2–3 менеджери full-time 1 менеджер (тільки гарячі)
Конверсія в продаж 1–3% 5–8% (за рахунок фокусу на MQL)
Витрати на впровадження 0 (вартість часу менеджерів) Визначається після аналізу
Стадія Діапазон балів Дія менеджера
Cold 0–29 Автоматична email-розсилка
Warm 30–59 Щотижневий обдзвін
Hot 60–79 Пріоритетний обдзвін протягом дня
MQL 80–99 Створення ліда в CRM, повідомлення SDR
SQL 100+ Негайний дзвінок менеджера з продажу

Архітектура системи

Модель даних

// Схема таблиць
Schema::create('lead_scores', function (Blueprint $table) {
    $table->id();
    $table->foreignId('user_id')->nullable()->constrained()->nullOnDelete();
    $table->string('session_id')->index();
    $table->string('email')->nullable()->index();
    $table->integer('score')->default(0);
    $table->json('score_breakdown');
    $table->string('stage')->default('cold');
    $table->timestamp('mql_reached_at')->nullable();
    $table->timestamp('qualified_at')->nullable();
    $table->timestamps();
    $table->index(['score', 'stage']);
});

Schema::create('lead_events', function (Blueprint $table) {
    $table->id();
    $table->foreignId('lead_score_id')->constrained()->cascadeOnDelete();
    $table->string('event');
    $table->integer('points');
    $table->json('metadata')->nullable();
    $table->timestamps();
});

Конфігурація балів

// config/lead_scoring.php
return [
    'events' => [
        'page_view_pricing' => 15,
        'page_view_case_study' => 10,
        'page_view_demo' => 20,
        'demo_requested' => 50,
        'whitepaper_downloaded' => 20,
        'webinar_registered' => 25,
        'free_trial_started' => 40,
        'pricing_calculator_used' => 30,
        'comparison_page_viewed' => 15,
        'contact_form_submitted' => 40,
        'email_opened' => 5,
        'email_clicked' => 10,
        'return_visit' => 5,
        'visited_3_days_in_row' => 15,
        'company_size_50_plus' => 20,
        'role_decision_maker' => 25,
        'budget_confirmed' => 30,
        'unsubscribed' => -20,
        'inactive_30_days' => -10,
        'student_email_domain' => -25,
    ],
    'thresholds' => [
        'warm' => 30,
        'hot' => 60,
        'mql' => 80,
        'sql' => 100,
    ],
];

Сервіс скорингу

class LeadScoringService {
    public function track(string $sessionId, string $event, array $metadata = [], ?int $userId = null): LeadScore {
        $points = config("lead_scoring.events.{$event}", 0);
        $lead = LeadScore::firstOrCreate(
            ['session_id' => $sessionId],
            ['user_id' => $userId, 'score_breakdown' => []]
        );
        if ($userId && !$lead->user_id) {
            $lead->update(['user_id' => $userId]);
        }
        if (!empty($metadata['email']) && !$lead->email) {
            $lead->update(['email' => $metadata['email']]);
        }
        $onceEvents = ['demo_requested', 'free_trial_started', 'contact_form_submitted'];
        if (in_array($event, $onceEvents)) {
            if (LeadEvent::where('lead_score_id', $lead->id)->where('event', $event)->exists()) {
                return $lead;
            }
        }
        LeadEvent::create([
            'lead_score_id' => $lead->id,
            'event' => $event,
            'points' => $points,
            'metadata' => $metadata,
        ]);
        $breakdown = $lead->score_breakdown ?? [];
        $breakdown[$event] = ($breakdown[$event] ?? 0) + $points;
        $newScore = $lead->score + $points;
        $newStage = $this->calculateStage($newScore);
        $lead->update([
            'score' => $newScore,
            'score_breakdown' => $breakdown,
            'stage' => $newStage,
        ]);
        $thresholds = config('lead_scoring.thresholds');
        $prevStage = $this->calculateStage($lead->score - $points);
        if ($newStage !== $prevStage) {
            $this->onStageChange($lead, $prevStage, $newStage);
        }
        return $lead->fresh();
    }
    private function calculateStage(int $score): string {
        $thresholds = config('lead_scoring.thresholds');
        if ($score >= $thresholds['sql']) return 'sql';
        if ($score >= $thresholds['mql']) return 'mql';
        if ($score >= $thresholds['hot']) return 'hot';
        if ($score >= $thresholds['warm']) return 'warm';
        return 'cold';
    }
    private function onStageChange(LeadScore $lead, string $from, string $to): void {
        Log::info("Lead stage change: {$from} → {$to}", ['lead_id' => $lead->id, 'score' => $lead->score]);
        if ($to === 'mql') {
            $lead->update(['mql_reached_at' => now()]);
            SyncLeadToCrm::dispatch($lead);
            Notification::route('slack', '#leads-hot')
                ->notify(new MqlReachedNotification($lead));
        }
        if ($to === 'sql') {
            $lead->update(['qualified_at' => now()]);
            $salesManager = User::salesManager()->inRandomOrder()->first();
            $salesManager?->notify(new SqlLeadAssigned($lead));
        }
    }
}

Відстеження подій на фронтенді

class LeadTracker {
  private sessionId: string;

  constructor() {
    this.sessionId = sessionStorage.getItem('ls_session') || this.generateId();
    sessionStorage.setItem('ls_session', this.sessionId);
  }

  async track(event: string, metadata: Record<string, any> = {}): Promise<void> {
    try {
      await fetch('/api/lead-score/track', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          session_id: this.sessionId,
          event,
          metadata: {
            ...metadata,
            page: window.location.pathname
          },
        }),
      });
    } catch (e) {
      // Не блокуємо UI при помилці трекінгу
    }
  }

  private generateId(): string {
    return Date.now().toString(36) + Math.random().toString(36).substr(2);
  }
}

export const tracker = new LeadTracker();

Dashboard для менеджерів

SELECT ls.email, ls.score, ls.stage, ls.mql_reached_at, COUNT(le.id) AS events_count, MAX(le.created_at) AS last_activity
FROM lead_scores ls
JOIN lead_events le ON le.lead_score_id = ls.id
WHERE ls.stage IN ('mql', 'sql', 'hot') AND ls.mql_reached_at >= now() - interval '7 days'
GROUP BY ls.id, ls.email, ls.score, ls.stage, ls.mql_reached_at
ORDER BY ls.score DESC;

Що входить у розробку під ключ

  • Конфігурована система скорингу з 20+ подіями (можна змінювати без програміста).
  • Трекінг на фронтенді без втрати продуктивності (асинхронний fetch, не блокує UI).
  • Автоматична передача лідів у популярні CRM (AmoCRM, Bitrix24, Salesforce) при досягненні MQL.
  • Дашборд для менеджерів із фільтрацією за стадіями та підсвічуванням гарячих лідів.
  • Документація з правил скорингу та інструкція для маркетологів.
  • Техпідтримка 30 днів після запуску.

Як відбувається впровадження

  1. Аналітика: збираємо ваші поточні критерії кваліфікації та типовий шлях клієнта.
  2. Проектування: налаштовуємо ваги подій, пороги стадій, інтеграції.
  3. Реалізація: пишемо backend і frontend, підключаємо CRM через API.
  4. Тестування: перевіряємо коректність скорингу на історичних даних.
  5. Запуск: деплой та навчання команди.

Строки та вартість

Строки — від 8 до 14 робочих днів залежно від складності CRM та кількості кастомних подій. Вартість впровадження визначається після аналізу ваших потреб та інтеграцій. Наш досвід понад 5 років у B2B-розробці дозволяє гарантувати точність скорингу на рівні 95%. Бюджет на розробку починається від $3,000. Економія на ручній кваліфікації може сягати $15,000 на рік. Ми сертифіковані інтегратори AmoCRM та Bitrix24.

Типові помилки при реалізації lead scoring

  • Зараховувати одну й ту саму подію багаторазово (потрібен флаг once-подій).
  • Ігнорувати негативні сигнали — лід може бути холодним, навіть якщо багато клікає.
  • Не оновлювати пороги з часом — поведінка аудиторії змінюється, правила потрібно адаптувати.

Отримайте консультацію з налаштування lead scoring — оцінимо ваш проєкт. Наша система lead scoring (оцінка лідів) на сайті включає поведінковий скоринг, автоматизацію кваліфікації лідів та інтеграцію з CRM, що дозволяє ефективно відстежувати MQL і SQL через трекінг подій. Це рішення ідеально для B2B-компаній, які потребують точного скорингу лідів. Система підвищує ефективність продажів у 3 рази порівняно з ручною кваліфікацією.

Lead scoring — методика, описана в Wikipedia.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060