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

# Publish DNS records at your provider

> Where the DNS zone lives at Cloudflare, Route 53, Namecheap, GoDaddy and others, how to add each record, and the trap that breaks verification.

export const Screenshot = ({id, src, srcDark, alt, caption}) => {
  if (!src) {
    return <Placeholder id={id} kind="screenshot" label="Screenshot coming soon" description={alt} icon={<ImageIcon />} />;
  }
  return <figure className="brd-media" data-media-id={id}>
      <img className="brd-media-frame block dark:hidden" src={src} alt={alt} />
      <img className="brd-media-frame hidden dark:block" src={srcDark || src} alt={alt} />
      {caption && <figcaption className="brd-media-caption">{caption}</figcaption>}
    </figure>;
};

Publish the five Brudcast records in your own DNS, at the provider that answers for your domain.

<Screenshot id="ss-channels-dns-by-provider-hero-copy-value" alt="The DNS Records tab with the Host and Value copy buttons beside the SPF delegation record, ready to paste into a DNS provider" />

<Info>
  **Before you start:** open the domain's **DNS Records** tab in **Channels > Email > Domains** and
  keep it beside this page. Copy every name and value from there, because they're generated for your
  domain. You also need sign-in access to whoever hosts your DNS.
</Info>

## The one thing that breaks most often

Providers disagree about the **name** field. Some want only the part in front of your zone and add
the zone themselves. Others want the full name. Getting it wrong produces names like
`brd.spf.mail.example.com.example.com`, and the domain never verifies.

