Marketingowiec może znaleźć na TikToku film, którego autor omawia interesujący go produkt, ale przejście od takiego sygnału do zweryfikowanego kontaktu jest trudniejsze: nazwa autora na TikToku może różnić się od tej na IGie, a profil może być prywatny lub nie mieć potwierdzonego związku z daną osobą. Praktycznym wynikiem nie jest automatyczna lista „gotowych leadów”, lecz tabela weryfikacyjna: film źródłowy, autor z TikToka, przypuszczalna nazwa użytkownika na IGie, odpowiedź API i status do dalszej analizy.
Poniżej przedstawiono minimalny proces w Pythonie, który realizuje to zadanie. Wyszukuje publiczne filmy według frazy kluczowej, pobiera dostępne pola dotyczące autora i sprawdza profile na IGie tylko wtedy, gdy masz już uzasadnioną nazwę użytkownika do weryfikacji. API może pobrać dane profilu na podstawie nazwy użytkownika; nie ustala automatycznie, czy dwa konta należą do tej samej osoby.
Jaki wynik warto zautomatyzować
Wyobraź sobie zespół sprzedający sprzęt do parzenia kawy w domu, który chce znaleźć autorów publicznych filmów o przygotowywaniu napojów. Ręczne wyszukiwanie pomaga wstępnie zapoznać się z treściami, ale przy powtarzaniu trudno zachować informację o tym, który film doprowadził do kontaktu, skąd wzięła się nazwa profilu i co dokładnie sprawdzono.

Potok rozdziela trzy czynności: wyszukiwanie filmów na TikToku, zapisywanie zaobserwowanych danych i sprawdzanie przypuszczalnego profilu na IGie. Dzięki temu analityk może otworzyć jeden plik CSV i zobaczyć pochodzenie każdego kandydata. Pola dotyczące IGa należy wypełniać dopiero po znalezieniu nazwy użytkownika w publicznym opisie, odnośniku autora albo po zweryfikowaniu jej przez człowieka na podstawie innych dostępnych materiałów.
Ta metoda sprawdzi się w agencji, zespole badawczym lub u wewnętrznego marketera, który potrzebuje niewielkiej, możliwej do odtworzenia listy do ręcznej kwalifikacji. Zachowuje kontekst znaleziska i nie zamienia podobieństwa nazw w twierdzenie o tożsamości.
Jakie pola można pobrać
Udokumentowana trasa TikToka /searchVideo wymaga parametru keyword; dostępne są także count, date_posted, sort_by, region i cursor. W zaobserwowanych odpowiedziach występują identyfikator filmu, opis, data publikacji, odnośnik, dane autora i publiczne liczniki interakcji. Faktyczny zestaw pól może się różnić, dlatego poniższy kod bezpiecznie odczytuje dane, a brakujące wartości pozostawia puste.
W tym przykładzie dla IGa używana jest udokumentowana trasa GET /v1/user/by/username z parametrem username. Odpowiedź może zawierać nazwę użytkownika, wyświetlaną nazwę, status prywatności i weryfikacji, liczbę publikacji, obserwujących i obserwowanych, a także biografię. Są to informacje do wglądu i dalszej oceny przez specjalistę, a nie ocena autora.
Oficjalna dokumentacja TikTok API opisuje parametry wyszukiwania, a dokumentacja IG API — metody i parametry IGa. Wbudowane definicje API jsonscraper określają również trasy, nazwy parametrów i zaobserwowane formaty odpowiedzi; datą przytoczonych testów jest 25 października 2026 r.
Skonfiguruj klucze i listę kandydatów
Zapisz klucze API w zmiennych środowiskowych: JSONSCRAPER_TIKTOK_LICENSE_KEY i JSONSCRAPER_INSTAGRAM_LICENSE_KEY. Nie umieszczaj ich w kodzie źródłowym, plikach CSV ani dziennikach zadań. Aby zainstalować bibliotekę requests, użyj polecenia python -m pip install requests. Poniższy przykład jest przeznaczony dla Pythona 3.8 lub nowszego.
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",
})
# Заполняйте этот словарь только именами пользователей,
# найденными отдельно и добавленными после ручной проверки источника.
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.")
Dlaczego obsługa uwzględnia dwie struktury odpowiedzi
W wynikach wyszukiwania TikToka filmy mogą znajdować się w dwóch miejscach: tiktok.aweme_list oraz tiktok.search_item_list[].aweme_info. W zaobserwowanej odpowiedzi wyszukiwania pierwsza lista mogła być pusta, podczas gdy elementy znajdowały się w drugiej. Dlatego przykład łączy oba źródła i usuwa duplikaty na podstawie aweme_id. Najpierw sprawdza zewnętrzny status, a następnie odczytuje obiekt tiktok.

