Wklej profil lub film. Web Unlocker zwróci stronę bez logowania: dokładną liczbę obserwujących i polubień profilu oraz 16 najnowszych filmów z wyświetleniami, a dla filmu wyświetlenia, polubienia, komentarze, udostępnienia i zapisy. $0.98 za 1000 stron.
1000 darmowych żądań · Płatność tylko za sukces · 195+ krajów · Gotowe dla Claude
Strony TikToka ładują się od 4 do 20 sekund, czasem dłużej. Nadal pracuję, nie musisz klikać ponownie.
Gotowy na własnych twórców? Pobierz klucz API albo umów demo.
Opowiedz nam trochę o swoim zespole i otrzymasz:
Publiczne strony, bez logowania i bez konta na TikToku. Platformy influencer marketingu, agencje, marki i badacze czytają te dwa rodzaje stron, każdą rozliczaną jako jedna strona.





Chcesz spróbować sam? Odbierz klucz API z 1000 darmowych żądań.
Jedna strona profilu przynosi dokładną liczbę obserwujących i polubień twórcy oraz jego 16 najnowszych filmów z wyświetleniami, rozliczana raz, po $0.98 za 1000 stron. Scrapery TikToka na Apify i w Bright Data rozliczają każdy z tych filmów jako osobny wynik.
Apify rozlicza $48 za 1000 twórców.
Tutaj kosztują $0.98.
Nieudana strona nic nie kosztuje. Gdy TikTok wyśle błąd, poproś o nią ponownie: płacisz tylko za stronę, która wróci z danymi.
Ile kosztuje 1000 twórców z TikToka
1000 profili z 16 najnowszymi filmami i wyświetleniami, według opublikowanych cen
Gologin: jedna strona profilu na twórcę, $0.98 za 1000 stron. Bright Data rozlicza każdy profil i każdy film jako rekord, $1.50 za 1000. W darmowym planie Apify jego TikTok Profile Scraper rozlicza każdy film po $3.00 za 1000, a najczęściej używany TikTok Scraper po $3.70 za 1000.
Chcesz uruchomić to na własnych twórcach? Odbierz klucz API i darmowe żądania.
Strona profilu przynosi dokładną liczbę obserwujących i polubień twórcy oraz jego 16 najnowszych filmów z wyświetleniami. Strona każdego filmu dodaje jego polubienia, komentarze, udostępnienia i zapisy. 17 stron, $0.0167, i masz prawdziwe zaangażowanie twórcy, film po filmie.
TikTok pokazuje 146.2 mln obserwujących.
Scraper zwraca 146,194,232.
Własne API TikToka są dla zatwierdzonych badaczy i dla własnego konta każdego użytkownika. Oto, czego wymaga od Ciebie każda droga, zanim zaczniesz, i ile pobiera za tych samych 1000 twórców.
| Czego to wymaga | ||||
|---|---|---|---|---|
| Dane innych twórców | Tak | Tylko badacze | Tak | Tak |
| Płacisz za | Stronę | Za darmo po zatwierdzeniu | Każdy film | Każdy rekord |
| 1000 twórców po 16 filmów | $0.98 | Nie dla firm | $48 do $59.20 | $25.50 |
| Start bez wniosku | Tak | Nie, około 4 tygodni | Tak | Tak |
| Darmowy start | 1000 żądań | Po zatwierdzeniu | $5 miesięcznie | 5000 miesięcznie |
| Cała strona w HTML | Tak | Nie | Nie | Nie |
Scrapujesz nie tylko TikTok? Web Unlocker zwraca każdą stronę w ten sam sposób, w tej samej cenie.
TikTok trzyma dane publicznej strony jako JSON wewnątrz jej HTML. Web Unlocker zwraca ten HTML, a kilka linii kodu odczytuje z niego profil lub film. Zakładka Lista twórców to mały crawler TikToka: lista kont na wejściu, CSV na wyjściu.
Wypełnij formularz powyżej. Klucz przychodzi e-mailem w ciągu jednego dnia roboczego.
Profil dla obserwujących i najnowszych filmów, film dla wyświetleń, polubień, komentarzy, udostępnień i zapisów.
Sprawdź, czy strona przyszła z danymi, i poproś o nią ponownie, gdy TikTok wyśle błąd: płacisz tylko za stronę, która wróci.
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`);Chcesz uruchomić to na własnych twórcach? Odbierz klucz API i darmowe żądania.
Jedno konto, jedna sieć proxy, jeden ekosystem. Wybierz produkt, którego wymaga zadanie.
Scrapujesz więcej witryn? Zobacz scrapery Instagram, YouTube i Reddit albo wszystkie narzędzia do web scrapingu.
TikTok scraper, czyli TikTok crawler, to narzędzie, które czyta publiczne strony TikToka i zamienia je w dane: obserwujących, polubienia i najnowsze filmy profilu, wyświetlenia, polubienia, komentarze, udostępnienia i zapisy filmu. Gologin Web Unlocker to TikTok scraper API: wyślij mu adres profilu lub filmu, a zwróci stronę z tymi danymi, po $0.98 za 1000 stron.
Scrapowanie danych z TikToka to jedno żądanie na stronę: wyślij adres publicznego profilu lub filmu do Web Unlocker. Zwróci stronę tak, jak widzi ją niezalogowany użytkownik, z danymi, które TikTok trzyma w niej jako JSON. Kod powyżej odczytuje je w kilku liniach. Gdy TikTok wyśle błąd, poproś ponownie: płacisz tylko za stronę, która wróci.
Wyślij adres profilu do Web Unlocker biblioteką requests i odczytaj JSON ze strony. Zakładka Python powyżej to kompletny skrypt, przetestowany na działającym API: wypisuje dokładną liczbę obserwujących, polubień i filmów twórcy oraz jego 16 najnowszych filmów z wyświetleniami.
Dokładną liczbę obserwujących, obserwowanych, polubień i filmów, nazwę, bio i znaczek weryfikacji oraz 16 najnowszych filmów z linkami, opisami i wyświetleniami. TikTok pokazuje na stronie zaokrąglone liczby; dane w jej wnętrzu zawierają dokładne.
Scraper filmów TikTok pobiera wyświetlenia, polubienia, komentarze, udostępnienia i zapisy, opis, hashtagi, dźwięk, datę i długość, okładkę oraz autora z liczbą jego obserwujących. Przy filmach z dużą liczbą wyświetleń TikTok zaokrągla wyświetlenia i polubienia, tak samo jak je pokazuje.
Tak. Publiczne profile i filmy ładują się bez logowania, a Web Unlocker otwiera je jako niezalogowany użytkownik. Nie potrzebujesz konta na TikToku i nie narażasz żadnego ze swoich kont. Prywatne konta pozostają zamknięte.
Tylko zatwierdzonym badaczom. Research API jest otwarte dla akademickich i niekomercyjnych grup badawczych w USA, Europie i kilku innych krajach, a weryfikacja trwa około 4 tygodni. Display API czyta tylko profil i filmy użytkownika, który zaloguje się w Twojej aplikacji. Żadne z nich nie obejmuje komercyjnej pracy na danych innych twórców.
Zsumuj polubienia, komentarze, udostępnienia i zapisy najnowszych filmów twórcy i podziel przez ich wyświetlenia. Web Unlocker przynosi 16 najnowszych filmów ze strony profilu, a liczby każdego filmu z jego własnej strony: 17 stron, $0.0167. Zakładka Node.js powyżej liczy sumę i zapisuje CSV; dla konta MrBeast wyszło 14.7%.
Liczbę komentarzy tak: każda strona filmu ją zawiera. Same komentarze ładują się podczas przewijania i wymagają zalogowanej sesji, więc Web Unlocker ich nie zwraca.
$0.98 za 1000 stron i ta sama cena za każdą stronę: profil z 16 najnowszymi filmami to jedna strona, film z jego liczbami to jedna strona. Nieudane żądanie nic nie kosztuje. Na start dostajesz 1000 darmowych żądań, a plany zaczynają się od $49 miesięcznie za 50 000 żądań.
To zależy od zadania. Apify i Bright Data sprzedają gotowe wiersze z profili, filmów, hashtagów i komentarzy i rozliczają każdy z nich. Web Unlocker zwraca całą publiczną stronę profilu lub filmu w jednej cenie za stronę, na TikToku i na każdej innej witrynie, więc sprawdzanie twórców kosztuje centy.
Tak. TikTok Scraper od Apify rozlicza każdy film, $3.70 za 1000 w darmowym planie, więc 16 najnowszych filmów twórcy to 16 wyników. Web Unlocker zwraca profil z tymi 16 filmami i ich wyświetleniami jako jedną stronę: $0.98 za 1000 twórców.
Profile i filmy, które ładują się bez logowania, to publiczne strony. W sprawie Meta v. Bright Data, w styczniu 2024, amerykański sąd federalny uznał, że warunki platformy nie zabraniają scrapowania publicznych danych bez logowania. To, co zbierasz i jak tego używasz, zależy od Ciebie, więc sprawdź to z zasadami obowiązującymi w Twoim projekcie.
Opowiedz nam trochę o swoim zespole i otrzymasz: