agentleFS
ZenRowsZenRows/cli/skills/zenrows/SKILL.md

zenrows

Skill16 starsChanged 27 days agoMITView on GitHub

Master playbook for choosing the right Zenrows primitive for any web-data task, with cost and escalation rules.

1 other project uses a version of this.

Adopted by

Most recently taken up by

  • Other versions1 project uses a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 1

    1. Penguin-Life/zenrows-skill★ 0same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository10 other files it gives its agents.

The file

We split this skill into the rules it gives an agent

8 rules. About 0 are common, 1 is distinctive, and 7 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 7

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Before it creates the account, Zenrows may ask you one short question (error code SIGNUP_CHALLENGE, with the question in the message and in …

    line 23
  2. Very specific:

    After too many questions or wrong answers from one network (SIGNUP_CHALLENGE_LOCKED), wait an hour or use zenrows login --api-key <key>.

    line 27
  3. Very specific:

    When the Free plan nears its limit (or the user asks), tell the human they can claim the account to keep their usage and history: run …

    line 30
  4. Distinctive:

    Never attempt to handle payment or upgrades — only surface the claim link.

    line 35
  5. Very specific:

    Prefer the cheapest reliable primitive.

    line 67
  6. Very specific:

    Escalate only with evidence: If a fetch fails, read the trace (zenrows trace explain <run-id>) before adding --js-render / --premium-proxy.

    line 70
  7. Very specific:

    Run zenrows status for the live capability matrix.

    line 80
  8. Very specific:

    Keep responses small with --css or --output markdown.

    line 108

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Zenrows: how to think about protected web data

Zenrows is the protected web data infrastructure layer: strong anti-bot + high scale + extraction + browser escalation. This toolkit makes that infrastructure native to AI agents.

Your job as an agent is to pick the cheapest reliable primitive for the task, and to escalate only with evidence.

Getting access (zero-config)

You do not need an API key up front. On your first cloud call (e.g. zenrows fetch <url>), the toolkit automatically creates a free, unclaimed Zenrows Free plan account and stores the key locally — no human step required. To opt out, pass --no-signup or set auto_signup: false in .zenrows/policy.json, then use zenrows login --api-key <key>.

Before it creates the account, Zenrows may ask you one short question (error code SIGNUP_CHALLENGE, with the question in the message and in error.challenge.question). Answer it yourself, do not ask the human, then run zenrows signup --answer "<your answer>" and re-run your original command. A wrong answer returns a new question the same way. After too many questions or wrong answers from one network (SIGNUP_CHALLENGE_LOCKED), wait an hour or use zenrows login --api-key <key>.

When the Free plan nears its limit (or the user asks), tell the human they can claim the account to keep their usage and history: run zenrows account claim (or open the claim URL shown on quota errors). It prints a valid link, requesting a fresh one when the stored link is near its 30-day expiry. Claiming confirms an email (Google, GitHub or a 6-digit code); the same key keeps working. Never attempt to handle payment or upgrades — only surface the claim link.

The decision tree (follow this exactly)

If the user has a known URL and wants page content:
  → Use Protected Fetch.            (zenrows fetch <url>)

If the user has a known URL and wants structured data:
  → Use Extract.                    (zenrows extract <url> | --css)

If the user has a start page (listing, index, section) but not the item URLs:
  → Use Crawl.                      (zenrows crawl create <url> --depth 1 --follow,
                                     then `zenrows crawl results <id>`)

If the user has many URLs (bulk):
  → Use Batch.                      (validate one page with fetch/extract first,
                                     then `zenrows batch create <jobs.jsonl>`)
                                     Batch is the reliable path at scale, at
                                     Fetch's prices. Do NOT
                                     fan out fetch/extract per URL for bulk work.

If the user needs login, clicks, forms, sessions, or persistent state:
  → Use Interact / Browser Sessions.(zenrows browser)    [escalation-only]

If the user wants to integrate with an agent/coding environment:
  → Use the Zenrows CLI: install / plugin / mcp / skills / templates /
    workflows / recipes / evals.

Preference rules

  • Prefer the cheapest reliable primitive. Start with Adaptive Stealth Mode (mode=auto) — Zenrows escalates to JS rendering / premium proxies only when needed, and you are billed only for the configuration that succeeds.
  • Escalate only with evidence. If a fetch fails, read the trace (zenrows trace explain <run-id>) before adding --js-render / --premium-proxy.
  • Do not use the browser unless required. Browser is an escalation layer, not the default — prefer fetch/extract (they cost less). It is on by default; opt out with policy.allow_browser=false. Sessions bill by bandwidth + time.
  • Do not scale before validating the workflow on a small sample.

What is available today

Run zenrows status for the live capability matrix. As of this toolkit:

PrimitiveCommandStatus
Protected Fetchzenrows fetchavailable: GET https://api.zenrows.com/v1/
Extract (extract=auto, CSS, Markdown; Autoparse deprecated)zenrows extractavailable: GET https://api.zenrows.com/v1/?extract=auto
Batchzenrows batchavailable: POST https://async.api.zenrows.com/v1/jobs
Crawl (new)zenrows crawlavailable: POST https://api.zenrows.com/v1/crawls
Browserzenrows browseravailable: POST https://mcp.zenrows.com/browser/sessions
MCPzenrows mcpavailable: https://mcp.zenrows.com/mcp
  • Extract: extract=auto works on any prepared domain. On one not prepared yet (EXTRACT_DOMAIN_NOT_PREPARED), run zenrows extract prepare <domain> --url <page> --wait (repeat --url, 1 to 5: one works; we recommend 3 or more of the same page type), then extract again. EXTRACT_PAGE_NOT_RECOGNISED means the domain is prepared but not this page: do not prepare again; see [[extract]].
  • Batch: the reliable path at scale, at Fetch's prices (create, list, status, wait, results, content, pause, resume, rerun, delete). Estimate specs locally with no key.
  • Crawl: collects the URLs behind one start page, optionally with each page's HTML.
  • Browser: escalation-only, for pages Fetch can't handle; same backend as the MCP browser_* tools.

Protected Fetch and Extract are the same API (GET /v1/) used two ways. The command consults the capability matrix before any cloud call — it never fakes success.

Cost model (Fetch and Extract)

Relative multipliers: basic 1×, JS rendering 5×, premium proxies 10×, both 25×. mode=auto charges only for the configuration that succeeds. Keep responses small with --css or --output markdown.

See also: [[protected-fetch]], [[extract]], [[interact-browser]], [[cost-control]], [[trace-debug]], [[compliance-policy]].

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.