# exa.web.page.text

Web page text and title from URLs, with fetch status

> Get the full page contents, summaries, and metadata for a list of URLs.

Page: https://telipot.com/catalog/tasks/exa.web.page.text · Markdown: https://telipot.com/catalog/tasks/exa.web.page.text/md · JSON: https://telipot.com/catalog/tasks/exa.web.page.text/json

| Field | Value |
| --- | --- |
| provider | [Exa](https://telipot.com/catalog/providers/exa) `exa` |
| capability | [`web.page.text`](https://telipot.com/catalog/capabilities/web.page.text) |
| kind | data |
| tier | core |
| price | $0.001 / page (Exa docs · 2026-10-05) |
| settles on | The charge Exa reports in costDollars.total |
| price note | $1 per 1,000 pages for each content type; a page returned with text and with highlights counts twice, and AI page summaries add $1 per 1,000 pages. |
| identity | Your plan |
| auth | `api_key · in header as x-api-key` |
| scope | any_account |
| principal | organization |
| required_scopes | none |
| retention | standard |
| route | `POST https://api.exa.ai/contents` |
| verification | Verified on 2026-10-05. We ran a real request and checked the answer. This is a spot check, not a success rate. |
| status | live |
| docs | https://exa.ai/docs/reference/get-contents |

## Preview the price · nothing runs

```bash
telipot run exa.web.page.text \
  --input-json '{"urls":["https://example.com"],"text":{"maxCharacters":1000}}' \
  --quote
```

## Run it

```bash
telipot run exa.web.page.text \
  --input-json '{"urls":["https://example.com"],"text":{"maxCharacters":1000}}'
```

```bash
curl https://api.telipot.com/v1/tasks/exa.web.page.text/run \
  -H "Authorization: Bearer $TELIPOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"urls":["https://example.com"],"text":{"maxCharacters":1000}}'
```

## Input

| Field | In | Type | Required | Constraints | Note |
| --- | --- | --- | --- | --- | --- |
| `urls` | body | array | yes | 1 to 100 | URLs to crawl. Up to 100 per request. |
| `text` | body | object | yes |  | Options for the text returned for each URL, such as { maxCharacters: 2000 } to limit the text per page; includeHtmlTags, verbosity (compact, standard or full), includeSections and excludeSections are also accepted. The vendor's schema also accepts true for the default settings, which this typed field cannot express, so pass an options object. Text is billed at $1 per 1,000 pages. |
| `maxAgeHours` | body | integer | no | -1 to 720 | Maximum age of cached content in hours. Positive values use cached content if it is less than this many hours old; 0 fetches fresh content; -1 always uses the cache; omitted uses fallback fetching when cached content is unavailable. |
| `livecrawlTimeout` | body | integer | no | 1 to 90000; default 10000 | The timeout for livecrawling in milliseconds. |

## Input schema

```json
{
  "type": "object",
  "properties": {
    "urls": {
      "type": "array",
      "description": "URLs to crawl. Up to 100 per request.",
      "examples": [
        [
          "https://example.com"
        ]
      ],
      "minItems": 1,
      "maxItems": 100
    },
    "text": {
      "type": "object",
      "description": "Options for the text returned for each URL, such as { maxCharacters: 2000 } to limit the text per page; includeHtmlTags, verbosity (compact, standard or full), includeSections and excludeSections are also accepted. The vendor's schema also accepts true for the default settings, which this typed field cannot express, so pass an options object. Text is billed at $1 per 1,000 pages.",
      "examples": [
        {
          "maxCharacters": 2000
        }
      ]
    },
    "maxAgeHours": {
      "type": "integer",
      "description": "Maximum age of cached content in hours. Positive values use cached content if it is less than this many hours old; 0 fetches fresh content; -1 always uses the cache; omitted uses fallback fetching when cached content is unavailable.",
      "minimum": -1,
      "maximum": 720
    },
    "livecrawlTimeout": {
      "type": "integer",
      "description": "The timeout for livecrawling in milliseconds.",
      "default": 10000,
      "minimum": 1,
      "maximum": 90000
    }
  },
  "required": [
    "urls",
    "text"
  ],
  "additionalProperties": false
}
```

## Output schema

```json
{
  "type": "object",
  "properties": {
    "requestId": {
      "type": "string"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "title",
          "url"
        ],
        "properties": {
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "id": {
            "type": "string",
            "description": "Temporary document id, accepted by the contents route"
          },
          "publishedDate": {
            "type": "string",
            "description": "Estimated creation date parsed from the page"
          },
          "author": {
            "type": [
              "string",
              "null"
            ]
          },
          "image": {
            "type": "string"
          },
          "favicon": {
            "type": "string"
          },
          "text": {
            "type": "string",
            "description": "Full page text, present only when requested"
          },
          "highlights": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "summary": {
            "type": "string"
          },
          "subpages": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "entities": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "extras": {
            "type": "object"
          }
        }
      }
    },
    "statuses": {
      "type": "array",
      "description": "One entry per requested URL; a URL that failed is reported here, in a 200 response",
      "items": {
        "type": "object",
        "required": [
          "id",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The URL or document id that was requested"
          },
          "status": {
            "type": "string",
            "enum": [
              "success",
              "error"
            ]
          },
          "source": {
            "type": "string",
            "enum": [
              "cached",
              "crawled"
            ]
          },
          "error": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "tag": {
                    "type": "string",
                    "description": "Specific error type, such as CRAWL_NOT_FOUND"
                  },
                  "httpStatusCode": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "The status the target page returned"
                  }
                }
              },
              {
                "type": "null"
              }
            ]
          }
        }
      }
    },
    "searchTime": {
      "type": "number"
    },
    "costDollars": {
      "type": "object",
      "description": "Estimated dollar cost of the completed request; billing is computed from usage counters, not from this object.",
      "properties": {
        "total": {
          "type": "number"
        },
        "search": {
          "type": "object",
          "properties": {
            "neural": {
              "type": "number"
            },
            "keyword": {
              "type": "number"
            }
          }
        },
        "summary": {
          "type": "number"
        },
        "contents": {
          "type": "object",
          "properties": {
            "text": {
              "type": "number"
            },
            "highlights": {
              "type": "number"
            },
            "summary": {
              "type": "number"
            }
          }
        }
      }
    }
  }
}
```

## Example response

From `examples/exa.web.page.text.json`.

```json
{
  "requestId": "ec0c917e43b5c249b30a1839ea761835",
  "results": [
    {
      "id": "https://example.com",
      "title": "Example Domain",
      "url": "https://example.com",
      "author": null,
      "text": "Example Domain\n\nThis domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for testing and monitoring purposes.\n\nهذا النطاق مُخصص للاستخدام…",
      "entities": [
        {}
      ]
    }
  ],
  "statuses": [
    {
      "id": "https://example.com",
      "status": "success",
      "source": "cached"
    }
  ],
  "costDollars": {
    "total": 0.001,
    "contents": {
      "text": 0.001
    }
  },
  "searchTime": 6.0309359999373555
}
```

## Other tools for this job

- [`jina-reader.web.page.text`](https://telipot.com/catalog/tasks/jina-reader.web.page.text) · Free
- [`firecrawl.web.page.text`](https://telipot.com/catalog/tasks/firecrawl.web.page.text) · $0.0038 / page
