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





Хотите попробовать сами? Получите API-ключ с 1000 бесплатных запросов.
Web Unlocker берёт за страницу поста один раз, вместе с точным числом ответов, репостов, лайков и просмотров, по $0.98 за 1000 страниц. Парсер Twitter на Apify берёт $0.05 за каждую ссылку на отдельный пост, а Bright Data - $1.50 за 1000 записей.
X API берёт $5.00 за 1000 постов.
Здесь 1000 стоят $0.98.
Запрос, на который сервис не смог ответить, ничего не стоит. В нашем тесте 6 из 50 первых попыток вернулись с быстрым отказом, и повторный запрос приносил страницу.
Сколько стоят 1000 постов X
1000 публичных постов с лайками, репостами, ответами и просмотрами по опубликованным ценам
Gologin: $0.98 за 1000 страниц, одна страница на пост. Bright Data берёт за каждую запись, $1.50 за 1000. X API берёт $0.005 за каждое прочтение поста. Twitter Scraper Lite на Apify берёт $0.05 за каждую ссылку на отдельный пост плюс $0.0004 за пост.
Готовы запустить на своих постах? Получите API-ключ и бесплатные запросы.
Наш тест парсинга Twitter: 20 профилей брендов и авторов, по одному свежему посту от каждого и 10 аккаунтов поменьше, каждая страница запрошена до трёх раз, так же, как это делает демо выше. Вот что вернулось и как быстро.
44 из 50 вернулись с первой попытки.
Остальные 6 - со второй или третьей.
Официальный X API, парсеры Twitter на Apify и X Scraper API от Bright Data: сколько каждый берёт за те же 1000 постов и профилей и что требует от вас до старта.
| Что нужно | ||||
|---|---|---|---|---|
| Вы платите за | Страницу | Каждый пост или профиль | Каждый запрос и пост | Каждую запись |
| 1000 постов по ссылке | $0.98 | $5.00 | $50.40 | $1.50 |
| 1000 профилей | $0.98 | $10.00 | $4.40 | $1.50 |
| Аккаунт разработчика | Не нужен | Нужен | Не нужен | Не нужен |
| Повторные проверки аккаунта | Да | Да | Ограничены | Да |
| Поиск по ключевым словам | Нет | Да | Да | Да |
| Точное число подписчиков | Округлённое | Да | Да | Да |
| Бесплатный старт | 1000 запросов | Нет | $5 в месяц | 5000 в месяц |
| Та же цена на любом другом сайте | Да | Нет | Нет | Нет |
Парсите не только X? Web Unlocker возвращает любую страницу так же и по той же цене.
Страница профиля приносит 5 последних постов аккаунта с точным числом лайков, репостов, ответов и просмотров. 100 аккаунтов дают 500 свежих постов за $0.098, как бы часто вы ни проверяли. Главный парсер Twitter на Apify просит не повторять один и тот же запрос.
X API берёт $5 за 1000 постов.
Здесь 1000 приходят с 200 профилей за $0.20.
Посетителю без входа X отдаёт данные прямо в HTML страницы, с точными показателями под каждым постом. Web Unlocker возвращает этот HTML, а несколько строк кода читают его. Вкладка «Список аккаунтов» - небольшой краулер Twitter: на входе аккаунты, на выходе CSV с последними постами.
Заполните форму выше. Ключ придёт на почту в течение одного рабочего дня.
Профиль - для подписчиков и 5 последних постов, пост - для точного числа лайков, репостов, ответов и просмотров.
Проверьте, что страница пришла с данными, и запросите её снова, если сервис прислал быстрый отказ.
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python x_profile.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport html
import json
import os
import re
import time
from datetime import datetime, timezone
import requests
username = "NASA"
def scrape(url):
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 'role="group"' in page:
return page
time.sleep(3)
raise RuntimeError("The page came back without data, try again later")
def meta(page, name):
found = re.search(rf'<meta (?:property|name)="{name}" content="([^"]*)"', page)
return html.unescape(found.group(1)) if found else None
def count(page, word):
found = re.search(rf">([\d.,]+[KMB]?)</span>\s*<span[^>]*>{word}<", page)
return found.group(1) if found else None
def text_of(chunk):
start = chunk.find('aria-label="More"')
if start < 0:
return ""
start = chunk.find("</button>", start) + len("</button>")
ends = [chunk.find(mark, start) for mark in ('inert=""', "data-press-control", "<video", 'role="group"', "<article")]
end = min([chunk.rfind("<", 0, at) for at in ends if at > 0] or [len(chunk)])
words = re.sub(r"<script.*?</script>|<[^>]+>", "", chunk[start:end], flags=re.S)
return html.unescape(words).strip()
page = scrape(f"https://x.com/{username}")
posts = []
start = 0
for match in re.finditer(r'aria-label="([^"]*)"[^>]*role="group"', page):
chunk = page[start : match.start()]
start = match.end()
link = re.search(r'href="/(\w+)/status/(\d+)', chunk)
stamp = re.search(r'"timestamp":(\d+)', chunk)
counts = {word.rstrip("s").replace("replie", "reply"): int(value) for value, word in re.findall(r"(\d+) (\w+)", match.group(1))}
posts.append(
{
"url": f"https://x.com/{link.group(1)}/status/{link.group(2)}",
"time": datetime.fromtimestamp(int(stamp.group(1)) / 1000, timezone.utc).isoformat() if stamp else None,
"pinned": ">Pinned</span>" in chunk[: chunk.find("data-post-avatar")],
"text": text_of(chunk),
"replies": counts.get("reply", 0),
"reposts": counts.get("repost", 0),
"likes": counts.get("like", 0),
"bookmarks": counts.get("bookmark", 0),
"views": counts.get("view"),
}
)
profile = {
"username": meta(page, "profile:username"),
"name": meta(page, "author"),
"bio": meta(page, "description"),
"followers": count(page, "Followers"),
"following": count(page, "Following"),
"posts": meta(page, "twitter:data1"),
"joined": meta(page, "twitter:data2"),
"latest_posts": posts,
}
print(json.dumps(profile, indent=2, ensure_ascii=False))
print(f"@{username}: {profile['followers']} followers, {len(posts)} latest posts with exact counts from one page")GOLOGIN_SCRAPING_API_KEY=your_key node x-posts.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
const links = [
'https://x.com/NASA/status/2120305504295510080',
'https://x.com/SpaceX/status/2120808224324510133',
'https://x.com/Spotify/status/2120607242374504556',
];
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('role="group"')) return page;
await new Promise((resolve) => setTimeout(resolve, 3000));
}
throw new Error(`${url} came back without data, try again later`);
}
const meta = (page, name) => page.match(new RegExp(`<meta (?:property|name)="${name}" content="([^"]*)"`))?.[1] ?? '';
const count = (label, word) => Number(label.match(new RegExp(`(\\d+) ${word}`))?.[1] ?? 0);
const posts = [];
for (const url of links) {
const page = await scrape(url);
const label = page.match(/aria-label="([^"]*)"[^>]*role="group"/)[1];
posts.push({
url,
author: meta(page, 'og:title').replace(/ on X$/, ''),
date: meta(page, 'article:published_time').slice(0, 10),
replies: count(label, 'repl'),
reposts: count(label, 'repost'),
likes: count(label, 'like'),
bookmarks: count(label, 'bookmark'),
views: count(label, 'view'),
});
}
writeFileSync('posts.csv', ['url,author,date,replies,reposts,likes,bookmarks,views', ...posts.map((post) => Object.values(post).map((value) => JSON.stringify(value)).join(','))].join('\n'));
console.table(posts);
console.log(`${posts.length} posts in ${posts.length} pages: $${(posts.length * 0.00098).toFixed(4)} on the Growth plan`);GOLOGIN_SCRAPING_API_KEY=your_key node x-accounts.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
const accounts = ['NASA', 'NatGeo', 'SpaceX', 'Spotify', 'YouTube'];
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('role="group"')) return page;
await new Promise((resolve) => setTimeout(resolve, 3000));
}
return '';
}
const count = (label, word) => Number(label.match(new RegExp(`(\\d+) ${word}`))?.[1] ?? 0);
const rows = [];
for (const account of accounts) {
const page = await scrape(`https://x.com/${account}`);
const followers = page.match(/>([\d.,]+[KMB]?)<\/span>\s*<span[^>]*>Followers</)?.[1] ?? '';
let start = 0;
for (const group of page.matchAll(/aria-label="([^"]*)"[^>]*role="group"/g)) {
const chunk = page.slice(start, group.index);
start = group.index + group[0].length;
const [, author, id] = chunk.match(/href="\/(\w+)\/status\/(\d+)/) ?? [];
const time = chunk.match(/"timestamp":(\d+)/)?.[1];
rows.push({
account,
followers,
post: `https://x.com/${author}/status/${id}`,
date: time ? new Date(Number(time)).toISOString().slice(0, 10) : '',
replies: count(group[1], 'repl'),
reposts: count(group[1], 'repost'),
likes: count(group[1], 'like'),
views: count(group[1], 'view'),
});
}
}
writeFileSync('latest-posts.csv', ['account,followers,post,date,replies,reposts,likes,views', ...rows.map((row) => Object.values(row).map((value) => JSON.stringify(value)).join(','))].join('\n'));
console.table(rows);
console.log(`${rows.length} posts from ${accounts.length} accounts in ${accounts.length} pages: $${(accounts.length * 0.00098).toFixed(4)} on the Growth plan`);Готовы запустить на своих аккаунтах? Получите API-ключ и бесплатные запросы.
Один аккаунт, одна прокси-сеть, одна экосистема. Выберите продукт под задачу.
Парсите больше сайтов? Смотрите парсеры Instagram, Reddit и YouTube или все инструменты для веб-парсинга.
Парсер Twitter, который теперь также называют парсером X, - это инструмент, который читает публичные страницы X (бывший Twitter) и превращает их в данные: имя, био, число подписчиков и последние посты профиля, текст, время, ответы, репосты, лайки и просмотры поста. Gologin Web Unlocker - это API парсера Twitter: отправьте ему адрес страницы, и он вернёт страницу с этими данными по $0.98 за 1000 страниц.
Да, без входа. X показывает публичные профили и посты посетителям без входа в аккаунт, и данные лежат прямо на странице. Web Unlocker открывает их как посетитель без входа с IP-адреса в США, поэтому вам не нужны аккаунт X, cookies и ключ X API: в нашем тесте 50 из 50 страниц вернулись с данными.
Отправьте адрес профиля или поста в Web Unlocker через библиотеку requests и прочитайте показатели со страницы. Вкладка Python выше - готовый парсер Twitter на Python, проверенный на живом API: он выводит число подписчиков профиля и 5 последних постов с точным числом лайков, репостов, ответов и просмотров.
Да. Официальный X API - один способ читать посты, публичная страница - другой. Web Unlocker читает страницу, поэтому вам не нужны аккаунт разработчика, счёт за X API и его месячный лимит в 3 млн прочтений постов.
Не для чтения постов в больших объёмах. X API теперь берёт плату за использование: $0.005 за прочтение поста и $0.010 за профиль, до 3 млн прочтений постов в месяц. С Web Unlocker вы получаете 1000 бесплатных запросов, этого хватит на 1000 постов или профилей.
Цены Twitter API теперь - это цены X API с оплатой за использование: $5.00 за 1000 постов и $10.00 за 1000 профилей. Web Unlocker в обоих случаях берёт $0.98 за 1000 страниц, а страница профиля уже содержит 5 последних постов аккаунта: 1000 постов с 200 профилей стоят $0.20.
$980, если читать каждый пост по его собственной ссылке, по $0.98 за 1000 страниц. Если читать посты со страниц профилей, 1 миллион постов - это 200 000 страниц по 5 постов: $196. X API берёт за тот же миллион постов $5000.
Да. Каждый запрос загружает живую страницу, поэтому показатели такие, какие X показывает в этот момент: в нашем тесте у одного и того же поста NASA было 4337 лайков, а через двадцать минут - 4341.
Не с Web Unlocker. X открывает страницы поиска и хештегов только после входа, поэтому запрос без входа попадает на страницу регистрации. Начните с аккаунтов и постов, за которыми вы следите: их страницы публичные, а пример «Список аккаунтов» выше проверяет целый список таких аккаунтов.
Частично. Страница поста приносит 3 или 4 популярных ответа, у каждого есть автор, текст и точное число лайков, репостов и просмотров. Полный список ответов открывается только после входа.
Не списком: кто читает аккаунт, видно только после входа. Число подписчиков публичное и приходит с каждым профилем, округлённое так, как X показывает его посетителям без входа (92.2M, 28M): точного числа на странице нет. Показатели каждого поста приходят точными.
5 последних, как X показывает их посетителю без входа, у каждого точное число ответов, репостов, лайков, закладок и просмотров. Закреплённый пост идёт первым и помечен как закреплённый. Для более старых постов используйте их ссылки: каждая страница поста - один запрос.
Зависит от задачи. Парсеры Apify ищут по ключевым словам и берут деньги за каждый пост. X API читает всё по $5 за 1000 постов. Web Unlocker возвращает публичную страницу профиля или поста с точными показателями по одной цене за страницу, в X и на любом другом сайте.
Да. Главный парсер Twitter на Apify принимает только поиски, не меньше 50 постов на запрос, и просит не повторять один и тот же запрос; отдельные посты идут через его версию Lite по $0.05 за ссылку. Web Unlocker принимает любую ссылку на профиль или пост по $0.98 за 1000 страниц, так часто, как вам нужно.
Профили и посты, которые открываются без входа, - это публичные страницы. В деле X Corp. v. Bright Data в мае 2024 года федеральный судья США отклонил иск X о парсинге публичных данных. Что вы собираете и как используете, решаете вы, поэтому сверьтесь с правилами, которые относятся к вашему проекту.
Да. Агент отправляет адрес профиля или поста в тот же API и читает показатели со страницы. С MCP & AI Skills Claude создаёт такой инструмент по описанию задачи.
Расскажите немного о вашей команде и получите: