プロフィールか動画を貼り付けてください。Web Unlockerがログインなしでページを返します。プロフィールなら正確なフォロワー数といいね数、再生回数付きの最新動画16件、動画なら再生回数、いいね数、コメント数、シェア数、お気に入り数が載っています。1,000ページで$0.98です。
無料リクエスト1,000件 · 課金は成功時のみ · 195以上の国 · Claude対応
チームについて簡単にご記入いただくと、次の内容をお届けします。
対象は公開ページで、ログインもTikTokアカウントも不要です。インフルエンサープラットフォーム、代理店、ブランド、研究者が読み取るのは次の2種類のページで、どれも1ページとして課金されます。





ご自身で試してみますか?無料リクエスト1,000件付きのAPIキーを入手しましょう。
プロフィールページ1つで、クリエイターの正確なフォロワー数といいね数、再生回数付きの最新動画16件が手に入り、課金は1回だけ、1,000ページあたり$0.98です。ApifyやBright DataのTikTokスクレイパーは、その動画を1本ずつ別の結果として課金します。
Apifyはクリエイター1,000人で$48を課金します。
ここでは$0.98です。
失敗したページは無料です。TikTokがエラーを返したら、もう一度リクエストしてください。料金がかかるのは、データ付きで返ったページだけです。
TikTokクリエイター1,000人の料金
最新動画16件と再生回数付きのプロフィール1,000件、公開価格で
Gologin:クリエイター1人につきプロフィールページ1つで、1,000ページあたり$0.98です。Bright Dataはプロフィールと動画をそれぞれ1件のレコードとして課金し、1,000件あたり$1.50です。Apifyの無料プランでは、TikTok Profile Scraperが動画ごとに1,000本あたり$3.00、最も使われているTikTok Scraperが1,000本あたり$3.70を課金します。
ご自身のクリエイターで実行しますか?APIキーと無料リクエストを入手しましょう。
プロフィールページには、クリエイターの正確なフォロワー数といいね数、再生回数付きの最新動画16件が載っています。各動画のページからは、いいね数、コメント数、シェア数、お気に入り数が加わります。17ページで$0.0167、動画ごとにクリエイターの本当のエンゲージメントがわかります。
TikTokはフォロワーを146.2Mと表示します。
スクレイパーは146,194,232を返します。
TikTok自身のAPIは、承認された研究者と、各ユーザー自身のアカウント向けです。同じクリエイター1,000人について、それぞれの方法が始める前に何を求め、いくら課金するかは次のとおりです。
| 必要なもの | ||||
|---|---|---|---|---|
| 他のクリエイターのデータ | あり | 研究者のみ | あり | あり |
| 課金の対象 | 1ページ | 承認後は無料 | 動画ごと | レコードごと |
| 動画16本付きのクリエイター1,000人 | $0.98 | ビジネス利用は不可 | $48〜$59.20 | $25.50 |
| 申請なしで開始 | あり | なし、約4週間 | あり | あり |
| 無料で開始 | 1,000リクエスト | 承認後 | 月$5 | 月5,000件 |
| ページ全体をHTMLで | あり | なし | なし | なし |
TikTok以外もスクレイピングしますか?Web Unlockerなら、どのページも同じ方法、同じ料金で返します。
TikTokは公開ページのデータを、HTMLの中にJSONとして持っています。Web UnlockerがそのHTMLを返し、数行のコードでプロフィールや動画を読み取れます。「クリエイター一覧」タブは小さなTikTokクローラーで、アカウントの一覧を渡すとCSVを出力します。
上のフォームにご記入ください。キーは1営業日以内にメールで届きます。
フォロワー数と最新の動画ならプロフィール、再生回数、いいね数、コメント数、シェア数、お気に入り数なら動画を選びます。
ページにデータが含まれているか確認し、TikTokがエラーを返したときはもう一度リクエストします。料金がかかるのは、返ってきたページだけです。
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`);ご自身のクリエイターで実行しますか?APIキーと無料リクエストを入手しましょう。
1つのアカウント、1つのプロキシネットワーク、1つのエコシステム。用途に合った製品をお選びください。
ほかのサイトもスクレイピングしますか?Instagram、YouTube、Redditのスクレイパー、またはすべてのWebスクレイピングツールをご覧ください。
TikTokスクレイパー(TikTokクローラー)は、公開されているTikTokのページを読み取り、データに変えるツールです。プロフィールならフォロワー数、いいね数、最新の動画、動画なら再生回数、いいね数、コメント数、シェア数、お気に入り数が対象です。Gologin Web UnlockerはTikTokスクレイパーAPIで、プロフィールか動画のアドレスを送ると、そのデータが載ったページを1,000ページあたり$0.98で返します。
TikTokのデータスクレイピングは、1ページにつき1リクエストです。公開プロフィールか動画のアドレスをWeb Unlockerに送ると、ログアウト状態の訪問者が見るとおりのページが、TikTokがページ内にJSONとして持つデータとともに返ります。上のコードなら数行で読み取れます。TikTokがエラーを返したら、もう一度リクエストしてください。料金がかかるのは、返ってきたページだけです。
requestsライブラリでプロフィールのアドレスをWeb Unlockerに送り、ページからJSONを読み取ります。上のPythonタブは完全なスクリプトで、実際のAPIでテスト済みです。クリエイターの正確なフォロワー数、いいね数、動画数と、再生回数付きの最新動画16件を出力します。
正確なフォロワー数、フォロー数、いいね数、動画数、名前、自己紹介、認証バッジ、そしてリンク、キャプション、再生回数付きの最新動画16件です。TikTokはページ上では丸めた数を表示しますが、ページ内のデータには正確な数が入っています。
TikTok動画のスクレイピングでは、再生回数、いいね数、コメント数、シェア数、お気に入り数、キャプション、ハッシュタグ、サウンド、日付、長さ、カバー画像、そして投稿者とそのフォロワー数が取得できます。再生回数の多い動画では、TikTokは再生回数といいね数を、画面の表示と同じように丸めています。
はい。公開プロフィールと動画はログインなしで読み込めます。Web Unlockerはログアウト状態の訪問者としてページを開くため、TikTokアカウントは不要で、ご自身のアカウントをリスクにさらすこともありません。非公開アカウントは閉じたままです。
承認された研究者のみです。Research APIの対象は、米国、ヨーロッパ、その他数か国の学術機関と非営利の研究グループで、審査には約4週間かかります。Display APIが読み取れるのは、お客様のアプリにサインインしたユーザー自身のプロフィールと動画だけです。どちらも、他のクリエイターのデータを使った商用の業務は対象外です。
クリエイターの最新動画のいいね数、コメント数、シェア数、お気に入り数を合計し、再生回数で割ります。Web Unlockerはプロフィールページから最新動画16件を、各動画のページからその数値を取得します。17ページで$0.0167です。上のNode.jsタブが計算してCSVを書き出します。MrBeastでは14.7%でした。
コメント数なら可能です。どの動画ページにも載っています。コメントそのものはスクロールに合わせて読み込まれ、ログインしたセッションが必要なため、Web Unlockerは返しません。
1,000ページあたり$0.98で、どのページも同じ料金です。最新動画16件付きのプロフィールも1ページ、数値付きの動画も1ページです。失敗したリクエストは無料です。最初に1,000件の無料リクエストが付き、プランは50,000リクエストで月$49からです。
目的によります。ApifyとBright Dataは、プロフィール、動画、ハッシュタグ、コメントから完成した行を提供し、1行ごとに課金します。Web Unlockerは公開プロフィールや動画のページ全体を1ページ1つの料金で返し、TikTokでもほかのどのサイトでも同じなので、クリエイターの見極めは数セントで済みます。
はい。ApifyのTikTok Scraperは動画ごとに課金し、無料プランで1,000本あたり$3.70なので、クリエイターの最新動画16本は16件の結果になります。Web Unlockerは、その16本の動画と再生回数を含むプロフィールを1ページとして返します。クリエイター1,000人で$0.98です。
ログインなしで読み込めるプロフィールと動画は公開ページです。2024年1月のMeta対Bright Data訴訟で、米国連邦裁判所は、プラットフォームの規約はログアウト状態での公開データのスクレイピングを禁じていないと判断しました。何を収集し、どう使うかはお客様の判断ですので、プロジェクトに適用されるルールに照らして確認してください。
チームについて簡単にご記入いただくと、次の内容をお届けします。