Реализация Look-alike аудиторий на основе данных сайта

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

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

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Реализация Look-alike аудиторий на основе данных сайта
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы

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

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Построение lookalike-аудиторий на основе данных сайта

Lookalike-аудитории — рекламные сегменты, похожие на ваших лучших клиентов. Строятся на основе данных о конверсиях с сайта и загружаются в рекламные системы (Meta, VK, Яндекс) для поиска похожих пользователей.

Источники данных для lookalike

Качественные seed-аудитории дают лучший результат:

Сегмент Размер (min) Качество
Покупатели за 90 дней 500–1000 Очень высокое
Пользователи с LTV > N 500 Высокое
Завершившие trial → платный 300 Высокое
Просмотревшие ключевые страницы 1000+ Среднее
Все зарегистрированные 5000+ Низкое

Подготовка и хэширование данных

Перед загрузкой в рекламные системы email и телефоны должны быть захэшированы (SHA-256):

class AudienceExporter
{
    public function exportHighValueCustomers(): array
    {
        return User::query()
            ->join('orders', 'orders.user_id', '=', 'users.id')
            ->where('orders.status', 'completed')
            ->where('orders.created_at', '>=', now()->subDays(90))
            ->groupBy('users.id', 'users.email', 'users.phone')
            ->havingRaw('SUM(orders.total) >= ?', [5000])
            ->get(['users.email', 'users.phone'])
            ->map(fn($user) => [
                'email'       => hash('sha256', strtolower(trim($user->email))),
                'phone'       => $user->phone ? hash('sha256', $this->normalizePhone($user->phone)) : null,
            ])
            ->toArray();
    }

    private function normalizePhone(string $phone): string
    {
        // Приводим к формату E.164: +79991234567
        $digits = preg_replace('/\D/', '', $phone);
        if (strlen($digits) === 10) $digits = '7' . $digits;
        return '+' . $digits;
    }

    public function exportToCsv(array $data, string $filename): string
    {
        $path = storage_path("app/audiences/{$filename}.csv");
        $fp   = fopen($path, 'w');
        fputcsv($fp, ['email', 'phone']);
        foreach ($data as $row) {
            fputcsv($fp, [$row['email'], $row['phone'] ?? '']);
        }
        fclose($fp);
        return $path;
    }
}

Загрузка в Meta (Facebook/Instagram) через API

class MetaAudienceService
{
    private const API_VERSION = 'v19.0';
    private string $accessToken;
    private string $adAccountId;

    public function createCustomAudience(string $name, string $description): string
    {
        $response = Http::post(
            "https://graph.facebook.com/{$this->API_VERSION}/act_{$this->adAccountId}/customaudiences",
            [
                'name'         => $name,
                'subtype'      => 'CUSTOM',
                'description'  => $description,
                'customer_file_source' => 'USER_PROVIDED_ONLY',
                'access_token' => $this->accessToken,
            ]
        );

        return $response->json('id');
    }

    public function uploadUsers(string $audienceId, array $hashedEmails): void
    {
        // Meta принимает батчи по 10000 записей
        foreach (array_chunk($hashedEmails, 10000) as $chunk) {
            $payload = [
                'schema' => ['EMAIL_SHA256'],
                'data'   => array_map(fn($email) => [$email], $chunk),
            ];

            Http::post(
                "https://graph.facebook.com/{$this->API_VERSION}/{$audienceId}/users",
                [
                    'payload'      => json_encode($payload),
                    'access_token' => $this->accessToken,
                ]
            );
        }
    }

    public function createLookalike(string $sourceAudienceId, string $country, float $ratio = 0.01): string
    {
        // ratio: 0.01 = 1% (самые похожие), 0.10 = 10% (менее похожие, но больше)
        $response = Http::post(
            "https://graph.facebook.com/{$this->API_VERSION}/act_{$this->adAccountId}/customaudiences",
            [
                'name'           => "Lookalike {$country} {$ratio}",
                'subtype'        => 'LOOKALIKE',
                'origin_audience_id' => $sourceAudienceId,
                'lookalike_spec'  => json_encode([
                    'type'     => 'similarity',
                    'country'  => $country,
                    'ratio'    => $ratio,
                ]),
                'access_token'   => $this->accessToken,
            ]
        );

        return $response->json('id');
    }
}

Загрузка в VK Ads

class VkAudienceService
{
    public function uploadToRetargeting(string $name, array $hashedEmails): int
    {
        // VK принимает email или телефоны в открытом виде (хэширует сам)
        // или в виде SHA-256 с префиксом
        $content = implode("\n", $hashedEmails);

        $response = Http::withToken($this->token)
            ->post('https://api.vk.com/method/ads.createTargetGroup', [
                'account_id' => $this->accountId,
                'name'       => $name,
                'v'          => '5.199',
            ]);

        $groupId = $response->json('response.id');

        // Загружаем данные
        Http::withToken($this->token)
            ->post('https://api.vk.com/method/ads.importTargetContacts', [
                'account_id' => $this->accountId,
                'target_group_id' => $groupId,
                'contacts'   => $content,
                'v'          => '5.199',
            ]);

        return $groupId;
    }
}

Автоматическое обновление аудиторий

// Еженедельное обновление через Scheduler
class UpdateLookalikeAudiences implements ShouldQueue
{
    public function handle(): void
    {
        $exporter = app(AudienceExporter::class);
        $data     = $exporter->exportHighValueCustomers();
        $emails   = array_column($data, 'email');

        // Обновляем в Meta
        app(MetaAudienceService::class)->uploadUsers(
            config('ads.meta.buyer_audience_id'),
            $emails
        );

        Log::info("Lookalike audience updated", ['count' => count($emails)]);
    }
}

Сроки

Система экспорта аудиторий с хэшированием и автоматическим обновлением в Meta/VK: 4–6 рабочих дней.