87 stars on GitHub and counting. Yozh Crawler + Scraper is free, open-source, and built in public — give us a star if it earns its place in your stack.
v0.1.11 · Yozh Crawler is here

Easy web scraping
for AI agents
and humans

One open-source tool for data collection and scraping. Start from a single URL, crawl the site, and get structured data as pages load. Works with MCP and tools like Claude and Cursor, with ready presets for marketplaces like Amazon and eBay.

87 Stars on GitHub
MIT License · Free forever
v0.1.11 Latest release
Open Scraper Tester
Scraper URL http://localhost:8000 Check ok Crawler URL http://localhost:8001 Check ok CyberYozh API Docs ↗ Get API Key ↗
Scrape Page
Batch Scrape
Crawler
Jobs
MCP
Crawl Parameters
Seed URL *
Scope Mode
same-domain
Max Depth
3
Max Pages
47
Per-domain RPS
1.0
Per-domain
1
Include Patterns (regex, one per line)
^https://amazon\.co\.uk/dp/
Exclude Patterns (regex, one per line)
/cart|/account|/checkout
Crawl Proxy⚠ crawl proxy=none — no IP rotation
Proxy Type
none
Enable scraping (keep raw_html / screenshot / extracted data per page)
Result
crawl_________________ · status: idle · visited: 0 / 30 · queued: 0 · failed: 0 · dedup: 0
Crawl progress and pages will appear here...
What's new · v0.1.11

Crawl full websites and get data in one run

Yozh Crawler maps the full site structure and processes pages as they are found. You get both coverage and usable results in a single run, without managing separate crawl and scrape steps. It works directly inside your existing data collection and scraping workflows.

Yozh Crawler, integrated NEW

Start from one URL and map the whole site. Pages are discovered and processed in one run, so you get full coverage without extra steps.

Discovery mode NEW

Only need links? Switch to discovery mode and map the site without parsing. Faster, lighter, and useful for audits and structure checks.

Stealth browser

Matches headers, location, and browser signals to your proxy. Helps keep sessions consistent across different regions.

Batch scraping

Run hundreds of URLs in one request. Process everything in parallel with one clean output.

Two-stage cancel NEW

Stop jobs without breaking results. Let active pages finish or stop everything instantly when needed.

MCP integration

Connect directly with tools like Claude and Cursor. Use scraping and crawling as part of your existing workflows.

10 built-in presets

Amazon, eBay, Walmart, Google, Google Shopping, YouTube, LinkedIn, Bing, Yandex — pass the source name and parameters, get a normalized response. No selectors to write.

LLM self-heal NEW

A site ships a layout change and your CSS selectors return empty? The parser asks an LLM (OpenAI / Anthropic / Gemini / OpenRouter) to regenerate the selector on the fly. Pipeline keeps running.

AI-generated presets NEW

Need a site we don't ship a preset for? Describe what to extract and paste a sample URL — POST /api/v1/presets/generate returns a ready preset JSON.

Authenticated sessions NEW

Log in once via a declarative DSL (goto / fill / click / wait) or paste exported cookies. Reuse the session in every scrape. Required for walled targets like the LinkedIn preset.

Interface

Simple scraping infrastructure under your control

Set up your workflow in one place and run it the way you need. Everything is clear, organized, and easy to manage without extra tools.

1

Built-in proxies, ready to use

Access residential, mobile, and datacenter proxies in 120+ countries. Over 50 million IPs with 99.9% uptime. Includes fingerprinting support to align device, browser, and network behavior for stable sessions and better control.

2

Flexible data extraction

Use CSS selectors, XPath, or auto-detect for popular sites. Get clean, structured JSON without complex setup.

3

All data in one place

Get raw HTML, screenshots, and parsed data together. Everything you need, without switching between tools.

4

Simple control and MCP access

Stop jobs anytime with one click and switch between scraper and crawler. Your workflow stays simple and in your control.

MCP · Model Context Protocol

AI agents built for web scraping and crawling

Connect Yozh Crawler and Yozh Scraper to Claude, Cursor, or any MCP client. Switch tools with one toggle, no extra code required.

