Pega un perfil o un video. Web Unlocker lo devuelve sin iniciar sesión: de un perfil, los seguidores y me gusta exactos y sus 16 últimos videos con visualizaciones; de un video, las visualizaciones, me gusta, comentarios, compartidos y favoritos. $0.98 por 1000 páginas.
1000 solicitudes gratis · Solo pagas si funciona · 195+ países · Listo para Claude
Las páginas de TikTok tardan de 4 a 20 segundos, a veces más. Sigue en proceso, no hace falta volver a hacer clic.
¿Listo para tus propios creadores? Obtén una clave de API o reserva una demo.
Cuéntanos un poco sobre tu equipo y recibe:
Páginas públicas, sin iniciar sesión y sin cuenta de TikTok. Plataformas de influencers, agencias, marcas e investigadores leen estos dos tipos de página, y cada una se cobra como una página.





¿Quieres probarlo tú mismo? Consigue tu clave de API con 1000 solicitudes gratis.
La página de un perfil trae los seguidores y me gusta exactos del creador y sus 16 últimos videos con visualizaciones, y se cobra una sola vez, a $0.98 por 1000 páginas. Los scrapers de TikTok en Apify y Bright Data cobran cada uno de esos videos como un resultado aparte.
Apify cobra $48 por 1000 creadores.
Aquí cuestan $0.98.
Una página que falla no cuesta nada. Cuando TikTok envía un error, pídela de nuevo: solo pagas la página que vuelve con datos.
Lo que cuestan 1000 creadores de TikTok
1000 perfiles con sus 16 últimos videos y visualizaciones, a precios publicados
Gologin: una página de perfil por creador, $0.98 por 1000 páginas. Bright Data cobra cada perfil y cada video como un registro, $1.50 por 1000. En el plan gratuito de Apify, su TikTok Profile Scraper cobra cada video a $3.00 por 1000, y el TikTok Scraper más usado, a $3.70 por 1000.
¿Listo para ejecutarlo con tus propios creadores? Obtén tu clave de API y solicitudes gratis.
La página de un perfil trae los seguidores y me gusta exactos del creador y sus 16 últimos videos con visualizaciones. La página de cada video añade sus me gusta, comentarios, compartidos y favoritos. 17 páginas, $0.0167, y tienes el engagement real del creador, video por video.
TikTok muestra 146.2M seguidores.
El scraper devuelve 146,194,232.
Las API propias de TikTok son para investigadores aprobados y para la propia cuenta de cada usuario. Esto es lo que te pide cada vía antes de empezar, y lo que cobra por los mismos 1000 creadores.
| Lo que exige | ||||
|---|---|---|---|---|
| Datos de otros creadores | Sí | Solo investigadores | Sí | Sí |
| Pagas por | Una página | Gratis tras la aprobación | Cada video | Cada registro |
| 1000 creadores con 16 videos | $0.98 | No para empresas | De $48 a $59.20 | $25.50 |
| Empezar sin solicitar acceso | Sí | No, unas 4 semanas | Sí | Sí |
| Inicio gratis | 1000 solicitudes | Tras la aprobación | $5 al mes | 5000 al mes |
| La página completa en HTML | Sí | No | No | No |
¿Haces scraping de algo más que TikTok? Web Unlocker devuelve cualquier página de la misma forma y al mismo precio.
TikTok guarda los datos de una página pública como JSON dentro de su HTML. Web Unlocker devuelve ese HTML, y unas pocas líneas de código leen de él el perfil o el video. La pestaña Lista de creadores es un pequeño crawler de TikTok: entra una lista de cuentas, sale un CSV.
Rellena el formulario de arriba. La clave llega por correo en un día laborable.
Un perfil para sus seguidores y últimos videos, o un video para sus visualizaciones, me gusta, comentarios, compartidos y favoritos.
Comprueba que la página trae datos, y pídela de nuevo cuando TikTok envíe un error: solo pagas la página que vuelve.
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`);¿Listo para ejecutarlo con tus propios creadores? Obtén tu clave de API y solicitudes gratis.
Una cuenta, una red de proxies, un ecosistema. Elige el producto que necesita cada tarea.
¿Haces scraping de más sitios? Consulta los scrapers de Instagram, YouTube y Reddit, o todas las herramientas de web scraping.
Un TikTok scraper, o crawler de TikTok, es una herramienta que lee páginas públicas de TikTok y las convierte en datos: los seguidores, los me gusta y los últimos videos de un perfil, y las visualizaciones, los me gusta, los comentarios, los compartidos y los favoritos de un video. Gologin Web Unlocker es una TikTok scraper API: envíale la dirección de un perfil o de un video y devuelve la página con esos datos, a $0.98 por 1000 páginas.
El scraping de datos de TikTok es una solicitud por página: envía la dirección de un perfil o de un video públicos a Web Unlocker. Devuelve la página como la ve un visitante sin sesión iniciada, con los datos que TikTok guarda dentro como JSON. El código de arriba los lee en unas pocas líneas. Cuando TikTok envía un error, pídela de nuevo: solo pagas la página que vuelve.
Envía la dirección del perfil a Web Unlocker con la biblioteca requests y lee el JSON de la página. La pestaña Python de arriba es un script completo, probado en la API real: muestra los seguidores, los me gusta y el número de videos exactos del creador, y sus 16 últimos videos con visualizaciones.
Los seguidores, los seguidos, los me gusta y el número de videos exactos, el nombre, la biografía y la marca de verificación, y los 16 últimos videos con sus enlaces, descripciones y visualizaciones. TikTok muestra cifras redondeadas en la página; los datos que contiene traen las exactas.
Un scraper de videos de TikTok obtiene las visualizaciones, los me gusta, los comentarios, los compartidos y los favoritos, la descripción, los hashtags, el sonido, la fecha y la duración, la imagen de portada, y el autor con su número de seguidores. En los videos grandes, TikTok redondea las visualizaciones y los me gusta, igual que los muestra.
Sí. Los perfiles y videos públicos cargan sin iniciar sesión, y Web Unlocker los abre como un visitante sin sesión iniciada. No necesitas una cuenta de TikTok ni arriesgas ninguna de las tuyas. Las cuentas privadas siguen cerradas.
Solo a investigadores aprobados. La Research API está abierta a grupos de investigación académicos y sin fines de lucro de EE. UU., Europa y algunos otros países, y la revisión tarda unas 4 semanas. La Display API lee solo el perfil y los videos de un usuario que inicia sesión en tu app. Ninguna de las dos cubre el trabajo comercial con datos de otros creadores.
Suma los me gusta, comentarios, compartidos y favoritos de los últimos videos del creador y divide entre sus visualizaciones. Web Unlocker trae los 16 últimos videos desde la página del perfil y las cifras de cada video desde su propia página: 17 páginas, $0.0167. La pestaña Node.js de arriba hace la suma y escribe un CSV; para MrBeast dio 14.7%.
El número de comentarios, sí: cada página de video lo trae. Los comentarios en sí cargan al desplazarte y necesitan una sesión iniciada, así que Web Unlocker no los devuelve.
$0.98 por 1000 páginas, el mismo precio para cada página: un perfil con sus 16 últimos videos es una página, y un video con sus cifras es una página. Una solicitud que falla no cuesta nada. Empiezas con 1000 solicitudes gratis, y los planes empiezan en $49 al mes por 50 000 solicitudes.
Depende de la tarea. Apify y Bright Data venden filas ya hechas de perfiles, videos, hashtags y comentarios, y cobran cada una. Web Unlocker devuelve la página pública completa del perfil o del video a un precio por página, en TikTok y en cualquier otro sitio, así que evaluar creadores cuesta centavos.
Sí. El TikTok Scraper de Apify cobra cada video, $3.70 por 1000 en su plan gratuito, así que los 16 últimos videos de un creador son 16 resultados. Web Unlocker devuelve el perfil con esos 16 videos y sus visualizaciones como una página: $0.98 por 1000 creadores.
Los perfiles y videos que cargan sin iniciar sesión son páginas públicas. En el caso Meta v. Bright Data, en enero de 2024, un tribunal federal de EE. UU. concluyó que los términos de una plataforma no prohíben el scraping de datos públicos sin sesión iniciada. Qué recoges y cómo lo usas es decisión tuya, así que compruébalo con las normas que se apliquen a tu proyecto.
Cuéntanos un poco sobre tu equipo y recibe: