FleetTracker for NGOs
Open-Source Fleet Incident Management System
Production Deployment Google Apps Script Workflow Automation Open Source
Deployed at: Mid-sized behavioral health nonprofit (250+ employees)
Status: Production system since 2024
Repository: GitHub
License: MIT (Free for nonprofit use)
The Problem
Most small-to-medium nonprofits manage vehicle fleets using fragmented workflows:
- Email chains for incident reporting (lost context, no accountability)
- PDF forms printed, scanned, and manually filed
- Spreadsheet chaos with no standardized process
- Missing maintenance records when insurance claims arise
- No stakeholder visibility into incident status or vehicle history
For organizations with 10-30 vehicles serving vulnerable populations, this creates compliance risks, financial waste, and operational chaos.
The Solution
FleetTracker is a zero-cost automation system built entirely on Google Workspace (which most nonprofits already use). It transforms incident reporting from a manual nightmare into a structured, automated workflow.
System Architecture
┌─────────────────┐
│ Google Form │ ← Driver submits incident report (mobile-friendly)
│ (Public Link) │
└────────┬────────┘
│ Form Submit Trigger
▼
┌─────────────────────────────────────────────────────────────┐
│ Google Apps Script (Automated Processing) │
│ ───────────────────────────────────────────────────────────│
│ 1. Extract license plate → Lookup vehicle in Master Sheet │
│ 2. Find maintenance folder → Parse service history │
│ 3. Calculate next service date (quarterly schedule) │
│ 4. Create timestamped incident folder │
│ 5. Move uploaded photos to permanent archive │
│ 6. Generate formatted incident summary (Google Doc) │
│ 7. Email stakeholders with context + links │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Organized Google Drive Structure │
│ ───────────────────────────────────────────────────────────│
│ 📁 Vehicle ABC-1234/ │
│ ├── 📁 2024-03-15 - Incident - John Doe - Honda Civic │
│ │ ├── 📄 Incident Summary.gdoc │
│ │ ├── 📷 Damage Photo 1.jpg │
│ │ ├── 📷 Scene Diagram.png │
│ │ └── 📄 Email Notification Log.txt │
│ ├── 📄 Service - 2024-01-10.pdf │
│ └── 📄 Insurance Policy.pdf │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Stakeholder Email (HTML formatted) │
│ ───────────────────────────────────────────────────────────│
│ 🚨 Vehicle Incident: John Doe - Honda Civic (ABC-1234) │
│ │
│ Coverage: Owned / Full Coverage (State Farm #12345) │
│ Last Service: 2024-01-10 (Link to invoice) │
│ Next Service Due: 04/10/2024 ⚠️ OVERDUE │
│ │
│ 👉 [VIEW INCIDENT FOLDER] │
└─────────────────────────────────────────────────────────────┘
Key Features
🔍 Intelligent Vehicle Context
The system automatically looks up critical data from a Master Vehicle List:
- Lease vs. ownership status
- Insurance carrier and policy number
- Coverage type (liability vs. comprehensive)
- Vehicle make/model/year
This means managers get actionable context immediately—no digging through files to find "which insurance company covers this vehicle?"
📅 Automated Maintenance Tracking
The script scans each vehicle's folder for service records and:
- Parses dates from filenames (e.g.,
Service - 2024-03-15.pdf) - Calculates the next quarterly service due date
- Flags overdue maintenance in incident emails
- Links directly to the last service invoice
📧 Smart Email Notifications
Every incident triggers an HTML email to configurable stakeholders:
- Operations Director (always)
- Program Manager (if known)
- Fleet Coordinator
- Insurance liaison (for damage claims)
Emails include one-click links to the incident folder, formatted summaries, and all relevant context. No more "forward this to insurance" email chains.
🗂️ Structured File Organization
Files are automatically organized using a standardized naming convention:
This makes audits, insurance claims, and historical reviews trivial. Everything is timestamped, searchable, and linked to the vehicle.
🚓 Police & Witness Tracking
The form uses conditional branching to capture critical details only when relevant:
- Police attendance: Officer name, badge number, police file #, detachment
- Witness information: Names, phone numbers, any other contact details
- Other driver details: Insurance, license, vehicle info (if multi-vehicle incident)
Drivers only see the sections they need—streamlined UX without sacrificing data completeness.
🩹 Injury & Liability Tracking
Automatically flags high-risk incidents requiring immediate follow-up:
- Employee injuries (triggers workers' comp notification)
- Non-employee injuries (clients, other drivers, pedestrians)
- Weather/road conditions captured for liability context
The injury flags allow HR to proactively reach out before incidents escalate to formal complaints or claims.
📷 Vehicle Damage Diagram
The form includes a downloadable damage diagram template (top, side, front/rear views) that drivers can mark up on their phones and upload.
- Standardizes damage documentation across all incidents
- Insurance adjusters love this (saves hours of back-and-forth)
- Combines with photo uploads for complete visual record
Photo guidance prompts drivers to capture: wide-angle scene, close-up damage, license plates, insurance slips, and driver's licenses.
🚨 Built-In Safety Instructions
The form header includes immediate action guidance for drivers:
- When to call 911 (injuries, impaired drivers, blocking traffic)
- Mandatory on-duty manager contact before proceeding
- When police are required at the scene (injuries, hit-and-run, government vehicles, >$5k damage)
- What NOT to do (don't admit fault, don't promise payment)
This ensures compliance and protects the organization from liability—especially critical for inexperienced drivers who've never been in an accident.
Business Impact
Measured Outcomes (6-month pilot)
- Compliance: 100% of incidents documented with photos (vs. ~60% pre-system)
- Response Time: Average manager response dropped from 3-5 days to same-day
- Insurance Claims: 2 claims processed 40% faster due to organized documentation
Technical Highlights
Why Google Apps Script?
Unlike heavyweight solutions (fleet management SaaS, custom databases), this system:
- Works with existing tools (Google Workspace, which nonprofits often get for free/cheap)
- Zero infrastructure (no servers, no hosting, no DevOps)
- Mobile-first (drivers submit from phones immediately after incidents)
- Maintainable by non-developers (ops staff can update the Master Sheet without touching code)
Code Architecture
The maintenance date parser uses regex to extract dates from filenames in multiple formats (YYYY-MM-DD, YYYY/MM/DD, YYYY_MM_DD) and falls back to file creation date if no match is found.
The script is modular and defensive:
- Configuration block - All IDs/settings in one place (easy for other orgs to adapt)
- Lookup functions - Separate concerns (vehicle data vs. maintenance data)
- Main handler - Orchestrates workflow with robust error handling
- Fallback logic - Gracefully handles missing data (e.g., new vehicles not yet in map)
Sample Code: Maintenance Lookup
Deployment Guide for Other Nonprofits
This system is designed to be deployable by any nonprofit with Google Workspace. No technical expertise required beyond basic spreadsheet skills.
Prerequisites
- Google Workspace account (free for nonprofits via Google for Nonprofits)
- ~2 hours for initial setup
- A list of your vehicles (make/model, plates, insurance info)
Setup Process
- Copy the template - with step-by-step instructions
- Create your Master Vehicle List - Populate the spreadsheet template with your fleet data
- Set up Drive folder structure - One folder per vehicle (script auto-creates subfolders)
- Configure the script - Update folder IDs and email addresses (all in one config block)
- Test with a sample incident - Submit a test form to verify the workflow
- Train your team - Share the form link and show managers the email alerts
Full documentation: Deployment Guide | Download Templates
Future Enhancements
Potential features for v2.0 (community contributions welcome):
- Dashboard visualization - Looker Studio integration for incident trends
- Cost tracking - Parse repair invoices and calculate total cost of ownership
- Mileage logging - Trigger service reminders based on odometer readings
- Driver safety scores - Aggregate incidents by driver for training prioritization
- Multi-org support - Shared template repository with org-specific configs
Lessons Learned
What Worked
- Start with the pain point - I built this because I was doing the manual work itself and saw a better way.
- Use existing tools - No one wants to learn a new platform; Google Forms was already familiar
- Design for non-technical users - The Master Sheet lets ops staff update vehicle info without touching code
- Obsess over edge cases - What if a vehicle isn't in the map? What if there's no service file? Fallbacks matter.
What I'd Do Differently
- Version control from day 1 - I iterated in the Apps Script editor; should have used Git sooner
- More logging - Early bugs were hard to debug without comprehensive logs
- User testing earlier - Some form fields confused drivers; caught this only after launch
Project Links
- GitHub Repository: Source Code & Documentation
- Deployment Guide: Step-by-Step Setup
- Template Files: Download Spreadsheet & Folder Templates
- Technical Deep Dive: Code Architecture Explained