Send personalized Gmail outreach from a spreadsheet. No backend. No mail server. Just Gmail + Tampermonkey.
Cold Outreacher is a Tampermonkey userscript that turns Gmail into a lightweight spreadsheet-powered outreach tool.
Load an Excel or CSV file, set your delay, and let Cold Outreacher handle the repetitive parts of composing and sending your emails.
- Install Tampermonkey in your browser.
- Open
cold-outreacher.user.js. - Copy the entire script into a new Tampermonkey userscript.
- Save it.
- Open Gmail.
- Look for the Cold Outreacher panel in the bottom-right corner.
That's it.
Give it a spreadsheet like this:
| Email ID | Subject | Body |
|---|---|---|
| john@example.com | Quick introduction | Hey John, I wanted to reach out... |
| jane@example.com | Collaboration | Hey Jane, I came across your work... |
Cold Outreacher takes care of the rest:
- Opens Gmail Compose
- Enters the recipient
- Enters the subject
- Inserts the message
- Preserves your Gmail signature
- Sends the email
- Waits for your configured delay
- Moves to the next row
Open Gmail Click Compose Copy email address Paste email address Enter subject Copy message Paste message Click Send Wait Repeat 100 times
Upload your spreadsheet.
Set the delay.
Click START.
Cold Outreacher handles the repetitive work.
Your spreadsheet needs three basic columns:
Email ID | Subject | Body
For example:
john@example.com | Partnership Opportunity | Hi John,
I wanted to reach out regarding a potential collaboration.
Best,
Your Name
Email IDEmailEmailIDE-mailE-mail ID
Message
BodyMessageEmail Body
Rows without an email address are automatically skipped.
- Excel
.xlsxsupport - Excel
.xlssupport - CSV support
- Personalized subject and body for every recipient
- Automatic Gmail Compose detection
- Automatic recipient entry
- Automatic sending
- Configurable delay between emails
- Start / Stop / Reset controls
- Live progress tracking
- Gmail signature preservation
- Error detection
- Gmail SPA protection
- No external backend
Cold Outreacher keeps things simple:
┌──────────────────────────────┐
│ Cold Outreacher − │
├──────────────────────────────┤
│ │
│ Select Excel / CSV │
│ │
│ 25 emails loaded. │
│ │
│ Delay between emails: 5 sec │
│ │
│ [ START ] [ STOP ] [ RESET ] │
│ │
│ Excel columns: │
│ Email ID | Subject | Body │
└──────────────────────────────┘
The panel starts minimized so it stays out of the way while you're using Gmail.
Cold Outreacher runs directly inside Gmail.
There is:
- No server to deploy
- No database
- No API key
- No SMTP configuration
- No separate desktop application
- No backend to keep running
Your browser does the work.
Excel / CSV
│
▼
SheetJS
│
▼
Cold Outreacher
│
┌─────────┼─────────┐
▼ ▼ ▼
Recipient Subject Body
│ │ │
└─────────┼─────────┘
▼
Gmail Compose
│
▼
Send
│
▼
Next Email
The spreadsheet is read locally in your browser using SheetJS.
You can configure the delay between emails from the Cold Outreacher panel.
Default:
5 seconds
Minimum:
2 seconds
The delay exists so the automation doesn't immediately hammer Gmail with consecutive UI actions.
Important: The delay does not bypass Gmail's sending limits or anti-spam systems.
Click STOP at any point to stop the sending loop.
Your current position is retained.
Click START again to continue from where it stopped.
Click RESET if you want to start the spreadsheet from the beginning.
Already have a Gmail signature configured?
Cold Outreacher preserves it.
Your spreadsheet controls the message content, while the existing Gmail signature remains at the bottom of the email.
For example:
Hi John,
I wanted to reach out regarding a potential collaboration.
Best,
Your Name
The existing Gmail signature is retained automatically.
Cold Outreacher stops if Gmail doesn't behave as expected.
For example:
Recipient field not found.
Subject field not found.
Email body field not found.
Gmail Compose button not found.
Gmail Send button not found.
Instead of silently continuing and potentially sending incorrect emails, the script stops and reports the problem.
Gmail is a single-page application.
That means navigating around Gmail doesn't necessarily reload the page.
Cold Outreacher periodically checks whether its interface still exists and recreates it if Gmail removes it.
So you don't have to keep reopening the userscript panel while navigating Gmail.
Cold Outreacher does not require a Cold Outreacher server.
The spreadsheet is processed inside your browser.
There is no Cold Outreacher database collecting:
- Email addresses
- Subjects
- Message contents
- Spreadsheet files
The only external library loaded by the script is SheetJS for reading spreadsheet files.
Cold Outreacher automates the Gmail interface.
It does not:
- Increase Gmail's sending limits
- Bypass Gmail restrictions
- Bypass spam detection
- Provide an official Gmail API
- Guarantee inbox placement
- Guarantee that every email will be delivered
Gmail's own limits and policies still apply.
Use it responsibly and only contact people where you have an appropriate reason and permission to do so.
Because Cold Outreacher interacts with Gmail's web interface, changes to Gmail can break parts of the automation.
For example, Google may change:
- Compose selectors
- Recipient fields
- Send buttons
- Gmail's DOM structure
- Editor behavior
If Gmail changes its interface, the userscript may need to be updated.
cold-outreacher/
│
├── cold-outreacher.user.js
├── README.md
└── LICENSE
SheetJS is loaded through its CDN:
https://cdn.sheetjs.com/xlsx-0.20.3/package/dist/xlsx.full.min.js
Found a bug?
Have an improvement?
Open an issue or submit a pull request.
When reporting a Gmail compatibility issue, include:
- Browser
- Gmail behavior that failed
- Console error, if available
- Steps to reproduce
Please don't include private email addresses or message contents in issues.
MIT License.
See LICENSE for the full license text.
Cold Outreacher is an independent open-source project.
It is not affiliated with, endorsed by, or sponsored by Google or Gmail.
Gmail and Google are trademarks of Google LLC.
Cold Outreacher — Gmail outreach, without the repetitive clicking.