Para filtrar vídeos públicos do TikTok que mencionem uma marca e contenham termos publicitários explícitos, colete resultados de várias consultas de pesquisa, extraia as legendas e sinalize palavras indicadoras. O resultado é um CSV com links e métricas disponíveis — uma fila para revisão humana, não uma conclusão automática sobre conformidade com as regras.
Esse processo pode ser útil para uma agência que compara uma campanha com o briefing ou para uma equipe interna que mantém uma lista de menções públicas. Ele ajuda a organizar os resultados da pesquisa e preserva os indícios que permitem ao analista decidir qual vídeo abrir e examinar.
O que exatamente procurar nos vídeos?
Para verificar publicidade, é importante considerar a relação do criador com a marca e como ela é divulgada junto à recomendação. O guia da FTC para influenciadores explica que uma relação relevante pode ser financeira, profissional, pessoal ou familiar, e que a divulgação deve ser clara e compreensível. Para recomendações em vídeo, a FTC indica que a divulgação deve aparecer no próprio vídeo, e não apenas na descrição. Por isso, a legenda é útil para triagem, mas não mostra, por si só, o que o espectador viu na tela ou ouviu no áudio.
O objetivo deste script é mais limitado: encontrar, nos resultados de pesquisa retornados, vídeos cujas legendas contenham frases relacionadas à marca e possíveis indicadores, como “publicidade”, “patrocinador” ou “parceria”. Ajuste o vocabulário ao idioma e à terminologia da campanha. Se um indicador não aparecer na legenda, abra o vídeo e verifique o conteúdo: uma correspondência de texto não determina se há uma divulgação no próprio vídeo.
Como transformar os resultados da pesquisa em uma fila de revisão?
Prepare uma pequena lista de consultas: o nome da marca, da campanha e a grafia mais comum do produto. Execute as consultas separadamente e salve os termos usados junto com os resultados. Assim, a equipe poderá ver qual consulta encontrou cada vídeo e repetir a coleta, se necessário.


Para a coleta, você pode usar a TikTok Scraper API da jsonscraper. A rota GET documentada, /searchVideo, está disponível em https://tiktok.evelode.com e aceita os parâmetros keyword, count, date_posted, sort_by, region e cursor. Na resposta observada, os dados do TikTok continham vídeos em search_item_list[].aweme_info; aweme_list podia estar vazio. O analisador abaixo verifica os dois caminhos.
A chave é enviada no parâmetro license_key. Armazene-a em uma variável de ambiente, não no script nem no repositório. A documentação das rotas do TikTok contém os nomes dos parâmetros de pesquisa; para a página seguinte, use o cursor retornado. Registre o número de objetos processados e a própria consulta: a paginação permite continuar pelos resultados, mas não garante, por si só, que o conjunto esteja completo.
Exemplo mínimo em Python
O script faz uma solicitação para cada frase, coleta os dois formatos documentados de resultados, remove duplicatas pelo ID do vídeo, identifica palavras na descrição e grava um CSV. Instale requests com o comando python -m pip install requests, defina JSONSCRAPER_TIKTOK_LICENSE_KEY no ambiente e execute o arquivo. O exemplo é compatível com Python 3.8 ou posterior.
import csv
import os
import sys
import requests
BASE_URL = "https://tiktok.evelode.com/searchVideo"
KEY = os.environ.get("JSONSCRAPER_TIKTOK_LICENSE_KEY")
if not KEY:
raise SystemExit("Set JSONSCRAPER_TIKTOK_LICENSE_KEY first")
QUERIES = ["Example Brand", "Example Product", "Example Campaign"]
MARKERS = ("#реклама", "реклама", "спонсор", "партнерство", "партнёрство", "#ad", "sponsored")
def videos_from(payload):
data = payload.get("tiktok") or {}
videos = data.get("aweme_list") or []
if not videos:
videos = [
item.get("aweme_info")
for item in (data.get("search_item_list") or [])
if isinstance(item, dict) and isinstance(item.get("aweme_info"), dict)
]
return [video for video in videos if isinstance(video, dict)]
rows = {}
for query in QUERIES:
response = requests.get(
BASE_URL,
params={"keyword": query, "count": 20, "date_posted": "this-month", "license_key": KEY},
timeout=30,
)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok":
print("Unexpected API status for query:", query, file=sys.stderr)
continue
for video in videos_from(payload):
video_id = video.get("aweme_id")
if not video_id:
continue
author = video.get("author") or {}
stats = video.get("statistics") or {}
caption = video.get("desc") or ""
matched = [word for word in MARKERS if word in caption.casefold()]
row = rows.setdefault(str(video_id), {
"video_id": str(video_id),
"url": video.get("share_url") or "",
"author": author.get("unique_id") or author.get("nickname") or "",
"caption": caption,
"queries": set(),
"disclosure_markers": set(),
"play_count": stats.get("play_count"),
"digg_count": stats.get("digg_count"),
"comment_count": stats.get("comment_count"),
"review_status": "manual_review",
})
row["queries"].add(query)
row["disclosure_markers"].update(matched)
with open("tiktok_disclosure_review.csv", "w", newline="", encoding="utf-8-sig") as file:
fields = ["video_id", "url", "author", "caption", "queries", "disclosure_markers",
"play_count", "digg_count", "comment_count", "review_status"]
writer = csv.DictWriter(file, fieldnames=fields)
writer.writeheader()
for row in rows.values():
row["queries"] = " | ".join(sorted(row["queries"]))
row["disclosure_markers"] = " | ".join(sorted(row["disclosure_markers"]))
writer.writerow(row)
print("Saved", len(rows), "unique returned videos")
Antes de salvar o código, verifique o status da resposta externa e, em seguida, os dados em tiktok. O normalizador lê os dois caminhos em que os vídeos podem aparecer. Para a página seguinte, é possível passar o cursor recebido na próxima solicitação sem transformá-lo; este exemplo mínimo limita-se intencionalmente a uma página por consulta.
O que o CSV vai mostrar?
Cada linha associa um ID e um link para o vídeo, o identificador de autor disponível, a legenda, as frases de pesquisa e os indicadores encontrados. Se a resposta incluir métricas de visualizações, curtidas e comentários, elas serão salvas como contexto para ajudar a definir a ordem da revisão. Esses campos podem estar ausentes; o script os deixa em branco, em vez de preencher com zeros.
Em seguida, abra o vídeo, verifique se há uma divulgação no próprio vídeo e se ela está visível e registre o resultado de acordo com as categorias definidas, por exemplo, “encontrada”, “requer análise adicional” ou “não identificada durante a revisão”. O código procura apenas indicadores de texto exatos na legenda; não analisa imagem nem áudio e não decide se o vídeo está em conformidade com as regras.
Para um processo regular, programe a coleta, registre o horário da solicitação e salve o JSON original junto com o CSV. Limite a lista de consultas às frases necessárias e defina por quanto tempo os dados coletados serão mantidos. A política de coleta responsável de dados da jsonscraper recomenda uma frequência razoável de solicitações, a minimização de dados e a verificação dos resultados de IA antes de tomar medidas posteriores.
O resultado é uma fila reproduzível de vídeos públicos para a revisão manual de divulgações publicitárias: as correspondências da pesquisa e as métricas disponíveis ajudam a decidir o que abrir primeiro, enquanto a avaliação do próprio vídeo fica a cargo de quem faz a revisão. Os nomes dos parâmetros podem ser consultados na documentação da API do TikTok, e as informações sobre o produto estão na página da TikTok Scraper API.