{
  "id": "contextdev.web.extract",
  "object": "tool",
  "name": "Extract Structured Data",
  "summary": "Crawl a website and return JSON matching a caller-supplied JSON Schema.",
  "description": "Point Context.dev at a website, hand it a JSON Schema plus optional instructions, and get back typed data ready to drop into a product, agent, or workflow — no per-site scraper. Context.dev prioritizes the internal links most likely to answer the schema, reads up to maxPages pages (hard cap 50), and fills the requested shape. factCheck: true restricts every value to facts stated on the page while the default allows reasonable inference for derived fields. Typical uses: lead enrichment, pricing and packaging capture, hiring signals, compliance evidence.\n\nRaw contextdev#web/extract endpoint: input is { body, queryParams, pathParams } as the provider documents them (https://docs.context.dev/api-reference/web-extraction/extract).",
  "category": "lookup",
  "hosted_by": "Context.dev",
  "runtime": "partner",
  "side_effects": false,
  "status": "live",
  "credits": 0,
  "price": null,
  "providers": [
    {
      "id": "contextdev",
      "name": "Context.dev",
      "price": null,
      "own_key_only": true
    }
  ],
  "mcp_name": "contextdev_web_extract",
  "input_schema": {
    "type": "object",
    "properties": {
      "body": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "pattern": "^https?:\\/\\/\\S+$",
            "description": "Starting website URL to crawl and extract from."
          },
          "schema": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {},
            "description": "JSON Schema describing the object to return. Context.dev fills exactly this shape; image fields such as image_urls make page image references available to extraction."
          },
          "instructions": {
            "type": "string",
            "maxLength": 2000,
            "description": "Extraction guidance: which facts to prioritize, how to interpret ambiguous fields."
          },
          "factCheck": {
            "type": "boolean",
            "description": "When true, every returned value must be grounded in text stated on the page and unsupported fields come back null/empty. Default false: reasonable inferences are allowed."
          },
          "followSubdomains": {
            "type": "boolean",
            "description": "Follow links on subdomains of the starting URL's domain. Default false."
          },
          "maxPages": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "description": "Maximum number of pages to analyze (1-50). Default 5. Does not change the price."
          },
          "maxDepth": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Maximum link depth from the starting URL (0 = only the starting page). Unlimited when omitted."
          },
          "pdf": {
            "type": "object",
            "properties": {
              "shouldParse": {
                "type": "boolean",
                "description": "Fetch and parse PDF pages. Default true."
              },
              "start": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991,
                "description": "First 1-based PDF page to parse."
              },
              "end": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991,
                "description": "Last 1-based PDF page to parse. Must be >= start."
              }
            },
            "additionalProperties": false,
            "description": "PDF parsing controls."
          },
          "includeFrames": {
            "type": "boolean",
            "description": "Include iframe contents in the Markdown handed to the extractor. Default false."
          },
          "maxAgeMs": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2592000000,
            "description": "Reuse cached scrape results younger than this many milliseconds. Default 604800000 (7 days), max 2592000000 (30 days)."
          },
          "waitForMs": {
            "type": "integer",
            "minimum": 0,
            "maximum": 30000,
            "description": "Extra browser wait in milliseconds after page load before the content is captured (0-30000). Useful for JavaScript-heavy pages."
          },
          "settleAnimations": {
            "type": "boolean",
            "description": "Wait briefly for animations to settle before each page is read. Default false."
          },
          "stopAfterMs": {
            "type": "integer",
            "minimum": 10000,
            "maximum": 110000,
            "description": "Soft time budget for the crawl phase in milliseconds (10000-110000, default 80000)."
          },
          "timeoutOpts": {
            "type": "object",
            "properties": {
              "milliseconds": {
                "type": "integer",
                "minimum": 1000,
                "maximum": 300000,
                "description": "Request deadline in milliseconds (1000-300000)."
              },
              "behavior": {
                "type": "string",
                "enum": [
                  "fail",
                  "return-partial"
                ],
                "description": "What to do at the deadline: 'fail' returns 408 at no charge (default); 'return-partial' returns the usable results collected so far and bills them."
              }
            },
            "required": [
              "milliseconds"
            ],
            "additionalProperties": false,
            "description": "Request deadline and behavior on timeout."
          }
        },
        "required": [
          "url",
          "schema"
        ],
        "additionalProperties": false
      }
    },
    "required": [
      "body"
    ],
    "additionalProperties": false
  },
  "kind": "endpoint"
}