TikTok Scraper: Audit Every Video on an Account in One Table
Pull every post from a TikTok account with views, shares and saves in one table, and see which videos carry the account. One key, billed per call.

Get every video on a TikTok account, with views, shares and saves, in one table. Paste this into your agent:
Set up https://monid.ai/SKILL.md, and then use Monid to pull the 20 latest posts of the TikTok account @gymshark, then give me one table with post date, length in seconds, plays, shares per 1,000 plays and saves per 1,000 plays, sorted by plays.
One prompt audits an account. 1 min setup · 30-60 hrs saved.
You want to know which videos on a TikTok account actually do the work: your own before you remake anything, or a competitor's before you plan a batch. TikTok shows an account one video at a time and gives you no table. This guide shows the quickest way to get the whole catalogue into rows, what came back when we audited a large brand account on 2026-10-16, and the traps that skew an audit: pinned posts, photo posts and counts that differ between endpoints. It runs through Monid, the OpenRouter for agent tools: one key, one balance, every tool priced per call. Oumomo, a content partner, turns a product link or a brief into a TikTok video; you are on the Monid blog, Monid sells the endpoints below, Oumomo is not in the Monid catalogue, and what we say about it comes from its public site.
What is the easiest way to scrape every video on a TikTok account?
Monid. Install it once, add a key, and your agent reads an account's posts with no scraper to write, no proxy to rent and no plan to pick.
- Pay per call. The post endpoint is billed per call, at $0.002 a page of up to 10 posts (Verified 2026-10-16 on the TikTok tools page). Buy calls as you need them: no monthly plan and no minimum top-up. Discovery and inspection are free; only a run bills.
- One install, every API. The same key and balance read a single video, the comments, a keyword search and every other tool on Monid, so the next question does not start with a new account.
- Lives inside your agent. Install the CLI, add your key, run the prompt above, and the tools are there whenever your agent needs them, with nothing to keep running. Your agent reads
SKILL.mdand learns the rest, so setup is about a minute.
At that price the audit in this guide, one name lookup and two pages of posts, is 3 calls and cost $0.006 (Verified 2026-10-16).
How do you pull a whole TikTok account into one table?
Look up the account's id, then ask for its posts a page at a time and follow the cursor. Three calls got us 20 posts of @gymshark.
For agents
Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:
set up https://monid.ai/SKILL.md
It learns the whole discover, inspect, run workflow itself. More in the agent quickstart.
For humans
npm install -g @monid-ai/cli
monid keys add -k <your-api-key> -l main
More in the CLI quickstart.
Turn the username into an id
monid run -p apify -e /scraptik/tiktok-api \
-i '{"usernameToId_username":"gymshark"}' -w
The endpoint takes a body, so the input goes in -i and not --query. One endpoint covers many jobs, and each job has its own prefixed fields: usernameToId_username for this step, userPosts_ fields for the next. The response is a uid and a sec_uid.
Read a page of posts
monid run -p apify -e /scraptik/tiktok-api \
-i '{"userPosts_userId":"<uid>","userPosts_secUserId":"<sec_uid>","userPosts_count":10}' \
-w -o page1.json
The response is a list with one object. Its aweme_list holds the posts, has_more says whether there is another page, and max_cursor is the cursor for it.
Follow the cursor
Send the same body again with the cursor as a string:
monid run -p apify -e /scraptik/tiktok-api \
-i '{"userPosts_userId":"<uid>","userPosts_secUserId":"<sec_uid>","userPosts_count":10,"userPosts_maxCursor":"<max_cursor>"}' \
-w -o page2.json
The second page picked up where the first stopped, the day after the last post of page 1. Decide how many pages you want before you start: 20 posts is 2 calls, and each call is billed on its own. To run the same pull over a list of handles, turning a TikTok handle list into a dataset in one script shows the loop.
Flatten it into rows
const rows = res[0].aweme_list.map(p => ({
id: p.aweme_id,
posted: new Date(p.create_time * 1000).toISOString().slice(0, 10),
seconds: p.video.duration / 1000, // milliseconds in the response
pinned: p.is_top === 1,
plays: p.statistics.play_count,
likes: p.statistics.digg_count,
comments: p.statistics.comment_count,
shares: p.statistics.share_count,
saves: p.statistics.collect_count,
}));
Or hand the whole job to an agent
Give this to your agent![]()
Set up https://monid.ai/SKILL.md, and then use Monid to pull the 20 latest posts of this TikTok account, flatten them into a table with date, length, plays, shares per 1,000 plays and saves per 1,000 plays, mark pinned posts, and sort by plays.The per-result route
If you want a profile scraper that takes a username and a result cap in one call, apidojo/tiktok-profile-scraper does that. Its listed price is $0.0003 per result (Verified 2026-10-16), and its notes say the limit parameter controls the number of results returned and charged, so the cap is your budget. We inspected it today and ran the per-call endpoint above instead:
monid run -p apify -e /apidojo/tiktok-profile-scraper \
-i '{"usernames":["getjuicygo"],"maxItems":60}' \
-w -o profile.json
-i and not --query, because this endpoint takes a body. Set maxItems low on a first run and raise it once you have seen the shape.
Can you scrape a TikTok profile yourself with Python?
Yes, people do it with browser automation or by calling the app's endpoints from Python, and it works until the page or the blocking changes. A scraper you write is yours to keep alive: a new page layout, a new check or a rotated signature stops your job, and your table is only as fresh as your last successful run. Free browser extensions and GitHub projects share that fate, and an extension is made for a person on a page, not for a list of accounts or an agent.
There is a rules side too: rules about scraping a platform differ by country and by use, so check yours before you build anything.
Doing it yourself means a proxy or browser setup, a way to resolve usernames to ids, cursor handling, retries and a repair every time the platform moves. That is hours before the first useful row. A page of up to 10 posts costs $0.002 here (Verified 2026-10-16). For anything you will run more than once, Monid is the better route: the collection is maintained for you and the output is typed JSON, not HTML you parse. A one-off look at a single account is quicker in the app. The endpoint-by-endpoint view of the same trade-off is in which TikTok scraper endpoint to use for profiles, videos and comments.
What does a TikTok catalogue audit show, and what can you build with it?
It shows how unevenly an account's attention is spread, and which formats beat their weight. We ran the three calls above on 2026-10-16 against @gymshark, an account with 6,686,436 followers, and got 20 posts: 3 pinned posts from 9 to 11 July and 17 posts from 28 September to 16 October.
The 20 posts drew 9,842,125 plays between them. The top post alone drew 2,712,056, which is 27.6 percent of the total. The top three hold 57.9 percent and the top five hold 79.7 percent. The median post drew about 80,800 plays, 11 of the 20 stayed under 100,000 and 6 passed 500,000. So the account is a handful of videos and a long tail, even at this size.
Plays tell you what was seen. Shares and saves tell you what people passed on or kept. The six biggest posts, with those rates:
| Posted | Seconds | Plays | Share of all plays | Shares per 1,000 plays | Saves per 1,000 plays | Pinned |
|---|---|---|---|---|---|---|
| 2026-10-13 | 30.0 | 2,712,056 | 27.6% | 6.7 | 7.9 | no |
| 2026-07-11 | 41.2 | 1,759,934 | 17.9% | 5.5 | 10.6 | yes |
| 2026-07-10 | 23.9 | 1,231,122 | 12.5% | 5.6 | 8.6 | yes |
| 2026-09-29 | 7.5 | 1,197,466 | 12.2% | 14.2 | 20.2 | no |
| 2026-10-05 | 19.7 | 944,540 | 9.6% | 5.9 | 11.0 | no |
| 2026-07-09 | 34.9 | 796,004 | 8.1% | 9.9 | 8.0 | yes |
The fourth row is the one worth the call. It is the shortest video in the whole pull, 7.5 seconds, and it was shared at 14.2 per 1,000 plays, against 5.5 to 9.9 for the other five, and saved at 20.2 per 1,000, against 7.9 to 11.0. By plays it ranks fourth. By what people did with it, it ranks first. A table sorted by views alone buries that.
What you can build with it
- A keep, remake, retire list. Rank an account's own posts by plays, then by shares and saves, and mark the ones that rank high on both as the formats to repeat. Oumomo makes TikTok videos from a product link or a brief, so the winning structure can be handed to a generator instead of described from memory.
- A competitor benchmark. Pull three rival accounts on the same day and compare the median post and the share of plays held by the top three. A rival with a flat spread and one with a single hit need different responses. To find which videos win for a topic rather than an account, searching TikTok videos by keyword is the other half of the research.
- A monthly check. Run the same pull each month and watch whether new posts beat the median of the last pull. Cheap pages make the repeat practical.
What goes wrong when you audit a TikTok account?
Five things skew the table, and the first three showed up in the 20 posts.
Why are the first rows from July?
Because pinned posts come first. The three oldest posts in the pull, 9 to 11 July, sat at the top of page 1 with is_top set to 1, ahead of the 16 October post. They hold 3,787,060 plays, 38.5 percent of the 20, and they are not recent output. Read is_top, then audit pinned posts separately, or the account looks older and bigger than its current output. The 17 unpinned posts total 6,055,065 plays, and the top one, the 13 October post, holds 44.8 percent of them.
const recent = rows.filter(r => !r.pinned);
Why does one post show a length of zero?
It is a photo post. The 14 October post came back with aweme_type 150, a video.duration of 0, a width and height of 0 and no music object, so code that reads p.music.title throws on it. Read the type before you read the video fields, and keep photo posts in their own group, because a length of 0 would drag any average length down.
Do two endpoints agree on the numbers?
Close, not exact. We read the 13 October post through the per-call endpoint and, two minutes later, through mrscraper /tiktok/video:
field posts endpoint video endpoint
plays 2,712,056 2,700,000
likes 371,998 372,000
shares 18,104 18,100
saves 21,421 21,423
comments 2,506 2,507
The video endpoint rounded the large counts and the small ones moved a little in the two minutes between calls. Pull every post from one endpoint and compare like with like, and do not mix sources in one column.
Whose video is it?
That same post sits in the @gymshark feed, but the video endpoint resolved it to another account: the author was theestallion, with 20.2 million fans. A post made with a partner can live in both feeds. Check the author on top posts before you credit the format to the account you are auditing.
How many calls is a bigger account?
10 posts a page, so 100 posts is 10 pages plus the lookup, 11 calls, about $0.022 at $0.002 a call (Verified 2026-10-16). Fix a page count first. Views also keep accruing: the newest post, from the day of the pull, had 27,109 plays against a median near 80,800, so leave the last week out of any comparison.
Which endpoint should I use for which job?
| Endpoint | What it does | Input | Returns | Billing |
|---|---|---|---|---|
apify/scraptik/tiktok-api | One account's posts, a video, comments, search, hashtags | userPosts_userId, userPosts_count, userPosts_maxCursor | Posts with plays, likes, comments, shares, saves | Per call, 10 posts a page |
apify/apidojo/tiktok-profile-scraper | A username's post history | usernames, maxItems | Posts with engagement | Per result |
mrscraper/tiktok/video | One video from its URL | url | Full video, author, music and counts | Per call |
We ran the first and the third on 2026-10-16 and inspected the second. The prices are $0.002 a call for the posts endpoint, $0.0003 a result for the profile scraper and $0.01 a call for the single video (Verified 2026-10-16). For a worked example of reading profiles and single videos from one endpoint, see scraping TikTok profiles and videos from one endpoint. Use the posts endpoint for the table, the video endpoint when you need one clip's full record, and the profile scraper when you want a username and a cap in one call. Current figures are on monid.ai/tools.
The video endpoint took about 48 seconds to answer, against a typical 27 seconds on its tool page, and its AI description, summary and transcription fields came back empty for the video we tried. Plan for a slow single-video read and do not build on those fields until you have seen them filled.
When is another route a better fit?
You need what only the account owner can see. Public numbers stop at plays, likes, comments, shares and saves. Watch time, audience and sales per video sit in the owner's analytics and any attributed checkout data, which beat anything read from outside. The audit is for accounts that are not yours, or for the numbers you do not track yourself.
The catalogue is too small to hold a pattern. Five posts show nothing a scroll would not. Post first, audit later.
You need a licensed, contractual feed. If your use needs a supported agreement with the platform, that is a different product from reading public pages. Check which applies to you.
The account has a deep history. Pages of 10 add up: a thousand posts is 100 calls. Cap the pages, or sample the latest few weeks; Apify against TikHub on price and depth compares providers when depth is the question.
And the disclosure: we resell these endpoints, so the advice to compare shares and saves rather than plays alone costs nothing to give.
Conclusion
The quickest way to audit every video on a TikTok account is to look up the id and read the posts a page at a time through Monid: $0.002 a call (Verified 2026-10-16), one key for TikTok and everything else, about a minute to set up and ready inside your agent whenever you need it, and 20 posts for $0.006. Writing your own scraper works until the platform changes and costs hours; Monid keeps the collection maintained.
Two things matter more than the choice of endpoint. Separate the pinned posts and the photo posts before you rank anything, or the table says more about July than about now. And rank by shares and saves as well as plays: the post that came fourth by plays was first by both, and it was the shortest video in the pull.
How we estimated the time saved: building and running your own account scraper is roughly 10 to 20 hours each for getting past blocking, resolving usernames and paging by cursor, and the first month of upkeep. That is 30 to 60 hours. The 1 minute is the install, key and first call once you already have a Monid key.
Free next step: run monid inspect -p apify -e /scraptik/tiktok-api, look up one username, read one page of posts and sort it by statistics.play_count.
FAQ
Is there a free TikTok scraper API?
Not free, but each call is small: through Monid a page of up to 10 posts costs $0.002 (Verified 2026-10-16), with no monthly plan and no minimum top-up, and discovery and inspection cost nothing. Our 20-post audit was 3 calls, $0.006.
Does this reach private or deleted posts?
No. It reads what a public profile shows, so private accounts return nothing and deleted posts are gone. That biases an audit toward what the account chose to keep: a video taken down for underperforming will not be in your table.
Can I get the comments as well as the posts?
Yes, from a separate call. The same posts endpoint has comment fields (listComments_awemeId and listComments_count), and a dedicated comments endpoint exists too. Audit the posts first, then pull comments only on the two or three videos worth understanding. Both are billed per call, $0.002 on the comments endpoint (Verified 2026-10-16).
Are view counts comparable across a catalogue?
Only roughly, because views keep accruing. A post from three weeks ago has had three weeks to collect them and yesterday's post has had a day. Sort by plays to find candidates, check the posted date before you conclude anything, and leave out the most recent week.
Published August 2026.


