TikTok Search Scraper avatar

TikTok Search Scraper

Pricing

from $0.60 / 1,000 video results

Go to Apify Store
TikTok Search Scraper

TikTok Search Scraper

Scrape TikTok videos by keyword. Extract title, views, likes, author, hashtags, play URLs, thumbnails. Supports date range, region, sort order, min views/duration filters, strict keyword matching (Korean NFKC), residential proxy, and session caching.

Pricing

from $0.60 / 1,000 video results

Rating

5.0

(1)

Developer

paul_44

paul_44

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

2

Monthly active users

15 hours ago

Last modified

Share

TikTok Search Scraper extracts structured video data from TikTok search results by keyword — including views, likes, comments, shares, hashtags, author info, upload date, thumbnails, and playable preview URLs. Run a single keyword or a batch of hundreds; filter by date, region, view count, or minimum duration; and get clean JSON ready for analytics, dashboards, or content research.

What does TikTok Search Scraper do?

Given one or more search keywords, this Actor calls TikTok's search API through a residential proxy and returns every video it can collect, up to your chosen maxItems. Results come back as a flat dataset where each row is one video with consistent field names, so you can plug the output straight into BigQuery, Postgres, Google Sheets, Zapier, Make, n8n — anywhere Apify integrates.

It is a drop-in replacement for manually browsing tiktok.com/search and is built for teams that need:

  • Marketing research — tracking trending content in specific niches
  • Brand monitoring — who is posting about your product / keyword
  • Influencer discovery — surfacing creators by region and engagement
  • Competitive analysis — hashtag velocity, view distribution, top posts
  • Content intelligence — feeding AI pipelines with TikTok context

What data can TikTok Search Scraper extract?

For every video returned, you get:

  • Identifiersid, canonical TikTok URL, embed URL
  • Contenttitle (first line of description), full hashtags, uploadedAt (Unix seconds)
  • Engagement statsviews, likes, comments, shares
  • Author / channelusername, display name, profile url, followers, avatar
  • Video metadataduration, direct videoUrl, HLS preview, play URL candidates
  • Media — stable thumbnail URL and optional stable preview for in-Console playback
  • Keyword relevancekeywordRelevance (high / none) and keywordMatchedIn list so you can post-filter fuzzy TikTok matches

See the Output section for a complete JSON sample.

How do I use TikTok Search Scraper to scrape TikTok?

  1. Click Try for free at the top of this page and sign in to Apify (free account works).
  2. Open the Input tab on the Actor run page.
  3. Enter one or more keywords in the keywords list — one search is run per keyword.
  4. (Optional) Choose Upload date, Sort by, Region, Min views, or Min duration to narrow the results.
  5. (Optional) Toggle Strict keyword match to drop TikTok's fuzzy unrelated results.
  6. Click Start. The run takes roughly 10–30 seconds per 50 videos depending on keyword popularity and region.
  7. When the run finishes, open the StorageDataset tab to preview results, or export as JSON / CSV / Excel / HTML.

You can also call the Actor via API, schedule it from Apify Console, or chain it into an Apify workflow.

How much does it cost to scrape TikTok?

Pricing is from $0.60 per 1,000 video results on Apify Store. You only pay for successful results — failed runs are free. New Apify accounts include free monthly platform credits.

Input

Configure the run via the Input tab in Apify Console or pass JSON via API.

FieldTypeDefaultDescription
keywordsstring[]Search keywords. One search per keyword.
keywordstringSingle-keyword fallback when keywords is empty.
maxItemsinteger50Max results per keyword (1–1000).
dateRangestringallall, today, yesterday, 7days, 1month, 3months, 6months.
sortTypestringRELEVANCERELEVANCE, MOST_LIKED, or LATEST.
locationstringUSISO 3166-1 alpha-2 country code (US, KR, JP, GB, DE, …).
minPlayCountinteger0Exclude videos below this view count.
minDurationSecnumber0Exclude videos shorter than N seconds.
strictKeywordMatchbooleanfalseWhen OFF: all results returned with keywordRelevance tag. When ON: drops videos where keyword does not appear in title / description / hashtags / author.
mirrorVideosbooleantrueStore preview clips in Apify KV Store for stable Console playback.
includeSearchKeywordsbooleanfalseAdds searchKeyword field to each result.
maxConcurrentKeywordsinteger1Run N keyword searches in parallel (1–16).
proxyConfigurationobjectApify RESIDENTIALApify proxy group / country.

Input example

