We've got you covered.
Step-by-step guides, follow-up campaigns, license help, and everything you need to run successful campaigns.
Email Campaign Sender v1.2
A fully automated cold email campaign tool that sends personalised outreach from your own Gmail account — not a shared server, not a bulk-mail API. Your domain, your reputation, your data. v1.2 introduces intelligent follow-up campaigns that thread replies inside the original conversation and auto-skip contacts who already responded.
What's New in v1.2
Intelligent Follow-Up Campaigns
The most significant feature yet. After running a primary campaign, launch a follow-up that sends as a reply inside the original email thread. The script detects which contacts have already replied and skips them automatically — only unanswered emails receive the follow-up.
All Features & Settings
Main Menu Options
| Option | What it does | Notes |
|---|---|---|
| 1 — Start New Campaign | Begin a fresh campaign with a CSV contact list and email template | Choose speed profile and daily limit |
| 2 — Follow-Up Campaign | Send threaded follow-ups to non-responders from a previous campaign | New in v1.2 — requires v1.2 primary |
| 3 — Resume Campaign | Continue any interrupted campaign from the last saved point | Zero duplicate sends guaranteed |
| 4 — Compose Email Template | Build or edit email templates in the visual Composer | Supports {{token}} personalisation |
| 5 — View Statistics | Session, daily, and all-time send counts plus failure log | Includes follow-up stats in v1.2 |
| 6 — Settings | Chrome profile path, default speed/limits, sender address | Persists across sessions |
Speed Profiles
| Profile | Delay | Auto-Pause | Best For |
|---|---|---|---|
| Slow | 30–60 s | Every 20 emails (3–5 min) | New accounts, cold outreach |
| Medium Recommended | 15–30 s | Every 25 emails (2–3 min) | Most campaigns — balanced |
| Fast | 8–15 s | Every 30 emails (60–120 s) | Warm leads, established accounts |
| Custom | You set min/max | Configurable | Advanced users |
Daily Limits
| Option | Emails/Day | Account Age | Notes |
|---|---|---|---|
| Conservative | 200 | New <2 weeks | Safest starting point |
| Standard Recommended | 500 | 2–4 weeks | Good volume-to-safety balance |
| Aggressive | 1,000 | 1+ month | Requires good sender history |
| Maximum | 2,000 | 3+ months | Gmail Workspace daily cap |
| Custom | Up to 2,000 | Your choice | Any number you enter |
System Requirements
| Requirement | Details | Notes |
|---|---|---|
| Python 3.8+ | 3.10 or newer recommended | Must be in system PATH |
| Google Chrome | Latest stable version | Official Chrome only — not Chromium |
| Internet connection | Required for first-run setup and license validation | 48h offline grace period after that |
| license.txt | Same folder as the script file | Emailed within minutes of activation |
| OS | Windows 10/11, macOS, Linux | Windows 10/11 most tested |
Installing Python
Download Python from python.org/downloads — choose the latest 3.x release for your OS.
- 1Download the installerGo to python.org/downloads and click the yellow "Download Python 3.x.x" button for your OS.
- 2Tick "Add Python to PATH" (Windows only)Bottom of the first installer screen — check this before clicking Install Now. Most commonly missed step on Windows.
- 3Click Install NowWait for completion. Close the installer when done.
- 4Verify in terminalOpen Command Prompt / Terminal and run the command below. You should see "Python 3.x.x".
macOS
python3 --version
Linux (Ubuntu/Debian)
python3 --version
Google Chrome
The script uses official Google Chrome — not Chromium or any other browser. Download it at google.com/chrome. The script auto-detects your Chrome version and downloads the correct ChromeDriver automatically.
First Run & License Activation
With Python and Chrome installed, run the script for the first time. It auto-installs all dependencies, then displays your Machine ID and pauses — waiting for you to activate.
How to Run the Script
| Method | How to do it |
|---|---|
| Double-click | Double-click the .py file in File Explorer — a terminal opens automatically. |
| Windows 11 | Right-click in the folder → "Open in Terminal" → type the command below. |
| Windows 10 | Hold Shift and right-click in folder → "Open PowerShell window here" → type the command below. |
| macOS / Linux | Open Terminal, cd into the script folder → type the command below. |
# On macOS/Linux if "python" doesn't work:
python3 ridigital_Email_Campaign_Sender_v_1_2_0.py
Getting Your License
- 1Script displays your Machine IDAfter installing packages, the script shows a 32-character Machine ID and pauses. Copy it exactly.
- 2Visit the Activation pageGo to rirazu.agency/activate_email_campaign_sender. Enter your name, payment email, and Machine ID.
- 3Receive license.txt by emailWe email license.txt within minutes. Save it in the same folder as the script — side by side, not in a subfolder.
- 4Run the script againThe script validates the license and launches fully. You're ready to send.
Gmail Login
After activation, the script opens a dedicated Chrome window for your campaigns — completely separate from your regular Chrome. Log in once, and the session is saved for all future runs.
Terminal Prompt — What You'll See
2. Go to: https://mail.google.com
3. Log in with your Gmail credentials
4. Wait until your INBOX is fully loaded
5. Come back here and press ENTER
- 1Click the Chrome window that openedA new dedicated Chrome window launches. Click it to bring it to the front.
- 2Navigate to mail.google.comType https://mail.google.com in the address bar and press Enter.
- 3Log in with your credentialsEnter your Gmail email and password. Complete 2FA if enabled. Session is saved — future runs skip this step entirely.
- 4Wait for inbox to fully loadMake sure you can see your email list — not just a loading spinner.
- 5Return to terminal and press ENTERSwitch back to the terminal and press Enter. The script continues with campaign setup.
Setting Your Default Sending Email
If you have multiple email addresses in Gmail — a personal @gmail.com, a cPanel business email, or a Workspace account — you must set the right one as default. This is the address your campaign emails will be sent from.
- 1Open Gmail SettingsIn Gmail, click the gear icon top-right → "See all settings".
- 2Go to "Accounts and Import" tabClick the "Accounts and Import" tab at the top of Settings.
- 3Find "Send mail as:" sectionScroll down to see all email addresses you've added — personal Gmail, cPanel domain emails, Workspace.
- 4Click "make default" next to your campaign emailClick "make default" next to the address you want to send campaigns from — reference the UI below.
CSV Contact List Format
Your contact list must be a .csv file. The email column is required. All other columns are optional but strongly recommended for personalisation.
[email protected],Jane,Acme Corp,SaaS,Great case study candidate
[email protected],Bob,Tech Ltd,E-commerce,Met at DevConf 2024
[email protected],Carol,Global Inc,Healthcare,Warm referral lead
Encoding: Save as UTF-8 CSV. Excel: File → Save As → CSV UTF-8. Google Sheets: File → Download → CSV.
The script tracks sent addresses and skips them on resume — stop anytime and restart without double-sending.
Using the Email Composer
Inside your script folder is Composer.html. Double-click it — it opens as a visual email editor in your browser. No internet, no login. Templates are saved as JSON files and loaded by the script at campaign time.
- 1Open Composer.htmlFind Composer.html in your script folder and double-click. Opens in your browser.
- 2Upload your CSVClick "Upload CSV" — the Composer reads your column headers so you can insert tokens from them.
- 3Write subject with tokensExample: Quick question about {{company}}, {{first_name}}
- 4Write email body with tokensInsert {{first_name}}, {{industry}}, {{custom_note}} anywhere. Replaced with real data for each recipient.
- 5Preview and savePreview with sample data to verify tokens. Click "Save Template" — JSON file saved in templates folder, ready to select when starting a campaign.
Hi {{first_name}},
I came across {{company}} and noticed you're in the {{industry}} space.
{{custom_note}}
Would love 15 minutes to explore if there's a fit.
Best,
Your Name
Personalisation & Inbox Delivery
Do This
- →Personalise every email with real dataUse {{first_name}}, {{company}}, and a unique {{icebreaker}} sentence per contact. Mass-identical emails trigger spam filters.
- →Write like a human, not a marketerShort sentences. Plain language. Conversational tone. No exclamation marks, no ALL CAPS.
- →Keep your list clean and targetedOnly send to people who might genuinely want your email. Remove bounces immediately.
- →Warm up new accounts graduallyStart at 50/day week 1, 100/day week 2, increase by 100–200/week until you hit your target volume.
Avoid These Spam Triggers
Subject Line Tips
Best-performing subject lines: short (3–7 words), personal, conversational. Examples: Quick question, {{first_name}} / Thoughts on {{company}}? / Re: your work at {{company}}
Speed Profiles & Daily Limits
Choose settings that match your account's sending history. New accounts must always start conservative to protect their reputation.
| Profile | Delay | Auto-Pause | Best For |
|---|---|---|---|
| Fast | 5–15 s | Every 30 emails (60–120 s) | Warm leads, established accounts |
| Medium Recommended | 15–30 s | Every 25 emails (2–3 min) | Most campaigns — balanced |
| Slow | 30–60 s | Every 20 emails (3–5 min) | New accounts, cold outreach |
| Daily Limit | Emails/Day | Account Age |
|---|---|---|
| Conservative | 200 | New <2 weeks |
| Standard Recommended | 500 | 2–4 weeks |
| Aggressive | 1,000 | 1+ month |
| Maximum | 2,000 | 3+ months (Workspace) |
Keeping or Removing Gmail Signature
| Option | What Happens | Best For |
|---|---|---|
| Remove Signature (default) | Clears everything with Ctrl+A, types email body from scratch. No signature appears. | Cold outreach — clean plain-text feel |
| Keep Signature | Preserves your default Gmail signature. Types body above it with one blank line. | Warm campaigns where branding matters |
Security & Gmail Account Health
- ✓Runs 100% on your computerNo data leaves your machine except to Google's servers (email sending) and our license server (validation). Your contacts and email content never reach us.
- ✓No password storageThe script never reads or stores your Gmail password. It uses Chrome's own session — the same as a normal browser login.
- ✓Chrome profile stays localSession saved only in ridigital_campaign_sender/chrome_profile/. Delete anytime to clear.
Account Health Metrics
| Metric | Safe Zone | Danger Zone |
|---|---|---|
| Bounce rate | Below 2% | Above 5% — pause immediately |
| Spam complaint rate | Below 0.1% | Above 0.3% — serious risk |
| Daily volume | Start at 200, grow weekly | Jumping to 2,000 on day 1 |
| Sending hours | Business hours (9am–6pm) | Midnight batch sends |
Follow-Up Campaigns
After a primary campaign, send a follow-up that appears as a reply in the original email thread. The script checks each thread for recipient replies and skips anyone who already responded.
Setting Up a Follow-Up Campaign
- 1Wait 3–5 business days after primary campaignGive recipients time to respond before following up.
- 2Select option 2 — Follow-Up CampaignChoose the primary campaign to follow up on from the list shown.
- 3Select or compose your follow-up templateKeep it short — 2–3 sentences. The recipient can see the original email above it in the thread.
- 4Set speed and limits, then startSame settings as a primary campaign. Resumable and progress-saved.
Just following up on my email from last week —
did you get a chance to take a look?
Happy to answer any questions.
Best, Your Name
When to Send — Country & Time
The best-written campaign can underperform simply because it arrived at the wrong time. Sending to a business contact in Tokyo at 2am their time is very different from sending during their morning peak hours. Time zones, local working hours, and cultural habits all affect whether your email is the first thing they see in the morning or buried under a full inbox.
General Guidelines by Region
| Region | Best Days | Best Time (Local) | Avoid |
|---|---|---|---|
| North America | Tue, Wed, Thu | 9:00–11:00am, 1:00–3:00pm | Mon morning, Fri afternoon |
| UK & Europe | Tue, Wed, Thu | 8:00–10:00am, 2:00–4:00pm | Friday, public holidays |
| South Asia | Mon–Thu | 10:00am–12:00pm, 3:00–5:00pm | Friday afternoons (some regions) |
| East Asia | Tue, Wed, Thu | 9:00–11:00am | Mon morning, Fri, national holidays |
| Middle East | Sun–Thu | 9:00–11:00am | Fri–Sat (weekend in many countries) |
| Australia | Tue, Wed, Thu | 9:00–11:00am AEST | Monday morning, Friday |
For precise timing recommendations that factor in the recipient's country, local time, and industry type, use the tool below. It factors in public holidays, weekday patterns, and sector-specific engagement windows.
Video Walkthrough
Complete end-to-end walkthrough — installation, Gmail login, CSV, email template, and your first campaign. Includes the new v1.2 follow-up campaign mode.
See a Full Campaign Run
Click through the tabs to see exactly what the script shows at each stage.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
R I D I G I T A L · Email Campaign Sender · v1.2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
First-run setup: Installing dependencies...
→ selenium ............... ✓ installed
→ undetected-chromedriver ✓ installed
→ requests .............. ✓ installed
All dependencies ready. Restarting script...
LICENSE ACTIVATION REQUIRED
─────────────────────────────────────────────────
Status No license.txt found in script folder
Machine ID cfaa827a71e6d5854aa01465fb0b72c2
(copy this exactly — 32 characters)
1. Visit activation page
2. Enter name, payment email + Machine ID
3. license.txt arrives by email in minutes
4. Place in same folder as this script
Press ENTER to exit and retry once licensed.
═══════════════════════════════════════
MAIN MENU
═══════════════════════════════════════
1 · Start New Campaign
2 · Follow-Up Campaign ← NEW
3 · Resume Campaign
4 · Compose Email Template
5 · View Statistics
6 · Settings
Select: 1
Speed: Medium (15–30s) ← Recommended
Limit: 500/day
✓ Starting campaign...
Speed: Medium · Limit: 500
──────────────────────────────────────
[001/247] ✓ Sent → [email protected]
Subj: Quick question about Acme Corp, Jane
Delay: 22s
[002/247] ✓ Sent → [email protected]
Subj: Quick question about Tech Ltd, Bob
Delay: 18s
─── Auto-pause (25 emails) — 142s ───
[003/247] ⏳ Sending → [email protected]...
Primary: Q2_outreach · 247 contacts
──────────────────────────────────────
[001] [email protected]
✓ Replied — Skipped (replied 2 days ago)
[002] [email protected]
✓ Replied — Skipped (replied yesterday)
[003] [email protected]
→ No reply detected
✓ Follow-up sent (thread reply)
Delay: 20s
Replied/skipped: 47 · Follow-ups sent: 12
SESSION COMPLETE
═══════════════════════════════════════
✓ Sent this session: 100
✗ Failed: 0
Remaining today: 400
Daily limit: 500
All-time total: 1,347 · Days active: 8
Progress saved. Run again to continue.
License & Activation Details
Troubleshooting
"python is not recognised as a command"
| Issue | Likely Cause | Fix |
|---|---|---|
| ChromeDriver version mismatch | Chrome updated since last run | Update Chrome at chrome://settings/help and re-run. Script auto-downloads matching driver. |
| License not found / invalid | license.txt in wrong folder or corrupted | Confirm license.txt is side-by-side with the script — not in a subfolder. No extra spaces or line breaks in the file. |
| Sending from wrong account | Wrong Gmail in Chrome profile | Delete ridigital_campaign_sender/chrome_profile/ and re-run. Sign in with the correct account and set it as default in Gmail settings. |
| Emails landing in spam | High volume on new account, or poor list quality | Reduce daily limit. Use Slow speed. Improve personalisation. Check SPF/DKIM on custom domains. |
| Campaign stops mid-run | Internet disconnection or computer sleep | Use "Resume Campaign" (option 3). Check power settings to prevent sleep during campaigns. |
| Follow-up not detecting replies | Primary campaign run with v1.1.0 | Re-run primary campaign with v1.2 to generate thread IDs. v1.1.0 primaries don't support follow-up. |
| CSV tokens not replaced | Token name mismatch or wrong syntax | Token must exactly match CSV header — case-sensitive. Use {{column_name}} with double braces, no spaces inside. |
| ModuleNotFoundError | Auto-install failed (network issue) | Run: pip install selenium pyperclip webdriver-manager undetected-chromedriver requests then retry. |
| Offline error after 48h | Exceeded offline grace period | Connect to internet briefly. Script validates and resets the 48-hour timer. |
Frequently Asked Questions
Changelog
| Version | Release | Changes |
|---|---|---|
| v1.2.13Latest | 2026 | Intelligent Follow-Up Campaigns — threaded replies inside original conversations, auto-detects and skips replied contacts, reply detection engine, thread ID logging. Improved ChromeDriver management. Enhanced error handling. Revised statistics dashboard. Free upgrade for all v1.1.0 customers — no reactivation needed. |
| v1.1.0 | 2026 | Campaign resume with zero duplicate sends. Statistics dashboard (session, daily, all-time). Custom speed profiles. Visual HTML email Composer. Multiple CSV encoding support. 48-hour offline grace period. Signature keep/remove option. |
| v1.0.0 | 2026 | Initial release. Core Gmail-based campaign sending. CSV personalisation with {{token}} syntax. Machine-locked license system. Auto-dependency installer. Human-like sending delays and daily volume limits. |
Contact Support
Can't find what you need? Fill in the form — we reply within a few hours. For machine transfers, include your original purchase email and new Machine ID.
Ready to start sending?
One payment, lifetime use. $49 via Stripe. Download immediately after purchase.
Buy Now via Stripe — $49 →