Changelog
What changed in each release.
0.11.0 — 2026-10-13#
- Website: menus open on hover; one "why CrawlGenie exists" comparison (one platform instead of Browserbase + Firecrawl + TinyFish + Apify) with the detailed table folded underneath; chat bubble on every page (Ask CrawlGenie from the docs, or Message us →
POST /site/contact, stored and e-mailed toVESSEL_CONTACT_TO); support address hello@crawlgenie.com in footer, legal pages and Organization schema; favicon, app icons, web manifest and social card from the new Spark G mark; meta descriptions within 160 characters. - Dashboard: Token savings in the sidebar under Overview; the "+ Custom agent" button on Agents opens the create dialog again; Overview sessions table scrolls instead of cropping and shows Replay/Open without hovering; help-bot excerpts no longer split sentences at e-mail addresses.
- Public deployments:
/docsand/docs/<page>are server-rendered HTML for visitors and crawlers (same markdown as the dashboard); app links opened while signed out redirect to/login?next=…and return after sign-in; unknown routes return a real 404 page; sign-out goes to the sign-in page; images and icons cache for a day. - Plan ladder: monthly quotas for reads, searches and agent runs (REST and MCP), paid-only alerts/webhooks, scheduled routines, isolated tier, proxy pools, per-plan recording retention; Free resized to 120 browser-minutes with every product included.
- Plans: per-plan capacity (active watches, team members, memory documents, batch size) enforced with
402 plan_limit+ upgrade link; limits live inpublic/pricing.json. - Dashboard: Get started checklist (separate from the onboarding wizard), behaviour-based recommendations, month strip on the Overview, session Pages/Console/Files tabs and expiry, tested setup prompt for coding agents,
/v1/insights. - Sign-in page: standalone
/start,/signupand/loginfor public deployments (value slides, Google button), dashboard stays at/app. - "Continue with Google" (OpenID Connect) with account linking by verified e-mail;
VESSEL_GOOGLE_CLIENT_ID/SECRET. - Vault:
{{totp:NAME}}one-time codes (RFC 6238) for 2-factor logins. VESSEL_PUBLIC_HOME: marketing site at/; installer sets it with sign-up, public tools, log rotation and swap.
Added#
- Web agents:
schemafor structured results;POST /v1/agent/batch(one goal across many URLs or many goals) with a concurrency cap andGET /v1/agent/batches/:idfor counts, results and usage. - Continuous reports for every watch:
/v1/watches/:id/series(metrics per run: counts, new rows, scores, column means) and/v1/watches/:id/report(7-day markdown or JSON: latest run, trend, alerts, new rows); trend sparklines on the watch page. - SEO + AIO report agent (
seo_aio_report), free public tools pages, in-app docs with the retrieval-only assistant. - Marketing site v2 on the "Graphite & Lime" theme (five theme directions in
/brand/themes.html), repositioned on LLM token savings; web agents solution page; Enterprise private-deployment plan.
Changed#
- The product is no longer presented as open source; package licenses set to UNLICENSED and
private: true. Code published before this commit remains under its original Apache-2.0 terms wherever it was copied.
0.10.0 — 2026-10-12#
Added#
- In-house documentation and help: every server serves its docs at
/docs(search, table of contents, raw.md,/llms.txt,/llms-full.txt) and an Ask CrawlGenie assistant that answers from the docs with retrieval only (POST /help/ask, public, no model). New pages: Concepts, Use cases by industry, Documents & media, Knowledge base, Troubleshooting, Signed agent identity; the Extractor library page is generated from the running catalogue. Dashboard links no longer point at GitHub. - Knowledge base (
/v1/knowledge, MCPknowledge_add/knowledge_search): collections of pages, documents, crawl output, watch rows and notes, chunked and indexed with SQLite FTS5 (BM25 + porter); questions return passages with sources and a token receipt. Dashboard page. - Signed agent identity (Web Bot Auth): Ed25519 key per deployment,
/.well-known/http-message-signatures-directory,GET /v1/identity,policy.signedAgent/ workspace default; navigations carry RFC 9421 signatures (tagweb-bot-auth) so sites can verify the agent. - Documents: PDF
pagesranges and table-to-columns reconstruction; ODT/ODS/ODP and RTF parsing; Google Docs/Sheets/Slides, Drive, Dropbox and GitHub blob links normalised to export/raw URLs in/v1/parse,/v1/scrape,web_answer,web_research. - Reading less:
granularity: "sentence"(highlights: matching sentences, table rows, code lines),redactPII,cache: prefer|onlyon/v1/scrape;POST /v1/answer {urls, q}andweb_research {urls}for one question across several sources. - Extractors:
auto_list(repeated blocks without CSS),pricing_page,github_issues,search_watch(web-scale monitor: new results for a query),brand_assets,llms_txt,page_media(every file/video/image on a page with the next step);css_extractgainedscroll. - SDKs:
knowledge.*,help.*,answer(),identity(), parse options (TypeScript);knowledge_*,answer,help_ask,identity(Python). - Docker image ships
docs/andCHANGELOG.md.
Fixed#
- Page-range PDF parses no longer trigger OCR because of the per-page word heuristic; pdf.js synthetic space runs no longer defeat column detection.
0.9.0 — 2026-10-12#
Added#
- Savings by surface: every session is tagged with the channel that created it (REST API, MCP, tools API, dashboard, built-in agents, or the OAuth connector that holds the key, e.g.
connector:ChatGPT);GET /v1/stats/savingsreturnsbyChanneland the Token savings page shows a per-surface table. - Image OCR (PNG/JPEG/WEBP/GIF/BMP via
/v1/parse), YouTube transcripts (youtube_transcriptextractor andweb_answeron a video URL: caption track → timestamped paragraphs, no speech model), Playground drop zone for local files. - Security: cross-site consent submissions are refused, OAuth endpoints are rate-limited per IP, the OCR document handoff is one-time and same-origin only, the Chrome extension no longer requests host permissions.
scripts/ab-connector.shcompares cost and answers of Claude Code's built-in web tools vs the CrawlGenie connector on the same tasks. - OAuth 2.1 for MCP connectors: CrawlGenie is an authorization server (
/.well-known/oauth-authorization-server,/.well-known/oauth-protected-resource, dynamic client registration, PKCE, consent page). ChatGPT, claude.ai, Claude Desktop, Cursor and Gemini CLI add CrawlGenie as a custom connector; tokens are revocable workspace keys. Verified end to end with the official MCP client over a public HTTPS tunnel and with Claude Code (claude mcp add). - Cheapest-read tools:
web_answer(URL or document + question → only the matching passages) andweb_research(search → read → focus, one call) with a token receipt on every result;maxTokensbudgets on snapshot / text / scrape / browser_snapshot (exact BPE truncation). - Documents: OCR for scanned PDFs (pages rendered by a CrawlGenie browser with pdf.js, read by tesseract.js; auto when the text layer is empty,
ocr: force|off), XLSX (sheets → markdown tables) and PPTX (slides) parsing; all routed automatically from/v1/scrapeandweb_answer. - Scrape gained
actions(click/scroll/type before extracting) andchangeTracking(new / same / changed + diff per owner and URL, so agents skip unchanged pages). Crawl gained/answer(passages across all pages with sources) and/export?format=jsonl|md|csv|pdf. - Outcome-first UI: five-step onboarding (role → goal → connect your agent → try three runs → map), Overview "Start from a goal" + vocabulary with token cost per concept + zero-token-runs KPI, a "Do something with this page" panel on every session (ask, read, extract tables, links, download, instruct an agent, keep), next-step actions on crawl and watch pages, Playground tabs for monitor and agent plus Get code (curl / Python / TypeScript) on every form.
- Homepage ROI calculator, Chrome extension scaffold (
integrations/chrome-extension), docs/INTEGRATIONS.md,scripts/mcp-oauth-client.mjs, SDKtools.definitions/call/executable, Pythontools()/call_tool().
0.8.0 — 2026-10-12#
Added#
- Extractor store: 59 built-in agents across 14 verticals (54 extractors + 5 monitors) (jobs, e-commerce, local & leads, reviews, social, news, SEO, finance, real estate, travel, research, government/legal/health, events, any site) — a declarative recipe engine (
html/json/feedsources) plus hand-written extractors (schema.org structured data, website contacts, tech-stack fingerprint, YouTube search/channel, SEC EDGAR, PubMed, sitemap monitor, HN hiring, JSON API watcher).GET /v1/extractors(grouped by vertical),POST /v1/extractors/{id}/run(sync rows,?format=csv), MCP/toolsvessel_extract,GET /v1/watches/{id}/dataset(rows merged across runs with first/last seen). Live-tested from a consumer IP without a proxy: 50 of 54 extractors return rows; Yelp and eBay are labelled "needs proxy" and say so at run time. - Question-focused reading:
q=on/v1/sessions/{id}/text,/v1/scrape,/v1/parseand thebrowser_extract_texttool returns only the passages that answer the question (BM25-style, no model) and reports the measured token saving. - Document parsing without a browser:
POST /v1/parsefor PDF (pdf.js text layer), DOCX (own zip + WordprocessingML reader: headings, lists, tables → markdown) and text/CSV/JSON;/v1/scraperoutes document URLs there automatically. - Search + read:
GET /v1/search?content=trueattaches markdown of the top hits in one call. - Agent onboarding:
GET /skill.md(also/agent-onboarding/SKILL.md), dashboard Setup for agents page with copy-ready MCP / SDK / CLI snippets, and a client CLI (npx vessel-browser-sdk vessel-cli …). - Settings → General (server-side, admin): workspace name, default and idle session timeouts (apply to new sessions), default blocked resources, webhook URL; API key reveal / copy / regenerate;
GET|PUT /v1/settings. - Self-hosted admins mint revocable API keys from the dashboard (implicit Workspace org); accent picker (cobalt, coral, amber, sapphire, rose);
POST /v1/tickso scale-to-zero hosts or an external cron can run due watches/schedules;deploy/github-actions/vessel-extract.ymlruns extractors on GitHub Actions for free; HOSTING.md free-tier table.
Changed#
VESSEL_SSRF_GUARD=falseis now honoured by direct fetches (JSON/feed/document sources), not only by navigation.- Watch auto-names use any subject field (query, domain, subreddit…), not only URLs.
0.7.0 — 2026-10-12#
Added#
- Extractors (Apify-style actors, no LLM):
css_extract(any page → rows via CSS, pagination),web_search_results(rank tracking),google_maps_places,trustpilot_reviews,indeed_jobs,amazon_products(price-change alerts),reddit_posts(feeds + search, no login),linkedin_company(public card),producthunt_today,g2_reviews(needs a residential pool — reports the wall honestly). Rows are deduplicated across runs ("12 new rows"), exported withGET /v1/watches/:id/runs/:runId/export?format=csv|json&only=all|new. Dashboard: Agents → Extractors, generic table with "New only" + CSV/JSON; watch sheet gets proxy-pool / login-profile options. Playbook catalogue now carriescategory. - Web search falls back DuckDuckGo → Brave → Bing (Brave serves full snippets to a headless browser without a key).
Changed#
- Interception-free policy enforcement. Playwright request interception turned out to be a bot signal on its own (Reddit: CAPTCHA with a pass-through
route('**/*'), normal page without it). Trackers, blocked domains, image/font/media/CSS blocks and literal private hosts are now enforced through Chromium's URL blocklist via CDP; interception is used only for allowlists, byte budgets, script/XHR blocks or the newpolicy.strictNetwork: true. Blocked-request metering unchanged (usage.requestsBlocked). - Extractors retry navigation once on connection resets and survive hydration redirects (Trustpilot, LinkedIn).
0.6.0 — 2026-10-12#
Added#
- Crawl / map / batch-scrape / extract (Firecrawl-shaped):
POST /v1/crawl(site crawl with limits, include/exclude globs, robots.txt, N browser workers, job status + paginated pages),POST /v1/batch-scrape,POST /v1/map(sitemaps + links),POST /v1/extract(prompt + JSON Schema → structured data via the caller's own LLM key; OpenAI-compatible, Anthropic, Gemini),GET /v1/llm. Markdown reader upgraded with readability-style main-content selection, boilerplate removal and page metadata. - Dependency-free LLM client (
src/llm/client.ts) shared by extract and the upcoming agent runner. - Team invites by link (
/v1/invites,/auth/join, members list) — no email provider required; dashboard "API keys & team". - Web search through CrawlGenie's own browser (
GET /v1/search, toolbrowser_search), DuckDuckGo with Bing fallback, no API key. - Built-in agents (no API key): change monitor, new-posts digest, price & stock tracker, SEO audit, broken-link checker — stateful watches with diffs, cron schedules and per-watch webhooks (
/v1/playbooks,/v1/watches); dashboard Agents gallery + watch pages with rendered diffs/reports. - Exact token metering: every observation counted with the o200k tokenizer (read / full tree / HTML);
/v1/stats/savings,POST /v1/measure; dashboard Token savings page with price-model selector and a live "Measure any URL" check. - Agent:
POST /v1/agent/run— natural-language tasks executed by a built-in observe→act loop with the caller's own model key (OpenAI-compatible/Anthropic/Gemini); per-step thoughts, usage and observation tokens; dashboard Agent page with live steps and result. - Auto-deploy:
deploy/install.shnow adds watchtower — every green push to main is live on the VM within ~5 minutes (docs/DEPLOY.md “How changes go live”). - Schedules: cron-triggered routine runs with timezone support, per-schedule webhooks, run history and a preview endpoint; dashboard Schedules page with presets.
- Dashboard Crawls & extract pages (job list, live progress, per-page markdown viewer, JSON download, Extract dialog).
scripts/task-tokens.mjs: whole-task benchmark with a real BPE tokenizer (gpt-tokenizer, dev dependency); results in docs/COMPARISON.md — 22.7× vs HTML, 4.0× vs full tree over 18 observations.- Strict query booleans (
?delta=falsewas treated as true before).
0.5.0 — 2026-10-12#
Added#
- Plans & billing: Free / Pro / Team (override with
VESSEL_PLANS), monthly browser-minute and concurrency limits enforced per workspace (402 plan_minutes_exhaustedwith an upgrade link),GET /plans,GET /v1/billing, adminPOST /v1/admin/orgs/:id/planandGET /v1/admin/orgs. Stripe via Payment Links (VESSEL_STRIPE_LINKS) + signed webhookPOST /billing/stripe/webhook(VESSEL_STRIPE_WEBHOOK_SECRET): checkout upgrades the org, cancellation downgrades. Dashboard Billing page, plan badge and usage meter in the sidebar. - Off-site backups:
VESSEL_BACKUP_URL=s3://KEY:SECRET@host/bucket/prefix(R2/S3/B2/MinIO…), hourlyVACUUM INTO→ gzip → AES-256-GCM (VESSEL_BACKUP_KEY) → upload, retentionVESSEL_BACKUP_KEEP;GET /v1/admin/backups,POST /v1/admin/backup,POST /v1/admin/restore(staged, applied at next start). Dependency-free SigV4 client. - Stealth (
stealth: trueby default): webdriver flag, chrome.*, plugins, languages, permissions, WebGL vendor, hardware hints, outer size — closes the deterministic headless tells (not a CAPTCHA solver). - Playground tab on the session page: go to URL, click/fill by ref, or run raw action JSON; results and the next snapshot inline.
- Bot-wall detection now samples visible text when the interactive tree is tiny (catches "Access is temporarily restricted"-style walls such as G2's).
- Bare domains accepted everywhere a URL is (
example.com→https://example.com); validation errors name the field. - Copy-session-id buttons, one-click 60-second demo on Get started, dashboard assets served
no-cache.
0.4.0 — 2026-10-12#
Added#
- Cloud mode (
VESSEL_SIGNUP=true): sign-up/sign-in in the dashboard (/auth/*, scrypt passwords, signed cookies), organisations with a concurrent-session quota (VESSEL_ORG_MAX_SESSIONS), API keys minted in the dashboard (/v1/keys, shown once, SHA-256 at rest). Every session, profile, routine, secret and approval is tagged with its organisation and invisible to others — including over MCP, the tools API, SSE, live view and CDP. Env keys remain admins. - Server-side scripts:
POST /v1/sessions/:id/script { code }runs a Playwright snippet on the node withpage/contextin scope (logs, return value, timeout, recorded as a step). Gated byVESSEL_ALLOW_SCRIPTS(default off when sign-up is on). - Docs:
docs/HOW-IT-WORKS.md(owner walkthrough: inputs, flows, how to test end to end) anddocs/HOSTING.md(which platforms can run CrawlGenie and why, with sources). - Dashboard: auth card, API keys page, workspace + sign-out in the sidebar.
0.3.0 — 2026-10-11#
Added#
- Secrets vault:
PUT/GET/DELETE /v1/secrets/:name; agents write{{secret:name}}infill/type(andbrowser_type), the server substitutes the value at execution. Key- and domain-scoped, AES-256-GCM at rest withVESSEL_SECRET_KEY. New MCP/HTTP toolbrowser_list_secrets. - Challenge detection:
snapshot.challenge(cloudflare|captcha|access_denied|bot_wall+ hint),challengerecorder event,session.challengewebhook, ⚠ prefix on tool results. - One-shot endpoints:
POST /v1/scrape(markdown/text/html/snapshot/links, optional screenshot+pdf),GET /v1/screenshot,GET /v1/pdf. - File uploads:
POST /v1/sessions/:id/files(raw bytes, ≤64 MB) anduploadactions by{ id }. - Extensions on the isolated tier (
extensions: [...]fromVESSEL_EXTENSIONS_DIR). - Helm chart (
deploy/helm/vessel): StatefulSet nodes with PVCs, optional router Deployment and Ingress. scripts/challenge.mjs— honest "does it open?" sample across popular sites; 10-site token benchmark in docs./v1/statsnow reportsversionandmode.- SDKs:
secrets,scrape,uploadFile/files(TS + Python). - Dashboard Secrets page (add / rotate / delete, domain scoping, copy placeholder) and a challenge banner on the session Snapshot panel.
- GitHub Pages landing site live at https://theshariq.github.io/CrawlGenie/.
Changed#
- Dashboard design system v3: ink-black primary actions, single cobalt accent reserved for meaning, cool neutral canvas, grouped sidebar with node status, page headers, Stripe-style stat strip and tables with hover actions, SVG area chart for tokens saved, browser-window frame around the live view, dark code blocks with copy, segmented controls and switches, redesigned new-session sheet, Get started and API & tools pages.
0.2.0 — 2026-10-11#
Added#
- Delta snapshots (
snapshotOptions.delta, sessionsnapshotDefaults): only lines changed since the last observation of the same page; falls back to the full tree on large changes or ref renumbering. - Observation-token metering per session:
observationTokens,observationTokensRaw,tokenSavingsPct,estimatedSavingsUsd(VESSEL_TOKEN_PRICE_PER_M), shown on the dashboard. - Tools API
GET /v1/tools?format=openai|anthropic|gemini|jsonandPOST /v1/tools/:name— the MCP tool surface for any function-calling model, no MCP client needed. - MCP 2026-07-28 via the v2 TypeScript SDK (per-request Streamable HTTP; 2025-era clients served statelessly). Tool results are stamped with
session_id. - Proxy pools (
VESSEL_PROXY_POOLS/data/proxies.json): static rotation, template providers with{session}/{country}placeholders, sticky identities, failure cooldown,GET /v1/proxieshealth; per-sessionproxy: { pool, country, sticky }. - Webhooks (
VESSEL_WEBHOOK_URL):approval.pending,approval.resolved,session.closed. - Retention (
VESSEL_RETENTION_DAYS,POST /v1/admin/prune). assertaction (text/notText/selector/url/title) so routines double as monitors.- OpenAPI 3.1 at
/openapi.json, generated from the request schemas. - Python SDK (
packages/python, dependency-free) and TS SDK updates (routines,proxies, token usage). - Dashboard rebuilt as a single-page app: overview KPIs (tokens/$ saved), unified session page (live + time-travel scrubber + snapshot/timeline/approvals/usage), routines with run/param forms and save-as-routine, approvals inbox, profiles, API & tools, settings; light theme by default, command palette, keyboard shortcuts, mobile layout.
- Security: CORS allowlist (
VESSEL_CORS_ORIGINS), security headers, per-IP failed-auth rate limit (VESSEL_AUTH_RATE_LIMIT). - CI: Linux typecheck/tests/bench, Docker build + non-root smoke test, GHCR publish on green main. Soak (
scripts/soak.mjs) and token (scripts/tokens.mjs) benchmarks.
Changed#
approvals.mode: 'all'gates only state-changing actions (not wait/scroll/hover/tab list).- Snapshots bypass the action queue while an approval is pending, so reviewers can see the page.
- Interactive snapshot filter drops table/list wrappers, nameless clickables and separators;
[cursor=pointer]only kept on generic nodes. - Docker image now builds on
node:24-bookworm-slim(node:sqlite requires ≥ 22.13). - zod 4.
0.1.0 — 2026-10-11#
Initial release: pooled/isolated sessions, interactive accessibility snapshots with refs, policy + SSRF guard + approval gates, flight recorder with fork/rewind, profiles with exclusive locks, routines with self-healing replay, live view with takeover, MCP, raw CDP relay, dashboard, TS SDK, Docker, docs, 30 tests.
Section: About · This page as markdown · Questions? hello@crawlgenie.com