Вставьте ссылку на публичную страницу, пост или Reels в Facebook. Web Unlocker вернёт их без входа: у страницы точное число подписчиков и последний пост с реакциями, комментариями и репостами. $0.98 за 1000 страниц.
1000 бесплатных запросов · Оплата только за успех · 195+ стран · Работает с Claude
Страницы Facebook загружаются от 4 до 20 секунд. Всё ещё работаем, нажимать снова не нужно.
Готовы спарсить свои страницы? Получите API-ключ или запишитесь на демо.
Расскажите немного о вашей команде и получите:
Публичные страницы, без входа и без аккаунта Facebook. Команды мониторинга брендов, агентства и отделы продаж читают эти три типа страниц, и каждая оплачивается как одна страница.



Хотите попробовать сами? Получите API-ключ с 1000 бесплатных запросов.
Web Unlocker берёт за страницу Facebook один раз, вместе с точным числом подписчиков и последним постом, по $0.98 за 1000 страниц. Парсеры страниц Facebook на Apify, Bright Data и ScrapeCreators берут за ту же страницу больше.
Apify берёт $12.00 за 1000 страниц.
Здесь 1000 стоят $0.98.
Неудачный запрос ничего не стоит. Когда Web Unlocker ненадолго недоступен, демо выше и примеры кода запрашивают страницу снова, и оплачивается только та, что вернулась.
Сколько стоят 1000 страниц Facebook
1000 публичных страниц с подписчиками и последним постом по опубликованным ценам
Gologin: $0.98 за 1000 страниц на тарифе Growth. Bright Data берёт за каждую запись, $1.50 за 1000. ScrapeCreators берёт за каждый запрос, $1.88 за 1000 на тарифе за $47. Собственный Facebook Pages Scraper от Apify берёт $12.00 за 1000 страниц на бесплатном тарифе.
Готовы запустить на своих страницах? Получите API-ключ и бесплатные запросы.
Наш тест парсинга Facebook: 20 страниц брендов, 14 постов через публичное встраивание Facebook и 10 Reels, каждый адрес запрошен до трёх раз.
37 из 44 вернулись с первой попытки.
Ещё 6 - со второй.
Graph API от Facebook, парсеры Facebook на Apify и Facebook Scraper API от Bright Data: сколько каждый берёт за те же 1000 страниц и что требует от вас до старта.
| Что нужно | ||||
|---|---|---|---|---|
| Вы платите за | Страницу | Бесплатно с лимитом | Каждый результат | Каждую запись |
| 1000 страниц | $0.98 | Бесплатно | $12.00 | $1.50 |
| Проверка приложения и бизнеса | Нет | Да | Нет | Нет |
| Ваш аккаунт Facebook | Не нужен | Приложение Meta | Не нужен | Не нужен |
| Все посты страницы по ссылке | Только последний | После проверки | Да | Да |
| Реакции по типам | Только общее число | Да | Да | Да |
| Бесплатный старт | 1000 запросов | После проверки приложения | $5 в месяц | 5000 в месяц |
| Страница целиком в HTML | Да | Нет | Нет | Нет |
Парсите не только Facebook? Web Unlocker возвращает любую страницу так же и по той же цене.
Один запрос на страницу приносит её точное число подписчиков и последний пост с реакциями и комментариями. 100 страниц брендов, 100 запросов, $0.098.
Facebook округляет NASA до 28 млн подписчиков.
Парсер возвращает 28,728,835.
Facebook хранит данные публичной страницы как JSON внутри HTML. Web Unlocker возвращает этот HTML, а несколько строк кода достают из него страницу или пост. Вкладка «Страницы брендов» - небольшой парсер страниц Facebook для списка: на входе названия страниц, на выходе CSV.
Заполните форму выше. Ключ придёт на почту в течение одного рабочего дня.
Страница - для подписчиков и последнего поста, пост или Reels - для лайков, комментариев и репостов. Пост идёт через публичное встраивание Facebook.
Проверьте, что страница пришла с данными, и запросите её снова по новому адресу, если Web Unlocker был ненадолго недоступен.
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`);Готовы запустить на своих страницах? Получите API-ключ и бесплатные запросы.
Один аккаунт, одна прокси-сеть, одна экосистема. Выберите продукт под задачу.
Парсите больше сайтов? Смотрите парсеры Instagram, Reddit и YouTube или все инструменты для веб-парсинга.
Парсер Facebook - это инструмент, который читает публичные страницы Facebook и превращает их в данные: подписчиков, категорию и последний пост страницы, текст, лайки, комментарии и репосты поста. Gologin Web Unlocker - это API парсера Facebook: отправьте ему адрес страницы, поста или Reels, и он вернёт страницу с этими данными по $0.98 за 1000 страниц.
Для парсинга Facebook отправьте в Web Unlocker адрес публичной страницы или Reels, а пост - через его публичное встраивание Facebook. Web Unlocker вернёт страницу такой, какой её видит посетитель без входа в аккаунт, с данными внутри: подписчиками, последним постом, реакциями, комментариями и репостами. Код выше читает их в несколько строк и сохраняет в JSON или CSV.
Отправьте адрес страницы в Web Unlocker через библиотеку requests и прочитайте данные со страницы. Вкладка Python выше - готовый парсер Facebook на Python, проверенный на живом API: он выводит точное число подписчиков, категорию, сайты и последний пост страницы с его реакциями.
Да. Страницы принадлежат брендам, организациям и публичным людям и открываются для всех, поэтому Web Unlocker их возвращает, включая ссылки вида facebook.com/profile.php?id=... Личные профили людей показывают посетителям без входа мало или ничего, и этот парсер их не охватывает.
Да, Graph API, но с ограничениями. Чтобы читать публичные посты чужих страниц, нужна функция Page Public Content Access, которую Meta выдаёт после App Review (проверки приложения) и проверки бизнеса. Groups API убрали в апреле 2024 года, а CrowdTangle закрылся в августе 2024 года.
Да. Публичные страницы, посты и Reels открываются без входа, и Web Unlocker открывает их как посетитель без входа в аккаунт: вам не нужен аккаунт Facebook и вы не рискуете своими. Закрытые профили и закрытые группы остаются закрытыми.
Не по одной ссылке на страницу: посетитель без входа видит последний или закреплённый пост страницы, и Web Unlocker возвращает его с точным числом реакций, комментариев и репостов. Для других постов отправляйте ссылку на каждый: один пост - один запрос, $0.98 за 1000.
Не этим парсером. Посты внутри групп не возвращаются через публичное встраивание Facebook, а закрытые группы открыты только участникам. Здесь речь о страницах, постах и Reels; другие публичные страницы Web Unlocker возвращает по той же цене за страницу, так что попробуйте свои на 1000 бесплатных запросах.
Их число - да: страница возвращает точное число реакций, комментариев и репостов своего последнего поста, а Reels - точное число реакций и комментариев. Пост через встраивание показывает лайки так, как их округляет Facebook, например 1.4K. Полный список комментариев загружается только для пользователей, которые вошли в аккаунт.
$0.98 за 1000 страниц, одна цена за любую страницу: страница с последним постом - одна страница, пост или Reels - одна страница. Неудачный запрос ничего не стоит. Тарифы начинаются от $49 в месяц за 50 000 запросов.
С Web Unlocker вы получаете 1000 бесплатных запросов, этого хватит на 1000 страниц или постов. Библиотеки с открытым кодом, например facebook-scraper для Python, бесплатны: они работают на ваших серверах, часто требуют ваши cookies Facebook, а поддерживать их работу при изменениях в Facebook придётся вам.
Да. После установки одного навыка Claude Code, Cursor или любой MCP-клиент читает страницы Facebook через Web Unlocker. Смотрите MCP & AI Skills.
Да. Facebook Pages Scraper от Apify берёт $12.00 за 1000 страниц на бесплатном тарифе, а его Facebook Posts Scraper - $5.00 за 1000 постов. Web Unlocker возвращает публичную страницу с точным числом подписчиков и последним постом или пост по его ссылке за $0.98 за 1000.
Нет. Sharing Debugger от Meta (отладчик ссылок), который часто называют парсером Facebook, показывает, как ваша собственная ссылка выглядит, когда ею делятся в Facebook, и обновляет это превью: он находится на developers.facebook.com/tools/debug/. API парсера Facebook, такой как Web Unlocker, читает данные с публичных страниц Facebook.
Страницы, посты и Reels, которые открываются без входа, - это публичные страницы. В деле Meta v. Bright Data в январе 2024 года федеральный суд США решил, что условия Meta не запрещают парсинг публичных данных без входа в аккаунт. Что вы собираете и как используете, решаете вы, поэтому сверьтесь с правилами, которые относятся к вашему проекту.
Не с Web Unlocker: он отправляет каждый запрос с адреса в выбранной вами стране из 195+, поэтому вам не нужно самим арендовать и менять прокси. Демо выше запрашивает из США.
Расскажите немного о вашей команде и получите: