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

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

Пошаговый гайд: от выгрузки CSV до импорта чистой базы в рассыльщик. Дедупликация, нормализация, валидация и проверка через Max Checker.

Иллюстрация очистки базы телефонных номеров
29 апреля 2026 г.Max Checker TeamЧтение · 4 минГайды

База на 100 000 номеров — это типичный объём для среднего B2B-кампейна или ре-активации старой клиентской базы. Если запустить рассылку в MAX по такой базе «как есть», 15–35% сообщений уйдут в пустоту: на отключённые номера, на людей без MAX и на дубликаты, которые уже получили сообщение часом раньше.

Эта статья — пошаговая методология: от выгрузки CSV до момента, когда вы нажимаете «Старт» в рассыльщике с уверенностью, что каждый рубль бюджета бьёт в живую цель.

TL;DR

  • 7 шагов: экспорт → нормализация → дедупликация → форматная валидация → проверка существования через Max Checker → фильтрация → импорт обратно
  • Время на 100k номеров: 30–60 минут вместо нескольких рабочих дней
  • Стоимость проверки 100k: ~$700 со скидкой 30% (тариф $0.01/номер)
  • Типичная экономия бюджета на рассылке: 15–35% от исходного списка
  • Главные ошибки: пропуск нормализации до дедупликации и проверка «постфактум» уже после первой волны рассылки
Проверь свою базу за минуту
$0.01/номер · скидки от 10% до 60%
Открыть бота →

Шаг 1. Экспорт исходной базы в CSV

Откуда бы ни приходила база — CRM, рекламный кабинет, Excel от партнёра, парсинг публичных каналов — приведите всё к одному формату: CSV в кодировке UTF-8 с BOM, разделитель ,. Колонки минимум две: phone и любой стабильный идентификатор для последующего объединения (например, crm_id или email).

Если база лежит в Excel, не экспортируйте её через «Сохранить как CSV» — Excel калечит длинные числа в научную нотацию, и +79161234567 превращается в 7.9161E+10. Сначала переведите колонку phone в текстовый формат, затем сохраняйте.

Шаг 2. Нормализация в формат E.164

E.164 — международный стандарт записи телефонных номеров: + плюс код страны и сам номер, без пробелов, скобок и дефисов. Подробности — в Wikipedia: E.164.

Минимально достаточный регекс для российских номеров:

import re

def normalize_ru(raw: str) -> str | None:
    digits = re.sub(r'\D', '', raw or '')
    if not digits:
        return None
    if digits.startswith('8') and len(digits) == 11:
        digits = '7' + digits[1:]
    if digits.startswith('7') and len(digits) == 11:
        return '+' + digits
    if len(digits) == 10:
        return '+7' + digits
    return None  # подозрительный — на ручной просмотр

Ключевая ошибка, которую делают 9 из 10 команд: дедуплицируют до нормализации. Тогда 8 (916) 123-45-67 и +79161234567 считаются разными записями. Сначала нормализуем, потом дедуплицируем — не наоборот.

Шаг 3. Дедупликация

После нормализации дубликаты находятся одной строкой. На bash:

sort -t, -k1,1 raw.csv | awk -F, '!seen[$1]++' > dedup.csv

На pandas:

import pandas as pd
df = pd.read_csv('raw.csv', dtype={'phone': str})
df['phone'] = df['phone'].map(normalize_ru)
df = df.dropna(subset=['phone']).drop_duplicates(subset=['phone'])

На объёме 100k обычно теряется 3–8% записей. Если у вас 15%+ дубликатов — это сигнал, что в исходной базе склеены несколько источников, и стоит сохранить колонку source, чтобы понимать, откуда пришёл каждый номер.

Шаг 4. Форматная валидация

Не всё, что после нормализации выглядит как номер, — реальный номер. Стоит проверить:

  • длину (для +7 ровно 12 символов)
  • что код мобильного оператора попадает в действующий диапазон (Россвязь публикует ресурсы)
  • что номер не из служебных диапазонов (горячие линии, короткие номера)

