~ / endpoints / Video API

TikTok Video Scraper API

Our TikTok video scraper turns any video permalink into structured JSON: the caption, play, like, comment, save, and share counts, the author block, the music track, cover images, and hashtags in one request.

Get a free API keyBrowse the endpoints
1,000
free requests / mo
2.6s
median response
play & like
counts per video
JSON
structured output

Use it for

>

Engagement tracking

Pull a video on a schedule and record plays, likes, comments, shares, and saves to chart how a post performs over time.
>

Campaign reporting

Resolve a list of sponsored video URLs into clean engagement rows for a client dashboard without opening the app.
>

Creator analysis

Read the author block and per-video stats together to see which formats and sounds drive a creator's reach.
>

Sound and trend research

Extract the music id and title from top videos to find which sounds are fuelling a trend.

Quickstart

cURL
curl "https://api.tiktokscraperapi.com/api/v1/tiktok/video?url=https://www.tiktok.com/@scout2015/video/6718335390845095173&api_key=$API_KEY"
Python
import requests

BASE = "https://api.tiktokscraperapi.com/api/v1"
API_KEY = "YOUR_API_KEY"

# Pass the full video permalink as url (or an id plus author).
data = requests.get(
    f"{BASE}/tiktok/video",
    params={
        "url": "https://www.tiktok.com/@scout2015/video/6718335390845095173",
        "api_key": API_KEY,
    },
    timeout=30,
).json()

print(data["author"]["uniqueId"], "-", data["title"])
s = data["stats"]
print(s["plays"], "plays,", s["likes"], "likes,", s["comments"], "comments")
print("hashtags:", ", ".join(data["hashtags"]))

Response

200 OK
{
  "id": "6718335390845095173",
  "url": "https://www.tiktok.com/@scout2015/video/6718335390845095173",
  "socialPlatform": "tiktok",
  "title": "Scramble up ur name & I'll try to guess it 🐶❤️ #foryoupage #petsoftiktok #aesthetic",
  "description": "Scramble up ur name & I'll try to guess it 🐶❤️ #foryoupage #petsoftiktok #aesthetic",
  "caption": "Scramble up ur name & I'll try to guess it 🐶❤️ #foryoupage #petsoftiktok #aesthetic",
  "create_time": 1564234358,
  "created_at": "2019-07-27T13:32:38.000Z",
  "author": {
    "id": "53279706535428096",
    "uniqueId": "scout2015",
    "nickname": "Scout, Suki & Stella",
    "verified": true,
    "signature": "Click follow to join the PAWsitive Pack",
    "avatar": "https://p19-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/4cbe05e194623e3f19aef975d9fdf26c~tplv-tiktokx-cropcenter:1080:1080.jpeg?x-expires=1783051200&x-signature=...",
    "secUid": "MS4wLjABAAAAPZWNdkF_cmVSPCvV0Y6MCsH29mlAOlMOX3ikzGvlfMm3K6OMZv-JrRImpEHxdIMI",
    "url": "https://www.tiktok.com/@scout2015"
  },
  "stats": {
    "plays": 158400,
    "likes": 35100,
    "comments": 5756,
    "shares": 1443,
    "saves": 641
  },
  "statsV2": null,
  "images": [
    "https://p16-common-sign.tiktokcdn-us.com/tos-maliva-p-0068/2367c7d45cf54a1397abd0e72bf22eac~tplv-tiktokx-origin.image?x-expires=1783051200&x-signature=..."
  ],
  "thumbnail": "https://p16-common-sign.tiktokcdn-us.com/tos-maliva-p-0068/2367c7d45cf54a1397abd0e72bf22eac~tplv-tiktokx-origin.image?x-expires=1783051200&x-signature=...",
  "video": {
    "duration": 10,
    "width": 576,
    "height": 1024,
    "cover": "https://p16-common-sign.tiktokcdn-us.com/...",
    "dynamic_cover": "https://p16-common-sign.tiktokcdn-us.com/...",
    "play_addr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/...",
    "download_addr": null
  },
  "music": {
    "id": "6689804660171082501",
    "title": "original sound",
    "authorName": "tiff",
    "duration": 10,
    "cover": "https://p16-common-sign.tiktokcdn-us.com/...",
    "play_url": "https://v16m.tiktokcdn-us.com/..."
  },
  "hashtags": [
    "foryoupage",
    "PetsOfTikTok",
    "aesthetic",
    "bonevoyage"
  ],
  "_source": "rehydration"
}
FieldTypeDescription
idstringThe numeric video id.
urlstringThe canonical video permalink.
titlestringThe caption text (also returned as description and caption).
create_timeintegerPublish time as a Unix timestamp; created_at is the ISO 8601 form.
authorobjectThe creator: id, uniqueId, nickname, verified, signature, avatar, secUid, and url.
statsobjectNumeric engagement: plays, likes, comments, shares, and saves.
statsV2objectThe exact string counts when TikTok ships them; null on the logged-out reflow page.
imagesarrayCover and poster image URLs for the video.

How it works

  1. Send a GET request with your target and API key.
  2. We route through residential proxies, handle anti-bot, and parse the response.
  3. You get validated JSON back, ready to use.

How it compares

Our APIDIY (requests / headless)TikTok official API
Input by video URLYes, url or id + authorManual page fetch and parseoEmbed only, no counts
Play and like countsNumeric, with share-meta fallbackBlob often stripped from serversNot exposed publicly
SetupAPI key onlyProxies, headless browser, parserResearch API application
Anti-bot and proxiesBuilt in, US residentialYou build and maintain itNot applicable
Music and hashtagsReturned in one callExtra parsing per fieldLimited
OutputFlat JSON, stable schemaRaw state blob you parseRestricted JSON

Pricing

PlanPriceBest for
Free1,000 requestsTesting and small jobs
Pro$0.60 / 1kProduction workloads
Pay-as-you-go$0.90 / 1kSpiky or one-off volume

Median response 2.6s. You only pay for successful requests.

FAQ

What is a TikTok video scraper?

A TikTok video scraper is a tool that reads a single public video's data and returns it in a structured format. Our TikTok video scraper API takes a video permalink and returns the caption, play, like, comment, share and save counts, the author block, the music track, cover images, and hashtags as JSON from one request.

How do I get the view and like counts for a TikTok video?

Send a GET request to our tiktok/video endpoint with the video url and your API key. The stats object returns plays, likes, comments, shares, and saves as numbers. If a capture comes back with the engagement blob stripped, we parse the like and comment figures out of the page's share metadata so you still get counts back.

Can I pass just the video id instead of the URL?

Yes. You can pass the full permalink as url, or the bare numeric id together with the author handle so we can build the canonical URL. Passing url is the simplest route and is what the examples use.

Why do some TikTok videos return null for statsV2?

statsV2 holds the exact counts as strings and TikTok only ships it on some layouts. The logged-out reflow page that our residential requests usually land on drops statsV2, so it comes back null there while the numeric stats block is still populated. Use stats for the guaranteed numbers and statsV2 when it is present.

Does the API return the video download URL?

The video object includes play_addr and, when present, download_addr, along with the cover and dynamic_cover image URLs. These are the URLs TikTok exposes on the page; they are time-signed by TikTok and expire, so fetch them promptly if you need the media itself.

How fast is the TikTok video scraper API?

Median end-to-end response is about 2.6 seconds, including residential proxy routing, anti-bot handling, retries, and parsing. One call returns the full video item, so there is no need to chain requests to assemble the stats and metadata.

Get video api as JSON
Free plan, 1,000 requests. No credit card required.
Get a free API key All endpoints