Dán một profile hoặc video. Web Unlocker trả về trang mà không cần đăng nhập: số follower, lượt thích chính xác và 16 video mới nhất kèm lượt xem của một profile, lượt xem, lượt thích, bình luận, lượt chia sẻ và lượt lưu của một video. $0.98 cho 1.000 trang.
1.000 yêu cầu miễn phí · Chỉ tính phí khi thành công · 195+ quốc gia · Sẵn sàng cho Claude
Trang TikTok mất 4 đến 20 giây để tải, đôi khi lâu hơn. Hệ thống vẫn đang xử lý, bạn không cần nhấp lại.
Sẵn sàng cho các nhà sáng tạo của riêng bạn? Nhận API key hoặc đặt lịch demo.
Hãy cho chúng tôi biết đôi nét về đội ngũ của bạn để nhận:
Các trang công khai, không cần đăng nhập và không cần tài khoản TikTok. Các nền tảng influencer, agency, thương hiệu và nhà nghiên cứu đọc hai loại trang này, mỗi loại đều được tính như một trang.





Muốn tự mình thử? Nhận API key với 1.000 yêu cầu miễn phí.
Một trang profile mang về số follower và lượt thích chính xác của nhà sáng tạo cùng 16 video mới nhất kèm lượt xem, tính phí một lần với $0.98 cho 1.000 trang. Các scraper TikTok trên Apify và Bright Data tính phí mỗi video đó như một kết quả riêng.
Apify tính $48 cho 1.000 nhà sáng tạo.
Ở đây chúng có giá $0.98.
Trang tải không thành công thì không tốn phí. Khi TikTok gửi về lỗi, hãy yêu cầu lại: bạn chỉ trả tiền cho trang trả về kèm dữ liệu.
Chi phí cho 1.000 nhà sáng tạo TikTok
1.000 profile kèm 16 video mới nhất và lượt xem, theo giá công bố
Gologin: một trang profile cho mỗi nhà sáng tạo, $0.98 cho 1.000 trang. Bright Data tính phí mỗi profile và mỗi video như một bản ghi, $1.50 cho 1.000. Ở gói miễn phí của Apify, TikTok Profile Scraper tính phí mỗi video $3.00 cho 1.000, và TikTok Scraper được dùng nhiều nhất tính $3.70 cho 1.000.
Sẵn sàng chạy nó trên các nhà sáng tạo của riêng bạn? Nhận API key và các yêu cầu miễn phí.
Một trang profile mang về số follower và lượt thích chính xác của nhà sáng tạo cùng 16 video mới nhất kèm lượt xem. Mỗi trang video thêm lượt thích, bình luận, lượt chia sẻ và lượt lưu của nó. 17 trang, $0.0167, và bạn có mức tương tác thật của nhà sáng tạo, từng video một.
TikTok hiển thị 146.2M follower.
Scraper trả về 146,194,232.
API riêng của TikTok chỉ dành cho các nhà nghiên cứu được phê duyệt và cho tài khoản của chính mỗi người dùng. Đây là những gì mỗi hướng đòi hỏi ở bạn trước khi bắt đầu, và tính phí bao nhiêu cho cùng 1.000 nhà sáng tạo.
| Bạn cần gì | ||||
|---|---|---|---|---|
| Dữ liệu của nhà sáng tạo khác | Có | Chỉ nhà nghiên cứu | Có | Có |
| Bạn trả tiền cho | Một trang | Miễn phí sau khi duyệt | Mỗi video | Mỗi bản ghi |
| 1.000 nhà sáng tạo kèm 16 video | $0.98 | Không cho doanh nghiệp | $48 đến $59.20 | $25.50 |
| Bắt đầu mà không cần nộp đơn | Có | Không, khoảng 4 tuần | Có | Có |
| Miễn phí để bắt đầu | 1.000 yêu cầu | Sau khi duyệt | $5 mỗi tháng | 5.000 mỗi tháng |
| Toàn bộ trang ở dạng HTML | Có | Không | Không | Không |
Cần thu thập nhiều hơn TikTok? Web Unlocker trả về bất kỳ trang nào theo cùng cách, với cùng mức giá.
TikTok giữ dữ liệu của một trang công khai dưới dạng JSON bên trong HTML của nó. Web Unlocker trả về HTML đó, và vài dòng code sẽ đọc profile hoặc video ra từ đó. Tab Danh sách profile là một TikTok crawler nhỏ: đưa vào một danh sách tài khoản, nhận ra một file CSV.
Điền biểu mẫu ở trên. Key sẽ được gửi qua email trong vòng một ngày làm việc.
Một profile để lấy số follower và các video mới nhất, một video để lấy lượt xem, lượt thích, bình luận, lượt chia sẻ và lượt lưu.
Kiểm tra xem trang có kèm dữ liệu không, và yêu cầu lại khi TikTok gửi về lỗi: bạn chỉ trả tiền cho trang trả về.
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python tiktok_profile.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport html
import json
import os
import re
import time
import requests
username = "mrbeast"
def scrape(url, marker):
for attempt in range(3):
address = url if attempt == 0 else f"{url}?fresh={int(time.time())}"
try:
response = requests.get(
"https://parsing.webunlocker.gologin.com/v1/scrape",
params={"url": address, "geo": "us", "format": "json"},
headers={"apikey": os.environ["GOLOGIN_SCRAPING_API_KEY"]},
timeout=60,
)
page = response.json().get("data", {}).get("html", "") if response.ok else ""
except requests.RequestException:
page = ""
if marker in page:
return page
time.sleep(3)
raise RuntimeError("TikTok did not send the page, try again later")
page = scrape(f"https://www.tiktok.com/@{username}", '"followerCount"')
script = re.search(r'<script id="__UNIVERSAL_DATA_FOR_REHYDRATION__"[^>]*>(.*?)</script>', page, re.S)
info = json.loads(script.group(1))["__DEFAULT_SCOPE__"]["webapp.user-detail"]["userInfo"]
user, stats = info["user"], info["statsV2"]
videos = []
for item in page.split('data-e2e="user-post-item"')[1:]:
video = re.search(r'/video/(\d+)"', item)
views = re.search(r'data-e2e="video-views"[^>]*>([^<]*)<', item)
caption = re.search(r'<img alt="([^"]*)"', item)
if video:
videos.append({
"url": f"https://www.tiktok.com/@{username}/video/{video.group(1)}",
"views": views.group(1) if views else None,
"caption": html.unescape(caption.group(1)).split(" created by ")[0].strip() if caption else "",
})
profile = {
"username": user["uniqueId"],
"nickname": user["nickname"],
"bio": user["signature"],
"verified": user["verified"],
"followers": int(stats["followerCount"]),
"following": int(stats["followingCount"]),
"likes": int(stats["heartCount"]),
"videos": int(stats["videoCount"]),
"latest_videos": videos,
}
print(json.dumps(profile, indent=2, ensure_ascii=False))
print(f"@{username}: {profile['followers']:,} followers, {len(videos)} latest videos from one page")GOLOGIN_SCRAPING_API_KEY=your_key node tiktok-engagement.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
const username = 'mrbeast';
async function scrape(url, marker) {
for (let attempt = 0; attempt < 3; attempt += 1) {
const api = new URL('https://parsing.webunlocker.gologin.com/v1/scrape');
api.search = new URLSearchParams({ url: attempt === 0 ? url : `${url}?fresh=${Date.now()}`, geo: 'us', format: 'json' });
try {
const response = await fetch(api, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
signal: AbortSignal.timeout(60_000),
});
const page = response.ok ? ((await response.json()).data?.html ?? '') : '';
if (page.includes(marker)) return page;
} catch {}
await new Promise((resolve) => setTimeout(resolve, 3000));
}
throw new Error(`TikTok did not send ${url}, try again later`);
}
const data = (page) =>
JSON.parse(page.match(/<script id="__UNIVERSAL_DATA_FOR_REHYDRATION__"[^>]*>([\s\S]*?)<\/script>/)[1]).__DEFAULT_SCOPE__;
const profile = await scrape(`https://www.tiktok.com/@${username}`, '"followerCount"');
const followers = Number(data(profile)['webapp.user-detail'].userInfo.statsV2.followerCount);
const links = profile
.split('data-e2e="user-post-item"')
.slice(1)
.map((item) => item.match(/\/video\/(\d+)"/)?.[1])
.filter(Boolean)
.map((id) => `https://www.tiktok.com/@${username}/video/${id}`);
const rows = [];
for (const url of links) {
const video = data(await scrape(url, '"playCount"'))['webapp.video-detail'].itemInfo.itemStruct;
const stats = video.statsV2;
rows.push({
url,
date: new Date(video.createTime * 1000).toISOString().slice(0, 10),
plays: Number(stats.playCount),
likes: Number(stats.diggCount),
comments: Number(stats.commentCount),
shares: Number(stats.shareCount),
saves: Number(stats.collectCount),
caption: video.desc,
});
}
const cell = (value) => `"${String(value).replaceAll('"', '""')}"`;
writeFileSync(
`${username}-videos.csv`,
[Object.keys(rows[0]).join(','), ...rows.map((row) => Object.values(row).map(cell).join(','))].join('\n'),
);
const sum = (key) => rows.reduce((total, row) => total + row[key], 0);
const engagement = (sum('likes') + sum('comments') + sum('shares') + sum('saves')) / sum('plays');
console.table(rows.map(({ caption, ...row }) => row));
console.log(
`@${username}: ${followers.toLocaleString('en')} followers, ${rows.length} videos, ${(engagement * 100).toFixed(1)}% engagement, ${rows.length + 1} pages, saved to ${username}-videos.csv`,
);GOLOGIN_SCRAPING_API_KEY=your_key node tiktok-creators.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
const creators = ['mrbeast', 'nasa', 'khaby.lame', 'zachking', 'charlidamelio'];
async function scrape(url, marker) {
for (let attempt = 0; attempt < 3; attempt += 1) {
const api = new URL('https://parsing.webunlocker.gologin.com/v1/scrape');
api.search = new URLSearchParams({ url: attempt === 0 ? url : `${url}?fresh=${Date.now()}`, geo: 'us', format: 'json' });
try {
const response = await fetch(api, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
signal: AbortSignal.timeout(60_000),
});
const page = response.ok ? ((await response.json()).data?.html ?? '') : '';
if (page.includes(marker)) return page;
} catch {}
await new Promise((resolve) => setTimeout(resolve, 3000));
}
return null;
}
const UNITS = { K: 1e3, M: 1e6, B: 1e9 };
const number = (text) => Number.parseFloat(text) * (UNITS[text.at(-1)] ?? 1);
const rows = [];
for (const username of creators) {
const page = await scrape(`https://www.tiktok.com/@${username}`, '"followerCount"');
if (!page) {
console.log(`@${username}: no page this time, run it again later`);
continue;
}
const script = page.match(/<script id="__UNIVERSAL_DATA_FOR_REHYDRATION__"[^>]*>([\s\S]*?)<\/script>/)[1];
const { user, statsV2 } = JSON.parse(script).__DEFAULT_SCOPE__['webapp.user-detail'].userInfo;
const views = [...page.matchAll(/data-e2e="video-views"[^>]*>([^<]+)</g)].map(([, text]) => number(text)).sort((a, b) => a - b);
rows.push({
username: user.uniqueId,
name: user.nickname,
verified: user.verified,
followers: Number(statsV2.followerCount),
likes: Number(statsV2.heartCount),
videos: Number(statsV2.videoCount),
median_views: views.length ? views[Math.floor(views.length / 2)] : '',
});
}
const cell = (value) => `"${String(value).replaceAll('"', '""')}"`;
writeFileSync('creators.csv', [Object.keys(rows[0]).join(','), ...rows.map((row) => Object.values(row).map(cell).join(','))].join('\n'));
console.table(rows);
console.log(`${rows.length} of ${creators.length} creators, one page each, saved to creators.csv`);Sẵn sàng chạy nó trên các nhà sáng tạo của riêng bạn? Nhận API key và các yêu cầu miễn phí.
Một tài khoản, một mạng proxy, một hệ sinh thái. Chọn sản phẩm phù hợp với công việc.
Thu thập thêm nhiều trang web khác? Xem các scraper Instagram, YouTube và Reddit, hoặc mọi công cụ thu thập dữ liệu web.
TikTok scraper, hay TikTok crawler, là công cụ đọc các trang TikTok công khai và chuyển chúng thành dữ liệu: số follower, lượt thích và các video mới nhất của một profile, lượt xem, lượt thích, bình luận, lượt chia sẻ và lượt lưu của một video. Gologin Web Unlocker là một TikTok scraper API: gửi cho nó địa chỉ một profile hoặc video và nó trả về trang kèm dữ liệu đó, với $0.98 cho 1.000 trang.
Thu thập dữ liệu TikTok chỉ cần một yêu cầu cho mỗi trang: gửi địa chỉ của một profile hoặc video công khai tới Web Unlocker. Nó trả về trang giống như một khách truy cập chưa đăng nhập nhìn thấy, kèm dữ liệu mà TikTok giữ bên trong dưới dạng JSON. Đoạn code ở trên đọc nó trong vài dòng. Khi TikTok gửi về lỗi, hãy yêu cầu lại: bạn chỉ trả tiền cho trang trả về.
Gửi địa chỉ profile tới Web Unlocker bằng thư viện requests và đọc JSON từ trang. Tab Python ở trên là một script hoàn chỉnh, đã được kiểm thử trên API thật: nó in ra số follower, lượt thích và số video chính xác của nhà sáng tạo, cùng 16 video mới nhất kèm lượt xem.
Số follower, số đang follow, lượt thích và số video chính xác, tên, tiểu sử và dấu xác minh, cùng 16 video mới nhất kèm liên kết, chú thích và lượt xem. TikTok hiển thị số đã làm tròn trên trang; dữ liệu bên trong trang chứa số chính xác.
Một scraper video TikTok lấy lượt xem, lượt thích, bình luận, lượt chia sẻ và lượt lưu, chú thích, hashtag, âm thanh, ngày đăng và thời lượng, ảnh bìa, cùng tác giả kèm số follower của họ. Với các video lớn, TikTok làm tròn lượt xem và lượt thích, giống như cách nó hiển thị.
Có. Profile và video công khai tải được mà không cần đăng nhập, và Web Unlocker mở chúng như một khách truy cập chưa đăng nhập. Bạn không cần tài khoản TikTok và không đặt tài khoản nào của bạn vào rủi ro. Tài khoản riêng tư vẫn đóng.
Chỉ dành cho các nhà nghiên cứu được phê duyệt. Research API mở cho các nhóm nghiên cứu học thuật và phi lợi nhuận ở Mỹ, châu Âu và một vài quốc gia khác, và quá trình xét duyệt mất khoảng 4 tuần. Display API chỉ đọc profile và video của người dùng đăng nhập vào ứng dụng của bạn. Không API nào dùng được cho công việc thương mại trên dữ liệu của nhà sáng tạo khác.
Cộng lượt thích, bình luận, lượt chia sẻ và lượt lưu của các video mới nhất của nhà sáng tạo rồi chia cho lượt xem. Web Unlocker mang về 16 video mới nhất từ trang profile và số liệu của từng video từ trang riêng của nó: 17 trang, $0.0167. Tab Node.js ở trên tính tổng và ghi ra file CSV; với MrBeast kết quả là 14.7%.
Số bình luận thì có: mọi trang video đều có con số này. Bản thân các bình luận tải khi bạn cuộn và cần một phiên đã đăng nhập, nên Web Unlocker không trả về chúng.
$0.98 cho 1.000 trang, cùng một mức giá cho mọi trang: một profile kèm 16 video mới nhất là một trang, một video kèm số liệu của nó là một trang. Yêu cầu không thành công thì không tốn phí. Bạn bắt đầu với 1.000 yêu cầu miễn phí, và các gói bắt đầu từ $49 mỗi tháng cho 50.000 yêu cầu.
Tùy vào nhu cầu của bạn. Apify và Bright Data bán các dòng dữ liệu làm sẵn từ profile, video, hashtag và bình luận, và tính phí từng dòng. Web Unlocker trả về toàn bộ trang profile hoặc video công khai với một mức giá cho mỗi trang, trên TikTok và trên mọi trang web khác, nên việc kiểm tra nhà sáng tạo chỉ tốn vài cent.
Có. TikTok Scraper của Apify tính phí mỗi video, $3.70 cho 1.000 ở gói miễn phí, nên 16 video mới nhất của một nhà sáng tạo là 16 kết quả. Web Unlocker trả về profile kèm 16 video đó và lượt xem của chúng như một trang: $0.98 cho 1.000 nhà sáng tạo.
Profile và video tải được mà không cần đăng nhập là các trang công khai. Trong vụ Meta v. Bright Data, vào tháng 1 năm 2024, một tòa án liên bang Mỹ đã kết luận rằng điều khoản của một nền tảng không cấm thu thập dữ liệu công khai khi chưa đăng nhập. Bạn thu thập gì và dùng ra sao là quyết định của bạn, vì vậy hãy đối chiếu với các quy định áp dụng cho dự án của bạn.
Hãy cho chúng tôi biết đôi nét về đội ngũ của bạn để nhận: