# Send from your own domain

> Verify a domain you control, and your app can email anyone, from an address like orders@send.example.com, with your name on it.
> Source: https://playcode.io/docs/add-to-your-app/sending-domain - last reviewed 2026-10-10.
> Ask Playcode's agent: "Send this app's email from send.example.com." It adds the domain after you confirm, installs the records when Playcode runs the domain's DNS and checks until it verifies; records at another DNS provider are yours to add.

Until you verify a domain, your app emails only your team and the inboxes you verified, from an address on `playcode.email`. Verify a domain you control, and the app can email anyone, from any address at that domain.

## Do it yourself

1. In the project, open **Settings**, choose **Email** under the project, and find **Send as your brand**. The section shows while **Delivery** reads **Sending**.
2. Type the domain and choose **Add domain**. Use a subdomain, like `send.example.com`: it keeps your main domain's reputation apart from your app's email.
3. Add the records Playcode shows at your domain's DNS provider. Each record shows its **Name**, **Value** and, for the MX record, **Priority**, each with a copy button; **Copy all records** copies the whole set.
   - If Playcode runs the domain's DNS in the same workspace, there is nothing to add: "Records installed automatically - this domain runs on Playcode DNS". This is the case for a domain you bought in Playcode.
   - If the DNS is at Cloudflare, Playcode says "Your DNS runs on Cloudflare". Choose **Connect**, paste a Cloudflare API token that can edit the domain's DNS, and choose **Add records**. "The token is used once and never stored."
   - If the DNS is at GoDaddy or Namecheap, the names are already shortened the way their **Name** field takes them.
4. Wait for **Verified**. Playcode checks the records by itself; **Check now** checks at once.
5. **Send to anyone** turns on when the domain verifies, and **Delivery** reads **Sending · to anyone**.
6. Set the app's from address to an address at the domain, like `Shop <orders@send.example.com>`. Ask the agent to change it. Email with any other from address still goes out from the app's `playcode.email` address.
7. Email that was held before is not sent by itself. Beside each held address, choose the button that delivers it, like **Deliver 3 held**.

The records Playcode asks for:

| Type | Name | What it does |
|---|---|---|
| CNAME, three of them | Each starts with its own code, like `abc123._domainkey.send.example.com` | Signs your email, so receiving servers can check it came from you (DKIM) |
| MX, priority 10 | `bounce.send.example.com` | Receives bounce reports for your email |
| TXT | `bounce.send.example.com` | Allows the bounce address to send (SPF) |
| TXT | `_dmarc.send.example.com` | Tells receiving servers what to do with email that fails the checks (DMARC) |

If the domain already has a DMARC record, Playcode leaves its own out: "Your domain already has a DMARC policy - keep it. No DMARC record to add."

## If it doesn't work

### The domain stays Pending

"Add the records below at your DNS provider - we check automatically". Compare each record at your provider with the one Playcode shows, character by character, then choose **Check now**. If you typed the full name into a provider that adds the domain by itself, the name now ends in your domain twice: shorten it.

### It says Failed

"Verification did not complete - check the records, then remove and add the domain again". A domain must verify within 72 hours of being added. Remove it, add it again, and add the records it shows then.

### It says Rechecking

"DNS is not answering yet - checks keep running". The domain verified before, but its records are gone or not answering. Playcode emails the project owner the records to put back. When they answer again, the domain verifies by itself.

### "Could not add the records: ..."

Playcode could not write the records at Cloudflare. Check that the token can edit DNS for this domain, or add the records by hand.

### "Automatic install did not finish: ... Add the records yourself - we keep checking."

Playcode could not write the records into its own DNS. Add them by hand in the domain's DNS records: see [DNS records](/docs/publish/dns-records).

### Email still comes from playcode.email

The app's from address is not at the verified domain. Change it to an address at the domain.

### There is no Send as your brand section

**Delivery** reads **Capture**: the workspace has no Pro or Max plan.

## Limits

- Email reaches anyone only while three things are true: the workspace has a Pro or Max plan, the domain is **Verified**, and **Send to anyone** is on. The switch is the off lever: turned off, it stays off for every app of the project, including apps created later.
- Removing your only verified domain turns **Send to anyone** off. Delivery returns to your team and your verified inboxes.
- A person who unsubscribes gets no more email from this project. Removing their address does not undo that.
- An address that bounced or reported spam stays blocked, with or without your domain. See [What your app may send](/docs/add-to-your-app/what-your-app-may-send).
- Playcode only sends from the domain. It hosts no inbox for it, and replies go to the email's reply-to address.
- Your domain carries the reputation of the email your app sends. The sending rules still apply.
