Open-source field sales toolkit for teams on the ground.
Plan routes on a map. Send email campaigns. Manage your pipeline. All powered by Google Sheets.
Most field sales teams are stuck between two extremes: expensive CRMs they barely use, or scattered spreadsheets with no tooling. This project is the middle ground — a lightweight, self-hosted sales ops platform that gives your team real tools without the overhead.
| No subscriptions | Fork it, deploy it, own it |
| No vendor lock-in | Your data lives in Google Sheets, not someone else's database |
| No training needed | Sales reps get a map and an email tool; managers get a dashboard |
# 1. Clone and deploy (takes ~2 minutes)
git clone https://github.com/0xjitsu/gcs.git
cd gcs
npx vercel deploy --prod
# 2. Set up your data backend
cp .env.example .env
# Fill in your Google Sheets IDs → see prompts/00-setup-service-account.md
# 3. Test the connection
pip install -r requirements.txt
python scripts/test-connection.pyOr just open route-planner.html locally — it works standalone with sample data, no setup needed.
+-------------------+ +-------------------+ +-------------------+
| | | | | |
| ROUTE PLANNER | | OUTBOUND | | GOOGLE SHEETS |
| | | | | (Your Database) |
| Plan field | | Send email | | |
| visits on a map | | campaigns to | | Every lead, |
| Optimize routes | | new prospects | | every contact, |
| Export to | | Preview & | | every follow-up |
| Google Maps | | customize each | | — all in one |
| | | email | | place |
+-------------------+ +-------------------+ +-------------------+
| | |
+-----------+-------------+-------------------------+
|
PASSWORD PROTECTED
Plan your day on a map. See all leads as color-coded pins, build a route, and get turn-by-turn directions.
| Feature | What It Does |
|---|---|
| Interactive Map | All your leads shown on a map — click any pin for details |
| Route Optimization | Add stops, drag to reorder — the system calculates the best driving order |
| Google Maps Export | One click sends your route to Google Maps for navigation |
| Smart Filters | Narrow by state, zone, priority (A/B/C), or visit status |
| Visit Tracking | Mark leads as visited with dates and notes |
| Save & Load | Export your route as JSON to pick up where you left off |
| WhatsApp Sharing | Copy a text summary of your route to share with the team |
Send personalized email campaigns at scale. Pick leads, choose a template, customize the message, preview, and send.
| Feature | What It Does |
|---|---|
| Lead Selection | Browse your lead list, select who to email with checkboxes |
| 5 Email Sequences | Pre-written sequences (intro, follow-up, value props) — auto-fills lead details |
| Per-Email Customization | Each email auto-personalizes; you can edit before sending |
| Preview Mode | See exactly what each email will look like before it goes out |
| Batch Send | Send to multiple leads at once with one click |
| Warm-Up Protocol | Built-in sending limits to protect your sender reputation |
All lead data lives in Google Sheets — your single source of truth. No database to manage.
| Sheet | What's In It |
|---|---|
| Master Leads | Every lead with full details — 31 columns of contact info, visit history, priority, notes |
| Email Sequences | Email templates for outbound campaigns |
| Qualification Leads | Lead scoring and qualification details |
| Enrichment Log | Records of email/phone lookups (auto-filled by the enrichment tool) |
| Send Log | Every email sent, when, and to whom |
Key fields you'll update daily:
| Field | What to Enter | Example |
|---|---|---|
| Business Name | Company name | Sample Cabinet Shop |
| Priority | A = hot, B = warm, C = cold | A |
| Contact Person | Who you spoke with | Jane |
| Phone | Best number | 555-123-4567 |
| Stage | Pipeline status | New Lead / Qualified / Proposal Sent / Won |
| Next Follow-Up | When to reach out next | 2026-03-15 |
| Visit Notes | What happened | "Interested in hardware samples" |
For the full 31-column reference, see docs/column-map.md.
You (Field Sales)
|
v
+-- Route Planner --+ +-- Outbound --+
| Plan visits | | Send emails |
| Track visits | | Track sends |
+------|------------+ +------|-------+
| |
v v
+------+------------------------+------+
| GOOGLE SHEETS |
| (Master Leads + Email Sequences) |
| |
| - Lead info - Send logs |
| - Visit notes - Enrichment |
| - Pipeline stages - Templates |
+--------------------------------------+
|
v
Dashboard (auto-generated)
Pipeline reports, conversion rates
Google Sheets is your database. Everything the team enters — leads, contacts, visit notes, email logs — lives there. The Route Planner and Outbound tools read from and write to these sheets. The dashboard auto-generates from the same data.
The web app requires a team password to access.
- Shared password across the team
- Session-based (closing the tab logs you out)
- Works on any device — phone, tablet, laptop
Need the password? Ask your team lead.
gcs/
├── public/ # The website (deployed to Vercel)
│ ├── index.html # Route Planner page
│ ├── outbound.html # Outbound Email Campaign page
│ └── auth.js # Password protection
│
├── gcs-outbound/ # Backend email tools (Python CLI)
│ ├── gcs_outbound.py # CLI with 10 commands (enrich, send, verify, etc.)
│ ├── config.py # Settings: sheet IDs, sender identity, rate limits
│ ├── sheet_sync.py # Reads/writes Google Sheets safely (never overwrites)
│ ├── email_scraper.py # Finds missing emails from business websites
│ ├── email_verifier.py # 3-tier email verification before sending
│ ├── templates.py # 5 email sequence templates
│ ├── gmail_sender.py # Sends emails via Gmail API or SMTP
│ └── README.md # Outbound system documentation
│
├── docs/ # Comprehensive documentation
│ ├── how-to-guide.md # Start here if you're new
│ ├── USER_GUIDE.md # Step-by-step guide for sales reps
│ ├── outbound-guide.md # Guide to the email campaign system
│ ├── data-persistence.md # How data is stored (Google Sheets setup)
│ ├── architecture.md # Technical system overview
│ ├── column-map.md # Full 31-column spreadsheet reference
│ ├── changelog.md # Version history
│ ├── branch-naming.md # Branch naming conventions
│ ├── git-workflow.md # Git workflow (test → staging → main)
│ └── contributing.md # How to contribute
│
├── scripts/ # Automation scripts
│ ├── github_ops.py # GitHub API helper (8 commands)
│ ├── add-leads.py # Bulk-add leads to spreadsheet
│ ├── weekly-summary.py # Generate weekly pipeline report
│ ├── test-connection.py # Test Google Sheets connection
│ └── dashboard.gs # Pipeline dashboard (Apps Script)
│
├── prompts/ # AI workflow prompts
│ ├── 00-setup-service-account.md
│ ├── 01-add-omi-leads.md
│ ├── 02-pipeline-dashboard.md
│ └── 03-omi-processor.md
│
├── route-planner.html # Standalone route planner (no auth, for dev)
├── vercel.json # Vercel deployment config
├── requirements.txt # Python dependencies
└── .env.example # Environment variable template
Click to expand (for developers and IT only)
- Python 3.8+
- Google Cloud service account with Sheets API access
- Node.js (optional, for Vercel CLI deployment)
pip install -r requirements.txt
# Copy env template and fill in your IDs
cp .env.example .env
# Set up Google Sheets API access
# Follow: prompts/00-setup-service-account.md
# Test the connection
python scripts/test-connection.py# See all commands
python gcs-outbound/gcs_outbound.py --help
# Check lead coverage (how many have emails, phones, etc.)
python gcs-outbound/gcs_outbound.py enrich-report
# Find missing emails from websites (preview first)
python gcs-outbound/gcs_outbound.py enrich --source master --dry-run
# Verify emails are deliverable
python gcs-outbound/gcs_outbound.py verify-emails --source master --dry-run
# Send a test email
python gcs-outbound/gcs_outbound.py test-send --to your@email.com# Option A: One-click deploy (recommended)
# Click the "Deploy with Vercel" button at the top of this README
# Option B: Connect GitHub repo (auto-deploys on push to main)
# Go to vercel.com/new → Import your repo
# Option C: CLI
npx vercel deploy --prodConfigure in .env (see .env.example for the full template):
| Variable | Purpose |
|---|---|
MASTER_SHEET_ID |
Google Sheets ID for Master Leads |
QUAL_SHEET_ID |
Google Sheets ID for Qualification Leads |
GOOGLE_CREDENTIALS_PATH |
Path to service account JSON |
GITHUB_TOKEN |
GitHub API access (for scripts) |
SMTP_HOST / SMTP_PORT / SMTP_USER / SMTP_PASS |
Email sending |
The site password is in public/auth.js. To change it:
# Generate a new SHA-256 hash
echo -n 'your-new-password' | sha256sum
# Update the HASH constant in public/auth.js with the new hashThis project is designed to be forked and customized:
- Replace sample leads — Edit the lead arrays in
public/index.htmlandpublic/outbound.htmlwith your real territory data - Set your zones — Update zone names to match your territory structure
- Configure personal stops — Set your home base, office, and regular stops in the route planner settings
- Brand it — Change the company name in
public/auth.jsand nav bar inpublic/index.html - Connect your sheets — Add your Google Sheets IDs to
.env
See the How-To Guide for a detailed customization walkthrough.
- How-To Guide — Complete onboarding walkthrough
- User Guide — Step-by-step instructions for daily use
- Outbound Guide — How to use the email campaign system
- Column Map — Full spreadsheet field reference
- Architecture — Technical system design
- Data & Persistence — How data is stored and protected
- Contributing Guide — How to contribute
- Branch Naming — Branch naming conventions
- Git Workflow — How code flows:
test→staging→main - Changelog — Version history and updates
This project is dual-licensed:
- Open Source — free under AGPL v3. Use, modify, and distribute freely as long as your changes stay open source.
- Commercial — need to use this in a proprietary product or offer it as a hosted service without sharing source code? Contact us for a commercial license.
Why AGPL? We want this project to stay open and community-driven. AGPL ensures that if someone builds on this code, the community benefits too. Companies that need proprietary use can purchase a commercial license.
For commercial licensing inquiries, open an issue or contact the maintainer.
Built for sales teams who want real tools without the overhead.