proxlane

Your request, rerouted.

One endpoint in front of every scraping API. When a provider gets blocked, the next one runs, and you are told which, and why.

Also an MCP server, for Claude, Codex, Gemini CLI, Cursor and VS Code

No provider works on every target. Teams juggle two or three accounts and the glue code to switch between them. A provider degrades for hours before it fails, and none fails over to a competitor.

And a blocked request looks like a successful one. A captcha page arrives as HTTP 200 with a body. Anything checking status codes records a success and stores the challenge page.

Tried scraperapi, SOFT_BLOCK. then scrapingbee, PROVIDER_ERROR. then scrapfly, OK. Final outcome OK.

A worked example, in the shape the gateway returns. The first provider answered 200 with a challenge page and the detector named the rule that caught it; the second failed outright; the third served. Your providers charge for all three, so Proxlane reports all three.

Runs on your account, not ours. Each deploys a blueprint you can read first.

Bring your own keysRead the source

quickstart

No signup, nothing to paste

One hostname, and the chain is running. The keys already in your environment are found without configuration. This is the gateway: five providers, failover, and the detector, in the first command you type.

terminal

$ npx proxlane doctor ok key:scraperapi $SCRAPERAPI_KEY set (32 chars) ok key:scrapingbee $SCRAPINGBEE_KEY set (80 chars) ok cooldowns on. A provider that just refused a domain is skipped $ docker run -p 8787:8787 --env-file .env ghcr.io/proxlane/gateway proxlane gateway 0.7.0 on :8787 providers: scraperapi > scrapfly > scrapingbee > brightdata (in order) retries: 1 extra at the last provider (PROXLANE_TERMINAL_RETRIES) $ curl -sD- "localhost:8787/v1?api_key=$KEY&url=https://example.com" HTTP/1.1 200 OK x-outcome OK x-outcome-class ok x-attempts 2 x-chain scraperapi:SOFT_BLOCK>scrapfly:OK x-provider-used scrapfly x-cost-estimate 2.000000 x-cost-unit provider-credits

agents

Give your agent a scraper that admits failure

An MCP server for Claude, Codex, Gemini CLI, Cursor and VS Code. One tool, fetch_page, through the gateway you just started. A block page reaches the model as a failure with a retry hint, never as content to summarise.

terminal
claude mcp add proxlane \
  --env PROXLANE_API_KEY=your-gateway-key \
  -- npx -y @proxlane/sdk@0.1

your-gateway-key is the gateway's PROXLANE_API_KEY from the quickstart. Your provider keys never reach the agent.

fetch_page

Summarise the latest changelog at acme.example. Claude Code calls fetch_page. Tried scraperapi, SOFT_BLOCK. then scrapfly, HARD_BLOCK. then scrapingbee, HARD_BLOCK. Final outcome HARD_BLOCK. The gateway answers HTTP/1.1 502. Every provider was blocked by a bot check on that page, so I have nothing to read and will not guess at what changed. Worth trying again later, not right now.

A worked example. The response and tool result are the shapes the gateway and server return; acme.example is a reserved name, not a site.

detection

A 200 is not a success

Detection is table stakes. Showing you the rule that fired is not. Three behaviours instead of the adjective.

The detector reads the body.
A block page returns 200 with a body. The detector calls it SOFT_BLOCK and attaches the rule that fired, so you can see why rather than trust that we looked.
The taxonomy can grow without breaking you.
21 outcomes, 6 classes. Branch on the class, which never grows; read the outcome for detail. Adding an outcome cannot break your switch.
Failed attempts are still billed, and still reported.
Every attempt is priced, including the ones that failed. A failover that burned two charged hops reports two, not one.

migration

Change one hostname

Same parameters, same status codes. Your code keeps branching on the 404 it already branches on.

curl
curl "https://api.scraperapi.com?api_key=KEY&url=..."
curl "http://localhost:8787/v1?api_key=KEY&url=..."

response

Every answer says how it got there

Branch on the class, read the outcome for detail. Headers follow the chain selected above.

HTTP/1.1 200 OK
x-outcome
OK
x-outcome-class
ok
x-attempts
3
x-chain
scraperapi:SOFT_BLOCK>scrapingbee:PROVIDER_ERROR>scrapfly:OK
x-provider-used
scrapfly
x-cost-estimate
3.000000
x-cost-unit
provider-credits
server-timing
gw;dur=2, up;dur=3870, total;dur=3872

pricing

Free on your own keys

You pay your providers directly. We are not in the payment path. The gateway is AGPL and runs on your own machine. There is no account to create and nothing to enter a card into.

pricing
  • Bring your own keysFree foreverYour provider keys, your provider bill. Proxlane adds nothing to it.
  • Self-hostFree foreverAGPL-3.0. One container, your infrastructure, no telemetry.
  • Hosted creditsProvider cost + 5%Not available yet. One bill instead of three, when it lands.

lines

Five scraping APIs, five lines

They are not interchangeable, which is the point. Printed by proxlane providers, straight from the capability registry. One does sessions, one reaches 42 countries, and rendering JavaScript is free on one and 10x the price on another.

proxlane providers
providergeosessionsrender-js
scraperapiallyes×10
scrapingbee42 codesno×5
scrapflyallno×6
brightdataallno×1
firecrawl26 codesno×1