Cole um perfil ou vídeo. O Web Unlocker o devolve sem login: de um perfil, os seguidores e as curtidas exatos e os 16 vídeos mais recentes com visualizações; de um vídeo, as visualizações, curtidas, comentários, compartilhamentos e favoritos. $0.98 por 1.000 páginas.
1.000 requisições grátis · Pague só se der certo · Mais de 195 países · Pronto para o Claude
As páginas do TikTok levam de 4 a 20 segundos, às vezes mais. Ainda está em andamento, não precisa clicar de novo.
Pronto para seus próprios criadores? Obtenha uma chave de API ou agende uma demo.
Conte um pouco sobre sua equipe e receba:
Páginas públicas, sem login e sem conta no TikTok. Plataformas de influenciadores, agências, marcas e pesquisadores leem estes dois tipos de página, cada um cobrado como uma página.





Quer testar você mesmo? Pegue sua chave de API com 1.000 requisições grátis.
Uma página de perfil traz os seguidores e as curtidas exatos de um criador e os 16 vídeos mais recentes dele com visualizações, cobrada uma vez a $0.98 por 1.000 páginas. Os scrapers de TikTok na Apify e na Bright Data cobram cada um desses vídeos como um resultado separado.
A Apify cobra $48 por 1.000 criadores.
Aqui eles custam $0.98.
Uma página que não carrega não custa nada. Quando o TikTok enviar um erro, peça de novo: você paga só pela página que volta com dados.
Quanto custam 1.000 criadores do TikTok
1.000 perfis com os 16 vídeos mais recentes e visualizações, a preços publicados
Gologin: uma página de perfil por criador, $0.98 por 1.000 páginas. A Bright Data cobra cada perfil e cada vídeo como um registro, $1.50 por 1.000. No plano grátis da Apify, o TikTok Profile Scraper cobra cada vídeo a $3.00 por 1.000, e o TikTok Scraper mais usado, a $3.70 por 1.000.
Pronto para rodar nos seus próprios criadores? Obtenha sua chave de API e requisições grátis.
Uma página de perfil traz os seguidores e as curtidas exatos do criador e os 16 vídeos mais recentes com visualizações. A página de cada vídeo acrescenta as curtidas, os comentários, os compartilhamentos e os favoritos. 17 páginas, $0.0167, e você tem o engajamento real do criador, vídeo a vídeo.
O TikTok mostra 146.2M seguidores.
O scraper devolve 146,194,232.
As APIs do próprio TikTok são para pesquisadores aprovados e para a própria conta de cada usuário. Veja o que cada caminho exige de você antes de começar e quanto cobra pelos mesmos 1.000 criadores.
| O que é preciso | ||||
|---|---|---|---|---|
| Dados de outros criadores | Sim | Só pesquisadores | Sim | Sim |
| Você paga por | Uma página | Grátis após aprovação | Cada vídeo | Cada registro |
| 1.000 criadores com 16 vídeos | $0.98 | Não para empresas | $48 a $59.20 | $25.50 |
| Começar sem solicitar acesso | Sim | Não, cerca de 4 semanas | Sim | Sim |
| Grátis para começar | 1.000 requisições | Após aprovação | $5 por mês | 5.000 por mês |
| A página inteira em HTML | Sim | Não | Não | Não |
Faz scraping de mais do que o TikTok? O Web Unlocker devolve qualquer página do mesmo jeito, pelo mesmo preço.
O TikTok guarda os dados de uma página pública como JSON dentro do HTML. O Web Unlocker devolve esse HTML, e poucas linhas de código leem o perfil ou o vídeo. A aba Lista de criadores é um pequeno crawler do TikTok: entra uma lista de contas, sai um CSV.
Preencha o formulário acima. A chave chega por e-mail em até um dia útil.
Um perfil para os seguidores e os vídeos mais recentes, um vídeo para as visualizações, curtidas, comentários, compartilhamentos e favoritos.
Confira se a página veio com dados e peça de novo quando o TikTok enviar um erro: você paga só pela página que volta.
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`);Pronto para rodar nos seus próprios criadores? Obtenha sua chave de API e requisições grátis.
Uma conta, uma rede de proxies, um ecossistema. Escolha o produto de que a tarefa precisa.
Faz scraping de mais sites? Veja os scrapers do Instagram, do YouTube e do Reddit, ou todas as ferramentas de web scraping.
Um TikTok scraper, ou crawler do TikTok, é uma ferramenta que lê páginas públicas do TikTok e as transforma em dados: os seguidores, as curtidas e os vídeos mais recentes de um perfil, e as visualizações, curtidas, comentários, compartilhamentos e favoritos de um vídeo. O Gologin Web Unlocker é uma API de TikTok scraper: envie o endereço de um perfil ou vídeo e ele devolve a página com esses dados, a $0.98 por 1.000 páginas.
O scraping de dados do TikTok leva uma requisição por página: envie o endereço de um perfil ou vídeo público ao Web Unlocker. Ele devolve a página como um visitante sem login a vê, com os dados que o TikTok guarda dentro dela em JSON. O código acima lê tudo isso em poucas linhas. Quando o TikTok enviar um erro, peça de novo: você paga só pela página que volta.
Envie o endereço do perfil ao Web Unlocker com a biblioteca requests e leia o JSON da página. A aba Python acima é um script completo, testado na API real: ele mostra os seguidores, as curtidas e o número de vídeos exatos do criador, e os 16 vídeos mais recentes com visualizações.
Seguidores, contas seguidas, curtidas e número de vídeos exatos, o nome, a bio e o selo de verificado, e os 16 vídeos mais recentes com links, legendas e visualizações. O TikTok mostra números arredondados na página; os dados dentro dela trazem os exatos.
Um scraper de vídeos do TikTok coleta as visualizações, curtidas, comentários, compartilhamentos e favoritos, a legenda, as hashtags, o som, a data e a duração, a imagem de capa e o autor com o número de seguidores dele. Em vídeos grandes, o TikTok arredonda as visualizações e as curtidas, do mesmo jeito que as mostra.
Sim. Perfis e vídeos públicos carregam sem login, e o Web Unlocker os abre como um visitante sem login. Você não precisa de conta no TikTok e não arrisca nenhuma das suas. Contas privadas continuam fechadas.
Só para pesquisadores aprovados. A Research API é aberta a grupos de pesquisa acadêmica e sem fins lucrativos nos EUA, na Europa e em alguns outros países, e a análise leva cerca de 4 semanas. A Display API lê só o perfil e os vídeos de um usuário que faz login no seu app. Nenhuma das duas cobre uso comercial de dados de outros criadores.
Some as curtidas, os comentários, os compartilhamentos e os favoritos dos vídeos mais recentes do criador e divida pelas visualizações. O Web Unlocker traz os 16 vídeos mais recentes da página de perfil e os números de cada vídeo da página dele: 17 páginas, $0.0167. A aba Node.js acima faz a conta e grava um CSV; para o MrBeast, deu 14,7%.
O número de comentários, sim: cada página de vídeo traz esse número. Os comentários em si carregam conforme você rola e exigem uma sessão logada, então o Web Unlocker não os devolve.
$0.98 por 1.000 páginas, o mesmo preço para toda página: um perfil com os 16 vídeos mais recentes é uma página, um vídeo com seus números é uma página. Uma requisição com falha não custa nada. Você começa com 1.000 requisições grátis, e os planos começam em $49 por mês para 50.000 requisições.
Depende da tarefa. Apify e Bright Data vendem linhas prontas de perfis, vídeos, hashtags e comentários e cobram cada uma. O Web Unlocker devolve a página pública inteira do perfil ou do vídeo por um preço por página, no TikTok e em qualquer outro site, então avaliar criadores custa centavos.
Sim. O TikTok Scraper da Apify cobra cada vídeo, $3.70 por 1.000 no plano grátis, então os 16 vídeos mais recentes de um criador são 16 resultados. O Web Unlocker devolve o perfil com esses 16 vídeos e as visualizações deles como uma página: $0.98 por 1.000 criadores.
Perfis e vídeos que carregam sem login são páginas públicas. No caso Meta v. Bright Data, em janeiro de 2024, um tribunal federal dos EUA concluiu que os termos de uma plataforma não proíbem o scraping sem login de dados públicos. O que você coleta e como usa é decisão sua, então confira com as regras que valem para o seu projeto.
Conte um pouco sobre sua equipe e receba: