Маркетолог може знайти в TikTok відео, автор якого обговорює потрібний продукт, але перейти від такого сигналу до контакту, який можна перевірити, складніше: ім’я автора в TikTok і ім’я в IG можуть відрізнятися, а профіль може бути закритим або взагалі не мати підтвердженого зв’язку з людиною. Практичний результат — не автоматичний список «готових лідів», а таблиця перевірок: вихідне відео, автор TikTok, імовірний username в IG, відповідь 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, а не повний перелік публікацій. Кількість переглядів, уподобань і підписників — це знімок відповіді на момент запиту. Він підходить для сортування робочого списку й подальшої перевірки, але сам по собі не підтверджує комерційних намірів, аудиторії чи згоди на контакт.
Підтверджуйте зв’язок між профілями за явними публічними ознаками й фіксуйте, хто та коли провів перевірку. Якщо username IG отримано зі сторонньої таблиці без джерела, яке можна підтвердити, залиште статус «потребує перевірки». Закритий профіль або відсутні дані мають відображатися як окремий результат перевірки — не намагайтеся заповнити прогалину припущенням.
Зберігайте ключі у сховищі секретів робочого середовища, обмежте доступ до експортованих даних і встановіть строк зберігання відповідно до мети дослідження. Передавайте до CRM лише поля, необхідні для подальшої ручної роботи, та дотримуйтеся чинних правил платформ і вимог щодо обробки даних.
Що отримаєте в результаті
Після запуску з’явиться CSV зі списком знайдених відео, авторами й доступними метриками, а також окремими полями для перевірки IG. Скрипт можна запускати вручну, за розкладом у CI або через вузол HTTP-запиту на платформі автоматизації. Ключовий практичний принцип — автоматизувати збір і структурування даних, а встановлення зв’язку між обліковими записами залишити перевірюваним кроком людини.
Щоб перевірити маршрути й доступні параметри, почніть із TikTok Scraper API та IG Scraper API. На сторінках продуктів доступні приклади запитів і переходи до документації; перш ніж вбудовувати збір у постійний процес, виконайте невеликий запит.