# Website Reader API

> Website Reader returns web page content, metadata, and published company contact details as a workflow and API.

Website Reader reads a public web page from its link and returns main text, metadata, images, and optionally links. Get contact details finds published company contact information from a website address or company name. Read people first link follows the PeopleFirst link on Westminster’s residents page and returns destination details and main text.

- Page: https://fous.com/tools/website-reader
- Handle: `@website-reader`
- Category: [Data](https://fous.com/tools/category/data)
- Source website: https://docs.fous.com/guides/catalog
- Last verified: Oct 8, 2026

## Methods

### Get contact details

Operation `get_contact_details`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Find the contact information a company publishes on its website from its website address or name. Checks the home page and up to five relevant pages; information not published on those pages may be missed.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `website` | string | yes | `"Mozilla"` | Company website address or name, for example "w3.org" or "W3C". |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "website"
  ],
  "properties": {
    "website": {
      "type": "string",
      "description": "Company website address or name, for example \"w3.org\" or \"W3C\".",
      "examples": [
        "Mozilla",
        "python.org",
        "w3.org"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "website": "Mozilla"
    },
    {
      "website": "python.org"
    },
    {
      "website": "w3.org"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `emails` | array |  |  |
| `emails[].page` | string | `"https://www.mozilla.org/en-US/contact/"` |  |
| `emails[].email` | string | `"trademark-permissions@mozilla.com"` |  |
| `company_name` | string | `"Mozilla"` | The company name as published on the site. |
| `contact_page` | string or null | `"https://www.mozilla.org/en-US/contact/"` | A contact or imprint page found on the site, if any. |
| `website_used` | string | `"https://www.mozilla.org/en-US/"` | The company website used for this lookup. |
| `phone_numbers` | array |  |  |
| `phone_numbers[].page` | string | `"https://www.w3.org/contact/"` |  |
| `phone_numbers[].phone_number` | string | `"+1 339 273 2711"` |  |
| `social_profiles` | array |  |  |
| `social_profiles[].link` | string | `"https://www.instagram.com/mozilla"` |  |
| `social_profiles[].page` | string | `"https://www.mozilla.org/en-US/"` |  |
| `social_profiles[].platform` | string | `"Instagram"` |  |
| `postal_addresses` | array |  |  |
| `postal_addresses[].page` | string | `"https://www.mozilla.org/en-US/contact/spaces/"` |  |
| `postal_addresses[].address` | string | `"235 Pine Street 7th floor San Francisco , CA 94104 USA"` |  |

**Example input**

```json
{
  "website": "Mozilla"
}
```

**Example output**

```json
{
  "emails": [
    {
      "page": "https://www.mozilla.org/en-US/contact/",
      "email": "trademark-permissions@mozilla.com"
    },
    {
      "page": "https://www.mozilla.org/en-US/contact/spaces/",
      "email": "mozspaces@mozilla.com"
    }
  ],
  "company_name": "Mozilla",
  "contact_page": "https://www.mozilla.org/en-US/contact/",
  "website_used": "https://www.mozilla.org/en-US/",
  "phone_numbers": [],
  "social_profiles": [
    {
      "link": "https://www.instagram.com/mozilla",
      "page": "https://www.mozilla.org/en-US/",
      "platform": "Instagram"
    },
    {
      "link": "https://www.linkedin.com/company/mozilla-corporation",
      "page": "https://www.mozilla.org/en-US/",
      "platform": "LinkedIn"
    },
    {
      "link": "https://www.tiktok.com/@mozilla",
      "page": "https://www.mozilla.org/en-US/",
      "platform": "TikTok"
    }
  ],
  "postal_addresses": [
    {
      "page": "https://www.mozilla.org/en-US/contact/spaces/",
      "address": "235 Pine Street 7th floor San Francisco , CA 94104 USA"
    },
    {
      "page": "https://www.mozilla.org/en-US/contact/spaces/",
      "address": "366 Adelaide St W, Suite 500 Toronto , ON M5V 1R9 Canada"
    }
  ]
}
```

### Read page

Operation `read_page`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Read the main text, metadata, image and links from a public web page. Pages requiring a login or paywall and non-HTML files are not supported.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `page_url` | string | yes | `"https://fous.com/about"` | Public web page link, for example https://www.bbc.com/news/business. |
| `include_links` | boolean | no | `false` | Include page links, for example true. |
| `max_characters` | integer | no | `1200` | Maximum number of characters of main text, for example 50000. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "page_url"
  ],
  "properties": {
    "page_url": {
      "type": "string",
      "description": "Public web page link, for example https://www.bbc.com/news/business.",
      "examples": [
        "https://fous.com/about",
        "https://www.bbc.com/news/business",
        "https://en.wikipedia.org/wiki/Python_(programming_language)"
      ]
    },
    "include_links": {
      "type": "boolean",
      "default": true,
      "description": "Include page links, for example true.",
      "examples": [
        false
      ]
    },
    "max_characters": {
      "type": "integer",
      "default": 50000,
      "minimum": 1,
      "description": "Maximum number of characters of main text, for example 50000.",
      "x-fous-developer": true,
      "examples": [
        1200,
        2000
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "page_url": "https://fous.com/about"
    },
    {
      "page_url": "https://www.bbc.com/news/business",
      "include_links": false,
      "max_characters": 1200
    },
    {
      "page_url": "https://en.wikipedia.org/wiki/Python_(programming_language)",
      "max_characters": 2000
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `text` | string |  |  |
| `links` | array |  |  |
| `links[].url` | string | `"https://en.wikipedia.org/wiki/High-level_programming_language"` |  |
| `links[].text` | string | `"high-level"` |  |
| `title` | string or null | `"About Fous \| Fous API"` |  |
| `author` | string or null | `"Contributors to Wikimedia projects"` |  |
| `language` | string or null | `"en"` |  |
| `markdown` | string |  |  |
| `page_url` | string | `"https://fous.com/about"` | Final page link after redirects. |
| `site_name` | string or null | `"Fous"` |  |
| `word_count` | integer | `255` |  |
| `main_image_url` | string or null | `"https://fous.com/images/logo.png"` |  |
| `published_date` | string or null | `"2001-10-29"` |  |

**Example input**

```json
{
  "page_url": "https://fous.com/about"
}
```

**Example output**

```json
{
  "text": "AI builds the workflow.Code runs it.\n\nFous turns work across the web into reusable workflows for teams, applications, and AI agents.\n\nTeams spend hours gathering information, comparing suppliers, and …",
  "links": [],
  "title": "About Fous | Fous API",
  "author": null,
  "language": "en",
  "markdown": "# AI builds the workflow. Code runs it.\n\nFous turns work across the web into reusable workflows for teams, applications, and AI agents.\n\nTeams spend hours gathering information, comparing suppliers, a…",
  "page_url": "https://fous.com/about",
  "site_name": "Fous",
  "word_count": 255,
  "main_image_url": "https://fous.com/images/logo.png",
  "published_date": null
}
```

### Read people first link

Operation `read_people_first_link`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Follow the PeopleFirst link on Westminster’s residents page and return its destination address, status, title and up to 2,000 characters of main text. Returns an error if the link or destination is unavailable.

**Input**

No input.

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `final_url` | string | `"https://www.peoplefirstinfo.org.uk/"` | Final destination link after redirects. |
| `page_title` | string | `"Homepage \| People First"` | Title of the destination page. |
| `status_code` | integer | `200` | HTTP status returned by the destination. |
| `source_link_url` | string | `"https://www.westminster.gov.uk/node/21229"` | The PeopleFirst link as found on the residents page. |
| `source_page_url` | string | `"https://www.westminster.gov.uk/residents"` | The Westminster residents page link. |
| `source_link_text` | string | `"PeopleFirst - adult social care"` | The link label shown on the residents page. |
| `main_visible_text` | string |  | First 2,000 characters of visible text in the destination main content. |

**Example input**

```json
{}
```

**Example output**

```json
{
  "final_url": "https://www.peoplefirstinfo.org.uk/",
  "page_title": "Homepage | People First",
  "status_code": 200,
  "source_link_url": "https://www.westminster.gov.uk/node/21229",
  "source_page_url": "https://www.westminster.gov.uk/residents",
  "source_link_text": "PeopleFirst - adult social care",
  "main_visible_text": "Supporting independent living and health in Kensington and Chelsea and Westminster All services Health & wellbeing Health and self-care information, including nutrition, exercise, medical support and …"
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@website-reader",
  "visibility": "public",
  "operation": "get_contact_details",
  "version": 1,
  "input": {
    "website": "Mozilla"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@website-reader\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_contact_details\",\n  \"version\": 1,\n  \"input\": {\n    \"website\": \"Mozilla\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@website-reader",
  "visibility": "public",
  "operation": "get_contact_details",
  "version": 1,
  "input": {
    "website": "Mozilla"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/website-reader`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `get_contact_details`: Get contact details. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `read_page`: Read page. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `read_people_first_link`: Read people first link. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-website-reader https://api.fous.com/mcp/tools/website-reader --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Extract main text and metadata from public web pages
- Collect published company emails and phone numbers
- Find company social profiles and postal addresses
- Review the destination of Westminster’s PeopleFirst link

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this Website Reader tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a Website Reader account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from docs.fous.com when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Oct 8, 2026.

### What is the main text of a public web page?

Use Read page with the public page link to return its main text and page details.

### What contact details does a company publish?

Get contact details looks for published emails, phone numbers, social profiles, and postal addresses using a company website address or name.

### Where does Westminster’s PeopleFirst link lead?

Read people first link returns the destination address, status, title, and up to 2,000 characters of main text.

## Related

- [Fox News API](https://fous.com/tools/fox-news.md): Fox News returns section-page headlines, keyword-matched articles among up to 100 available results, and readable article text, including the latest live-blog updates.
- [Companies House API](https://fous.com/tools/companies-house.md): Companies House returns UK public-register company details, officers, people with significant control and recent filings; records may be incomplete, and ceased entries are optional.
- [BBC News API](https://fous.com/tools/bbc-news.md): BBC News returns section-ordered headlines, searchable articles with dates, authors and sections (filters/newest sorting cover 180 matches), and article text with available latest live entries.
- [The Guardian API](https://fous.com/tools/the-guardian.md): The Guardian provides news, sport, culture and opinion, ordered headlines, keyword-search results that may omit older or less prominent stories, and article details with available text; live blogs show the latest entries.
- [Medium API](https://fous.com/tools/medium.md): Medium returns public writer, publication, and topic articles, including newest posts and weekly popular picks, plus readable article text; member-only stories remain limited to visible previews.
- [AP News API](https://fous.com/tools/ap-news.md): AP News provides reporting, up to 50 public-page headlines, searchable articles visible in its search, and full text when accessible.
- [Daily Mail API](https://fous.com/tools/daily-mail.md): Daily Mail provides ordered section headlines with available bylines and times, searches up to 200 published articles excluding syndicated wire stories, and reads public article text and details, including latest live-blog entries shown.
- [BuiltWith API](https://fous.com/tools/builtwith.md): Discover technologies used by websites.
- [All Data tools](https://fous.com/tools/category/data)
