jsonscraper
Markets
Back to journal

How to Check Ad Disclosures in Public TikTok Videos

A Python script gathers videos for brand-related searches, flags explicit advertising language, and saves a list for manual review

Editorial Policy Report an error

To find public TikTok videos mentioning a brand and containing explicit advertising language, collect results for several search queries, extract captions, and flag marker words. The result is a CSV of links and available metrics—a queue for human review, not an automated determination of compliance.

This process can help an agency compare a campaign with its brief or an in-house team maintain a list of public mentions. It organizes search results and preserves the signals an analyst can use to decide which videos to open and examine.

What should you look for in a video?

For an advertising review, the important questions are whether the creator has a connection to the brand and how that connection is disclosed alongside a recommendation. The FTC’s influencer guidance explains that a material connection may be financial, professional, personal, or family-related, and that a disclosure should be clear and understandable. For video endorsements, the FTC says the disclosure should appear in the video itself, not only in the description. A caption is therefore useful for sorting, but by itself it cannot show what viewers saw on screen or heard in the audio.

This script has a narrower purpose: find videos in returned search results whose captions contain brand phrases and possible markers such as “advertising,” “sponsor,” or “partnership.” Adapt the vocabulary to the campaign’s language and terminology. If a marker does not appear in the caption, open the video and inspect its contents: a text match does not establish whether the video itself contains a disclosure.

How do you turn search results into a review queue?

Prepare a short list of queries: the brand name, campaign name, and common spellings of the product name. Run each query separately and save the query text alongside the results. This lets the team see which query found a video and repeat the collection if needed.

Article: How to Check Ad Disclosures in Public TikTok Videos
Summary: Marketing teams often need to find public TikTok videos that mention a brand and may contain advertising disclosures. Here’s how to collect returned API results, extract captions and available metrics, and flag explicit words such as ‘advertising’ and ‘partnership’ for follow-up review.
Image role: supporting illustration 2 — a different specific aspect
Section: How do you turn search results into a review queue?
Diagram showing the path from search results to a CSV queue and manual review of disclosures in the video itself.© jsonscraper · AI-generated illustration
Article: How to Check Ad Disclosures in Public TikTok Videos
Summary: Marketing teams often need to find public TikTok videos that mention a brand and may contain advertising disclosures. Here’s how to collect returned API results, extract captions and available metrics, and flag explicit words such as ‘advertising’ and ‘partnership’ for follow-up review.
Image role: cover — the central idea
Section: How do you turn search results into a review queue?
Visual subject: Russian inf
Diagram showing the path from search results to a CSV queue and manual review of disclosures in the video itself.© jsonscraper · AI-generated illustration

For collection, use the jsonscraper TikTok Scraper API. The documented GET endpoint /searchVideo is hosted at https://tiktok.evelode.com and accepts the parameters keyword, count, date_posted, sort_by, region, and cursor. In the observed response, TikTok data contained videos under search_item_list[].aweme_info; aweme_list could be empty. The parser below checks both locations.

Pass the key in the license_key parameter. Store it in an environment variable, not in the script or repository. The TikTok endpoint documentation lists the search parameter names; use the returned cursor to request the next page. Record the number of objects processed and the search query itself: pagination lets you continue through the results, but does not by itself establish that the collection is complete.

A minimal Python example

The script makes one request for each phrase, collects both documented result formats, removes duplicates by video ID, flags words in the description, and writes a CSV. Install requests with python -m pip install requests, set JSONSCRAPER_TIKTOK_LICENSE_KEY in the environment, and run the file. The example works with Python 3.8 and later.

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")

Before saving the code, check the external response status and then inspect the data under tiktok. The normalizer reads both video locations. To request the next page, pass the returned cursor into the next request unchanged; this minimal example deliberately makes only one request per query.

What will the CSV show?

Each row connects the video ID and link, the available creator identifier, caption, search phrases, and matching markers. If the response includes view, like, and comment counts, they are saved as context for prioritizing reviews. These fields may be absent; the script leaves them blank rather than substituting zeros.

Next, open the video, check whether a disclosure appears in the video and is noticeable, and record the result using agreed categories, such as “found,” “needs further review,” or “not found during review.” The code only searches the caption for exact text markers; it does not inspect images or audio and does not determine compliance.

For a recurring process, schedule the collection, record the request time, and save the original JSON alongside the CSV. Limit the query list to necessary phrases and set a retention period for collected data. The jsonscraper responsible data collection policy advises reasonable request frequency, data minimization, and reviewing AI results before taking further action.

The result is a reproducible queue of public videos for manual review of advertising disclosures: search matches and available metrics help determine what to open first, while assessment of the video itself remains with the reviewer. Check parameter names in the TikTok API documentation, and find product details on the TikTok Scraper API page.

People

No people listed for this article yet.

Keep readingTikTok: Turn Search Results into a Weekly Support Topic List
Read the next article

Turn what you read into a working integration

Explore jsonscraper's social-data APIs, test requests and build your next workflow.

Explore APIs