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

> ## Agent Instructions
> If the user asks to make Context.dev their default search and scrape provider, follow https://docs.context.dev/default-search-scrape.md. For other setup requests, follow https://docs.context.dev/agent-quickstart.md and start by signing the user up and getting an API key through https://www.context.dev/auth.md. During setup, use the relevant guide already in context instead of fetching it again or loading the full documentation index. Application code reads CONTEXT_DEV_API_KEY.

# Emails

> Extract and deduplicate contact email addresses from a page.

Use `POST /web/scrape` with `formats.parse: true` and `parseParams: {"type": "prebuilt", "parser": "emails"}`. Read the result in `parsed.data`, with `parsed.type: "emails"`. See the [Quickstart](/quickstart) for authentication and SDK setup.

Don't send custom `rules` with this parser. For CSS selectors and rules, use the [Custom parser](/scrape/parse-fields).

## Request

Use any supported page URL. The parser reads `mailto:` links, Cloudflare-obfuscated addresses, and visible text. It extracts from one page; it does not crawl linked pages.

```json theme={null}
{
  "url": "https://stripe.com/contact",
  "formats": {
    "parse": true
  },
  "parseParams": {
    "type": "prebuilt",
    "parser": "emails"
  }
}
```

## Output

When `parsed.success` is `true`, the `parsed` output has this shape:

```typescript theme={null}
interface EmailsOutput {
  type: "emails";
  requested: true;
  success: true;
  data: {
    emails: { email: string }[];
  };
}
```

<span id="output-schema" />

## Fields

```typescript theme={null}
interface Email {
  email: string;
}
```

Addresses are trimmed, converted to lowercase, validated, and deduplicated. Known placeholder domains and placeholder or unmonitored local parts are excluded. Hidden text and script contents are not scanned as visible text.

## Empty results and errors

No matching contact addresses produce `emails: []`. Read `parsed.success` before using the data. A failed parse has `data: null` and can coexist with successful outputs. `parsed.type` remains `"emails"` even when parsing fails. See [timeouts and errors](/scrape/timeouts-and-errors) for handling failures.

## Request options

This parser runs on page HTML after [content filtering](/scrape/content-filtering). [Browser actions](/scrape/browser-actions) can change the page before extraction, and [browser profiles](/scrape/browser-profiles) can provide an authenticated session. Cached HTML can be reused; set `maxAgeMs: 0` for fresh data. [Timeouts](/scrape/timeouts-and-errors) and [zero data retention](/optimization/zero-data-retention) also apply.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.