{
"keywords": ["BTS", "BLACKPINK", "aespa"],
"maxItems": 100,
"dateRange": "7days",
"sortType": "MOST_LIKED",
"location": "KR",
"minPlayCount": 10000,
"strictKeywordMatch": true
}

Output

Results land in the default dataset with one JSON object per video. Sample row:

{
"id": "7628238301794766101",
"title": "HBD to meeeee #aespa #KARINA #카리나",
"views": 1250000,
"likes": 98000,
"comments": 3200,
"shares": 1500,
"hashtags": ["aespa", "KARINA", "카리나"],
"uploadedAt": 1713200000,
"channel": {
"username": "karina.aespa",
"name": "KARINA",
"url": "https://www.tiktok.com/@karina.aespa",
"followers": 5200000,
"avatar": "https://p16-sign.tiktokcdn-us.com/..."
},
"video": {
"duration": 15,
"url": "https://v16-webapp.tiktok.com/...",
"thumbnail": "https://p16-sign.tiktokcdn-us.com/...",
"cover": "https://p16-sign.tiktokcdn-us.com/..."
},
"url": "https://www.tiktok.com/@karina.aespa/video/7628238301794766101",
"videoUrl": "https://v16-webapp.tiktok.com/...",
"downloadUrl": "https://v16-webapp.tiktok.com/...",
"thumbnail": "https://p16-sign.tiktokcdn-us.com/...",
"tiktokEmbedUrl": "https://www.tiktok.com/embed/v2/7628238301794766101",
"keywordRelevance": "high",
"keywordMatchedIn": ["desc", "hashtags"]
}

A full field reference lives in .actor/dataset_schema.json and is rendered as the Overview tab on the dataset page in Apify Console.

Usage via API

curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"keywords": ["BTS", "BLACKPINK"],
"maxItems": 50,
"dateRange": "7days",
"sortType": "MOST_LIKED",
"location": "KR"
}'

Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("YOUR_ACTOR_ID").call(run_input={
"keywords": ["BTS"],
"maxItems": 50,
"dateRange": "7days",
"sortType": "MOST_LIKED",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["views"])

JavaScript (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('YOUR_ACTOR_ID').call({
keywords: ['BTS'],
maxItems: 50,
dateRange: '7days',
sortType: 'MOST_LIKED',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => console.log(item.title, item.views));

FAQ

Scraping publicly available data is generally permitted, but you are responsible for complying with TikTok's Terms of Service and applicable law (GDPR, CCPA, local data-protection rules). Do not use this Actor to collect personal data without a lawful basis, and avoid redistributing downloaded video files without the creator's permission.

Why does a keyword sometimes return fewer results than maxItems?

TikTok's search API stops returning items once it decides it has shown you "enough" matches, especially for niche or very new keywords. The Actor will collect as many as TikTok serves and then stop — it never fabricates rows.

TikTok URLs expire after a short period. For persistent playback use the previewVideoUrl field (enabled by mirrorVideos=true, default ON) — it stays stable.

What is keywordRelevance for?

TikTok's search is intentionally fuzzy and often mixes in unrelated videos. Every result is tagged high (keyword found in title / description / hashtags / author) or none (fuzzy match). Leave strictKeywordMatch off to inspect both; turn it on to drop none rows at scrape time.

Does this Actor support @username / video URL input?

No — this Actor is keyword-search only. Profile and single-video extraction are outside its scope.

Can I run this Actor on a schedule?

Yes. Use Schedules in Apify Console to trigger runs at any cron interval and forward the dataset to a webhook, spreadsheet, or database.

Which URL should I use to embed a video preview on my site?

Use the tiktokEmbedUrl field. It points to TikTok's /embed/v2/ endpoint, which is the most permissive embed URL TikTok offers and works across the widest range of videos. Avoid TikTok's newer /player/v1/ endpoint — it rejects (HTTP 403) certain older videos or videos whose uploader tightened embed settings, even though the same videos play fine in /embed/v2/.

Limitations and disclaimers

  • This Actor is not affiliated with or endorsed by TikTok.
  • Expect occasional missing fields when TikTok omits them for a given video (null-safe in the schema).
  • Video download URLs are time-limited — re-scrape when needed.
  • Result ordering depends on TikTok's algorithm and varies by region and time.

Support

Found a bug or have a feature request? Open an issue on the Actor's issue tracker, or contact the maintainer via Apify Console's Submit feedback button at the top of the Actor page. Include a run ID and the input JSON so issues can be reproduced quickly.