This guide walks through two pieces working together: Cloudflare Email Routing, which catches mail sent to your custom domain and hands it to Gmail, and Gmail's "Send mail as" feature, which lets you reply and compose using that same custom address. No Google Workspace subscription needed.
Backstory
A custom email address makes a side project or small business look legitimate. hello@yourbrand.com reads very differently from a free Gmail address. The usual path to that is a paid Google Workspace plan, billed per mailbox, per month.
There's a free route that gets you the same result for personal projects and small teams: let Cloudflare catch incoming mail on your domain and forward it straight into a Gmail inbox you already have, then use Gmail's own SMTP servers to send replies that appear to come from your custom address.
The mental model:
Cloudflare Email Routing -> catches mail sent to your domain, forwards it INTO GmailGmail "Send mail as" -> lets Gmail send replies OUT as your domain address
Inbound and outbound are handled by two completely different systems โ that split is the key thing to understand before touching any settings.
How It Works
Cloudflare Email Routing (free, no plan upgrade required) forwards anything sent to your custom domain into an existing Gmail inbox.
Gmail's "Send mail as" lets you compose and reply using your custom domain address, sent out through Gmail's own SMTP servers.
Nothing here requires a paid Google Workspace subscription.
Requirements
A Gmail account free, and quick to set up if you don't already have one.
A domain you own or fully control, registered anywhere (Cloudflare, Namecheap, GoDaddy, name.com, Route 53, etc.).
๐ก Tip: This is far simpler on a fresh domain with no existing DNS records. If you're adding this to a domain that already has a live site or an existing mail service, export your current DNS records first โ pointing your domain at Cloudflare's nameservers hands Cloudflare control of all of it.
Step 1: Add Your Domain to Cloudflare
Create a free Cloudflare account and sign in.
Choose Add a Domain and type in your domain.
Pick the Free plan โ Email Routing is included, no upgrade necessary.
Cloudflare will scan for and import any DNS records it can find. If records already exist (say, from a placeholder page), check them carefully if you're migrating a live site later, it's worth setting the proxy status to "DNS only" until everything's confirmed working.
Cloudflare then hands you two new nameservers.
Step 2: Point Your Domain at Those Nameservers
Log in wherever the domain is registered (Namecheap, GoDaddy, name.com, etc.).
Find the nameserver settings for the domain.
Swap the existing nameservers for the two Cloudflare ones from Step 1.
Save the change.
โณ Propagation time: typically under 15 minutes, occasionally a few hours depending on your registrar. Cloudflare's domain status page will flip to active once it's picked up the change.
Step 3: Turn on Email Routing in Cloudflare
Once the domain shows as active, head to Compute โ Email Service โ Email Routing and enable it. The first time you do, Cloudflare will show you the DNS records it needs (an MX record plus a TXT record) โ there's a one-click option to add them automatically.
โ ๏ธ If the domain already has a separate email service configured, these new records can conflict with it. Adjust as needed, or sidestep the issue entirely by doing this on a fresh domain.
3a. Add a Destination Address
You need a verified inbox before you can route anything to it.
Go to Compute โ Email Service โ Email Routing โ Destination Addresses.
Add your personal Gmail address.
Cloudflare emails a verification link โ open it and confirm.
3b. Create a Routing Rule
Open the Routing Rules tab.
Choose Create routing rule.
Set it up:
Email pattern: the part before the @ (e.g. hello for hello@yourdomain.com), with your domain selected.
Action: send to an email.
Destination: the verified address from Step 3a.
Save the rule.
3c. Test It
Send a message from a different account to your new address and confirm it lands in the destination inbox (check spam if it doesn't show up right away).
Repeat 3b for as many addresses as you like โ support@, contact@, your own name โ all routing to the same inbox or different ones. It's free and there's no cap.
Step 4: Confirm Incoming Mail Works
Send a test message from another account to your new address.
Check the destination Gmail inbox, spam folder included.
If nothing shows up immediately, give DNS a little more time to propagate and try again.
Step 5: Send Mail As Your Custom Domain
By default, replying to a forwarded message still sends from your regular Gmail address. To actually send as hello@yourdomain.com, Gmail's "Send mail as" needs to be configured with an app password.
5a. Generate a Gmail App Password
Open your Google Account settings.
Turn on 2-Step Verification if it isn't already on โ an authenticator app works fine for this.
Search account settings for App Passwords.
Create one with a name you'll recognize later (e.g. "custom domain SMTP").
Copy the password it generates โ you'll only need it once, and you can revoke and regenerate it any time.
5b. Add the Custom Address as a "Send Mail As" Alias
In Gmail: Settings โ See all settings โ Accounts and Import.
Under "Send mail as," choose Add another email address.
Enter the custom domain address.
Tick Treat as an alias.
Leave the reply-to field blank (or matching โ it doesn't add anything).
Continue and fill in the SMTP details:
Server:smtp.gmail.com
Port: leave as the default
Security: TLS (default)
Username: your real Gmail address
Password: the app password from 5a
Confirm and add the account.
Gmail sends a verification email to the custom address โ it'll route through Cloudflare back into your Gmail inbox. Open it and click the confirmation link.
5c. Reply and Compose as the Custom Address
Start a new email โ a "From" dropdown now lets you pick the custom address.
Send a test to check it works end to end.
To make replies default correctly too, go to Settings โ Accounts and Import and, under "When replying to a message," choose to reply from the address the message was originally sent to.
Step 6: Repeat for Any Additional Addresses
Run Steps 3 and 5 again for each extra address you want.
Everything can funnel into one Gmail inbox, or be split across several if different people need their own.
If more than one person manages an address, a dedicated Gmail account just for that address is worth considering.
Troubleshooting
Issue
Likely Cause
Test email never arrives
DNS still propagating โ wait and retry, check spam
"Send mail as" verification email missing
Double-check the Cloudflare routing destination is correct
Can't send as the custom address
Re-verify the app password and that 2-Step Verification is on
Replies go out from Gmail, not the custom domain
Set the "when replying" option to match the receiving address
New records clash with an existing mail service
Adjust or remove the conflicting MX/TXT records, or start fresh on a new domain
Notes & Limitations
This runs on a personal Gmail account rather than Google Workspace โ it's a workaround, not an officially supported setup at scale.
It suits solo developers, side projects, and early-stage products that want a credible custom address without a Workspace bill.
As a team grows, moving to a paid service like Google Workspace is the more robust long-term option.
Cloudflare Email Routing only handles the inbound side โ outbound sending is entirely Gmail's SMTP, via the "Send mail as" setup above.
Final Checklist
Domain's nameservers point to Cloudflare and show as active
Email Routing is enabled with the MX + TXT records added
At least one destination address is verified
A routing rule exists for each custom address you want
A Gmail app password has been generated (with 2-Step Verification on)
The custom address is added under "Send mail as" and verified
Replies default to the address the message was sent to
Conclusion
The setup splits cleanly into two halves:
Inbound -> Cloudflare Email Routing catches mail to your domain, forwards it into GmailOutbound -> Gmail's "Send mail as" + an app password sends replies as that domain
Once both halves are wired up, a custom domain address behaves like any other Gmail account, you just never pay for Workspace to get there.