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

# Validate Contacts

> Check any address before you send. Each contact comes back valid, risky, or invalid, and the verdict is saved on the contact.

Sending to addresses that can't receive mail raises your bounce rate, and bounce rate is one of the two metrics that decide your [sending reputation](/audience/audience-hygiene). Validation runs a real deliverability check on your contacts before an email goes out. Each address comes back with one of three verdicts:

* **Valid.** The mailbox exists and accepts mail.
* **Risky.** Deliverable, but worth a look: a role account (`info@`, `support@`), a disposable address, or a catch-all domain that accepts everything.
* **Invalid.** The address can't receive mail. Don't send to it.

Every result carries a machine-readable `reason` and, where a typo looks likely, a `didYouMean` correction (`gamil.com` to `gmail.com`). The verdict is saved on the contact, so a list you validated stays validated.

Each checked address costs **2 credits**, drawn from the same [credit balance](/api-reference/api/credits) as AI email generation and charged only when the check completes.

## From an Audience

The most credit-efficient way to validate. Open the audience, then click the three-dot menu in the top right corner of the audience view (next to **Download CSV**) and choose **Validate contacts**. Every contact in that audience is checked.

<video autoPlay loop muted playsInline className="w-full rounded-xl" style={{aspectRatio:"1280/867"}} src="https://0edx89zhjrasqnjf.public.blob.vercel-storage.com/docs/validating_audience.webm" />

<Tip>
  You can validate your whole list from the All contacts view, but for better credit usage, [create an audience](/audience/create-audiences) first and validate that group instead. Two credits per address adds up; validating the segment you're about to send to is usually all you need.
</Tip>

## On CSV Import

The [CSV import](/audience/add-contacts#csv-upload) has a validation checkbox. Tick it and every address in the file is deliverability-checked as it's ingested, so bad addresses never enter your list unflagged.

<Frame>
  <img src="https://0edx89zhjrasqnjf.public.blob.vercel-storage.com/docs/validating_csv_contacts.webp" alt="The CSV import dialog with the contact validation checkbox" width="2588" height="1980" />
</Frame>

## When Adding a Contact Manually

The [add-contact form](/audience/add-contacts#add-manually) has the same checkbox. Tick it and the address is checked as it's saved.

<Frame>
  <img src="https://0edx89zhjrasqnjf.public.blob.vercel-storage.com/docs/validating_individual_contact.webp" alt="The add-contact form with the contact validation checkbox ticked" width="521" height="317" />
</Frame>

## From MCP

If Brew is [connected to your AI client](/api-reference/mcp/quickstart), the easiest flow is to ask for your audiences, pick one, and validate it:

> *"List my audiences."*

> *"Validate the contacts in the newsletter audience."*

The agent calls `list_audiences` and then `validate_contacts`, and replies with the verdict counts and the addresses that came back risky or invalid. The `create_contact` and `import_contacts_csv` tools take the same opt-in validation as the UI checkboxes.

<Frame>
  <img src="https://0edx89zhjrasqnjf.public.blob.vercel-storage.com/docs/validation_mcp_blurred.webp" alt="Claude validating an audience's contacts over the Brew MCP, returning verdict counts and the risky addresses" width="1542" height="1338" />
</Frame>

## From the API

The same check is available on three endpoints:

* **`POST /v1/contacts/validate`** checks up to 100 addresses at once and writes the verdict back onto matching contacts. Each result carries `risk`, `isDisposable`, and `isRole` signals alongside `reason` and `didYouMean`.
* **`POST /v1/contacts`** and **`POST /v1/contacts/import-csv`** accept an optional **`validate: true`** to check each address as it's ingested. Up to 100 addresses validate inline; larger submissions upsert first and validate as a background job, returning a `validationJobId`.

In the TypeScript SDK it's `brew.contacts.validate(...)`, and the ingestion methods take the same `validate` flag. The contact's verdict field is named `validationStatus`. If a check can't complete, the call returns a retryable `503` and you are not billed.

## What to Do with the Verdicts

* **Valid** contacts need nothing. Send as usual.
* **Risky** contacts deserve a look before a big send. Role accounts rarely engage, disposable addresses churn fast, and catch-all domains can't be confirmed either way. Consider excluding them from your primary sending audience.
* **Invalid** contacts should leave your active audience. Sending to them produces hard bounces, and hard bounces hurt every future send. See [Audience Hygiene](/audience/audience-hygiene) for the wider cleanup routine.

## Need help?

Our team is ready to support you at every step of your journey with Brew. Choose the option that works best for you:

<Tabs>
  <Tab title="Self-Service Tools">
    <CardGroup cols="2">
      <Card title="Search Documentation" icon="magnifying-glass" color="#c44925">
        Type in the "Ask any question" search bar at the top left to instantly find relevant documentation pages.
      </Card>

      <Card title="ChatGPT/Claude Integration" icon="robot" color="#c44925">
        Click "Open in ChatGPT" at the top right of any page to analyze documentation with ChatGPT or Claude for deeper insights.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Talk to Our Team">
    <CardGroup cols="2">
      <Card title="Schedule a Call" icon="calendar" color="#c44925" href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ1iYoRUG1J792XQpbuQLjSRRDupr7MwraFK-HQRCtTYdBmrQi8nZu2qXfzKQigb8gbKJK3KN3-R">
        Book time with our founders for personalized guidance on strategy, best practices, or complex implementation questions.
      </Card>

      <Card title="Call Us Directly" icon="phone" color="#c44925">
        Need immediate assistance? Reach us at **+1-(332)-203-2145** for urgent issues or time-sensitive questions.
      </Card>

      <Card title="Slack Channel" icon="slack" color="#c44925">
        Our preferred support channel. You'll receive an invite after signup for direct founder support and fast responses.
      </Card>

      <Card title="Email Support" icon="envelope" color="#c44925" href="mailto:support@brew.new">
        Contact us at **[support@brew.new](mailto:support@brew.new)** for detailed inquiries or if you prefer not to use Slack.
      </Card>
    </CardGroup>
  </Tab>
</Tabs>