Web scraping features

All Yozh Scraper features are available as functions for your agent, including scraping, batch runs, and screenshots.

One minute to connect

Copy the config, restart your client, and you're ready.

Works with any MCP client

Claude Desktop, Cursor, Cline, or custom agents.

Full control of the toolkit

Choose how your agent runs tasks, from single pages to full batches.

Run it your way

Use a local MCP server or deploy it on your own infrastructure.

// ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "yozh-scraper": {
      "type": "http",
      "url":  "http://localhost:8000/mcp"
    },
    "yozh-crawler": {
      "type": "http",
      "url":  "http://localhost:8001/mcp"
    }
  }
}
// Cursor → Settings → MCP → Add new MCP Server
{
  "mcpServers": {
    "yozh-scraper": {
      "type": "http",
      "url":  "http://localhost:8000/mcp"
    },
    "yozh-crawler": {
      "type": "http",
      "url":  "http://localhost:8001/mcp"
    }
  }
}
// Cline → MCP Servers → Edit cline_mcp_settings.json
{
  "mcpServers": {
    "yozh-scraper": {
      "type": "http",
      "url":  "http://localhost:8000/mcp",
      "disabled": false
    },
    "yozh-crawler": {
      "type": "http",
      "url":  "http://localhost:8001/mcp",
      "disabled": false
    }
  }
}
// Anthropic Messages API · MCP via Streamable HTTP
// Note: scraper must be reachable from Anthropic's servers (deploy publicly)
import Anthropic from "@anthropic-ai/sdk";

const response = await new Anthropic().messages.create({
  model: "claude-opus-4-8",
  mcp_servers: [
    { type: "url", url: "https://your-host/mcp", name: "yozh-scraper" },
    { type: "url", url: "https://your-host:8001/mcp", name: "yozh-crawler" }
  ],
  messages: [...]
});
Full MCP integration guide
Yozh Crawler · v0.1.11

Crawl, stream, and parse pages in real time

Yozh Crawler starts from one URL, discovers pages across the site, and processes them as they load, giving you full structure and usable data in one run.

Live streaming

Pages appear as they are discovered and processed. Connect directly from your client, agent, or pipeline without waiting for full runs.

Discovery mode

Only need links? Map the site without parsing. Faster and more cost-efficient for structure checks and audits.

Two-stage cancel

Stop jobs safely. Let active pages finish or stop everything instantly when needed.

MCP target switch

Switch between scraper and crawler with one toggle. Your agent uses the right tool for each task.

Live site tree in the UI

See the site structure build in real time. Follow progress page by page without leaving the dashboard.

Result

crawl_a8f3c124b6e0d7 · status: idle · visited: 0 / 30 · queued: 0 · failed: 0 · dedup: 0 · out-of-scope: 0 · retries: 0
Site Map (0 pages)

                    
URL Parent Depth Status Took
Combo · Crawler + Scraper

From one URL to full site coverage

The crawler finds pages, the scraper processes them, and your AI agent uses the results, built for both beginners and experts.

Crawler

Discovers all URLs

Yozh Scraper

Extracts to JSON

AI agent

Analyzes & decides

Competitive analysis

Track competitor catalogs, prices, and product details in one place. Find gaps in your own listings and respond faster to market changes.

Crawler JSON AI

Price monitoring

Track price changes across marketplaces automatically. Set alerts and get notified in Telegram or Slack when prices move.

Batch Schedule Alerts

ML training data

Collect clean, structured datasets from public sources, ready for analysis or model training. Built for reliable data collection at scale.

Stealth Proxy JSON
Marketplace & site presets

Start scraping right away with ready-to-use presets

Locales, currencies, selectors and anti-bot handling — already configured. Pick a preset to see what gets extracted.

10 built-in presets · LLM self-heal when a site layout changes · generate your own from a sample URL Request a preset →

            

Every Amazon listing, normalized

All fields below are extracted automatically — no selectors to write.

Need a site we don't cover yet?

Open an issue on GitHub or contribute your own preset — we review PRs within a week.

Open an issue
Proxies

Proxies built for scraping