Эта валидация бесплатная и отрезает 1–3% откровенного мусора, который иначе вы оплатили бы при проверке существования.

Шаг 5. Проверка существования через Max Checker

Это ключевой шаг — отделить «номер существует в формате» от «номер зарегистрирован в MAX и доступен для рассылки». Подробнее о механике — в Как это работает.

Вы получаете на выходе CSV с тремя статусами на номер:

СтатусЧто значитЧто делать
registeredАккаунт MAX существует, рассылка возможнаВ отправку
not_foundНомера нет в MAXИсключить из рассылки в MAX
unknownСервер не дал однозначного ответа (редко, <0.5%)Перепроверить или исключить

Стоимость на 100k со скидкой 30% (порог $500) — $700. Если делаете кампанию каждый месяц и совокупно превышаете 200k — выгоднее закинуть $2000 и получить тариф 40% (см. тарифы).

Проверь свою базу за минуту
$0.01/номер · скидки от 10% до 60%
🤖 Открыть бота и проверить базу

Шаг 6. Фильтрация и сегментация

После Max Checker оставляйте только registered. Дополнительно сегментируйте по полям, которые вернул чекер (имя, фамилия, server ID — читайте подробнее про server ID):

  • персонализация по имени поднимает CTR в среднем на 12–18%
  • наличие фамилии — сигнал «реального» аккаунта, такие конверсятся лучше
  • одинаковый server ID у группы номеров часто означает корпоративный пул — обращение «вы» вместо «ты» уместнее

Шаг 7. Импорт обратно в рассыльщик

Финальный CSV должен быть чистым: одна колонка phone в E.164, плюс поля для персонализации. Перед импортом проверьте:

  • кодировка UTF-8 (без BOM, если рассыльщик старый)
  • разделитель совпадает с тем, что ждёт инструмент
  • нет пустых строк в конце файла (типичный артефакт Excel)

Чек-лист перед запуском

  1. Все номера в E.164 (+7…)
  2. 0 дубликатов по нормализованному номеру
  3. Только статус registered
  4. Поля персонализации заполнены минимум на 70% базы
  5. Тестовый прогон на 100 номерах — все доставлены
  6. Согласие на рассылку зафиксировано (см. 152-ФЗ и проверка номеров)

Расчёт ROI

Допустим, на исходных 100k у вас была бы конверсия 0.8% при цене сообщения $0.005 (рассыльщик) + штраф репутации.

СценарийДоставленоКонверсияЛидовСтоимость
Без чистки65 0000.6%390$500 + риск блокировки
С Max Checker78 0001.1%858$1200, в т.ч. $700 чекер

Прирост лидов в 2.2 раза при росте бюджета в 2.4 раза — но с гораздо более стабильной репутацией отправителя. На длинной дистанции это важнее одной конкретной кампании.

Частые вопросы

01.Сколько стоит проверить базу из 100 000 номеров?

При тарифе $0.01 за номер базовая стоимость $1000. С учётом скидки 30% от $500 итог $700. На объёме 100k экономия достигает $300, а время проверки сокращается с десятков часов ручного труда до 30–60 минут автоматики.

02.Можно ли проверять базу с уже хешированными номерами?

Нет. Чекеру нужен номер в формате E.164 (например, +79161234567). Если у вас MD5/SHA-256 хеши, их сначала придётся восстановить или использовать словарь обратного соответствия — иначе проверка невозможна по определению.

03.Что делать с дубликатами при объединении нескольких выгрузок?

Сначала привести все номера к E.164, затем сделать дедупликацию по нормализованному номеру (а не по сырой строке). На больших объёмах используйте sort -u или pandas drop_duplicates: иначе пропустите номера, отличающиеся пробелом или дефисом.

04.Чем грозит рассылка без предварительной валидации?

Высокий процент недоставленных сообщений → антиспам-фильтры мессенджера понижают репутацию аккаунта или зеркала. На длинной дистанции это удорожает каждый успешный контакт в разы и может привести к блокировке отправителя.

ПоделитьсяTelegramX

Читать дальше

Похожие материалы.

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