> ## Documentation Index
> Fetch the complete documentation index at: https://docs.eigenpal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Website Reader

> Fetch a webpage and convert content to markdown

`action.website-reader`, Fetch a webpage and convert content to markdown

Use Website Reader when a workflow needs readable page content rather than a
raw HTTP response. It follows redirects and returns the final URL alongside the
page title, metadata, and Markdown.

## Durable retries

Website Reader can durably retry transient timeouts, rate limits, and selected
retryable server failures. In Studio, set the workflow default under
**Workflow settings → Retries**, then choose **Inherit workflow default**,
**Retry automatically**, or **Never retry** in this step's **Retry** control.

```yaml theme={null}
- name: read-product-page
  type: action.website-reader
  retry:
    mode: automatic
    maxAttempts: 3
  with:
    url: "{{ input.url }}"
```

Retries use bounded exponential backoff, honor `Retry-After`, and stop after a
five-minute elapsed budget. Studio allows two or three total attempts,
including the first attempt. The YAML schema accepts up to 10, but the current
worker ceiling is three. See
[Workflows → Retries](/concepts/workflows#retries) for workflow defaults and
step overrides.

## Configuration

Configuration goes inside the step's `with:` block.

<ParamField path="url" type="string" required>
  Website URL to fetch (supports template expressions)
</ParamField>

<ParamField path="timeout" type="number" default="30000">
  Timeout in milliseconds
</ParamField>

<ParamField path="encoding" type="&#x22;auto&#x22; | &#x22;utf-8&#x22; | &#x22;latin1&#x22; | &#x22;windows-1250&#x22; | &#x22;windows-1252&#x22; | &#x22;iso-8859-2&#x22;" default="auto">
  Response encoding. Auto detects from Content-Type header and HTML meta tags.
</ParamField>

## Output

<ResponseField path="markdown" type="string" required>
  Page content converted to markdown
</ResponseField>

<ResponseField path="title" type="string | null" required>
  Page title
</ResponseField>

<ResponseField path="excerpt" type="string | null" required>
  Page excerpt/description
</ResponseField>

<ResponseField path="byline" type="string | null" required>
  Author information
</ResponseField>

<ResponseField path="siteName" type="string | null" required>
  Site name
</ResponseField>

<ResponseField path="length" type="number" required>
  Content length in characters
</ResponseField>

<ResponseField path="url" type="string" required>
  Final URL after redirects
</ResponseField>