Every provider below takes the **host part** only. For a sending domain `mail.example.com` in the
zone `example.com`, that's `brd.spf.mail` rather than `brd.spf.mail.example.com`. The full names and
their host parts are listed in [DNS records](/channels/email/dns-records#publish-them-at-your-provider).

After you save the first record, read back the full name your provider shows. If it's doubled, edit
the record and remove the extra domain.

## Your provider

<Tabs>
  <Tab title="Cloudflare">
    **Where the zone is:** sign in to Cloudflare, select the domain, then open **DNS > Records**.

    **Add a CNAME:** select **Add record**. Set **Type** to **CNAME**, **Name** to the host part,
    and **Target** to the value from Brudcast. Set **TTL** to **Auto** or `300`. Set
    **Proxy status** to **DNS only**.

    **Add a TXT:** select **Add record**, set **Type** to **TXT**, **Name** to `_dmarc.mail`, and
    paste the DMARC policy into **Content**.

    <Warning>
      **The proxy must be off.** Cloudflare turns the orange cloud on for new CNAMEs. A proxied
      record answers with Cloudflare's own addresses instead of the Brudcast target, so the SPF
      delegation never resolves as required and verification fails. Set **Proxy status** to
      **DNS only** (the grey cloud) on all four Brudcast CNAMEs. TXT records are never proxied.
    </Warning>

    <Screenshot id="ss-channels-dns-by-provider-01-cloudflare-dns-only" alt="A Brudcast CNAME in Cloudflare's DNS Records table with Proxy status showing the grey cloud and the words DNS only" />
  </Tab>

  <Tab title="Route 53">
    **Where the zone is:** open the Route 53 console, go to **Hosted zones**, and select the hosted
    zone for your domain.

    **Add a CNAME:** select **Create record**. Set **Record name** to the host part, **Record type**
    to **CNAME**, and **Value** to the target from Brudcast. Use **Simple routing** and a **TTL** of
    `300`.

    **Add a TXT:** create a record with **Record type** **TXT**, and paste the DMARC policy into
    **Value** wrapped in double quotes:

    ```text theme={"system"}
    "v=DMARC1; p=none; rua=mailto:dmarc@prod.brudcast.org; ruf=mailto:dmarc@prod.brudcast.org; fo=1"
    ```

    <Warning>
      **TXT values need quoting.** Route 53 stores a TXT value exactly as you type it, so an
      unquoted policy is either refused or published in a form the DMARC check never matches. Quote
      TXT values only. Don't quote CNAME targets.
    </Warning>

    <Screenshot id="ss-channels-dns-by-provider-02-route53-quoted-txt" alt="The Route 53 Create record form with a DMARC policy wrapped in double quotes in the Value box and TTL set to 300" />
  </Tab>

  <Tab title="Namecheap">
    **Where the zone is:** open **Domain List**, select **Manage** on the domain, then the
    **Advanced DNS** tab.

    **Add a CNAME:** select **Add New Record** and choose **CNAME Record**. Put the host part in
    **Host** and the Brudcast target in **Value**. Set **TTL** to `300`, or leave **Automatic**.

    **Add a TXT:** select **Add New Record**, choose **TXT Record**, put `_dmarc.mail` in **Host**
    and the DMARC policy in **Value**.

    <Warning>
      **A CNAME can't share its host with another record.** If a row is refused when you save,
      something already sits at that host, often a parked-page or URL-redirect record Namecheap
      added for you. Delete that record first, then add the Brudcast CNAME.
    </Warning>

    <Screenshot id="ss-channels-dns-by-provider-03-namecheap-advanced-dns" alt="Namecheap's Advanced DNS tab with a Brudcast CNAME saved, its Host holding only the host part and its Value holding the full Brudcast target" />
  </Tab>

  <Tab title="GoDaddy">
    **Where the zone is:** open the domain's DNS page from your product list.

    **Add a CNAME:** select **Add**, set **Type** to **CNAME**, put the host part in **Name** and
    the Brudcast target in **Value**. Set **TTL** to 300 seconds where the option is offered.

    **Add a TXT:** select **Add**, set **Type** to **TXT**, put `_dmarc.mail` in **Name** and the
    DMARC policy in **Value**.

    <Warning>
      **Never type your domain in the Name field.** GoDaddy adds it for you. Typing the full name
      produces `brd.spf.mail.example.com.example.com`, which resolves to nothing and is the most
      common reason a GoDaddy-hosted domain won't verify. Enter the host part only.
    </Warning>

    <Screenshot id="ss-channels-dns-by-provider-04-godaddy-host-part" alt="GoDaddy's add-record form with only the host part typed in Name, and the saved row showing the correct full name underneath" />
  </Tab>

  <Tab title="Google Domains">
    **Where the zone is:** Google Domains registrations are managed at Squarespace now. Open the
    domain's settings there and go to its DNS settings, then the custom records section.

    **Add a CNAME:** add a custom record. Put the host part in **Host**, set **Type** to **CNAME**,
    and paste the Brudcast target into **Data**.

    **Add a TXT:** add a custom record with **Host** `_dmarc.mail`, **Type** **TXT**, and the DMARC
    policy in **Data**.

    <Warning>
      **The value field is called Data.** Both the CNAME target and the DMARC policy go there, not
      in **Host**. Keep **Host** to the host part only.
    </Warning>

    <Screenshot id="ss-channels-dns-by-provider-05-google-domains-data-field" alt="A custom DNS record with the host part in Host and the Brudcast CNAME target pasted into the Data field" />
  </Tab>

  <Tab title="Any other provider">
    **Where the zone is:** look for **DNS**, **Zone editor**, **Name servers** or **Advanced DNS** in
    your provider's control panel.

    **Add the records:** create four CNAME records and one TXT record, using the host part for the
    name and the Brudcast value for the target. Set the TTL to 300 seconds if you can choose. Paste
    TXT values exactly as shown.

    <Warning>
      **Edit the zone that's actually in use.** Records count only at the provider your name servers
      point to. If you moved your name servers, the old provider's zone is ignored, however tidy it
      looks. Turn off any proxy, CNAME flattening or web forwarding option on the Brudcast records:
      each one answers with an address of its own instead of the Brudcast target.
    </Warning>

    <Screenshot id="ss-channels-dns-by-provider-06-generic-zone-editor" alt="A generic DNS zone editor with the four Brudcast CNAMEs and the DMARC TXT record saved and no proxy option enabled" />
  </Tab>
</Tabs>

## Check what you published

<Snippet file="dns-propagation.mdx" />

Confirm the records from a terminal before you ask Brudcast to check them:

```bash theme={"system"}
dig +short CNAME brd.spf.mail.example.com
dig +short CNAME brd1._domainkey.mail.example.com
dig +short CNAME brd2._domainkey.mail.example.com
dig +short TXT   _dmarc.mail.example.com
dig +short CNAME track.mail.example.com
```

Each answer should match the value on the **DNS Records** tab. An empty answer means the record
isn't published or hasn't propagated yet. A doubled name in the answer means the provider added your
zone to a name you typed in full.

## Related

<Columns cols={2}>
  <Card title="Verify your domain" icon="circle-check" href="/channels/email/verify-your-domain">
    Run the check and read the result.
  </Card>

  <Card title="DNS records" icon="list" href="/channels/email/dns-records">
    What each of the five records does, and the full names.
  </Card>

  <Card title="Email troubleshooting" icon="life-buoy" href="/channels/email/troubleshooting#verifying-dns-records">
    Every verification failure and its fix.
  </Card>

  <Card title="Add a sending domain" icon="globe" href="/channels/email/add-a-sending-domain">
    Where the records come from.
  </Card>
</Columns>
