Get recent videos from a TikTok profile
Fetch recent videos by one TikTok account: video_description, create_time, duration, cover_image_url, view_count, like_count, comment_count, share_count, favorites_count, hashtag_names and the sound.
https://api.scrapefield.com/v1/tiktok/videoshttps://api.scrapefield.com/v1/tiktok/videos?username=ferrariIn your code
const params = new URLSearchParams({
"username": "nasa"
});
const res = await fetch(`https://api.scrapefield.com/v1/tiktok/videos?${params}`, {
headers: { Authorization: `Bearer ${process.env.SCRAPEFIELD_KEY}` },
});
const { data, meta } = await res.json();
console.log(data, meta.credits_charged);Parameters
| Parameter | What it does |
|---|---|
username | The username. A leading @ is fine. |
url | The profile URL. |
limit | At most this many results, 1–30. A page can hold fewer while next_cursor is set: read until it is null.1–30, default 30 |
cursor | The meta.next_cursor from the previous page. Omit for the first page. |
fresh | Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it. default false |
Response
Returns an array of tiktok_video. This is the demo’s answer, the one the playground above returns, in full rather than abbreviated — including the fields that come back null, because a field is null when the platform does not show it and you should know which ones those are before you build on them. A call with your key returns the account you ask for.
{
"data": [
{
"id": "7431628159661611540",
"share_url": "https://www.tiktok.com/@blue.door.coffee/video/7431628159661611540",
"username": "blue.door.coffee",
"video_description": "Three days of proofing and it finally behaved. #citywalk #sourdough #fyp",
"create_time": "2026-09-05T22:52:21.000Z",
"duration": 8,
"cover_image_url": "https://cdn.example/tt/7431628159661611540.jpeg",
"play_url": "https://cdn.example/tt/7431628159661611540.mp4",
"view_count": 3180854,
"like_count": 241643,
"comment_count": 10940,
"share_count": 731,
"favorites_count": 18166,
"hashtag_names": [
"citywalk",
"sourdough",
"fyp"
],
"region_code": "PT",
"music": {
"id": "7251194684762746147",
"title": "original sound - blue.door.coffee",
"author": "blue.door.coffee",
"original": true
},
"duet_enabled": true,
"stitch_enabled": true
},
{
"id": "7441492762576856142",
"share_url": "https://www.tiktok.com/@blue.door.coffee/video/7441492762576856142",
"username": "blue.door.coffee",
"video_description": "Everything I learned about this in one minute. #baking #buildinpublic #fyp",
"create_time": "2026-04-17T22:31:03.000Z",
"duration": 130,
"cover_image_url": "https://cdn.example/tt/7441492762576856142.jpeg",
"play_url": "https://cdn.example/tt/7441492762576856142.mp4",
"view_count": 2430951,
"like_count": 125998,
"comment_count": 93,
"share_count": 1874,
"favorites_count": 3758,
"hashtag_names": [
"baking",
"buildinpublic",
"fyp"
],
"region_code": "DE",
"music": {
"id": "6997488681218345397",
"title": "Clair de Lune",
"author": "Claude Debussy",
"original": false
},
"duet_enabled": true,
"stitch_enabled": true
}
],
"meta": {
"request_id": "req_7f3ac1e94b2d40f8a1c6e5d2",
"credits_charged": 3,
"credits_remaining": 74218,
"cached": false,
"fetched_at": "2026-09-20T09:12:03Z",
"next_cursor": "eyJwIjoxLCJzIjoiYTNmOSJ9"
}
}Fields of tiktok_video
A TikTok video. Named after TikTok's Display and Research APIs.
| Field | What it is |
|---|---|
id | TikTok's numeric id — the number at the end of the URL. |
share_url | The video. |
username | Who posted it. |
video_description | The caption. |
create_time | When it was posted. null when the source does not say. |
duration | Seconds. null when the source does not give it. |
cover_image_url | The video's cover image. On TikTok's CDN. TikTok signs the link, and it can stop working within hours, so fetch the file soon. We do not rehost media. |
play_url | The video file. On TikTok's CDN. TikTok signs the link, and it can stop working within hours, so fetch the file soon. We do not rehost media. |
view_count | null when the source does not give it. |
like_count | null when the source does not give it. |
comment_count | null when the source does not give it. |
share_count | null when the source does not give it. |
favorites_count | Saves. null where the page does not show them. |
hashtag_names | Without the #. |
region_code | Where it was posted from, ISO 3166-1 alpha-2. |
music | The sound. |
music.id | TikTok's id for the sound. |
music.title | The sound's name, as TikTok shows it. |
music.author | Who the sound is credited to. |
music.original | An original sound rather than a track. |
duet_enabled | null where that is not known. |
stitch_enabled | null where that is not known. |
What it costs
3 credits per successful call, whether we fetch it or serve it from cache — you pay for the answer, not for how we produced it. Responses are cached for 3 hours and a cached one tells you when the data was actually fetched. A call we fail costs 0 and is refunded automatically.
On the smallest pack that is $2.34 per 1,000 calls; on the largest, $1.32. The full table.
What people build with it
Questions
How much does the TikTok user videos API cost?
3 credits a call: $2.34 per 1,000 calls on the smallest pack and $1.32 on the largest. A call that fails costs nothing, and the refund is automatic. A cached answer costs the same as a fresh one. Credits are bought in packs and never expire; there is no plan.
Do I need a TikTok account, a login or cookies?
No. You need a key from us and nothing from TikTok. We never take a customer's login, cookies or session, at any price, and no account of yours is ever at risk.
Can I try it without signing up?
Yes. Add demo=true and leave the key out, or press Send request in the playground on this page. The demo answers with a real answer about Ferrari, captured once a week, in exactly the shape a live call returns, whatever you ask, and charges nothing.
How fresh is the data?
An answer is kept for up to 3 hours, and a cached one says when it was fetched, in meta.fetched_at. Add fresh=true to fetch it again now, at the same price; it needs any purchase, not the trial.
What does it return?
A list of tiktok_video objects. Its fields are named after TikTok's Display and Research APIs. A field is null when TikTok does not show it, never missing. Every field is described on this page.
How do I get more than one page?
Pass meta.next_cursor back as cursor, and stop when it is null. Each page is a call, priced the same. A cursor lasts as long as the answer it belongs to is cached.
Can an AI agent call it?
Yes: it is the MCP tool get_tiktok_videos on our MCP server, with the same parameters, answer and price. Without a key, the tool answers from the demo.