// TikTok ads scraper

TikTok ad data for every brand on your list

Adyntel is a TikTok ads scraper. It returns every sponsored TikTok video a brand is running as JSON, with play, like, comment and share counts, from nothing more than the company's domain. The influencers posting for the brand come back in the same call. Look up one company or run it across thousands.

No credit card required

What you get from each API call

Adyntel resolves a company domain to the brand's TikTok account and returns structured data for every sponsored video it is running.

For the company:

  • The brand's TikTok handle, resolved from the domain
  • Every sponsored video the brand is running
  • Optional: the influencers posting sponsored content for the brand
  • Pagination via continuation_tokens for brands with many ads

For each ad:

  • Video URL on tiktok.com, plus the caption and posting date
  • Engagement: play, like, comment, share, save and download counts
  • Ad flags: is_ad, ad_source and bc_type
  • Music: track title, commercial music and original sound flags
  • Commerce: TikTok Shop product URL when the video links to one, and the region

Example response (gymshark.com):

{
  "handle": "gymshark",
  "brand_ads": [
    {
      "aweme_id": "7661334167342320918",
      "url": "https://www.tiktok.com/@gymshark/video/7661334167342320918",
      "posted_at": 1783793370,
      "desc": "Onyx V1 Returns. July 16th. 7pm BST | 2pm EDT | 8pm CEST #onyxv1 #onyx #davidlaid #Gymshark",
      "is_ad": true,
      "ad_source": 1,
      "bc_type": 0,
      "stats": {
        "play_count": 1577611,
        "digg_count": 242881,
        "comment_count": 1030,
        "share_count": 9118,
        "collect_count": 17384,
        "download_count": 1051
      },
      "music": { "title": "original sound - gymshark", "is_commerce_music": true, "is_original_sound": true },
      "shop_product_url": null,
      "region": "GB"
    },
    { /* more ads... */ }
  ],
  "continuation_tokens": { "brand_ads": "1787940000001" },
  "cache": { "hit": false, "age_s": 0 }
}

Each call returns one page of ads and a continuation_tokens object. Page through until the token is null. 1 credit per call.

See which influencers are posting for a brand

Much of a brand's paid reach on TikTok runs through creators and never appears on the brand's own account. Set influencer_ads to true and the same call returns them.

Each influencer comes back with their handle, nickname, bio and follower count, a trust tier such as paid_disclosed, the hashtag or signal Adyntel found them through, and one sample sponsored video with its engagement stats.

  • Map a competitor's creator program: who posts for them and how those videos perform
  • Qualify accounts by whether they pay creators at all, a spend signal that never appears in an ad library
  • Page through each influencer's sponsored videos with their own continuation token

One extra credit per call. The influencers key only appears when you ask for it.

With influencer_ads: true (gymshark.com):

{
  "handle": "gymshark",
  "brand_ads": [ /* ... */ ],
  "influencers": [
    {
      "handle": "llivsole",
      "nickname": "LIV",
      "bio": "sweat, smiles, and your fav playlist",
      "trust_tier": "paid_disclosed",
      "discovered_via": "#gymsharkpartner",
      "sample_ad": {
        "url": "https://www.tiktok.com/@llivsole/video/7683197142659271950",
        "desc": "I am in looove with this color AND it's cotton, use code LLIV10 at checkout for 10% off your order!! @Gymshark #gymshark #gymsharkpartner #ad",
        "stats": { "play_count": 10317, "digg_count": 192, "comment_count": 12, "share_count": 7 },
        "region": "US"
      }
    }
  ],
  "continuation_tokens": {
    "brand_ads": "1787940000001",
    "influencers": { "gymsharkpartner": "20" }
  }
}

2 credits per call with influencer ads: one for the scrape, one for the influencer lookup.

Search the TikTok Ad Library by keyword, then pull targeting per ad

Two more endpoints read the TikTok Ad Library itself. Start from a keyword instead of a domain, then open any ad for its targeting and impressions.

tiktok_search
Searches the TikTok Ad Library by keyword. Each matching ad comes with its advertiser name, estimated audience, first and last shown dates, images and video. Add a country_code to limit results to one market. The filter covers European markets; a US filter is not available, and a search without a country returns ads from all markets.

tiktok_ad_details
Takes an ad id from a search result and returns the advertiser's registered name and country, age and gender targeting per region, impressions per region, total impressions, and the target audience size.

Use it to measure a category before you build a list, or to check how a competitor targets a market you are entering.

Ad details (id from a search for "toys" in DE):

{
  "data": {
    "ad": {
      "id": "1816831112281202",
      "name": "elevateshoes",
      "estimated_audience": "100K-200K",
      "first_shown_date": 1732665600000,
      "last_shown_date": 1733702400000,
      "videos": [ { "cover_img": "https://...", "video_url": "https://..." } ]
    },
    "advertiser": { "name": "elevateshoes", "registry_location": "Germany" },
    "targeting": {
      "age": [ { "region": "DE", "18-24": true, "25-34": true, "35-44": true, "45-54": true, "55+": true, "13-17": false } ],
      "gender": [ { "region": "DE", "female": true, "male": true } ],
      "location": {
        "data": [ { "region": "AT", "impressions": "27K" }, { "region": "DE", "impressions": "116K" } ],
        "total_impressions": "100K-200K"
      },
      "target_audience_size": "21.9M-26.8M"
    }
  }
}

Search returns the ad ids. Details returns targeting for one ad.

Actionable data at any volume

Run one domain or batch thousands. Same structure every time.

Run it for:

Creative research
Pull every sponsored video from your top competitors with direct TikTok URLs and play counts. Sort by plays to see which concepts get watched, and check the music field to see which sounds they license.

