Collez un profil, une publication ou un reel public. Web Unlocker renvoie la page Instagram sans connexion : le nombre exact de followers d'un profil et ses 12 dernières publications, le nombre exact de J'aime et de commentaires d'une publication avec sa légende. $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 Instagram mettent de 3 à 12 secondes à se charger. Le travail continue, inutile de cliquer à nouveau.
Prêt pour vos propres profils ? 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 Instagram. Plateformes d'influence, marques, outils de social listening et chercheurs lisent ces quatre types de page, chacun facturé comme une page.










Envie d'essayer vous-même ? Prenez votre clé API avec 1 000 requêtes gratuites.
Web Unlocker facture une page de profil une seule fois, avec le nombre exact de followers et les 12 dernières publications, à $0.98 pour 1 000 pages. Les scrapers de profils Instagram sur Apify, Bright Data et ScrapeCreators facturent plus cher le même profil.
Apify facture $2.60 pour 1 000 profils.
Ici, 1 000 coûtent $1.14.
Instagram renvoie vide environ une page de profil sur sept. Redemandez-la avec une nouvelle URL et les données reviennent : le prix ci-dessus inclut ces nouvelles tentatives.
Ce que coûtent 1 000 profils Instagram
1 000 profils publics avec followers et bio, aux prix publiés
Gologin : $0.98 pour 1 000 pages, plus une nouvelle tentative pour environ sept profils. Bright Data facture chaque enregistrement, $1.50 pour 1 000. ScrapeCreators facture chaque requête, $1.88 pour 1 000 avec son forfait à $47. Le scraper de profils Instagram d'Apify lui-même facture $2.60 pour 1 000 profils avec le forfait gratuit.
Prêt à le lancer sur vos propres profils ? Obtenez votre clé API et des requêtes gratuites.
Notre test de scraping Instagram : 20 profils, 20 publications et 20 reels tirés de leurs grilles, et 10 pages de hashtag, chacun demandé jusqu'à trois fois, comme le fait la démo ci-dessus. Voici ce qui revient, et à quelle vitesse.
51 sur 60 reviennent du premier coup.
Les 9 autres au deuxième ou au troisième essai.
L'API officielle d'Instagram, les scrapers Instagram d'Apify et l'Instagram Scraper API de Bright Data : ce que chacun facture pour les mêmes 1 000 profils, et ce qu'il vous demande avant de commencer.
| Ce que cela demande | ||||
|---|---|---|---|---|
| Vous payez | Une page | Gratuit, limité | Chaque résultat | Chaque fiche |
| 1 000 profils | $1.14 | Gratuit | $2.60 | $1.50 |
| Comptes personnels | Oui | Non | Oui | Oui |
| Votre propre compte Instagram | Pas nécessaire | Compte professionnel | Pas nécessaire | Pas nécessaire |
| Gratuit pour démarrer | 1 000 requêtes | Avec une app Meta | $5 par mois | 5 000 par mois |
| La page entière en HTML | Oui | Non | Non | Non |
Vous scrapez d'autres sites qu'Instagram ? Web Unlocker renvoie n'importe quelle page de la même façon, au même prix.
Une page de profil apporte les 12 dernières publications, et chaque page de publication apporte son nombre exact de J'aime et de commentaires. 13 pages, $0.0127, et vous avez l'engagement réel du créateur, publication par publication.
Instagram arrondit à 268M.
Le scraper renvoie 268,157,304.
Instagram 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 publication. L'onglet Liste de profils est un petit crawler Instagram : 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 publications, une publication ou un reel pour ses J'aime et ses commentaires.
Vérifiez que la page est arrivée avec des données, et redemandez-la avec une nouvelle URL quand Instagram en a envoyé une vide.
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python instagram_profile.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport json
import os
import re
import time
import requests
username = "nasa"
def scrape(url, marker):
for attempt in range(3):
address = url if attempt == 0 else f"{url}?fresh={int(time.time())}"
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=90,
)
page = response.json().get("data", {}).get("html", "") if response.ok else ""
if marker in page:
return page
time.sleep(3)
raise RuntimeError("The page came back without data, try again later")
def blocks(page):
for block in re.findall(r'<script type="application/json"[^>]*>(.*?)</script>', page, re.S):
try:
yield json.loads(block)
except json.JSONDecodeError:
pass
def find(node, key):
if isinstance(node, dict):
for name, value in node.items():
if name == key:
yield value
yield from find(value, key)
elif isinstance(node, list):
for item in node:
yield from find(item, key)
data = list(blocks(scrape(f"https://www.instagram.com/{username}/", '"follower_count"')))
user = next(item for item in find(data, "xig_user_by_username") if "follower_count" in item)
posts = {}
for timeline in find(data, "polaris_ordered_timeline_connection"):
for edge in timeline["edges"]:
post = edge["node"]
reel = post.get("product_type") == "clips"
posts[post["code"]] = {
"url": f"https://www.instagram.com/{'reel' if reel else 'p'}/{post['code']}/",
"type": "reel" if reel else "post",
"caption": (post.get("caption") or {}).get("text", "").split("\n")[0],
"image": post.get("display_uri"),
}
profile = {
"username": user["username"],
"full_name": user["full_name"],
"biography": user["biography"],
"verified": user["is_verified"],
"followers": user["follower_count"],
"following": user["following_count"],
"latest_posts": list(posts.values())[:12],
}
print(json.dumps(profile, indent=2, ensure_ascii=False))
print(f"@{username}: {profile['followers']:,} followers, {len(profile['latest_posts'])} latest posts from one page")GOLOGIN_SCRAPING_API_KEY=your_key node instagram-engagement.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
const username = 'natgeo';
async function scrape(url, marker) {
for (let attempt = 1; attempt <= 3; attempt++) {
const address = attempt === 1 ? url : `${url}?fresh=${Date.now()}`;
const params = new URLSearchParams({ url: address, geo: 'us', format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const page = response.ok ? (await response.json()).data?.html : '';
if (page?.includes(marker)) return page;
await new Promise((resolve) => setTimeout(resolve, 3000));
}
throw new Error(`${url} came back without data, try again later`);
}
function* find(node, test) {
if (Array.isArray(node)) for (const item of node) yield* find(item, test);
else if (node && typeof node === 'object') {
if (test(node)) yield node;
for (const value of Object.values(node)) yield* find(value, test);
}
}
const data = (page) =>
[...page.matchAll(/<script type="application\/json"[^>]*>([\s\S]*?)<\/script>/g)].flatMap(([, json]) => {
try {
return [JSON.parse(json)];
} catch {
return [];
}
});
const profile = data(await scrape(`https://www.instagram.com/${username}/`, '"follower_count"'));
const user = find(profile, (node) => typeof node.follower_count === 'number').next().value;
const codes = [...new Set([...find(profile, (node) => node.code && node.display_uri)].map((post) => post.code))].slice(0, 12);
const posts = [];
for (const code of codes) {
const page = data(await scrape(`https://www.instagram.com/p/${code}/`, '"like_count"'));
const post = find(page, (node) => typeof node.like_count === 'number' && node.code === code).next().value;
posts.push({ url: `https://www.instagram.com/p/${code}/`, date: new Date(post.taken_at * 1000).toISOString().slice(0, 10), likes: post.like_count, comments: post.comment_count });
}
const csv = ['url,date,likes,comments', ...posts.map((post) => `${post.url},${post.date},${post.likes},${post.comments}`)].join('\n');
writeFileSync(`${username}-posts.csv`, csv);
const average = posts.reduce((sum, post) => sum + post.likes + post.comments, 0) / posts.length;
console.table(posts);
console.log(`@${username}: ${user.follower_count.toLocaleString('en-US')} followers, ${Math.round(average).toLocaleString('en-US')} likes and comments a post`);
console.log(`Engagement rate ${((average / user.follower_count) * 100).toFixed(2)}% from ${posts.length + 1} pages: $${((posts.length + 1) * 0.00098).toFixed(4)} on the Growth plan`);GOLOGIN_SCRAPING_API_KEY=your_key node instagram-profiles.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
const usernames = ['nasa', 'natgeo', 'nike', 'spotify', 'starbucks', 'redbull'];
async function scrape(url) {
for (let attempt = 1; attempt <= 3; attempt++) {
const address = attempt === 1 ? url : `${url}?fresh=${Date.now()}`;
const params = new URLSearchParams({ url: address, geo: 'us', format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const page = response.ok ? (await response.json()).data?.html : '';
if (page?.includes('"follower_count"')) return page;
await new Promise((resolve) => setTimeout(resolve, 3000));
}
return '';
}
const field = (page, name) => page.match(new RegExp(`"${name}":("(?:[^"\\\\]|\\\\.)*"|\\d+|true|false)`))?.[1];
const rows = [];
for (const username of usernames) {
const page = await scrape(`https://www.instagram.com/${username}/`);
rows.push({
username,
name: page && JSON.parse(field(page, 'full_name')),
verified: page && field(page, 'is_verified') === 'true',
followers: page && Number(field(page, 'follower_count')),
following: page && Number(field(page, 'following_count')),
posts: page.match(/([\d.,]+[KMB]?) Posts/)?.[1],
});
}
writeFileSync('profiles.csv', ['username,name,verified,followers,following,posts', ...rows.map((row) => Object.values(row).map((value) => JSON.stringify(value ?? '')).join(','))].join('\n'));
console.table(rows);
console.log(`${rows.length} profiles in ${rows.length} pages: $${(rows.length * 0.00098).toFixed(4)} on the Growth plan`);Prêt à le lancer sur vos propres profils ? 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 Facebook, Google Play, Twitter (X), YouTube, Reddit et Google Maps, ou tous les outils de web scraping.
Un Instagram scraper est un outil qui lit les pages Instagram publiques et les transforme en données : les followers, la bio et les dernières publications d'un profil, les J'aime, les commentaires et la légende d'une publication. Gologin Web Unlocker est une API de scraping Instagram : envoyez-lui l'adresse d'une page et il renvoie la page avec ces données, à $0.98 pour 1 000 pages.
Envoyez à Web Unlocker l'adresse d'un profil, d'une publication ou d'un reel public. Il renvoie la page telle que la voit un visiteur non connecté, avec les données qu'Instagram y garde sous forme de JSON : followers, publications, J'aime, commentaires et légendes. Le code ci-dessus les lit en quelques lignes.
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 les followers, les abonnements, la bio et les 12 dernières publications du profil.
En partie seulement. Business Discovery, dans l'Instagram API, lit les comptes entreprise et créateur, et uniquement depuis votre propre compte professionnel via une app Meta. Les comptes personnels ne sont pas couverts, et la recherche par hashtag s'arrête à 30 hashtags par semaine. L'ancienne Basic Display API a pris fin le 4 décembre 2024.
Oui. Les profils publics, les publications, les reels et la page populaire d'un hashtag se chargent sans connexion. Web Unlocker les ouvre comme un visiteur non connecté : vous n'avez besoin d'aucun compte Instagram et ne mettez aucun des vôtres en jeu. Les profils privés restent fermés : leurs publications sont réservées aux followers approuvés. TikTok fonctionne de la même façon : le scraper TikTok lit les profils et vidéos publics sans connexion.
Instagram envoie de temps en temps une page sans données : environ une page de profil sur sept lors de notre test. La démo ci-dessus et les exemples de code vérifient la présence des données et redemandent la page avec une nouvelle URL. Les publications et les reels sont revenus du premier coup 36 fois sur 40.
Pas sous forme de liste : la liste des followers d'un compte ne s'ouvre qu'aux utilisateurs connectés. Le nombre exact de followers est public, et Web Unlocker le renvoie avec chaque profil.
Le nombre de commentaires, oui : chaque page de publication et de reel indique le chiffre exact. Les commentaires eux-mêmes ne se chargent que pour les utilisateurs connectés, donc Web Unlocker ne les renvoie pas.
Pour de nombreux hashtags, Instagram montre aux visiteurs non connectés une page populaire avec 12 top reels et leur nombre de lectures, et Web Unlocker la renvoie. Le fil complet d'un hashtag est réservé aux utilisateurs connectés.
Oui. Chaque publication d'une page de profil et chaque page de publication arrivent avec les liens de leurs fichiers image, donc votre code peut les enregistrer.
$0.98 pour 1 000 pages, le même prix pour chaque page : un profil avec ses 12 dernières publications est une page, une publication est une page. Une requête en échec ne coûte rien. Les forfaits démarrent à $49 par mois pour 50 000 requêtes.
Web Unlocker inclut 1 000 requêtes gratuites, de quoi couvrir 1 000 profils ou publications. Les outils open source comme Instaloader et instagrapi sont gratuits : ils tournent sur vos propres serveurs, demandent souvent une connexion Instagram, et c'est à vous de les maintenir en état de marche quand Instagram change.
Cela dépend de votre besoin. L'Instagram API est gratuite pour les comptes entreprise et créateur accessibles depuis le vôtre. Apify et Bright Data vendent des lignes prêtes à l'emploi et facturent chaque résultat. Web Unlocker renvoie la page publique entière à un prix unique par page, sur Instagram comme sur n'importe quel autre site.
Oui. Le scraper de profils Instagram d'Apify facture $2.60 pour 1 000 profils avec son forfait gratuit. Web Unlocker renvoie la même page de profil publique, avec le nombre exact de followers et les 12 dernières publications, pour $1.14 les 1 000 profils, nouvelles tentatives comprises.
Les profils, publications et reels 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 de Meta 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 :