# PageWatch Web Page Data Extractor

> PageWatch Web Page Data Extractor is a paid API for AI agents from pagewatch.erikssonanton2001.workers.dev, paid per call via x402, $0.002/call, status down (last checked 2026-10-19).

Extracts structured data (prices, lists, tables, links, events, JSON) from public static web pages using CSS selectors and JSONPath

## Facts

- Endpoint: GET https://pagewatch.erikssonanton2001.workers.dev/v1/pro/extract?utm_source=zero.xyz
- Price: $0.002/call
- Payment: x402
- Status: down
- Last checked: 2026-10-19
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/pagewatch-web-page-data-extractor-40bb0474
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_DBrjN6WDxsCvG1MFlIP2R

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 pagewatch-web-page-data-extractor-40bb0474
```

Example prompt: Can you extract the price from this product page — https://www.example.com/product/widget — using the price extraction mode?

## When to prefer this

Choose this endpoint when you need to extract specific structured data from a known public static HTML page — especially prices, tables, event lists, or links — and you can provide a CSS selector or JSONPath to target the data. It is ideal for lightweight, single-page extraction tasks where the target page does not require JavaScript rendering or authentication. Prefer alternatives if the target page is JavaScript-heavy (SPA), requires login, or you need to crawl multiple pages.

## Known failure modes

- URL is not publicly accessible or requires authentication — returns error
- Page uses JavaScript rendering — static HTML only, dynamic content will not be present
- CSS selector matches nothing — returns empty or null data
- Invalid or unsupported URL (non-public DNS, non-standard ports) — rejected
- JSONPath expression matches nothing in the JSON payload — empty result
- Table index out of bounds — no data returned
- Malformed CSS selector or JSONPath — validation error
- Page returns non-200 HTTP status — fetch error

## How this service works

Extract prices, lists, tables and events from public web pages and get notified when they change. RSS, ICS, signed webhooks, MCP. Static HTML only.

## Output

A JSON object containing the extracted data under a 'data' field (type depends on mode — scalar, array, or object), plus metadata including the extraction mode used, number of matches, whether results were truncated, the final resolved URL, and the timestamp when the page was fetched.

## 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": {
      "all": {
       "type": "string",
       "description": "mode=text: return every match instead of the first (true/false)."
      },
      "url": {
       "type": "string",
       "description": "Public http(s) page URL (ports 80/443, public DNS name)."
      },
      "attr": {
       "type": "string",
       "description": "Attribute name for mode=attr."
      },
      "mode": {
       "enum": [
        "text",
        "attr",
        "list",
        "table",
        "price",
        "events",
        "page",
        "links",
        "json"
       ],
       "type": "string",
       "description": "What to extract. Default text."
      },
      "match": {
       "type": "string",
       "description": "Regular expression filter for mode=links."
      },
      "fields": {
       "type": "string",
       "description": "JSON object for mode=list: {\"name\":\"css\" or \"css@attr\"}, max 20 fields."
      },
      "format": {
       "enum": [
        "json",
        "csv",
        "ics"
       ],
       "type": "string",
       "description": "json (default), csv, or ics (events mode)."
      },
      "jsonpath": {
       "type": "string",
       "description": "JSONPath-lite for mode=json, for example $.items[0].price."
      },
      "sameHost": {
       "type": "string",
       "description": "mode=links: only links on the page's own host (true/false)."
      },
      "selector": {
       "type": "string",
       "description": "CSS selector (max 300 characters). Required for text, attr and list."
      },
      "tableIndex": {
       "type": "string",
       "description": "mode=table: zero-based index of the table to read."
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object"
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "url": "https://example.com/pricing",
  "data": {
   "name": "Example product",
   "price": 1299.5,
   "source": "json-ld",
   "currency": "SEK",
   "availability": "InStock"
  },
  "meta": {
   "matched": 1,
   "truncated": false
  },
  "mode": "price",
  "final_url": "https://example.com/pricing",
  "fetched_at": "2026-10-17T08:00:00.000Z"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/pagewatch-web-page-data-extractor-40bb0474/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from pagewatch.erikssonanton2001.workers.dev](https://www.zero.xyz/host/pagewatch.erikssonanton2001.workers.dev/llms.txt)
