Cole uma página, post ou reel público do Facebook. O Web Unlocker devolve tudo sem login: os seguidores exatos de uma página e o último post dela com reações, comentários e compartilhamentos. $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 Facebook levam de 4 a 20 segundos. Ainda está em andamento, não precisa clicar de novo.
Pronto para suas próprias páginas? 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 Facebook. Equipes de monitoramento de marca, agências e equipes de vendas leem estes três 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.
O Web Unlocker cobra uma página do Facebook uma vez, com os seguidores exatos e o último post, a $0.98 por 1.000 páginas. Os scrapers de páginas do Facebook na Apify, na Bright Data e na ScrapeCreators cobram mais pela mesma página.
A Apify cobra $12.00 por 1.000 páginas.
Aqui 1.000 custam $0.98.
Uma requisição com falha não custa nada. Quando o Web Unlocker fica indisponível por um instante, a demo acima e os exemplos de código pedem de novo, e só a página que volta é cobrada.
Quanto custam 1.000 páginas do Facebook
1.000 páginas públicas com seguidores e o último post, a preços publicados
Gologin: $0.98 por 1.000 páginas no plano Growth. A Bright Data cobra cada registro, $1.50 por 1.000. A ScrapeCreators cobra cada requisição, $1.88 por 1.000 no plano de $47. O Facebook Pages Scraper da própria Apify cobra $12.00 por 1.000 páginas no plano grátis.
Pronto para rodar nas suas próprias páginas? Obtenha sua chave de API e requisições grátis.
Nosso teste de scraping do Facebook: 20 páginas de marcas, 14 posts pelo embed público do Facebook e 10 reels, cada um pedido até três vezes.
37 de 44 voltaram na primeira tentativa.
Mais 6 na segunda.
A Graph API do próprio Facebook, os scrapers de Facebook da Apify e a Facebook Scraper API da Bright Data: o que cada um cobra pelas mesmas 1.000 páginas e o que exige de você antes de começar.
| O que é preciso | ||||
|---|---|---|---|---|
| Você paga por | Uma página | Grátis com limites | Cada resultado | Cada registro |
| 1.000 páginas | $0.98 | Grátis | $12.00 | $1.50 |
| Revisão do app e verificação da empresa | Não | Sim | Não | Não |
| Sua própria conta no Facebook | Não precisa | Um app da Meta | Não precisa | Não precisa |
| Todos os posts de uma página pelo link | Só o último | Após a revisão | Sim | Sim |
| Reações por tipo | Só o total | Sim | Sim | Sim |
| Grátis para começar | 1.000 requisições | Após a revisão do app | $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 Facebook? O Web Unlocker devolve qualquer página do mesmo jeito, pelo mesmo preço.
Uma requisição por página traz os seguidores exatos e o último post, com reações e comentários. 100 páginas de marcas, 100 requisições, $0.098.
O Facebook arredonda a NASA para 28 mi de seguidores.
O scraper devolve 28,728,835.
O Facebook 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 a página ou o post. A aba Páginas de marcas é um pequeno scraper de páginas do Facebook para uma lista: entram nomes de páginas, sai um CSV.
Preencha o formulário acima. A chave chega por e-mail em até um dia útil.
Uma página para os seguidores e o último post, um post ou reel para as curtidas, os comentários e os compartilhamentos. Um post passa pelo embed público do Facebook.
Confira se a página veio com dados e peça de novo com uma URL nova quando o Web Unlocker estiver indisponível por um instante.
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python facebook_page.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport html
import json
import os
import re
import time
from datetime import datetime, timezone
import requests
page_url = "https://www.facebook.com/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)
def first(node, key, field):
return next(item for item in find(node, key) if isinstance(item, dict) and field in item)
page = scrape(page_url, "talking about this")
data = list(blocks(page))
meta = dict(re.findall(r'<meta property="(og:\w+)" content="([^"]*)"', page))
about = html.unescape(meta["og:description"])
count = lambda words: int(re.search(rf"([\d,]+) {words}", about).group(1).replace(",", ""))
details = first(data, "delegate_page", "category_name")
story = first(data, "timeline_list_feed_units", "edges")["edges"][0]["node"]
feedback = first(story, "feedback", "reaction_count")
facebook_page = {
"name": html.unescape(meta["og:title"]),
"followers": count("followers"),
"talking_about_this": count("talking about this"),
"category": details["category_name"],
"intro": details["best_description"]["text"],
"websites": [
item["renderer"]["context_item"]["plaintext_title"]["text"]
for item in find(data, "timeline_context_item")
if item["renderer"]["__typename"] == "WebsiteContextItemRenderer"
],
"latest_post": {
"url": next(find(story, "permalink_url")),
"date": datetime.fromtimestamp(story["creation_time"], timezone.utc).isoformat(),
"text": first(story, "message", "text")["text"],
"reactions": feedback["reaction_count"]["count"],
"comments": first(story, "comments", "total_count")["total_count"],
"shares": feedback["share_count"]["count"],
},
}
print(json.dumps(facebook_page, indent=2, ensure_ascii=False))
print(f"{facebook_page['name']}: {facebook_page['followers']:,} followers and the latest post from one page")GOLOGIN_SCRAPING_API_KEY=your_key node facebook-posts.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
const posts = [
'https://www.facebook.com/NASA/posts/pfbid05YJTkWebVNj83FA2ifGfHBxTdYFWuNrAMo4yAKnbRuY9XXK8nXohgsLxADToV4vfl',
'https://www.facebook.com/Starbucks/posts/pfbid02v2F2jafXiaaRi3PAramXqszA3W5rRcJtaF8MXE1s453xiHbK9JJNmMqnuzV5i8Gxl',
'https://www.facebook.com/McDonalds/posts/pfbid04kS5YA29jgtMNfHTQCf8JthvEM71jgVJzQN6L53wU7ck5ocPBY49sdFUcmt6L8Nsl',
'https://www.facebook.com/walmart/posts/pfbid02Tcu3cY8cHDhE43MsF7qSQnUDpvMZux6P7FfFsWswowv5QJTVKMeDou73PW6M5c22l',
'https://www.facebook.com/Spotify/posts/pfbid0WmiXu2TVoUdrNDBEJepHYbrukgikHR6euuvJGuLiVNtvTbXkXFywG5rEKCZcRijhl',
'https://www.facebook.com/adidas/posts/pfbid02zsJxukrC4EagRJPwg958TiWViTm9NSCPETubYgPmazax2DKqhZwaNCHBHHaXntvl',
];
const embed = (post) => `https://www.facebook.com/plugins/post.php?${new URLSearchParams({ href: post, show_text: 'true', width: '500' })}`;
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('data-testid="post_message"')) return page;
await new Promise((resolve) => setTimeout(resolve, 3000));
}
return '';
}
const count = (page, name) => page.match(new RegExp(`sx_post-plugin_${name}"></i>([^<]+)<`))?.[1] ?? '';
const plain = (html = '') =>
html
.replace(/<\/p>\s*<p>|<br\s*\/?>/g, ' ')
.replace(/<[^>]+>/g, '')
.replace(/&/g, '&')
.replace(/&#(\d+);/g, (_, code) => String.fromCodePoint(code))
.replace(/\s+/g, ' ')
.trim();
const rows = [];
for (const post of posts) {
const page = await scrape(embed(post));
const posted = page.match(/data-utime="(\d+)"/)?.[1];
rows.push({
page: plain(page.match(/<span class="_2_79 _50f7">([^<]+)<|<a title="([^"]+)" class="_5pb8|aria-label="([^"]+)" role="img"/)?.slice(1).find(Boolean)),
date: posted ? new Date(posted * 1000).toISOString().slice(0, 10) : '',
likes: count(page, 'like'),
comments: count(page, 'comment'),
shares: count(page, 'share'),
text: plain(page.match(/data-testid="post_message"[^>]*>([\s\S]*?)<\/div>/)?.[1]).slice(0, 80),
});
}
writeFileSync('posts.csv', [Object.keys(rows[0]).join(','), ...rows.map((row) => Object.values(row).map((value) => JSON.stringify(value)).join(','))].join('\n'));
console.table(rows);
console.log(`${rows.length} posts in ${rows.length} requests: $${(rows.length * 0.00098).toFixed(4)} on the Growth plan`);GOLOGIN_SCRAPING_API_KEY=your_key node facebook-pages.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
const pages = ['NASA', 'Starbucks', 'nike', 'netflix', 'redbull', 'LEGO'];
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('talking about this')) return page;
await new Promise((resolve) => setTimeout(resolve, 3000));
}
return '';
}
const number = (text) => (text ? Number(text.replaceAll(',', '')) : '');
const rows = [];
for (const name of pages) {
const page = await scrape(`https://www.facebook.com/${name}/`);
const about = page.match(/<meta property="og:description" content="([^"]*)"/)?.[1] ?? '';
const feed = page.slice(page.indexOf('"timeline_list_feed_units"'));
const posted = feed.match(/"creation_time":(\d+)/)?.[1];
rows.push({
page: name,
followers: number(about.match(/([\d,]+) followers/)?.[1]),
talking: number(about.match(/([\d,]+) talking about this/)?.[1]),
category: page.match(/"category_name":"([^"]+)"/)?.[1].replaceAll('\\/', '/') ?? '',
posted: posted ? new Date(posted * 1000).toISOString().slice(0, 10) : '',
reactions: number(feed.match(/"reaction_count":\{"count":(\d+)/)?.[1]),
comments: number(feed.match(/"comments":\{"total_count":(\d+)/)?.[1]),
shares: number(feed.match(/"share_count":\{"count":(\d+)/)?.[1]),
});
}
writeFileSync('pages.csv', [Object.keys(rows[0]).join(','), ...rows.map((row) => Object.values(row).map((value) => JSON.stringify(value)).join(','))].join('\n'));
console.table(rows);
console.log(`${rows.length} brand pages in ${rows.length} requests: $${(rows.length * 0.00098).toFixed(4)} on the Growth plan`);Pronto para rodar nas suas próprias páginas? 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 Reddit e do YouTube, ou todas as ferramentas de web scraping.
Um Facebook scraper é uma ferramenta que lê páginas públicas do Facebook e as transforma em dados: os seguidores, a categoria e o último post de uma página, e o texto, as curtidas, os comentários e os compartilhamentos de um post. O Gologin Web Unlocker é uma API de Facebook scraper: envie o endereço de uma página, post ou reel e ele devolve a página com esses dados, a $0.98 por 1.000 páginas.
Envie ao Web Unlocker o endereço de uma página ou reel público, e um post pelo embed público do Facebook. O Web Unlocker devolve a página como um visitante sem login a vê, com os dados dentro: seguidores, o último post, reações, comentários e compartilhamentos. O código acima lê tudo isso em poucas linhas e salva em JSON ou CSV.
Envie o endereço da página ao Web Unlocker com a biblioteca requests e leia os dados da página. A aba Python acima é um Facebook scraper completo em Python, testado na API real: ele mostra os seguidores exatos, a categoria, os sites e o último post da página com as reações dele.
Sim. As páginas pertencem a marcas, organizações e figuras públicas e carregam para qualquer pessoa, então o Web Unlocker as devolve, incluindo links como facebook.com/profile.php?id=... Perfis pessoais mostram pouco ou nada a visitantes sem login, e este scraper não os cobre.
Sim, a Graph API, com limites. Ler os posts públicos de outras páginas exige o recurso Page Public Content Access, que a Meta libera após o App Review (a revisão do app) e a verificação da empresa. A Groups API foi removida em abril de 2024, e o CrowdTangle foi encerrado em agosto de 2024.
Sim. Páginas, posts e reels públicos carregam sem login, e o Web Unlocker os abre como um visitante sem login: você não precisa de conta no Facebook e não arrisca nenhuma das suas. Perfis privados e grupos privados continuam fechados.
Não só pelo link da página: um visitante sem login vê o post mais recente ou fixado da página, e o Web Unlocker devolve esse post com as reações, os comentários e os compartilhamentos exatos. Para mais posts, envie o link de cada post: um post é uma requisição, $0.98 por 1.000.
Não com este scraper. Posts dentro de grupos não voltam pelo embed público do Facebook, e grupos privados só abrem para os membros. Esta página cobre páginas, posts e reels; o Web Unlocker devolve outras páginas públicas pelo mesmo preço por página, então teste as suas com as 1.000 requisições grátis.
Os números, sim: uma página devolve as reações, os comentários e os compartilhamentos exatos do último post, e um reel as reações e os comentários exatos. Um post pelo embed mostra as curtidas arredondadas como o Facebook faz, como 1.4K. A lista completa de comentários carrega só para usuários logados.
$0.98 por 1.000 páginas, o mesmo preço para toda página: uma página com o último post é uma página, um post ou um reel é uma página. Uma requisição com falha não custa nada. Os planos começam em $49 por mês para 50.000 requisições.
O Web Unlocker vem com 1.000 requisições grátis, o suficiente para 1.000 páginas ou posts. Bibliotecas open source como facebook-scraper para Python são grátis: rodam nos seus próprios servidores, muitas vezes pedem seus cookies do Facebook, e mantê-las funcionando conforme o Facebook muda fica por sua conta.
Sim. Com a instalação de uma skill, o Claude Code, o Cursor ou qualquer cliente MCP lê páginas do Facebook pelo Web Unlocker. Veja MCP & AI Skills.
Sim. O Facebook Pages Scraper da Apify cobra $12.00 por 1.000 páginas no plano grátis, e o Facebook Posts Scraper dela, $5.00 por 1.000 posts. O Web Unlocker devolve uma página pública com os seguidores exatos e o último post, ou um post pelo link, por $0.98 a cada 1.000.
Não. O Sharing Debugger da Meta (o depurador de compartilhamento), muitas vezes chamado de Facebook scraper, mostra como o seu próprio link aparece quando compartilhado no Facebook e atualiza essa prévia: ele fica em developers.facebook.com/tools/debug/. Uma API de Facebook scraper como o Web Unlocker lê dados das páginas públicas do Facebook.
Páginas, posts e reels 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 da Meta 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.
Não com o Web Unlocker: ele envia cada requisição de um endereço no país que você escolher, entre mais de 195, então você não aluga nem rotaciona proxies por conta própria. A demo acima pede a partir dos EUA.
Conte um pouco sobre sua equipe e receba: