Collez un profil ou une vidéo. Web Unlocker le renvoie sans connexion : le nombre exact de followers et de J'aime d'un profil et ses 16 dernières vidéos avec leurs vues, les vues, J'aime, commentaires, partages et favoris d'une vidéo. $0.98 pour 1 000 pages.
1 000 requêtes gratuites · Facturé en cas de succès · 195+ pays · Prêt pour Claude
Les pages TikTok mettent de 4 à 20 secondes à se charger, parfois plus. Le travail continue, inutile de cliquer à nouveau.
Prêt pour vos propres créateurs ? Obtenez une clé API ou réservez une démo.
Parlez-nous un peu de votre équipe et recevez :
Des pages publiques, sans connexion et sans compte TikTok. Plateformes d'influence, agences, marques et chercheurs lisent ces deux types de page, chacun facturé comme une page.





Envie d'essayer vous-même ? Prenez votre clé API avec 1 000 requêtes gratuites.
Une page de profil apporte le nombre exact de followers et de J'aime d'un créateur et ses 16 dernières vidéos avec leurs vues, facturée une seule fois à $0.98 pour 1 000 pages. Les scrapers TikTok sur Apify et Bright Data facturent chacune de ces vidéos comme un résultat à part.
Apify facture $48 pour 1 000 créateurs.
Ici, ils coûtent $0.98.
Une page en échec ne coûte rien. Quand TikTok renvoie une erreur, redemandez la page : vous ne payez que celle qui revient avec des données.
Ce que coûtent 1 000 créateurs TikTok
1 000 profils avec leurs 16 dernières vidéos et leurs vues, aux prix publiés
Gologin : une page de profil par créateur, $0.98 pour 1 000 pages. Bright Data facture chaque profil et chaque vidéo comme un enregistrement, $1.50 pour 1 000. Avec le forfait gratuit d'Apify, son TikTok Profile Scraper facture chaque vidéo $3.00 pour 1 000, et le TikTok Scraper le plus utilisé $3.70 pour 1 000.
Prêt à le lancer sur vos propres créateurs ? Obtenez votre clé API et des requêtes gratuites.
Une page de profil apporte le nombre exact de followers et de J'aime du créateur et ses 16 dernières vidéos avec leurs vues. Chaque page de vidéo ajoute ses J'aime, commentaires, partages et favoris. 17 pages, $0.0167, et vous avez l'engagement réel du créateur, vidéo par vidéo.
TikTok affiche 146.2M followers.
Le scraper renvoie 146,194,232.
Les API de TikTok sont réservées aux chercheurs approuvés et au propre compte de chaque utilisateur. Voici ce que chaque voie vous demande avant de commencer, et ce qu'elle facture pour les mêmes 1 000 créateurs.
| Ce que cela demande | ||||
|---|---|---|---|---|
| Données d'autres créateurs | Oui | Chercheurs uniquement | Oui | Oui |
| Vous payez | Une page | Gratuit après approbation | Chaque vidéo | Chaque fiche |
| 1 000 créateurs avec 16 vidéos | $0.98 | Pas d'usage commercial | $48 à $59.20 | $25.50 |
| Démarrer sans demande d'accès | Oui | Non, environ 4 semaines | Oui | Oui |
| Gratuit pour démarrer | 1 000 requêtes | Après approbation | $5 par mois | 5 000 par mois |
| La page entière en HTML | Oui | Non | Non | Non |
Vous scrapez plus que TikTok ? Web Unlocker renvoie n'importe quelle page de la même façon, au même prix.
TikTok garde les données d'une page publique sous forme de JSON dans son HTML. Web Unlocker renvoie ce HTML, et quelques lignes de code en extraient le profil ou la vidéo. L'onglet Liste de créateurs est un petit crawler TikTok : une liste de comptes en entrée, un CSV en sortie.
Remplissez le formulaire ci-dessus. La clé arrive par e-mail sous un jour ouvré.
Un profil pour ses followers et ses dernières vidéos, une vidéo pour ses vues, J'aime, commentaires, partages et favoris.
Vérifiez que la page est arrivée avec des données, et redemandez-la quand TikTok renvoie une erreur : vous ne payez que la page qui revient.
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`);Prêt à le lancer sur vos propres créateurs ? Obtenez votre clé API et des requêtes gratuites.
Un compte, un réseau de proxys, un écosystème. Choisissez le produit dont la tâche a besoin.
Vous scrapez d'autres sites ? Voir les scrapers Instagram, YouTube et Reddit, ou tous les outils de web scraping.
Un scraper TikTok, ou crawler TikTok, est un outil qui lit les pages TikTok publiques et les transforme en données : les followers, les J'aime et les dernières vidéos d'un profil, les vues, J'aime, commentaires, partages et favoris d'une vidéo. Gologin Web Unlocker est une API de scraping TikTok : envoyez-lui l'adresse d'un profil ou d'une vidéo et il renvoie la page avec ces données, à $0.98 pour 1 000 pages.
Le scraping de données TikTok demande une requête par page : envoyez à Web Unlocker l'adresse d'un profil ou d'une vidéo publics. Il renvoie la page telle que la voit un visiteur non connecté, avec les données que TikTok y garde sous forme de JSON. Le code ci-dessus les lit en quelques lignes. Quand TikTok renvoie une erreur, redemandez la page : vous ne payez que celle qui revient.
Envoyez l'adresse du profil à Web Unlocker avec la bibliothèque requests et lisez le JSON dans la page. L'onglet Python ci-dessus est un script complet, testé sur l'API en production : il affiche le nombre exact de followers, de J'aime et de vidéos du créateur, et ses 16 dernières vidéos avec leurs vues.
Le nombre exact de followers, d'abonnements, de J'aime et de vidéos, le nom, la bio et le badge vérifié, et les 16 dernières vidéos avec leurs liens, légendes et vues. TikTok affiche des chiffres arrondis sur la page ; les données qu'elle contient donnent les chiffres exacts.
Un scraper de vidéos TikTok récupère les vues, J'aime, commentaires, partages et favoris, la légende, les hashtags, le son, la date et la durée, l'image de couverture, et l'auteur avec son nombre de followers. Sur les grosses vidéos, TikTok arrondit les vues et les J'aime, comme il les affiche.
Oui. Les profils et vidéos publics se chargent sans connexion, et Web Unlocker les ouvre comme un visiteur non connecté. Vous n'avez besoin d'aucun compte TikTok et ne mettez aucun des vôtres en jeu. Les comptes privés restent fermés.
Seulement pour les chercheurs approuvés. La Research API est ouverte aux groupes de recherche universitaires et à but non lucratif aux États-Unis, en Europe et dans quelques autres pays, et l'examen prend environ 4 semaines. La Display API ne lit que le profil et les vidéos d'un utilisateur qui se connecte à votre application. Aucune des deux ne couvre un usage commercial des données d'autres créateurs.
Additionnez les J'aime, commentaires, partages et favoris des dernières vidéos du créateur et divisez par leurs vues. Web Unlocker apporte les 16 dernières vidéos depuis la page de profil et les chiffres de chaque vidéo depuis sa propre page : 17 pages, $0.0167. L'onglet Node.js ci-dessus fait le calcul et écrit un CSV ; pour MrBeast, le résultat est de 14,7 %.
Le nombre de commentaires, oui : chaque page de vidéo l'indique. Les commentaires eux-mêmes se chargent au défilement et demandent une session connectée, donc Web Unlocker ne les renvoie pas.
$0.98 pour 1 000 pages, le même prix pour chaque page : un profil avec ses 16 dernières vidéos est une page, une vidéo avec ses chiffres est une page. Une requête en échec ne coûte rien. Vous commencez avec 1 000 requêtes gratuites, et les forfaits démarrent à $49 par mois pour 50 000 requêtes.
Cela dépend de votre besoin. Apify et Bright Data vendent des lignes prêtes à l'emploi tirées des profils, vidéos, hashtags et commentaires, et facturent chacune. Web Unlocker renvoie la page publique entière d'un profil ou d'une vidéo à un prix unique par page, sur TikTok comme sur n'importe quel autre site, donc auditer des créateurs coûte quelques centimes.
Oui. Le TikTok Scraper d'Apify facture chaque vidéo, $3.70 pour 1 000 avec son forfait gratuit, donc les 16 dernières vidéos d'un créateur font 16 résultats. Web Unlocker renvoie le profil avec ces 16 vidéos et leurs vues comme une seule page : $0.98 pour 1 000 créateurs.
Les profils et vidéos qui se chargent sans connexion sont des pages publiques. Dans l'affaire Meta v. Bright Data, en janvier 2024, un tribunal fédéral américain a jugé que les conditions d'une plateforme n'interdisent pas le scraping de données publiques sans connexion. Ce que vous collectez et l'usage que vous en faites relèvent de vous : vérifiez-le au regard des règles applicables à votre projet.
Parlez-nous un peu de votre équipe et recevez :