Three types, six configurations. Pick by job, speed, and budget.

Mobile 4G/5G

Real mobile devices on carrier networks. The highest trust tier with strict anti-bot systems.

Private dedicated from $1.7/day

Personal device, manual IP rotation via API

Shared from $0.9/day

One device, multiple users

Learn more about Mobile proxies
How it works

Each IP comes from a real smartphone or LTE/5G modem connected to a major mobile carrier. The IP is shared by thousands of regular subscribers, so blocking it would block real users — which is why anti-bot systems trust mobile IPs the most.

Best for
  • Account management on social platforms
  • Aggressive anti-bot targets (Cloudflare, PerimeterX)
  • Affiliate work and ad verification
  • Tasks requiring sustained "human-like" trust
Specs
  • 4G LTE and 5G networks worldwide
  • UDP support, VPN VLS connectivity
  • Manual IP rotation via API or dashboard link
  • OS fingerprint adjustment
  • Unlimited bandwidth on most plans

Datacenter

Maximum speed, minimum cost. 2M+ IPs across data centers worldwide.

Dedicated static from $1.9/mo

One IP assigned to you, unlimited traffic

Shared static from $0.5/mo

Shared pool, the budget option for simple jobs

Learn more about Datacenter proxies
How it works

IPs are hosted in data centers, not connected to home or mobile users. They're cheaper and faster than residential, but anti-bot systems can identify them as non-human, so use them where trust isn't critical.

Best for
  • High-volume scraping of friendly sites
  • Internal tooling and load testing
  • API endpoints with no IP-trust filters
  • Tasks where speed matters more than disguise
Specs
  • 2M+ IPv4 and IPv6 addresses
  • Dedicated or shared configurations
  • Unlimited bandwidth on dedicated plans
  • HTTPS, SOCKS5 protocols supported
  • Lowest latency of all three types
Choose proxies for your use case → Sign in required
Ethics · Non-negotiable

Ethics is built into how we run our platform

Open-source code is just the starting point. How data is collected and how proxies are sourced matters just as much. These are the standards we follow in practice, not statements on a page.

Ethical data collection

We build tools, not loopholes. Yozh Scraper is engineered to make legitimate, public-data scraping reliable — not to break things that should stay closed.

  • Publicly accessible data only — no logged-in scraping by default
  • Built-in rate limits prevent server overload
  • robots.txt and sitemap respect by default (overridable)
  • No PII collection or storage — neither by us, nor by default for users
  • Tooling that helps you stay GDPR and CCPA compliant

Transparent proxy network

Where residential IPs come from is the honesty test for every proxy provider. Here's where ours come from — explicitly:

  • Opt-in network. Real users consent and earn for sharing bandwidth
  • One-click opt-out at any time, no questions asked
  • Audited supply chain with documented sourcing
  • Zero malware, zero hidden SDK injection — ever
  • Mobile IPs from devices we own and operate, not from compromised handsets

Fast abuse response

If someone misuses our infrastructure to harm others, we want to know — and act on it before it gets worse.

  • Direct line to a real human, not a ticket queue
  • Transparent investigation process for every legitimate report
  • Active cooperation with law enforcement on confirmed cases
  • Public abuse policy, not buried in fine print
abuse-reports@cyberyozh.com
Average response time: 45 minutes

If a use case involves misuse or harm, our tools are not built for it. We prioritize responsible use over customer growth.

If a use case requires hiding identity to harm others, our tools aren't for it. Period. We'd rather lose the customer than the principle.

Loved by data teams and AI builders

What people building with Yozh say

