# AX Check: oxylabs.io
Checked 2026-10-13.

Quickstart, docs and pricing are all readable without logins or guesswork.
21 of 23 checks passed: clear cURL quickstart, MCP and API docs, and static pricing tables with exact plan prices and unit caps.

## Onboarding needs a login

## Coding sessions
All three independent sessions completed. One, asked about pricing, recalled general pricing models from memory but could not cite an actual cost figure or tie it to a specific plan or workload, unlike the static pricing page itself.

### DeepSeek V4.1 Flash
[View public run](https://agents.withgauge.com/p/runs/137d16c7-a3fa-492f-be22-03c9828b9990) · [Read transcript](https://www.ax-check.com/oxylabs.io/sessions/deepseek.json)

#### End-to-end onboarding
- **Onboarding needs a login**: The agent never obtained real Oxylabs API credentials. It only had a generic gateway key for its own harness (PI_GATEWAY_API_KEY) and used placeholder/dummy credentials against the live Oxylabs API, which correctly returned 401 Unauthorized. No self-service signup flow was attempted or completed, so no authenticated product operation was demonstrated.
  Event 7:

  ```text
  PI_GATEWAY_API_KEY=<set>
  ```
  Event 53:

  ```text
  c = RealtimeClient("demo_user", "demo_pass")
  ```
  Event 54:

  ```text
  ERROR:oxylabs.internal.api:HTTP error occurred: 401 Client Error: Unauthorized for url: https://realtime.oxylabs.io/v1/queries
  ```
  Event 73:

  ```text
  There are no Oxylabs API credentials in this environment. With dummy creds the SDK reaches `https://realtime.oxylabs.io/v1/queries` and gets **HTTP 401 Unauthorized** (then returns an empty response).
  ```

#### Hallucinated URLs
None identified in this transcript.

#### Blockers
- **No Oxylabs account credentials available**: The session had no Oxylabs API username/password, and signing up for an account requires a human (email, payment info, etc.) that the agent could not perform itself. This is a normal login/credential requirement, not a product defect — the agent correctly identified the gap, tested with placeholder credentials, got a real 401 from the live endpoint, and stopped rather than fabricating success.
  Event 7:

  ```text
  env | grep -i -E "oxylab|proxy|api"
  ```
  Event 54:

  ```text
  HTTP error occurred: 401 Client Error: Unauthorized for url: https://realtime.oxylabs.io/v1/queries
  ```
  Event 73:

  ```text
  I got blocked on credentials
  There are no Oxylabs API credentials in this environment.
  ```

#### Suggested Changes
- **Make the SDK raise on HTTP errors instead of returning an empty Response**: In oxylabs.sources.response.Response, a failed request (401 Unauthorized) logs an error but still returns a Response with an empty dict instead of raising. The script printed 'OK {}' despite the request failing server-side. Have the SDK raise a typed exception on non-2xx responses so callers do not need to manually check response.raw truthiness. Verify by rerunning a dummy-credential call and confirming it raises rather than returning an empty, falsy object.
  Event 54:

  ```text
  ERROR:oxylabs.internal.api:HTTP error occurred: 401 Client Error: Unauthorized for url: https://realtime.oxylabs.io/v1/queries
  ERROR:oxylabs.internal.api:
  OK {}
  ```

### Kimi K3
[View public run](https://agents.withgauge.com/p/runs/2aeca53c-49b7-42bb-82dc-addb1e9c6c9d) · [Read transcript](https://www.ax-check.com/oxylabs.io/sessions/kimi.json)
Described pricing models from memory (per-result, per-GB, trial) but gave no cost figure and no plan or workload assumptions to tie one to. (seq 23)
#### End-to-end onboarding
- **Onboarding needs a login**: The agent checked the environment for Oxylabs credentials, found none, installed the official SDK, and wrote a working example script. It never obtained real Oxylabs credentials on its own and could not execute an authenticated call against the hosted Scraper API. The script exited immediately with a credential-missing message, so no product operation was demonstrated.
  Event 4:

  ```text
  env | grep -i oxy || echo "No Oxylabs credentials in env"
  ```
  Event 21:

  ```text
  Blocked: set OXYLABS_USERNAME and OXYLABS_PASSWORD env vars (sign up at https://oxylabs.io -> Scraper APIs -> create API user).
  
  
  Command exited with code 1
  ```
  Event 23:

  ```text
  I'm blocked on actually executing the example — Oxylabs is a paid hosted service and there are no API credentials in this environment (I checked `env`). Everything is ready to run the moment credentials exist.
  ```

#### Hallucinated URLs
None identified in this transcript.

#### Blockers
- **No Oxylabs API credentials available in the session**: The sandbox environment had no Oxylabs username/password, and there's no self-service way for the agent to generate one without human signup on the Oxylabs dashboard. This is a credentials gap inherent to the test environment, not a product defect — Oxylabs requires account signup/API user creation, which is normal for a paid scraping API.
  Event 5:

  ```text
  No Oxylabs credentials in env
  ```
  Event 21:

  ```text
  Blocked: set OXYLABS_USERNAME and OXYLABS_PASSWORD env vars (sign up at https://oxylabs.io -> Scraper APIs -> create API user).
  
  
  Command exited with code 1
  ```

#### Suggested Changes
None identified in this transcript.

### Qwen 3.8 Max
[View public run](https://agents.withgauge.com/p/runs/c87ee026-4430-4bd1-abb0-08795367b662) · [Read transcript](https://www.ax-check.com/oxylabs.io/sessions/qwen.json)

#### End-to-end onboarding
- **Onboarding needs a login**: Agent never obtained real Oxylabs credentials. It tried the hosted Web Scraper API endpoint with placeholder creds (OXYLABS_USER=test, OXYLABS_PASS=test) and got a 401, confirming the endpoint works but leaving the operation unauthenticated. No sign-up or key-issuance flow was attempted or available in the sandbox, so the session ended with an unresolved credential need rather than a verified authenticated operation.
  Event 36:

  ```text
  OXYLABS_USER=test OXYLABS_PASS=test timeout 40 python3 oxylabs_example.py
  ```
  Event 37:

  ```text
  HTTP 401 from Oxylabs: 
  ```
  Event 39:

  ```text
  I have no Oxylabs credentials in this environment, so I couldn't get a real successful scrape.
  ```

#### Hallucinated URLs
- **Guessed product page returned 404**: The agent tried a guessed URL for a specific Oxylabs product page that does not exist, while the pricing and developer portal URLs it guessed alongside it worked fine. This is a plausible but unconfirmed invented path rather than a documented broken link, though it's a single data point so treated with caution.
  Event 14:

  ```text
  == https://oxylabs.io/products/web-scraper-api
  404 199647
  ```

#### Blockers
- **No real Oxylabs credentials available in sandbox**: Missing credentials blocker: the session environment had no Oxylabs username/password, so the agent could only test the API's error path (401) rather than complete a real scrape. This is a test-environment limitation, not a product defect, since Oxylabs requires normal account sign-up to get credentials.
  Event 39:

  ```text
  I have no Oxylabs credentials in this environment, so I couldn't get a real successful scrape.
  ```
- **Sandbox network policy blocks proxy ports**: The proxy-based products (Web Unblocker, Residential Proxies) require outbound connections on port 7777, which the sandbox firewall blocked (curl exit 56, connection failure). This is a test-environment restriction, not a flaw in Oxylabs' product, and it narrowed the agent to only the HTTPS REST API surface.
  Event 27:

  ```text
  unblocker-proxy HTTP 000
  
  
  Command exited with code 56
  ```
  Event 39:

  ```text
  Blocked: the proxy-style products (Web Unblocker / Residential proxies at `pr.oxylabs.io:7777`) — non-443 outbound is firewalled in this sandbox (curl exit 56). So only the HTTPS REST API is usable here.
  ```

#### Suggested Changes
None identified in this transcript.

### Task given to each agent
Help me build a simple example using Oxylabs. Tell me how pricing works, and briefly tell me whether this product will be easy for you to manage. Let me know if you get blocked. If this product has no developer workflow you can act on, say so plainly and stop. Stay light: use the hosted product through its SDK or API. Do not start local service stacks or wait for long-running commands; if the quickstart requires either, say so plainly and stop.

No product credentials were supplied and no purchases were authorized.

## Score: A · 100/100 (provisional)
Grades come from completed site checks. Coding sessions and skipped checks do not affect the score.

### Clarity
- **Pass** — Homepage answers Markdown requests

  ```text
  Homepage returned text/markdown with 200 when requested with Accept: text/markdown.
  ```

- **Pass** — llms.txt provides an actionable documentation index

  ```text
  llms.txt lists docs, quick starts, API reference, SDKs, MCP and pricing links.
  ```

- **Pass** — llms.txt provides navigation guidance

  ```text
  llms.txt organizes links under Core Products, Developer Documentation, Learning Resources and Pricing headings.
  ```

- **Pass** — llms.txt mentions offered API, MCP, and skills

  ```text
  llms.txt links MCP docs and MCP repository; skills covered via integrations and GitHub.
  ```

- **Pass** — A compact guide representation exists

  ```text
  Standalone Markdown quickstart pages exist, e.g. quick-start-proxies.md served as text/markdown.
  ```

- **Pass** — A focused guide is directly retrievable

  ```text
  Quick Start: Proxies .md gives step-by-step setup, cURL first request, and proxy details.
  ```

- **Pass** — Equivalent instructions fit a token budget

  ```text
  Markdown quickstart is 1782 tokens, well under 8000 and below its HTML extraction.
  ```

- **Pass** — Product-docs links survive format changes

  ```text
  Markdown quickstart retains docs links to products, integrations, and MASQUE protocol pages.
  ```

- **Pass** — The compact guide is independently actionable

  ```text
  Quick Start: Proxies gives account setup, cURL first request, endpoints, geo-targeting and next steps.
  ```

- **Pass** — Install and next-step links resolve

  ```text
  Fetched quick-start, MCP, skills and API reference pages all returned HTTP 200.
  ```


### Onboarding
- **Pass** — Docs lead to a relevant quickstart

  ```text
  llms.txt links Quick Start Guides; fetched quick-start-proxies gives step-by-step setup and first request.
  ```

- **Pass** — Installation commands are extractable

  ```text
  Quickstart shows extractable cURL command with endpoint, port, and credential placeholders.
  ```

- **Pass** — Code examples are available without interaction

  ```text
  Quickstart includes inline cURL example and proxy detail table without interaction.
  ```

- **Pass** — Prerequisites and auth boundaries are explicit

  ```text
  Quickstart requires account signup and dashboard credentials before first request.
  ```


### Pricing
- **Failed** — Agents identify pricing and its assumptions

  ```text
  1 of 3 sessions were judged on pricing; 1 fell short. Kimi K3: Described pricing models from memory (per-result, per-GB, trial) but gave no cost figure and no plan or workload assumptions to tie one to. (seq 23) This behavioural item does not affect the fast grade.
  ```

- **Pass** — Pricing is readable without interaction

  ```text
  Pricing page renders full plan and per-unit price tables as static Markdown, no interaction needed.
  ```

- **Pass** — Prices are stated, not gated

  ```text
  Concrete prices shown: Starter $30/mo, Basic $100/mo, Flexible $500/mo, Enterprise from $2,500/mo.
  ```

- **Pass** — Pricing units and limits are explicit

  ```text
  Units and caps explicit, e.g. $1/1K searches up to 5.6K, $6/GB up to 0.8 GB.
  ```


### Activation
- **Pass** — An API reference or OpenAPI spec is reachable

  ```text
  API reference overview documents base URL, Bearer auth, and endpoint paths for Web API.
  ```

- **Pass** — An MCP server is documented and well-formed

  ```text
  MCP docs list tools, install via uv, client configs, and self-hosted HTTP transport.
  ```

- **Pass** — A CLI install path is documented

  ```text
  MCP install puts oxylabs-web-api-mcp on PATH; skills docs show npx skills add.
  ```

- **Skipped** — SDK packages resolve on their registries

  ```text
  No registry lookup result for an Oxylabs SDK or packaged CLI was supplied.
  ```

- **Pass** — Agent skills are published

  ```text
  Agent Skills page documents two skill repos, install commands, and per-product skills.
  ```



[Full report data](https://www.ax-check.com/oxylabs.io/report.json)