Competitive monitoring
Schedule daily checks on your competitors and catch a new video or a new creator the day it appears. Repeated calls give you a timeline of their TikTok activity.

DTC and e-commerce qualification
A brand running sponsored videos, or paying creators to post, is spending on TikTok. Flag those accounts before outreach. A shop_product_url tells you they sell through TikTok Shop.

Agency prospecting
A live creator program with several disclosed partners means budget and an in-house or agency team running it. Companies posting sponsored videos with no disclosed creators are the ones without a creator program yet.

Inbound enrichment
Trigger a call when a prospect signs up. Route consumer brands by TikTok activity: no ads, brand ads only, or brand ads plus creators.

Start without a list
The advertiser database covers Meta, Google and LinkedIn ad activity for 2.2M+ companies. Build the list there, then run the TikTok endpoint across the export.

Example request:

POST https://api.adyntel.com/tiktok
{
  "api_key": "your_api_key",
  "email": "you@company.com",
  "company_domain": "gymshark.com",
  "influencer_ads": true
}

// or return it by webhook instead
{
  "api_key": "your_api_key",
  "email": "you@company.com",
  "company_domain": "gymshark.com",
  "webhook_url": "https://your.app/adyntel"
}
// answers immediately:
{ "status": "job started", "jobId": "4a9edbbc-abcf-44b0-8e3d-ceef332db44a" }

With a webhook the ads are POSTed to your URL when the scrape finishes. Without one they come back in the response.

Format ready for any tool or workflow

Clean JSON with the same structure in every response.

Clay

Add as HTTP API enrichment or use Adyntel's direct integration. Map fields to columns. Build conditional logic:

  • brand_ads not empty: tag as "TikTok advertiser"
  • influencers not empty: tag as "runs creator program"
  • shop_product_url present: tag as "TikTok Shop seller"

CRMs (Salesforce, HubSpot, Pipedrive, Attio, etc.)

Store as custom fields: tiktok_handle (text), tiktok_ads_found (number), tiktok_last_ad_at (date), tiktok_creators (number). Trigger sequences when a company starts posting sponsored videos or adds creators.

Databases (Postgres, Airtable)

Store full JSON in a JSONB column. Query by play count, region, music, or shop link. Track changes over time by storing responses daily.

LLMs (ChatGPT, Claude, Gemini, Copilot, etc.)

Pass structured ad data as context: "Here are 40 sponsored TikTok videos from Gymshark and the 12 creators posting for them: [JSON]. What hooks and offers repeat?"

Spreadsheets (Google Sheets, Excel)

Import via Apps Script or Power Query. Flatten JSON into rows. One row per video, pivot by company, sort by play count or posting date.

Python/Node

A standard HTTP POST, parsed with the JSON library you already have. No SDK to install.

response = requests.post('https://api.adyntel.com/tiktok', json={
    'api_key': key,
    'email': email,
    'company_domain': 'gymshark.com',
    'influencer_ads': True
})
data = response.json()
ads = data['brand_ads']
creators = data.get('influencers', [])

Simple, transparent pricing

Start with 50 free credits so you can test the product. No credit card required.

Subscription
(save 25%)
Pay as you go

5,000

credits

$44/mo

$0.00882 per credit

Try for Free

25,000

credits

$179/mo

$0.00714 per credit

Try for Free

50,000

credits

$321/mo

$0.00643 per credit

Try for Free

Need more than 50k credits? Contact us for a custom plan.

Frequently asked questions

Adyntel's TikTok ads scraper API

What input do I need?
A company domain in the company.com format, with no https:// or www. It has to be the brand's own domain; tiktok.com itself is rejected. Adyntel finds the brand's TikTok handle and returns its ads.
What data comes back for each ad?
The video URL, caption, posting date, region, an is_ad flag, the ad source, play, like, comment, share, save and download counts, the music used and whether it is commercial or original sound, and the TikTok Shop product URL when the video links to one.
Can I see which influencers are posting for a brand?
Yes. Set influencer_ads to true. The response adds an influencers list: each creator's handle, nickname, bio, follower count, a trust tier such as paid_disclosed, the hashtag or signal they were found through, and one sample sponsored video. This costs one extra credit on top of the scrape.
How does pagination work?
The first call returns a continuation_tokens object with one token for the brand's ads and one per influencer. Send it back on the next call to get the following page. The last page comes back with a null token.
Can I get the results by webhook?
Yes. Pass a webhook_url. The call answers immediately with a job id and the ads are POSTed to your URL when the scrape finishes. Without a webhook the ads come back in the response itself.
What happens if the company runs no TikTok ads?
The endpoint answers with a 204 and an empty body, so your pipeline can treat it as a no-ads result.
Can I search the TikTok Ad Library by keyword?
Yes. The tiktok_search endpoint searches the TikTok Ad Library by keyword and returns each ad's advertiser name, estimated audience, first and last shown dates, images and video. Add a country_code to limit it to one market. The filter covers European markets; a US filter is not available, and a search without a country returns ads from all markets.
Can I get targeting data for a specific ad?
Yes. Pass the ad id from a search result to tiktok_ad_details. You get the advertiser's registered name and country, the age and gender targeting per region, impressions per region, total impressions, and the target audience size.
What does each call cost?
1 credit per call. A call with influencer_ads set to true costs 2 credits, one for the scrape and one for the influencer lookup.
Do I need a TikTok developer account?
No. Adyntel needs your API key and account email, nothing from TikTok. One POST request with a domain.
Can I use this with Clay?
Yes. Add Adyntel as an HTTP API enrichment or use the direct integration. Enrich entire tables with TikTok ad data.
Do you cover other platforms?
Yes. LinkedIn, Meta and Google ads. The same domain lookup and the same JSON structure on every platform.