Останнім часом я провів чимало часу з Tabstack, зокрема розробляв CLI навколо його API. Настав час розібратися, що це за інструмент, для яких завдань він підходить і чи заслуговує він на місце у вашому стеку. Зараз навколо всього з поміткою «AI» забагато шуму, тому я хочу відкинути маркетинг і поговорити про суть продукту.
Почнемо з проблеми, яку він вирішує. Продукт стає набагато зрозумілішим, коли ви відчуваєте біль, який він усуває.
Проблема, яку ніхто не хоче брати на себе
Якщо ви хоч раз намагалися надати програмі надійний доступ до вебу, ви знаєте, як швидко це перетворюється на «болото». Все починається з простого fetch. Потім виявляється, що сайт рендерить контент на стороні клієнта, тож звичайний запит повертає порожній каркас — і ви підключаєте headless browser. Далі з’являються проксі, бо вас блокують через rate limited. Потім змінюється верстка, і ваші селектори «ламаються». Зрештою, ви пишете унікальну логіку парсингу для кожного сайту, і кожна з них — це маленька бомба сповільненої дії, що чекає нагоди вибухнути о третій ночі.
Ніщо з цього не є цікавою частиною вашого продукту. Це «сантехнічні роботи». Ви підтримуєте двигун рендерингу, рівень проксі та купу крихкого коду для екстракції лише для того, щоб ваш додаток міг прочитати сторінку. Саме цю роботу Tabstack пропонує взяти на себе.
Що таке Tabstack насправді
Tabstack — це API для виконання веб-завдань та трансформації даних, створений у Mozilla. Концепція проста: ви надаєте URL, schema, запитання або завдання, а браузер, модель та оркестрація працюють на їхньому боці. Ви отримуєте чисті дані, відповіді з цитатами або виконані браузерні завдання. Вам не потрібно налаштовувати headless Chrome, підключати LLM чи опікуватися рівнем парсингу.
Це продукт для розробників, а не для пересічних користувачів. Тут немає панелі керування для ручного перегляду веб-сторінок. Це REST API з SDK для TypeScript та Python, MCP server та CLI. Він націлений на тих, хто створює агентів, інструменти для досліджень, pipeline даних та автоматизовані workflow.
На момент написання сервіс перебуває у публічному ранньому доступі. Кожен акаунт отримує 10 000 безкоштовних credits без прив’язки картки — цього цілком достатньо для повноцінної оцінки.
Чотири ключові функції
Вся функціональність зводиться до чотирьох можливостей, після вивчення яких ментальна модель сервісу стає на свої місця.
Extract перетворює сторінку на формат, з яким модель може реально працювати. Найдешевший варіант — markdown. Ви даєте URL і отримуєте чистий текст із розміткою, включаючи frontmatter. Це ідеально, коли ви заповнюєте context window і не хочете витрачати tokens на шум у HTML-коді.
curl -X POST "https://api.tabstack.ai/v1/extract/markdown" \
-H "Authorization: Bearer $TABSTACK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
Цікавіша форма екстракції — JSON. Ви описуєте потрібну структуру через schema, передаєте URL і отримуєте дані, що відповідають цій схемі. Жодних селекторів, парсингу чи обробки неочікуваних форматів даних.
import Tabstack from '@tabstack/sdk';
const client = new Tabstack();
const { jobs } = await client.extract.json({
url: 'https://www.google.com/about/careers/applications/jobs/results',
json_schema: {
jobs: [{ title: 'string', location: 'string' }],
},
});
Дотримання схеми — це критично важливий момент. Контракт належить вам, а не вебсайту. Коли сайт змінить макет наступного тижня, ваш pipeline цього не помітить, бо ви запитуєте структуру даних, а не «скрапите» структуру сторінки.
Generate — це близький родич extract, але з важливою різницею. Extract витягує дані, що вже є на сторінці. Generate використовує модель для створення чогось нового на основі цього контенту: резюме, категоризації, переписаного тексту чи персоналізованого повідомлення. Якщо вам потрібна ціна з картки товару — це extract. Якщо ви хочете отримати короткий висновок про відгук з тегом тональності — це generate.
Automate — найбільш амбітна функція. Ви даєте завдання простою мовою, а сервіс керує реальним браузером до моменту завершення: клікає, скролить, заповнює форми та проходить багато крокові сценарії на сайтах, які ви не контролюєте.
import os
from tabstack import Tabstack
tabs = Tabstack(api_key=os.getenv('TABSTACK_API_KEY'))
result = await tabs.agent.automate(
url="https://news.ycombinator.com",
task="Go through 5 pages of the top posts. For each post, determine the "
"website it is from and group all posts by website. Return the 10 "
"websites with the most posts.",
)
Це функція, яка повністю замінює зв'язку headless-браузера та коду-«клею». Вона має налаштування безпеки (guardrails), ліміт ітерацій та інтерактивний режим, де ваш оркестратор може залишатися в процесі виконання.
Research запускає автономний аналіз багатьох джерел і повертає синтезовану відповідь, де кожне твердження має посилання на першоджерело. Вибір джерел, читання, синтез та цитування відбуваються в межах одного виклику.
const stream = await client.agent.research({
query: 'Key risks in CRE lending right now?',
mode: 'fast',
});
for await (const event of stream) {
if (event.event === 'complete') {
console.log(event.data.report);
console.log(event.data.metadata.citedPages);
}
}
Цитати — головна перевага. Якщо ви створюєте функцію дослідження для реальних користувачів, відповідь, якій можна довіряти завдяки першоджерелам, вартує набагато більше, ніж впевнено написаний абзац без жодних підтверджень.
Що з цим можна побудувати
Ці чотири можливості можуть здаватися абстрактними, доки не перекласти їх на реальні завдання.
Моніторинг цін та конкурентів — найочевидніший кейс. Запланований виклик extract для групи товарів повертає структурований JSON, що дозволяє тримати dashboard актуальним без ручного копіпасту. Збагачення лідів (lead enrichment) — ще один варіант: берете домен, витягуєте кількість працівників, tech stack, дані про фінансування та передаєте це в pipeline. Сюди ж належать агрегація вакансій та аналіз ринку — всюди, де потрібно отримати структуру з хаотичних сторінок.
Режим research дозволяє створювати внутрішні функції продукту: дослідницького асистента у вашому додатку, який відповідає на основі «живого» вебу з цитатами, а не застарілих індексів. А automate закриває операційну роботу, яка раніше потребувала крихких RPA-скриптів, наприклад, вхід у кабінет і виконання певних дій.
Спільна риса всіх цих кейсів — потреба в актуальному контексті з вебу та небажання команд підтримувати власний стек для скрапінгу.
Чому краще обрати готове рішення, а не писати своє
Чесна відповідь — абстракція. Ви купуєте час, який інакше витратили б на рендеринг, проксі, парсинг і подальшу підтримку всього цього. Для більшості команд вартість підтримки — це головні витрати, оскільки вони ніколи не враховуються в оцінках і ніколи не закінчуються.
Друга причина — підтримка Mozilla. Приватність тут не просто маркетинговий хід. Запити мають виділений Tabstack user-agent, щоб власники сайтів могли ідентифікувати трафік; сервіс поважає відмови в robots.txt, а отриманий контент вважається ефемерним і ніколи не використовується для тренування моделей. Це важливо для відповідальної роботи в мережі.
Третя причина — DX (Developer Experience). Обмежені API keys, зрозуміла Bearer-token автентифікація, якісні SDK, CLI та відображення вартості кожної дії в консолі перед запуском. Кнопки «відкрити в Claude, ChatGPT або Cursor» на сторінках документації чітко вказують, для кого створювався цей продукт. Відчувається, що його робили люди, які самі інтегрували сторонні API.
Про ціноутворення
Tabstack працює на основі кредитів (credits). Мені подобається, що одна валюта покриває всю платформу. Вартість виклику залежить від endpoint та складності завдання.
Тарифи на дії легко запам'ятати. Markdown extraction — 10 кредитів, JSON extraction — 50, generate — 100, automate — 100 за кожну дію, fast research — 250, а balanced research — 350. Важливий нюанс: extract та generate — це завжди одна дія за виклик (фіксована ціна), тоді як automate та research об’єднують стільки дій, скільки потрібно для виконання завдання. Ви платите за виконану роботу, а не за запит, що справедливо, хоча й робить витрати на агентів змінними.
Є три плани: Individual (безкоштовно, pay-as-you-go), Team ($99/міс за 500 000 кредитів) та Pro ($499/міс за 3 000 000 кредитів). Перевищення ліміту на платних планах коштує дешевше, ніж у pay-as-you-go. Безкоштовні 10 000 кредитів — це достатньо, щоб побудувати щось реальне до того, як ви вирішите платити.
Недоліки та кому це не підходить
Було б неправильно перераховувати лише переваги.
Це не працює миттєво. Екстракція займає кілька секунд, а automate або research можуть тривати значно довше, бо вони виконують реальні багато крокові дії. Це нормально для фонової автоматизації, але не підходить для інтерфейсів, де потрібна реакція менш ніж за секунду.
Це не інструмент для масового crawling. Кредитна модель комфортна для тисяч або десятків тисяч викликів. Якщо ваша мета — збирати мільйони сторінок на день, вам потрібна власна інфраструктура, інакше економіка проекту не зійдеться.
Це не no-code інструмент і не споживчий асистент. Тут немає візуального конструктора чи вікна чату. Ви пишете API calls. Якщо вам потрібна автоматизація формату «натиснув і полетіло» без коду — це не той продукт.
Змінна вартість automate та research також потребує уваги. Для агентів варто встановлювати guardrails та ліміти ітерацій, щоб контролювати бюджет.
Вердикт
Tabstack робить те, що викликає повагу: розглядає браузинг як окрему інфраструктурну проблему і вирішує її системно, а не просто прикручує скрапер до LLM. Schema-first екстракція — це кілер-фіча, research з цитатами — основа для майбутніх продуктів, а позиція Mozilla щодо приватності — те, що має бути стандартом індустрії.
Якщо ви розробляєте агентів або AI-функції, яким потрібні «живі» дані з вебу, і ви не хочете власноруч підтримувати стек для скрапінгу — цей інструмент вартий вашого часу. Почніть з малого: виберіть один workflow і подивіться, як він впорається з вашими реальними завданнями. Безкоштовні кредити роблять цей експеримент майже безкоштовним.
Ймовірно, згодом я опублікую гайд зі створення чогось невеликого на базі automate endpoint, адже саме там приховані найцікавіші можливості.