Робочі рецепти для розробників і тих, хто будує автоматизації. Кожен допис містить конкретну конфігурацію, воркфлоу або скрипт для API Cold Leads і вказує ліміти та вартість у кредитах. Для API потрібен секретний ключ тарифу Business.
Адреси, ідентифікатори та результати в прикладах ілюстративні. Домен example.com зарезервовано для документації, тож реальна перевірка цих адрес поверне invalid.
Розробники, які користуються AI-асистентами в Cursor, Claude Desktop або Windsurf5 хв читання
Копіювати адреси між асистентом, CRM та інструментом перевірки довго, і легко помилитися, а асистент, якого просять знайти контакти, охоче вигадає їх сам.
Підключений асистент керує вашими контактами, імпортує структуровані рядки, читає синхронізовані розмови, редагує шаблони й чернетки кампаній та створює веб-форми. Надсилання потребує явного підтвердження користувача та підлягає перевіркам згоди, відписки, DNC і лімітів Cold Leads.
Що ви отримаєте: Асистент, підключений до ваших контактів, пошти й чернеток кампаній через MCP або Node SDK.
Викликати API перевірки окремо для кожного рядка повільно, і так швидко впираєшся в ліміти запитів, а масовому API потрібні завдання, цикл опитування та надійний спосіб зіставити результати з потрібними рядками.
Один workflow бере до 5 000 рядків, які ще не мають результату, надсилає їхні унікальні адреси одним масовим завданням Cold Leads, опитує завдання кожні 5 секунд, отримує результати, спрямовує кожен рядок за статусом і записує в таблицю статус, оцінку, причину та наступний крок. Запустіть його знову для наступних 5 000.
Що ви отримаєте: Чотири заповнені колонки в кожному рядку (verify_status, verify_score, verify_reason, next_step) і workflow, який можна запускати знову, доки не буде оброблено всю таблицю.
Адреси, яких ніхто не перевіряв, потрапляють просто в кампанію розсилки. Невалідні повертаються з відмовою, а відмови шкодять скринькам, з яких надсилається кампанія.
Додайте перевірку Cold Leads між тригером і Instantly: один HTTP-запит на ліда, фільтр, який пропускає лише результати valid, і другий HTTP-запит, що додає ліда у вашу кампанію через Instantly API v2.
Що ви отримаєте: Робочий сценарій Make: новий лід, перевірка Cold Leads, фільтр, лід доданий у кампанію Instantly. Ліди, що не пройшли фільтр, зупиняються на ньому або потрапляють в аркуш для перегляду.
Модуль Cold Leads, Body content
{
"email": "{{map the e-mail field of the trigger here}}",
"timeout_ms": 10000
}
Перевіряти по одній адресі за запит повільно, і так ви впираєтеся в ліміт запитів. Наївний масовий цикл може відкрити більше завдань, ніж дозволяє акаунт, заплатити двічі після збою або непомітно загубити рядки, результати яких так і не повернулися.
Нормалізуйте колонку й приберіть дублікати, надсилайте масові завдання до 5 000 адрес, тримайте відкритими не більше п’яти, опитуйте кожне завдання до кінця, перечікуйте ліміти запитів, коректно зупиняйтеся, коли закінчуються кредити, і зберігайте id завдань, щоб повторний запуск продовжував роботу, а не платив знову.
Що ви отримаєте: Ваш CSV із трьома новими колонками (verify_status, verify_score, verify_reason) і невеликий файл .jobs.json, завдяки якому запуск можна продовжити.
verify_csv.py
"""Verify a large CSV with the Cold Leads bulk API (Python 3.9+, httpx).
pip install httpx
export COLDLEADS_API_KEY=sk_...
python verify_csv.py leads.csv leads_verified.csv --column email
Addresses are normalised and de-duplicated, sent in jobs of up to 5,000 with at most
5 jobs open at a time, and every job is polled until it is done. The output is the
input CSV plus verify_status, verify_score and verify_reason. Job ids are saved next
to the output file, so a second run resumes the same jobs instead of paying twice.
Код перевірки повний параметрів і значень статусу, специфічних для постачальника. Якщо замінити ендпоінт, не зіставивши їх, непомітно зміниться те, на які адреси надсилає ваш конвеєр.
Зіставте кожен параметр і поле відповіді з відповідником у Cold Leads, залиште на місці те, чого Cold Leads не замінює (дані про людей, пошук за доменом), і скористайтеся невеликим адаптером, щоб наявний код зберіг свою форму.
Що ви отримаєте: Зіставлення поле за полем, Python-адаптер, який повертає поля в стилі Hunter із даних Cold Leads, і таблиця вартості Cold Leads для 1 000, 10 000 і 50 000 перевірок на місяць.
hunter_adapter.py
# pip install httpx
# Drop-in helpers for code written against Hunter's email-verifier and email-finder.
# They call Cold Leads and return Hunter-style fields, plus the raw Cold Leads answer.
import os
import httpx
cold = httpx.Client(
base_url="https://coldleads.app/api/v1",
headers={"x-api-key": os.environ["COLDLEADS_API_KEY"]}, # the key goes in a header, never in the URL
Агент, якому потрібна перевірка e-mail, ніколи не повинен мати платіжної картки чи оформлювати підписку сам. Якщо відправити людину реєструватися, обирати тариф і копіювати ключ, завдання переривається, а ключі, вставлені в чат, витікають.
Агент викликає один ендпоінт без ключа й отримує посилання Stripe Checkout для свого власника та секретний claim-токен. Власник переглядає тариф і ухвалює рішення. Після оплати агент рівно один раз отримує API-ключ за claim-токеном — через опитування або після підписаного callback-запиту.
Що ви отримаєте: Робочий секретний API-ключ для нового акаунта Business власника, переданий агентові один раз, і лист власникові з посиланням, яке відкриває веб-застосунок Cold Leads.
Деякі поштові сервери приймають пошту для будь-якої адреси на своєму домені, тож перевірка скриньки не відрізнить справжню людину від вигаданого імені. Інші сервери дають лише тимчасові відповіді або взагалі недосяжні, а сама мітка valid може приховати те, що скриньку так і не перевірили.
Розберіться, який SMTP-діалог веде сервіс перевірки і що означає кожна відповідь, а потім читайте статус, оцінку й коди причин, які повертає Cold Leads, зокрема у випадках, коли перевірка скриньки не виконувалася.
Що ви отримаєте: Таблиця рішень, що зіставляє кожен код причини Cold Leads із дією, і скрипт, який застосовує її до однієї адреси.
Дві SMTP-сесії (ілюстрація)
# Session 1: is the address accepted?
S: 220 mx1.example.com ESMTP
C: EHLO verifier.example.net
S: 250-mx1.example.com
S: 250 SIZE 52428800
C: MAIL FROM:<check@verifier.example.net>
S: 250 2.1.0 Sender OK
C: RCPT TO:<anna@example.com>
S: 250 2.1.5 Recipient OK <- accepted (a 550 here would mean: rejected)
C: QUIT <- no DATA command: nothing is delivered
У цьому рецепті
SMTP-діалог, що стоїть за перевіркою скриньки
Коди відповідей і висновки, які з них можна зробити
Перевірка accept-all, грейлістинг та інші обмеження
Що повертає Cold Leads і коли перевірка не виконувалася
Контакти надходять із форм, імпортів і ручного введення з помилками, мертвими доменами або взагалі без адреси, і ніхто їх не перевіряє, доки кампанія не почне отримувати відмови.
Перевіряйте кожен контакт у момент створення: дією Custom code у workflow HubSpot або невеликим приймачем вебхуків для Pipedrive. Контакт з e-mail перевіряється; контакт без нього, але з іменем і сайтом компанії, отримує запропоновану адресу, чітко позначену як припущення.
Що ви отримаєте: Властивості контакту в HubSpot або поля особи в Pipedrive, які показують статус, оцінку й причину від Cold Leads або запропоновану адресу з її методом і впевненістю.
Custom code (Node.js)
// HubSpot workflow, Custom code action (Node.js)
// Secret: COLDLEADS_API_KEY (your Cold Leads secret key, sk_...)
// Properties to include in code: email, firstname, lastname, website
// Data outputs (add them in the action): verify_status, verify_reason, suggested_email, find_method (String);
// verify_score, find_confidence (Number); mailbox_checked (Boolean)
const axios = require("axios");
const coldleads = axios.create({
baseURL: "https://coldleads.app/api/v1",
headers: { "x-api-key": process.env.COLDLEADS_API_KEY },
Агент, якого просять знайти контактні дані, вгадуватиме, а вгадана адреса виглядає точнісінько як справжня. Без інструмента перевірки ні агент, ні людина, яка читає його відповідь, не відрізнить одну від іншої.
Дайте агентові три вузькі інструменти на основі API Cold Leads: пошук у власній CRM користувача, перевірку адреси та припущення адреси за іменем і доменом із чесною позначкою методу. Помилки повертаються як дані, тож агент може на них реагувати, а не падати.
Що ви отримаєте: Спільний API-клієнт, класи інструментів для CrewAI та LangChain і мінімальні crew та агент, які ними користуються.
coldleads_tools.py
# coldleads_tools.py - shared by the CrewAI and LangChain examples (pip install httpx)
import json
import os
import httpx
VERIFY_DESC = (
"Verify one e-mail address with Cold Leads (costs 1 credit). Returns status valid, risky or invalid, "
"a score from 0 to 100 and reason codes. The last reason says what was checked: ok means a mail server "
"accepted the mailbox, smtp_unreachable means the mailbox itself was not checked, catch_all means the "
Експортувати аркуш в інструмент перевірки й вставляти результати назад — клопітно. Наївна користувацька функція знову викликає API і знову витрачає кредит щоразу, коли Sheets повторно виконує формулу.
Дві користувацькі функції викликають API Cold Leads через UrlFetchApp, читають ключ із властивостей скрипту й зберігають кожну відповідь у кеші скрипту до шести годин, тож повторне виконання тієї самої формули не витрачає ще один кредит на ті самі вхідні дані.
Що ви отримаєте: Три клітинки з результатом у кожному рядку: статус, оцінка й причина від =VERIFY_EMAIL або адреса, метод і впевненість від =FIND_EMAIL.
Code.gs
// Cold Leads custom functions for Google Sheets (Extensions → Apps Script, paste into Code.gs).
// Key: Project Settings → Script Properties → Add script property COLDLEADS_API_KEY = sk_...
const COLDLEADS_API = 'https://coldleads.app/api/v1';
const CACHE_SECONDS = 21600; // 6 hours, the longest CacheService keeps an entry
/**
* Verifies an e-mail address with Cold Leads. Fills three cells: status, score, last reason code.
* Costs 1 Cold Leads credit unless the same address was answered from this script's cache.
*
* @param {string} email The address, for example A2.