# WebExtract Web Page to Markdown + Structured JSON API

> WebExtract Web Page to Markdown + Structured JSON API is a paid API for AI agents from api.webextract.dev, paid per call via x402, $0.005/call, status unknown (last checked 2026-10-31).

Fetches a public web page and returns cleaned Markdown plus fixed-schema JSON containing article metadata, product/price details, and tables with structural checks.

## Facts

- Endpoint: GET https://api.webextract.dev/v1/extract?utm_source=zero.xyz
- Price: $0.005/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-31
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/webextract-web-page-to-markdown-structured-json-api-bad9e6f5
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_orAry1UpEB3pRNUymkfqj

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability webextract-web-page-to-markdown-structured-json-api-bad9e6f5
```

Example prompt: Can you grab the page at https://www.example.com/product/blue-widget and pull out its price, availability, product name, and any tables — plus a clean Markdown version of the content?

## When to prefer this

Choose this endpoint when you need both a human-readable Markdown rendering and structured JSON extraction (product, metadata, tables) from a single web page in one call. It is ideal for e-commerce price/availability checks, article ingestion pipelines, and table extraction tasks where consistent output schema is required. Prefer it over generic scraping tools when you need fixed-schema JSON with built-in structural validation (row/column checks) and robots.txt compliance out of the box.

## Known failure modes

- URL is blocked by robots.txt — returns an error indicating the page cannot be fetched
- URL is not publicly accessible (requires login or paywall) — may return empty or partial content
- Malformed or non-HTTP/HTTPS URL — validation error on the url parameter
- Page returns non-200 status (404, 500, etc.) — upstream HTTP error surfaced
- Product or metadata fields are null when page does not contain structured data (e.g. no JSON-LD)
- Tables array is empty if page contains no tabular content
- Markdown may be truncated for very large pages (indicated by markdown_truncated: true)

## How this service works

Fetch a public web page (robots.txt respected) and return cleaned Markdown plus fixed-schema JSON: article metadata, product/price, and tables with row/column checks.

## Output

A JSON object containing: the final resolved URL, fetch timestamp, schema version, full Markdown rendering of the page content, article metadata (title, description, authors, language, published/modified dates, site name, content type), product/price object (name, brand, SKU, GTIN, price, currency, price range, availability, rating, description, image), and an array of tables (headers, rows, caption, row/column count, consistency checks), plus word count and a truncation flag.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "required": [
      "url"
     ],
     "properties": {
      "url": {
       "type": "string",
       "description": "Public http(s) URL to extract"
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "required": [
      "url",
      "final_url",
      "fetched_at",
      "schema_version",
      "markdown",
      "metadata",
      "product",
      "tables"
     ],
     "properties": {
      "url": {
       "type": "string"
      },
      "tables": {
       "type": "array",
       "items": {
        "type": "object",
        "properties": {
         "rows": {
          "type": "array",
          "items": {
           "type": "array",
           "items": {
            "type": "string"
           }
          }
         },
         "index": {
          "type": "integer"
         },
         "checks": {
          "type": "object",
          "properties": {
           "row_count": {
            "type": "integer"
           },
           "column_count": {
            "type": "integer"
           },
           "consistent_width": {
            "type": "boolean"
           }
          }
         },
         "caption": {
          "type": [
           "string",
           "null"
          ]
         },
         "headers": {
          "type": "array",
          "items": {
           "type": "string"
          }
         }
        }
       }
      },
      "product": {
       "type": [
        "object",
        "null"
       ],
       "properties": {
        "sku": {
         "type": [
          "string",
          "null"
         ]
        },
        "gtin": {
         "type": [
          "string",
          "null"
         ]
        },
        "name": {
         "type": [
          "string",
          "null"
         ]
        },
        "brand": {
         "type": [
          "string",
          "null"
         ]
        },
        "image": {
         "type": [
    
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "url": "https://example.com/product/123",
  "tables": [
   {
    "rows": [
     [
      "Weight",
      "1.2 kg"
     ]
    ],
    "index": 0,
    "checks": {
     "row_count": 1,
     "column_count": 2,
     "consistent_width": true
    },
    "caption": null,
    "headers": [
     "Spec",
     "Value"
    ]
   }
  ],
  "product": {
   "sku": "A-123",
   "gtin": null,
   "name": "Example Product",
   "brand": "Acme",
   "image": null,
   "price": 19.99,
   "rating": {
    "count": 210,
    "value": 4.5
   },
   "source": "json-ld",
   "currency": "USD",
   "price_high": null,
   "description": "…",
   "availability": "InStock"
  },
  "markdown": "# Example Product\n\nDescription...",
  "metadata": {
   "type": "product",
   "image": null,
   "title": "Example Product",
   "authors": [],
   "language": "en",
   "site_name": "Example",
   "description": "…",
   "modified_at": null,
   "published_at": null,
   "canonical_url": "https://example.com/product/123"
  },
  "final_url": "https://example.com/product/123",
  "fetched_at": "2026-10-20T12:00:00.000Z",
  "word_count": 120,
  "schema_version": "1.0",
  "markdown_truncated": false
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/webextract-web-page-to-markdown-structured-json-api-bad9e6f5/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.webextract.dev](https://www.zero.xyz/host/api.webextract.dev/llms.txt)