Kod zapisuje tylko pola rzeczywiście obecne w odpowiedzi. Pusta wartość oznacza, że pola nie było w otrzymanym obiekcie; nie należy jej interpretować jako zera. Warto zapisywać odnośniki i opisy filmów razem z metrykami — w przeciwnym razie tabela traci pierwotny kontekst przy późniejszym przeglądaniu.
Dodaj paginację tylko w razie potrzeby
Przykład pobiera jedną stronę i przetwarza tylko zwrócone elementy. Jeśli trzeba kontynuować wyszukiwanie, dokumentacja przewiduje parametr cursor dla wyszukiwania filmów; jego wartość należy pobrać z poprzedniej odpowiedzi. Traktuj cursor jako nieprzezroczystą wartość i przekazuj go bez samodzielnego obliczania. Zakończ pętlę, gdy odpowiedź wskaże brak dalszych wyników albo po osiągnięciu limitu ustalonego przez zespół. Paginacja rozszerza zestaw zwracanych wyników, ale nie uzasadnia nazywania go wyczerpującym wykazem wszystkich publikacji na dany temat.
Przed dodaniem automatycznego pobierania sprawdź rzeczywistą odpowiedź przy użyciu własnego klucza i wybierz umiarkowaną liczbę stron. Przechowuj źródłowy JSON obok znormalizowanego wiersza lub osobno według daty uruchomienia. Pozwoli to ustalić, czy zmieniło się pole odpowiedzi, i ponownie przetworzyć dane po zmianie schematu.
Jak wykorzystać CSV w kwalifikacji
W tabeli można filtrować wiersze według obecności odnośnika do filmu, opisu, autora i uzupełnionego profilu na IGie. Przydatne statusy do pierwszej kolejki weryfikacji to: „znaleziono film”, „znaleziono nazwę użytkownika na IGie”, „zwrócono profil”, „człowiek sprawdził powiązanie kont” i „wykluczono”. Statusy opisują przebieg weryfikacji, a nie jakość ani intencje autora.
Jeśli potrzebujesz powtarzalnego raportu, uruchamiaj skrypt według harmonogramu i dodaj osobną kolumnę z datą pobrania danych. Porównanie migawek pokaże wtedy, co zmieniło się między uruchomieniami w dostępnych polach, na przykład w liczbie obserwujących profil. Metryki z TikToka i IGa należy przechowywać oddzielnie, podając platformę i czas obserwacji: dotyczą różnych kontekstów i różnych odpowiedzi API.
W przypadku większego przepływu danych zastąp CSV bazą danych z kluczem głównym obejmującym platformę i identyfikator filmu. Zachowaj oryginalny tekst zapytania, czas pobrania i surową odpowiedź. Powiadomienie w Slacku lub przekazanie wiersza do CRM powinno nastąpić po ręcznym potwierdzeniu powiązania profili, a nie od razu po dopasowaniu nazwy.
Granice interpretacji i bezpieczna obsługa
Wyszukiwanie według frazy kluczowej zwraca znalezione wyniki API, a nie kompletny wykaz publikacji. Liczby wyświetleń, polubień i obserwujących to migawka odpowiedzi z chwili zapytania. Można ich używać do porządkowania listy roboczej i dalszej weryfikacji, ale same nie potwierdzają zamiarów komercyjnych, składu odbiorców ani zgody na kontakt.
Powiązanie profili potwierdzaj na podstawie wyraźnych, publicznych przesłanek i zapisuj, kto oraz kiedy przeprowadził weryfikację. Jeśli nazwa użytkownika na IGie pochodzi z zewnętrznej tabeli bez możliwego do potwierdzenia źródła, pozostaw status „wymaga weryfikacji”. Prywatny profil lub brakujące dane powinny być oznaczone jako osobny wynik weryfikacji — nie należy uzupełniać luk na podstawie przypuszczeń.
Przechowuj klucze w menedżerze sekretów środowiska roboczego, ogranicz dostęp do eksportów i ustal okres przechowywania adekwatny do celu badania. Do CRM przekazuj wyłącznie pola potrzebne do dalszej pracy ręcznej i przestrzegaj obowiązujących zasad platform oraz wymogów dotyczących przetwarzania danych.
Jaki będzie rezultat
Po uruchomieniu powstanie plik CSV z listą znalezionych filmów, autorami i dostępnymi metrykami, a także oddzielnymi polami do weryfikacji IGa. Skrypt można uruchamiać ręcznie, według harmonogramu w CI lub za pomocą węzła żądania HTTP na platformie automatyzacji. Kluczowa zasada praktyczna polega na automatyzacji zbierania i porządkowania danych, przy jednoczesnym pozostawieniu człowiekowi weryfikowalnego kroku ustalania powiązań między kontami.
Aby sprawdzić trasy i dostępne parametry, zacznij od TikTok Scraper API oraz IG Scraper API. Na stronach produktów znajdziesz przykłady zapytań i odnośniki do dokumentacji; przed włączeniem pobierania do stałego procesu zacznij od niewielkiego zapytania.