I pasted one TikTok scraping input into two Apify Actors on 20 October 2026. Same JSON, same account, under a minute apart. One run cost $0.071. The other cost $0.011, and its date filter also worked on the hashtag, which the first run's did not.
The first Actor is clockworks/tiktok-scraper, the most used TikTok scraper on Apify with about 29,000 monthly users. The second is TikTok Scraper. I built the second one, so read this with that in mind. Input fields match clockworks', so moving over takes one or two lines of code.
This post shows the exact test, the price math at 1,000 videos, which fields differ, and what the cheaper one does not do.
The test input
This is a normal "watch a hashtag and a brand account" input in clockworks' format:
{
"hashtags": ["booktok"],
"profiles": ["duolingo"],
"resultsPerPage": 10,
"oldestPostDateUnified": "2026-10-06",
"shouldDownloadVideos": false,
"shouldDownloadCovers": false,
"shouldDownloadSubtitles": false,
"shouldDownloadSlideshowImages": false,
"proxyCountryCode": "None"
}
Ten videos from #booktok, ten from @duolingo, only videos posted since 6 October. I ran it on both Actors from the same Apify account on the Starter plan.
The results
| clockworks/tiktok-scraper | harshmaur/tiktok-scraper | |
|---|---|---|
| Videos returned | 20 | 20 |
| Extra rows | none | 1 profile row for @duolingo |
| #booktok videos inside the date window | 0 of 10 (all from February to April 2023) | 10 of 10 (all from 9 to 19 October 2026) |
| @duolingo videos inside the date window | 10 of 10 | 10 of 10 |
| Run time | 18 s | 31 s |
| Cost on the Starter plan | $0.071 | $0.011 |
Three things stand out.
The price. Clockworks charged 20 results at $0.003, plus 10 "date filter" add-on events at $0.001, plus a $0.001 start fee. Mine charged 20 videos at $0.00035, plus one profile row at $0.004.
The date filter on the hashtag. Clockworks applied the date filter to the profile only (that is where the 10 add-on charges came from). The #booktok videos it returned were up to three years and eight months old. Check this in your own runs if you watch hashtags with a date filter.
Speed. Clockworks was faster: 18 seconds against 31. For a scheduled job this rarely matters. For a chat agent waiting on a reply, it might.
The price at 1,000 videos
These are the per-event prices from each Actor's pricing table on 20 October 2026. Clockworks has tiered prices that fall on bigger Apify plans. Mine is one flat price on every plan.
| 1,000 videos | clockworks | harshmaur |
|---|---|---|
| Free plan, no filters | $3.70 | $0.35 |
| Free plan, with a date filter | $5.00 | $0.35 |
| Starter plan, with a date filter | $4.00 | $0.35 |
| Business plan, with a date filter | $2.30 | $0.35 |
| 1,000 comments, free plan | $1.25 | $0.20 |
The gap closes on clockworks' top tiers. On clockworks' Diamond tier, plain results are $0.50 per 1,000.
Where mine costs more: video downloads are $10 per 1,000 against clockworks' $1.30 or less, and each scraped profile adds a profile row at $4 per 1,000 profiles. If you mainly download MP4s, or scrape thousands of profiles for their bio only, do the math for your own job before you switch.
Moving over: the two lines you change
If you call the Actor from code, you change the Actor ID and keep your input:
import os, requests
# ACTOR = "clockworks~tiktok-scraper"
ACTOR = "harshmaur~tiktok-scraper"
TOKEN = os.environ["APIFY_TOKEN"]
run_input = {
"hashtags": ["booktok"],
"profiles": ["duolingo"],
"resultsPerPage": 3,
"oldestPostDateUnified": "2026-10-06",
"shouldDownloadVideos": False,
"shouldDownloadCovers": False,
}
rows = requests.post(
f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
headers={"Authorization": f"Bearer {TOKEN}"},
json=run_input,
timeout=300,
).json()
videos = [r for r in rows if r.get("dataType", "video") == "video"]
for v in videos:
print(v["createTimeISO"][:10], f"{v['playCount']:>10,} plays", v["authorMeta"]["name"], v["webVideoUrl"])
The real output of that script:
2026-10-13 4,703 plays laurinelexis https://www.tiktok.com/@laurinelexis/video/7695950683073187086
2026-10-19 59,400 plays probablyoffreading https://www.tiktok.com/@probablyoffreading/video/7698425693255798030
2026-10-11 370,200 plays caroline.montague https://www.tiktok.com/@caroline.montague/video/7695446883426110742
2026-10-19 85,100 plays duolingo https://www.tiktok.com/@duolingo/video/7698408739077901598
2026-10-12 665,400 plays duolingo https://www.tiktok.com/@duolingo/video/7695843389211708702
2026-10-13 2,300,000 plays duolingo https://www.tiktok.com/@duolingo/video/7696211706317409550
Besides the Actor ID, the dataType filter is the only other change most scripts need. Clockworks puts only videos in the main dataset. Mine puts videos, comments, followers and profiles in one dataset and marks each row with dataType. The .get("dataType", "video") default keeps the same script working on both Actors.
In the Apify Console it is even simpler: open your clockworks task, copy the input JSON, paste it into the new Actor's JSON tab, and start.
Which output fields differ
I compared every video row from both runs, including nested keys. 76 fields have the same name in both. Video fields such as createTimeISO, webVideoUrl, authorMeta.fans and the counts held the same values, apart from a few likes, comments and saves of drift, because the runs were seconds apart and people kept interacting. Some author fields differ: mine leaves authorMeta.bioLink and authorMeta.createTime empty and reports authorMeta.friends as 0, and in text it replaces line breaks with spaces.
Only in clockworks' output:
-
locationMeta.city,locationMeta.addressand similar place details on videos tagged with a location. -
authorMeta.commerceUserInfo, the business-account category.
Only in mine:
-
dataType, as above. -
isAiGenerated,locationCreated,duetEnabled,stitchEnabled,suggestedWords. -
authorMeta.regionandauthorMeta.secUid. -
videoMeta.transcript, filled when you ask for TikTok's own subtitles. -
aiAnalysis, filled when you turn on the paid AI analysis option.
If your spreadsheet uses place details or the business category, mine leaves those columns empty.
Input fields that do not carry over
Almost every clockworks field works as it is. These do not:
-
scrapeRelatedSearchWordsandscrapeAdditionalAuthorMetahave no effect. -
videoKvStoreIdOrNameis ignored. Downloads always go to the run's own key-value store, and the links are inmediaUrls. -
profileScrapeSections: ["stories"]returns no stories, because TikTok shows stories only to logged-in users.
Relative dates work in both: "30 days", "2 weeks", or just "30".
When to stay on clockworks
To be fair to a very good Actor:
- You are on a Platinum or Diamond Apify plan, where their prices come close to mine.
- You download a lot of videos.
- You need place details or the business category on each video.
- You want the Actor with a long track record: clockworks has over 140 million runs. Mine launched on 12 October 2026.
For everyone else, watching hashtags, brands or creators on a free or Starter plan, the same input now costs a sixth to a fourteenth as much.
Try it with your own input
Open TikTok Scraper on Apify, switch the input to JSON, and paste the input from your last clockworks run. Set resultsPerPage to 5 for a first test. For one hashtag and one profile, that costs less than a cent.
To check one video before you scrape a whole account, I use this free TikTok engagement rate calculator. Enter the playCount, diggCount, commentCount, shareCount and authorMeta.fans values from a row, and it gives the engagement rate by views and by followers.
If a field you rely on is missing or named differently, leave a comment with the field name. I would rather add it than have you write a mapping layer.
The links to my Actor include my Apify referral code.
Top comments (0)