Перейти к содержанию

Гайд

Как очистить базу из 100 000 номеров: пошаговый гайд

Полный workflow от выгрузки CSV до сегментированного отчёта, готового к рассылке. С реальными временами, ROI-расчётом и типовыми ошибками.

Зачем чистить

Что вы получите по итогу

Из набора в 100 000 «сырых» номеров (CSV из 6 разных источников, 8 форматов записи, 12% дублей) вы получите на выходе один файл: phone, isRegistered, firstName, lastName, serverId, bio, source, segment. Готов к импорту в любой messaging-инструмент или CRM.

Время на ход — 1 рабочий день. Стоимость для 100k номеров — порядка $400 без скидки или $160 при пополнении на $2000+. Эта инвестиция окупается уже на первой рассылке: средний кейс по нашим клиентам — снижение CPM на 30–40% и рост CTR на 1.5–2 п.п.

Шаг 1

Сбор источников в один CSV

У большинства команд телефоны разбросаны по 4–8 системам: CRM, Google Sheets, лид-формы Tilda, чекаут e-commerce, выгрузки из колл-центра, VK-таргет. Первая задача — собрать всё в один файл с единой схемой.

Минимальный набор колонок:

  • phone — как есть, не нормализуем на этом этапе.
  • source — ярлык источника (crm, tilda, checkout, …).
  • date_added — для возрастной аналитики базы.
  • tags — список через запятую (опционально).

Если в исходнике есть имя или email — сохраните в колонках raw_name, raw_email. На шаге 5 они пригодятся для cross-check'а с тем, что вернёт MAX.

Шаг 2

Нормализация в E.164

E.164 — международный стандарт телефонных номеров: +<country><subscriber>, без пробелов и скобок. Все остальные форматы (8 800, +7 (495) …, 7-999-…) приводите к нему.

На Python:

import phonenumbers

def normalize(raw, region="RU"):
    try:
        n = phonenumbers.parse(raw, region)
        if not phonenumbers.is_valid_number(n):
            return None
        return phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.E164)
    except Exception:
        return None

Ошибочно нераспознанные — в отдельный файл manual_review.csv. Не пытайтесь «починить» их регулярками: получите грязные данные.

Шаг 3

Дедупликация

После нормализации дедуп тривиален: SELECT phone, MIN(date_added), GROUP_CONCAT(source), GROUP_CONCAT(tags). На типовой 100k базе отсеивается 5–12% дублей. Сохраняйте источник и теги от всех вхождений — это пригодится для сегментации в шаге 6.

Шаг 4

HLR-lookup (опционально)

Если ваш канал — голосовой обзвон, прогоните базу через HLR-провайдера. На 100k это $100–500 и 5 минут. Получите статус SIM (active / inactive / ported / roaming) и удалите inactive до шага 5 — сэкономите бюджет на следующем этапе.

Если канал — рассылка в MAX, шаг 4 можно пропустить: HLR-неактивные могут всё равно иметь живой профиль в MAX, привязанный к старой SIM. Лучше сразу идти к социальной проверке.

Шаг 5

MaxCheck — социальная проверка

Загрузите чистый CSV в Telegram-бот (для разовой задачи) или используйте API:

curl -X POST https://api.checkmaxapp.com/v1/batch \
  -H "Authorization: Bearer mc_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "phones": [...],
    "callback_url": "https://yourapp.com/maxcheck/webhook",
    "format": "csv"
  }'

За 12–18 минут получите CSV с полями phone, registered, firstName, lastName, serverId, bio, checkedAt. Списание идёт только за registered=true — обычно это 50–70% базы.

Шаг 6

Сегментация и обогащение

На выходе разделите контакты на сегменты:

  • Live + имя есть — в основной messaging с персонализацией.
  • Live + имени нет — generic-копи без обращения по имени.
  • Cold (нет в MAX) — переведите в email/web-push.
  • Дубль другого live — выкиньте без жалости.

Импортируйте в свой messaging-инструмент или CRM. Не забудьте сохранить hash phone'а для атрибуции, не сами номера.

Шаг 7

Регулярная дельта-чистка

База быстро деградирует: ~5–8% в месяц теряют валидность (перенос номера, удаление MAX). Поставьте крон: каждые 30 дней — проверка только новых номеров и случайной 10%-выборки из «старых live». Это копейки по бюджету и стабильное качество базы.

Best practices

Что делать всегда

  • Храните только хеш phone'а в аналитике, сами номера — в шифрованном хранилище.
  • Логируйте каждый прогон: дата, объём, результат, источник.
  • Уважайте opt-out: ведите blacklist отдельно от основной базы.
  • Не сливайте «cold» сегмент в маркетинг — это бьёт по репутации отправителя.
  • Тестируйте на 1k перед прогоном 100k — отловите кодировки и BOM.

Ошибки

Что чаще всего ломает workflow

  • Кодировка CSV. Excel любит сохранять в Windows-1251. Принудительно UTF-8.
  • Префикс 8 для РФ. Без region="RU" в libphonenumber вы получите NaN.
  • Лидирующий пробел в номере. trim() обязателен до нормализации.
  • Нулевой timeout на API. Batch может занимать минуты — используйте webhook.
  • Игнор лимита 10k в batch. Бьёт 422; делите на чанки.

FAQ

Частые вопросы по чистке

  • Сколько времени уходит на каждый шаг?
    Сбор источников — 1–2 часа аналитика. Нормализация и дедуп — 30 минут на скрипте. HLR — 5 минут на 100k. MaxCheck — 12–18 минут на 100k. Сегментация — 15 минут. Итого: один рабочий день вместо двух недель ручной чистки.
  • Чем отличается «чистая» база от «грязной» на практике?
    Чистая: одна колонка phone в E.164, без дублей, с пометкой источника и датой добавления. Грязная: десять разных форматов в одной колонке, дубликаты, перепутанные страны, NULL-ы.
  • Что делать с номерами без MAX?
    Не выкидывайте: переведите в email-канал или web-push. Также эти номера можно прогнать через лукапы Telegram/WhatsApp — некоторые из них живут там.
  • Как избежать GDPR/152-ФЗ проблем?
    Храните согласие на обработку и факт legal basis для каждого номера. MaxCheck не подменяет ваш opt-in — он лишь определяет, активен ли профиль в MAX.
  • Можно ли автоматизировать дельта-чистку?
    Да: cron + POST /v1/batch + вебхук в CRM. Шаблон такой автоматизации мы скоро выложим в блог.
  • Какая стоимость на 1 миллион номеров?
    При tier $5000 (60% скидка) и 50% реальных hits — около $2800. Без скидки — около $7000. ROI обычно достигается за один цикл рассылки.

Готовы запустить чистку?

5 проверок бесплатно при регистрации, минимальный депозит $10.

Как очистить базу из 100 000 номеров — пошаговый гайд — MaxCheck