Маркетолог может найти в TikTok видео, автор которого обсуждает нужный продукт, но перейти от такого сигнала к проверяемому контакту сложнее: имя автора в TikTok и имя в IG могут различаться, а профиль может оказаться закрытым или вообще не иметь подтверждённой связи с человеком. Практичный результат — не автоматический список «готовых лидов», а таблица проверок: исходное видео, автор TikTok, предполагаемый IG username, ответ API и статус для дальнейшего разбора.
Ниже — минимальный Python-процесс для этой задачи. Он ищет публичные видео по ключевой фразе, извлекает доступные поля автора и проверяет IG-профили, только если у вас уже есть обоснованное имя пользователя для проверки. API может получить данные профиля по username; он не устанавливает автоматически, что два аккаунта принадлежат одному человеку.
Какой результат стоит автоматизировать
Представьте команду, которая продаёт оборудование для домашнего кофе и хочет находить авторов публичных роликов о приготовлении напитков. Ручной поиск полезен для первичного знакомства с контентом, но при повторении трудно сохранить, какой ролик привёл к контакту, откуда взялось имя профиля и что именно было проверено.

Пайплайн разделяет три действия: поиск видео в TikTok, сохранение наблюдаемых данных и проверку предполагаемого IG-профиля. Это помогает аналитику открыть один CSV-файл и увидеть цепочку происхождения каждого кандидата. Поля для IG следует заполнять лишь после того, как username найден в публичном описании, ссылке автора или проверен человеком по другим доступным материалам.
Такой способ полезен для агентства, исследовательской команды или внутреннего маркетолога, которому нужен небольшой воспроизводимый список для ручной квалификации. Он сохраняет контекст находки и не превращает похожие имена в утверждение об идентичности.
Какие поля можно получить
Документированный маршрут TikTok /searchVideo принимает обязательный параметр keyword; также доступны count, date_posted, sort_by, region и cursor. В наблюдавшихся ответах встречаются идентификатор ролика, описание, дата публикации, ссылка, данные автора и публичные счётчики взаимодействий. Фактический набор полей может различаться, поэтому код ниже использует безопасное чтение с пустыми значениями.
Для IG в этом сценарии применяется документированный GET-маршрут /v1/user/by/username с параметром username. В ответе могут быть username, отображаемое имя, статус приватности и верификации, число публикаций, подписчиков и подписок, а также биография. Это сведения для просмотра и дальнейшего решения специалистом, а не рейтинг автора.
Официальная документация TikTok API описывает параметры поиска, а документация IG API — методы и параметры IG. Встроенные определения API jsonscraper также фиксируют маршруты, имена параметров и наблюдавшиеся формы ответов; дата приведённых проверок — 25 октября 2026 года.
Настройте ключи и список кандидатов
Сохраните ключи API в переменных окружения: JSONSCRAPER_TIKTOK_LICENSE_KEY и JSONSCRAPER_INSTAGRAM_LICENSE_KEY. Не помещайте их в исходный код, CSV или журналы задач. Для установки библиотеки запросов используйте python -m pip install requests. Следующий пример рассчитан на Python 3.8 и новее.
import csv
import os
import sys
from urllib.parse import urlencode
import requests
TIKTOK_KEY = os.environ.get("JSONSCRAPER_TIKTOK_LICENSE_KEY")
INSTAGRAM_KEY = os.environ.get("JSONSCRAPER_INSTAGRAM_LICENSE_KEY")
if not TIKTOK_KEY or not INSTAGRAM_KEY:
sys.exit("Set JSONSCRAPER_TIKTOK_LICENSE_KEY and JSONSCRAPER_INSTAGRAM_LICENSE_KEY")
def get_json(base_url, path, params):
response = requests.get(
f"{base_url}{path}",
params=params,
timeout=30,
)
response.raise_for_status()
return response.json()
def extract_videos(payload):
"""Handle both observed TikTok search result locations."""
if payload.get("status") != "ok":
raise RuntimeError(f"TikTok API status: {payload.get('status')}")
tiktok = payload.get("tiktok") or {}
videos = list(tiktok.get("aweme_list") or [])
for item in tiktok.get("search_item_list") or []:
video = item.get("aweme_info")
if video:
videos.append(video)
unique = {}
for video in videos:
video_id = video.get("aweme_id")
if video_id:
unique[video_id] = video
return list(unique.values())
keyword = "домашний кофе"
tiktok_payload = get_json(
"https://tiktok.evelode.com",
"/searchVideo",
{
"license_key": TIKTOK_KEY,
"keyword": keyword,
"count": 20,
"date_posted": "this-month",
"sort_by": "relevance",
},
)
rows = []
for video in extract_videos(tiktok_payload):
author = video.get("author") or {}
stats = video.get("statistics") or {}
rows.append({
"tiktok_video_id": video.get("aweme_id", ""),
"tiktok_url": video.get("share_url", ""),
"video_description": video.get("desc", ""),
"created_at": video.get("create_time", ""),
"tiktok_username": author.get("unique_id", ""),
"tiktok_author_name": author.get("nickname", ""),
"tiktok_followers": author.get("follower_count", ""),
"views": stats.get("play_count", ""),
"likes": stats.get("digg_count", ""),
"instagram_username": "",
"instagram_status": "not checked",
"instagram_followers": "",
"instagram_is_private": "",
"manual_match_review": "required",
})
# Заполняйте этот словарь только username, найденными отдельно
# и внесёнными после ручной проверки источника.
verified_instagram_usernames = {
# "tiktok_video_id": "instagram_username"
}
for row in rows:
username = verified_instagram_usernames.get(row["tiktok_video_id"])
if not username:
continue
ig_payload = get_json(
"https://ig.jsonscraper.com",
"/v1/user/by/username",
{
"license_key": INSTAGRAM_KEY,
"username": username,
},
)
if ig_payload.get("status") != "ok":
row["instagram_status"] = "api status: " + str(ig_payload.get("status"))
continue
profile = ig_payload.get("ig") or {}
row["instagram_username"] = profile.get("username", username)
row["instagram_status"] = "profile returned"
row["instagram_followers"] = profile.get("follower_count", "")
row["instagram_is_private"] = profile.get("is_private", "")
row["manual_match_review"] = "check relationship manually"
if rows:
with open("social_lead_checks.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=rows[0].keys())
writer.writeheader()
writer.writerows(rows)
else:
print("No video rows returned for this query.")
Почему обработчик учитывает две структуры ответа
Для поиска TikTok встречаются два места с видео: tiktok.aweme_list и tiktok.search_item_list[].aweme_info. В наблюдавшемся ответе поиска первый список мог быть пустым, тогда как элементы находились во втором. Поэтому пример объединяет оба источника и устраняет повторения по aweme_id. Он сначала проверяет внешний status, затем читает объект tiktok.

Код сохраняет только поля, реально присутствующие в ответе. Пустое значение означает, что поле отсутствовало в полученном объекте; его нельзя трактовать как нулевой показатель. Ссылки и описания роликов полезно сохранять вместе с метриками: иначе при последующем просмотре таблица теряет исходный контекст.
Добавьте пагинацию только при необходимости
Пример запрашивает одну страницу и обрабатывает только вернувшиеся элементы. Если требуется продолжить поиск, документация предусматривает cursor для поиска видео; значение берётся из предыдущего ответа. Сохраняйте cursor как непрозрачное значение и передавайте его без самостоятельных вычислений. Останавливайте цикл, когда ответ сообщает, что продолжения нет, либо когда достигнут установленный командой предел. Пагинация расширяет набор возвращённых результатов, но не даёт основания называть его исчерпывающим охватом всех публикаций по теме.
Перед добавлением автоматической выгрузки проверьте реальный ответ на своём ключе и выберите умеренный объём страниц. Храните исходный JSON рядом с нормализованной строкой или отдельно по дате запуска: это позволит выяснить, изменилось ли поле ответа, и повторно обработать сбор при изменении схемы.
Как использовать CSV в квалификации
В таблице можно фильтровать строки по наличию ссылки на видео, описанию, автору и заполненному IG-профилю. Для первой очереди проверки полезны простые статусы: «найден ролик», «username IG найден», «профиль возвращён», «связь аккаунтов проверена человеком» и «исключён». Статусы описывают ход проверки, а не качество или намерение автора.
Если задача требует повторяемого отчёта, запускайте скрипт по расписанию и добавляйте дату получения данных отдельной колонкой. Сравнение снимков тогда покажет, что именно изменилось между запусками в доступных полях, например в числе подписчиков профиля. Показатели TikTok и IG следует хранить раздельно, с указанием платформы и времени наблюдения: это разные контексты и разные ответы API.
Для более крупного потока замените CSV на базу данных с первичным ключом по платформе и ID ролика. Сохраните исходный текстовый запрос, время сбора и необработанный ответ. Уведомление в Slack или передачу строки в CRM лучше выполнять после ручного подтверждения связи профилей, а не сразу после совпадения имени.
Границы интерпретации и безопасная эксплуатация
Поиск по ключевой фразе возвращает найденные API результаты, а не полный перечень публикаций. Число просмотров, лайков и подписчиков — снимок ответа в момент запроса. Оно подходит для сортировки рабочего списка и последующей проверки, но само по себе не подтверждает коммерческое намерение, аудиторию или согласие на контакт.
Связь профилей подтверждайте по явным публичным признакам и фиксируйте, кто и когда провёл проверку. Если IG username получен из сторонней таблицы без подтверждаемого источника, оставьте статус «требует проверки». Закрытый профиль или отсутствующие данные должны отображаться как отдельный результат проверки, без попыток заполнить пробел предположением.
Используйте ключи в секрет-хранилище рабочего окружения, ограничьте доступ к экспортам и установите срок хранения, соответствующий цели исследования. В CRM передавайте только поля, необходимые для дальнейшей ручной работы, и соблюдайте применимые правила платформ и требования к обработке данных.
Что получится в итоге
После запуска появится CSV со списком найденных роликов, авторами и доступными метриками, а также отдельными полями проверки IG. Скрипт можно запускать вручную, по расписанию в CI или через узел HTTP-запроса в платформе автоматизации. Ключевой практический принцип — автоматизировать сбор и структуру данных, оставив установление связи между аккаунтами проверяемым шагом человека.
Для проверки маршрутов и доступных параметров начните с TikTok Scraper API и IG Scraper API. На страницах продуктов доступны примеры запросов и переходы к документации; начните с небольшого запроса, прежде чем встраивать сбор в постоянный процесс.