Track TikTok Ads Library with Apify, Google Sheets & Slack/Telegram Notifications
DISCOUNT 20%
This workflow continuously monitors the TikTok Ads Library for new creatives from specific advertisers or keyword searches, scrapes them via Apify, logs them into Google Sheets, and sends concise notifications to Telegram or Slack with the number of newly discovered ads. It is built as a safe, idempotent loop that can run on a schedule without creating duplicates in your sheet.
Use Case
Manually checking the TikTok Ads Library for competitor creatives is time-consuming, and it's easy to lose track of which ads you've already seen. This workflow is ideal if you want to:
- Track competitor creatives over time in a structured Google Sheet.
- Avoid duplicates by matching ads via their unique
adIdfield. - Get lightweight notifications in Telegram or Slack that tell you how many new ads appeared, without spamming you with full ad lists.
- Run the process on autopilot (daily, weekly, etc.) with a single schedule.
- Monitor by advertiser ID or keywords with flexible search parameters.
How it Works
The workflow is organized into four logical blocks:
1. Configuration & Date Conversion
- Configuration: The
Set ParametersSet node stores all key request variables:Ad target country(e.g.,allor specific ISO country codes),Ad published date From(automatically set to yesterday by default),Ad published To(automatically set to today by default),Advertiser name or keyword(for keyword-based searches),adv_biz_ids(advertiser business IDs for specific advertiser tracking),Ad limit(optional limit on the number of results to scrape).
- Date Conversion:
Convert Dates to Unixtransforms the human-readable date format (DD/MM/YYYY) into Unix timestamps in milliseconds, which are required by the TikTok Ads Library API.
2. Request Building & Data Fetching
- Body Construction:
Build Apify Bodycreates the JSON request body for the Apify actor:- Builds the TikTok Ads Library URL with all search parameters (region, date range, advertiser name/keyword, advertiser IDs).
- Conditionally adds
resultsLimitto the request body only if theAd limitfield is not empty, allowing you to scrape all results or limit them as needed.
- Data Fetching:
Get TT Ads through Apifyexecutes the Apify actor (Tiktok Ads Scraper) and retrieves all matching ads from the TikTok Ads Library.
3. Data Preparation & De-duplication
- Data Extraction:
Prepare Data for Sheetssafely extracts nested data from the API response:- Extracts the first video URL from the
videosarray (if available). - Extracts the cover image URL from the first video object.
- Extracts the TikTok username from the
tiktokUserobject (if available). - Handles cases where arrays are empty or objects are missing without throwing errors.
- Extracts the first video URL from the
- Load Existing IDs:
Read existing IDspulls the existingadIdcolumn from your Google Sheet (configured to read a specific column/range, e.g., column K).Collect ID listconverts these into a unique, normalized string arrayexistingIds, which represents all ads you have already logged.
- Attach State:
Attach existing ids(Merge node) combines, for each execution, the freshly fetched TikTok response with the historicalexistingIdsarray from Sheets.
- Filter New Creatives:
Filter new creativesCode node compares each ad'sadId(string) against theexistingIdsset and builds a new array containing only ads that are not yet present in the sheet.- It also protects against duplicates inside the same batch by tracking seen IDs in a local
Set.
4. Data Logging & Notification
- Write New Ads:
Append or update row in sheetperforms anappendOrUpdateinto Google Sheets, mapping core fields such asadId,adName,advertiserName,advertiserId,paidBy,impressions,regionStats,targeting,tiktokUser,startUrl,videos, andcoverImageURL(using the=IMAGE()formula to display images directly in the sheet).- The column mapping uses
adIdas the matching column so that existing rows can be updated if needed.
- Count:
- In parallel with the write step,
Filter new creativesalso feeds intoCount new ads. - This Code node returns a single summary item with
newCount = items.length, i.e., the total number of new creatives processed in this run.
- In parallel with the write step,
- Guard:
Any new ads?checks whethernewCountis greater than0. If not, the workflow ends silently and no message is sent, avoiding noise.
- Notify:
- When there are new creatives, both
Send a text message(Telegram) andSend a message(Slack) send notifications to the configured channels. - The message includes
{{$json.newCount}}and a fixed link to the Google Sheet, giving you a quick heads-up without listing individual ads.
- When there are new creatives, both
Setup Instructions
To use this template, configure the following components.
1. Credentials
- Apify:
- Configure the
Apify accountcredentials used byGet TT Ads through Apify. - You'll need an Apify account with access to the Tiktok Ads Scraper actor.
- Configure the
- Google Sheets:
- Connect your Google account in:
Read existing IDs,Append or update row in sheet.
- Connect your Google account in:
- Telegram (optional):
- Connect your
Telegram accountcredentials inSend a text message.
- Connect your
- Slack (optional):
- Configure your Slack credentials in
Send a message.
- Configure your Slack credentials in
2. The Set Parameters Node
Open the Set Parameters Set node and customize:
Ad target country: Which countries to monitor (allfor all countries, or specific ISO 3166 country codes likeUS,GB, etc.).Ad published date From: Start date for the search range (defaults to yesterday using{{ $now.minus({ days: 1 }).toFormat('dd/MM/yyyy') }}).Ad published To: End date for the search range (defaults to today using{{ $now.toFormat('dd/MM/yyyy') }}).Advertiser name or keyword: Search by advertiser name or keywords (URL-encoded format, e.g.,%22Applicave%20LLC%22).adv_biz_ids: Specific advertiser business IDs to track (comma-separated if multiple).Ad limit: Optional limit on the number of results (leave empty to scrape all available results).
3. Google Sheets Configuration
Read existing IDs- Set
documentIdandsheetNameto your tracking spreadsheet and sheet (e.g.,Sheet1). - Configure the range to read only the column holding the ad
adIdvalues (e.g., column K:K:K).
- Set
Append or update row in sheet- Point
documentIdandsheetNameto the same spreadsheet/sheet. - Make sure your sheet has the columns expected by the node (e.g.,
adId,coverImageURL,adName,Impressions,regionStats,targeting,tiktokUser,advertiserID,paidBy,advertiserName,startURL,videos). - Confirm that
adIdis included inmatchingColumnsso de-duplication works correctly.
- Point
4. Notification Configuration
- Telegram: In
Send a text message, set:chatId: Your target Telegram chat or channel ID.text: Customize the message template as needed, but keep{{$json.newCount}}to show the number of new creatives.
- Slack: In
Send a message, set:channelId: Your target Slack channel ID.text: Customize the message template as needed, but keep{{$json.newCount}}to show the number of new creatives.
5. Schedule
- Open
Schedule Triggerand configure when you want the workflow to run (e.g., every morning). - Save and activate the workflow.
Further Ideas & Customization
This workflow is a solid foundation for systematic TikTok competitor monitoring. You can extend it to:
- Track multiple advertisers by turning
adv_biz_idsinto a list and iterating over it with a loop or separate executions. - Enrich the log with performance data by creating a second workflow that reads the sheet, pulls engagement metrics (likes, shares, comments) for each logged
adIdfrom TikTok's API (if available), and merges the metrics back. - Add more notification channels such as email, or send a weekly summary that aggregates new ads by advertiser, format, or country.
- Tag or categorize creatives (e.g., "video vs image", "country", "language", "advertiser type") directly in the sheet to make later analysis easier.
- Combine with Meta Ads monitoring by running both workflows in parallel and creating a unified competitor intelligence dashboard.
- Add image analysis by integrating Google Vision API to automatically detect objects, text, and themes in the cover images, similar to the Meta Ads creative analysis workflow.