5.0 / 5 · 5 reviews
GitHub
Swapped our in-house Playwright cluster for Yozh in an afternoon. The MCP endpoint dropped straight into our Claude agent — zero glue code, crawler and scraper just worked.
Marcus Reinhardt Lead Data Engineer Northwind Analytics
X
The preset system is the killer feature. We pass a source name and get clean JSON back; the self-heal even caught two Amazon layout changes before we noticed.
Priya Nair Founder ScrapeStack
Reddit
Finally an open-source scraper that treats proxies and sessions as first-class. We run it behind login walls for partner portals — sessions persist and results stay consistent across regions.
Daniel Osei Backend Engineer Loopfeed
X
Connected it to Cursor over MCP and my agent pulls live web data mid-task now. The streaming crawl over SSE is exactly what agent workflows were missing.
Elena Kovac AI Engineer Vektor Labs
GitHub
We moved off a paid scraping API to cut costs and braced for a downgrade — got the opposite. Self-hosted, no per-request billing, and the output schema is cleaner than what we used to pay for.
Sofia Almeida Engineering Manager Tabbly
Changelog

Web scraping changelog and updates

Yozh Scraper is open-source, with all updates available on GitHub. Here are the latest highlights.

v0.1.11 25 August 2026 Latest

v0.1.11

  • The job results response carries unreadable_slots. A job with one corrupt or schema-skewed result slot now returns its other pages (HTTP 200) and names the bad slot, instead of the whole job failing with a 500 and becoming un-cancellable until its TTL expires.
  • The login-replay page is masked with the same host-aligned WebGL/GPU, native-looking navigator, and Client-Hints (Sec-CH-UA) as the main fetch path, via a shared page-preparation helper. A credentialed login no longer submits a contradictory fingerprint (previously a macOS GPU and a HeadlessChrome Client-Hint under a Windows user agent).
  • Self-heal can no longer persist a degraded preset over a working one. It now contributes only the regenerated selector (and its dialect), keeping the preset's all / attr / post_process and required fields, and it is graded against the original contract — so a heal that returns a bare string where a coerced list belongs is no longer counted as a recovery. It also never heals from a transient 5xx error page. This closes a class of silent preset corruption.
  • Proxy credentials are kept out of logs, error messages and 502 response bodies. The SOCKS bridge, the rotating-credentials response and the username log no longer emit user:pass; a shared redactor masks proxy URLs while preserving host:port for diagnostics.
  • litellm is bounded <1.98: 1.98.0 imports NotRequired from typing unguarded and fails to import on the Python 3.10 this project targets, so a fresh install or image build would produce a container that cannot start.
v0.1.10 20 August 2026

v0.1.10

  • Chromium WebGL now claims the host's actual GPU vendor/renderer, kept coherent with the Windows fingerprint the browser already presents, reusing the host-GPU detection from the Camoufox path (HOST_GPU_VENDOR). Without it the restored context reported a generic SwiftShader/ANGLE software-renderer string, itself an automation tell.
  • Chromium returned a null WebGL context on GPU-less / headless hosts (Chrome 136+ dropped the automatic SwiftShader fallback), and "no WebGL context at all" is a strong bot tell that real desktop Chrome never shows. A working software WebGL context is restored via --enable-unsafe-swiftshader, gated by the new SOFTWARE_WEBGL setting (default on, Chromium-only; revertible by env without a code change).
  • README now links the project site (data.cyberyozh.pro) with per-service pages for the scraper and crawler.
v0.1.9 18 August 2026

v0.1.9

  • Bing organic results now unwrap Bing's click-tracking redirect links (bing.com/ck/a?...&u=a1<base64url>) to the real destination URL. A field that should have been unwrapped but yielded nothing raises a warning instead of silently shipping the tracking link.
  • A failed warmup navigation is now reported (in meta.applied_warmup) instead of being indistinguishable from a request that ran no warmup at all, so a warmup that silently failed is visible rather than looking like a no-op.
  • A page already classified as blocked/CAPTCHA no longer waits out the full wait_for_selector timeout for an extraction anchor it will never grow: the block is returned at once (roughly a 45s saving per blocked page) instead of after the selector deadline.
  • Yandex's self-resolving browser-check interstitial is no longer mistaken for a hard block, so it no longer burns a proxy rotation on a page that resolves itself.
  • Amazon's "Sorry! Something went wrong!" throttle page is now classified as a block, so it is rotated and retried instead of returned as a successful but empty fetch that pollutes results. Guarded behind a page-size ceiling so a normal product/search page cannot false-positive on the phrase.
v0.1.8 10 August 2026

