diff --git a/skills/extract/SKILL.md b/skills/extract/SKILL.md index c5d4672..87bb271 100644 --- a/skills/extract/SKILL.md +++ b/skills/extract/SKILL.md @@ -28,7 +28,10 @@ zenrows extract --validate # fail if not valid JSON ## Rules - Validate on a single page before scaling across many URLs. -- If Autoparse misses fields, switch to `--css` with explicit selectors, or add - `--manual --js-render` for JS-heavy pages. +- If Autoparse misses fields, switch to `--css` with explicit selectors. Auto + mode already renders JS when the target needs it, so reach for + `--manual --js-render` only after auto mode has returned an incomplete page: + it costs several times a basic call ([[cost-control]]) and it makes the + escalation yours. See [[protected-fetch]] for retrieval semantics. diff --git a/skills/protected-fetch/SKILL.md b/skills/protected-fetch/SKILL.md index 9af8a46..0448f46 100644 --- a/skills/protected-fetch/SKILL.md +++ b/skills/protected-fetch/SKILL.md @@ -1,6 +1,6 @@ --- name: protected-fetch -description: Use Zenrows Protected Fetch for anti-bot-protected page retrieval. +description: Use Zenrows Protected Fetch in auto mode for anti-bot-protected page retrieval. Auto mode handles the anti-bot escalation, so never enable JS rendering or premium proxies yourself on a first attempt. version: 0.1.0 requires_backend_capabilities: [protected_fetch] --- @@ -16,18 +16,33 @@ cannot. This is the **core primitive** — backed by Zenrows **Fetch** - The target has anti-bot protection, needs JS rendering, or geo-specific access. ## How to call + +Auto mode is the answer for anti-bot targets, Cloudflare included. It escalates +for you and bills only for the configuration that succeeds. + ``` -zenrows fetch # Adaptive Stealth Mode (recommended) +zenrows fetch # Adaptive Stealth Mode. Start here, always zenrows fetch --output markdown # convert to Markdown -zenrows fetch --manual --js-render --premium-proxy # full manual control -zenrows fetch --proxy-country us # geo-target (auto mode; in manual mode needs --premium-proxy) +zenrows fetch --proxy-country us # geo-target, works in auto mode zenrows fetch --wait-for ".price" # wait for a selector ``` +Manual mode exists for the rare case where auto mode has already failed and a +trace shows why. It costs more and it makes the escalation your problem: + +``` +zenrows fetch --manual --js-render --premium-proxy # the most expensive path, see [[cost-control]] +``` + ## Rules -- Start with **auto mode**. In auto mode, `js_render` and `premium_proxy` are - managed for you — passing them manually requires `--manual` - (otherwise you get `PARAM_CONFLICT_AUTO_MANUAL`). +- Start with **auto mode**. Enabling `--js-render` and `--premium-proxy` yourself + is the most expensive configuration this API offers, by a wide margin, and auto + mode reaches the same place only when the target actually needs it. The + multipliers are in [[cost-control]]. +- A hard target is not a reason to skip auto mode. It is the reason auto mode + exists. +- In auto mode `js_render` and `premium_proxy` are managed for you. Passing them + manually requires `--manual`, otherwise you get `PARAM_CONFLICT_AUTO_MANUAL`. - `--proxy-country` works in auto mode on its own; in `--manual` mode it also needs `--premium-proxy` (else `PARAM_PROXY_COUNTRY_REQUIRES_PREMIUM`). - You are billed only for the configuration that succeeds. diff --git a/skills/trace-debug/SKILL.md b/skills/trace-debug/SKILL.md index c1e8406..221dc5c 100644 --- a/skills/trace-debug/SKILL.md +++ b/skills/trace-debug/SKILL.md @@ -19,8 +19,12 @@ zenrows trace export # JSON for sharing ``` ## Failure → action map -- `FETCH_FAILED` / empty content → retry `--manual --js-render`, then add - `--premium-proxy`; for slow pages add `--wait-for `. +- `FETCH_FAILED` / empty content → first retry in auto mode (`mode=auto`), which + escalates for you and bills only for what succeeds. For slow pages add + `--wait-for `. Only when auto mode has failed on its own, take + manual control with `--manual --js-render`, then `--premium-proxy`. Each step + multiplies the cost of the request, and both together are the most expensive + configuration available ([[cost-control]]). - `REQUEST_TIMEOUT` → the CLI stopped waiting; the API was reached. Raise `--timeout` (default 120000ms, above the API's own 90s budget), or drop `--wait-for` so the request finishes inside that budget and the API returns