v0.1.8

  • fingerprint_profile on POST /scrape/page, POST /scrape/pages and the crawler/search scrape_options: pin the Camoufox fingerprint's OS and WebGL vendor instead of Camoufox's per-launch random draw (which claimed an OS the server is not two launches in three). Profiles: auto (default, resolves to CAMOUFOX_FINGERPRINT_PROFILE, ships windows_on_host), windows_on_host, host, random, and the bare names windows / macos / linux. The old spoof_os keeps working and equals the three bare names; a caller stating both must not name conflicting operating systems. meta.applied_fingerprint reports what actually ran, including when a profile degraded. New env vars CAMOUFOX_FINGERPRINT_PROFILE (default windows_on_host) and HOST_GPU_VENDOR.
  • Extraction warns when a post_process pipeline nulls an entire column (every row) — a fourth class of silent failure the invalid/empty/length-mismatch selector checks did not cover. Reported only for a fully-nulled column with more than one row, or a scalar field; an optional value missing on a single row stays quiet.
  • GitHub Actions CI: pylint and pytest -m "not e2e" on every push and pull request, the checks the repo already defined but never enforced.
  • run_scrape now returns a typed envelope (ScrapeOk / ScrapeErr) built as the same pydantic models the API validates on the way out, with mypy over the queue surface. An older worker meeting a metadata value a newer API introduced degrades that field and keeps the fetched page, rather than dropping it. Internal refactor; the public HTTP response is unchanged.
  • session_id, cookies and render are now rejected with 422 on the Camoufox engine instead of being accepted and silently ignored (which returned a logged-out or non-rendered page that read as the site having changed). /search maps the rejection to a 400 rather than a 500.
v0.1.0 9 July 2026 First release

v0.1.0 - Durable queue, Camoufox engine & CyberYozh proxy v2

  • New required services. Browsers no longer run inside the API process. You must now run the redis and scraper-worker services (both are already in docker-compose.yml). Scale capacity with docker compose up -d --scale scraper-worker=N.
  • POST /scrape/page and /scrape/pages can now return 503 queue_full when the Redis stream depth exceeds QUEUE_MAXSIZE (previously the in-memory queue was unbounded).
  • Removed env vars (ignored, warned at startup if set): JOB_TIMEOUT_MS → use PAGE_TASK_TIMEOUT_S; JOB_RESULT_MAX → eviction is now a native Redis TTL (JOB_RESULT_TTL_S); JOBS_ENABLED → the queue is always on.
  • New env vars: REDIS_URL, PAGE_TASK_TIMEOUT_S, LOGIN_TASK_TIMEOUT_S, LOGIN_RESULT_GRACE_S, RECLAIM_IDLE_S, JOB_RESULT_TTL_S, BROWSER_MAX_PAGES, BROWSER_IDLE_SHUTDOWN_S, WARMUP_DWELL_MS.
  • The in-process job queue and browser worker pool are replaced by a taskiq stream on Redis. The web-scraper container only enqueues page tasks and reads results; browsers run in separate, horizontally scalable scraper-worker containers.
Quick start

Get started with web scraping in seconds

Three commands and you have a running scraper + crawler with HTTP and MCP endpoints.

1 Clone
git clone https://github.com/\
  CyberYozh-data/yozh-scraper
cd yozh-scraper
2 Run
cp .env.example .env
docker compose up --build
3 Scrape
curl -X POST localhost:8000/api/v1/scrape/page \
  -H 'Content-Type: application/json' \
  -d '{"url":"https://example.com"}'
Full documentation Plug into Claude / Cursor via MCP →
Contact · Support

Get in touch

A real human reads everything that comes in. Pick the channel that fits — Telegram is the fastest.

Office
Jurija Gagarina 231/329
Novi Beograd · Serbia
Two-tier support, near round-the-clock First-line on duty almost 24/7. Senior engineers handle the hard cases.
Open Source · MIT License · 87 ★

Ready to scrape?

Yozh Crawler + Scraper is free. Forever. Star us if it helps — every star counts.

Yozh Crawler + Scraper is distributed under the MIT license. Use it. Fork it. Build with it.