FleetTracker Deployment Guide
Step-by-Step Setup for Nonprofit Organizations
Overview
This guide will walk you through deploying FleetTracker at your nonprofit organization. No coding experience required. If you can use Google Sheets and copy-paste, you can deploy this system.
Time Estimate
- Initial setup: 2-3 hours (one-time)
- Testing: 30 minutes
- Staff training: 15 minutes
Prerequisites
- Google Workspace account (free for nonprofits via Google for Nonprofits)
- Admin access to create Google Forms and manage Drive folders
- A list of your fleet vehicles (make/model, license plates, insurance info)
- Email addresses for incident notification recipients
Step-by-Step Setup
1 Download the Template Files
Get the FleetTracker template package from the GitHub repository:
- Visit The Repo page for the template
- Click the green "Code" button → "Download ZIP"
- Extract the ZIP file to your computer
What's included:
- FleetTracker.gs - The main Google Apps Script code
- Master_Vehicle_List_Template.xlsx - Spreadsheet template for vehicle data
- Form_Questions.txt - Suggested form fields and options
- Drive_Structure.txt - Recommended folder organization
2 Create Your Master Vehicle List
This spreadsheet is the "source of truth" for your fleet. The script looks up vehicle details here when incidents are reported.
- Open Master_Vehicle_List_Template.xlsx in Excel or Google Sheets
- Fill in one row per vehicle with the following columns:
| Column | Description | Example |
|---|---|---|
| License Plate | Unique identifier (MUST match form dropdown) | ABC-1234 |
| Make | Vehicle manufacturer and model | Honda Civic |
| Year | Model year | 2020 |
| Lease/Coverage Summary | Ownership type, insurance carrier, policy # | Owned / Full Coverage / State Farm #12345 |
| VIN | Vehicle Identification Number (optional but recommended) | 1HGBH41JXMN109186 |
- Upload the completed spreadsheet to Google Drive
- Right-click the file → Get link → Copy the Spreadsheet ID
The Spreadsheet ID is the long string in the URL:
Save this ID - you'll need it in Step 5.
3 Set Up Your Drive Folder Structure
Organize your Drive to store vehicle documents and incident reports.
Recommended Structure:
📁 Fleet Management (Root Folder)
├── 📁 Vehicle ABC-1234 (Honda Civic)
│ ├── 📄 Insurance Policy.pdf
│ ├── 📄 Service - 2024-01-15.pdf
│ └── 📄 Service - 2024-04-20.pdf
│ (Incident folders will be auto-created here)
│
├── 📁 Vehicle XYZ-5678 (Toyota Camry)
│ ├── 📄 Lease Agreement.pdf
│ └── 📄 Service - 2024-03-10.pdf
│
├── 📁 New Vehicle Archive (for vehicles not yet mapped)
│
└── 📁 Form Upload Temp (temporary storage for form uploads)
Steps:
- Create a root folder (e.g., "Fleet Management")
- Inside it, create one folder per vehicle (name them clearly: "Vehicle ABC-1234 - Honda Civic")
- Create a folder called "New Vehicle Archive" (for incidents involving unlisted vehicles)
- Create a folder called "Form Upload Temp" (Google Forms uploads go here temporarily)
Get Folder IDs:
You'll need the Google Drive folder IDs for configuration. To find them:
- Open each folder in Google Drive
- Look at the URL in your browser
- Copy the ID from the URL:
Required IDs:
- ID for "New Vehicle Archive" folder
- ID for "Form Upload Temp" folder
- ID for each individual vehicle folder (ABC-1234, XYZ-5678, etc.)
4 Create the Google Form
This form is what drivers will use to report incidents (typically from their phones).
- Go to forms.google.com
- Click Blank Form
- Title it: "Vehicle Incident Report"
- Add the following questions:
| Question Title | Type | Notes |
|---|---|---|
| Date of Incident | Date | Required |
| Time of Incident (if known) | Short answer | Optional |
| What home does the driver fall under? | Dropdown | List your programs/locations |
| Full Legal Name of the Driver | Short answer | Required |
| Vehicle In Question | Dropdown | CRITICAL: Populate from Master List |
| Vehicle Damage/Photos & Scene Diagram | File upload | Upload to "Form Upload Temp" folder |
| Brief Description of What Happened | Paragraph | Required |
For the "Vehicle In Question" dropdown, format entries EXACTLY like this:
- 2020 Honda Civic ABC-1234
- 2019 Toyota Camry XYZ-5678
The script extracts the license plate by taking the last word (after the last space). If you use a different format, the lookup will fail.
Configure File Upload:
- Click on the "File upload" question
- Click the three dots (⋮) → Go to folder
- Move the default upload folder to your "Form Upload Temp" folder location
- Or: Note the folder ID of where uploads go (you'll need this in Step 5)
Link Form to Spreadsheet:
- Click the Responses tab in the form editor
- Click the green Sheets icon
- Choose "Create a new spreadsheet"
- Name it "Vehicle Incident Responses"
Copy the Spreadsheet ID from the URL (you won't need it for the script, but good to save).
5 Configure the Google Apps Script
Now we'll add the automation code to your form's response spreadsheet.
- Open the "Vehicle Incident Responses" spreadsheet (created in Step 4)
- Click Extensions → Apps Script
- Delete any default code in the editor
- Open FleetTracker.gs from the downloaded template
- Copy the entire contents and paste into the Apps Script editor
Edit the Configuration Block:
At the top of the script, you'll see a section labeled // --- CONFIGURATION ---
Update these values:
| Variable | What to Enter | Where to Find It |
|---|---|---|
| RECIPIENT_EMAILS | Comma-separated email addresses | Your team (e.g., 'ops@org.org,fleet@org.org') |
| MASTER_LIST_SPREADSHEET_ID | Spreadsheet ID from Step 2 | URL of your Master Vehicle List |
| NEW_VEHICLE_ARCHIVE_FOLDER_ID | Folder ID from Step 3 | Your "New Vehicle Archive" folder URL |
| UPLOAD_FOLDER_ID | Folder ID from Step 3/4 | Your "Form Upload Temp" folder URL |
| VEHICLE_FOLDER_MAP | License plate → Folder ID pairs | See example below |
VEHICLE_FOLDER_MAP Example:
"ABC-1234": "1A2-42ydOzwGw4qasaPfjw4_jlUdNR2ld",
"XYZ-5678": "9B8-73xdPawHx5rbtBgkx5_kmVeOS3me",
"DEF-9012": "7C6-51wdOaxIv3qbtAfjv3_jmUdNQ1ld",
};
- Click File → Save
- Name the project: "FleetTracker Automation"
6 Set Up the Form Submission Trigger
This tells Google to run your script automatically when someone submits the form.
- In the Apps Script editor, click the clock icon (Triggers) in the left sidebar
- Click + Add Trigger (bottom right)
- Configure the trigger:
| Setting | Value |
|---|---|
| Choose which function to run | onFormSubmit |
| Choose which deployment should run | Head |
| Select event source | From spreadsheet |
| Select event type | On form submit |
- Click Save
- You'll be prompted to authorize the script:
- Click Review Permissions
- Choose your Google account
- Click Advanced → Go to FleetTracker (unsafe)
- Click Allow
7 Test the System
Before rolling out to your team, test the full workflow.
Test Checklist:
- Submit a test incident report via the form
- Check the response spreadsheet (new row should appear)
- Verify email notification was sent to RECIPIENT_EMAILS
- Check the vehicle folder for the new incident subfolder
- Open the incident folder and verify:
- Incident Summary.gdoc exists and contains correct data
- Uploaded photos were moved from "Form Upload Temp"
- Email Notification Log.txt exists
- Verify the email contains correct vehicle coverage info
- Check maintenance data (last service date, next due date)
If Something Goes Wrong:
- Open the Apps Script editor
- Click Executions (left sidebar)
- Find the failed execution and click to view logs
- Common issues:
| Error Message | Solution |
|---|---|
| "Cannot read property of undefined" | Form field name mismatch - check *_FIELD_NAME constants |
| "Spreadsheet not found" | Wrong MASTER_LIST_SPREADSHEET_ID |
| "Folder not found" | Wrong folder ID in VEHICLE_FOLDER_MAP or config |
| "License plate not found" | Vehicle not in VEHICLE_FOLDER_MAP (should file in archive) |
8 Train Your Team
Once testing is successful, share the form with your staff.
For Drivers:
- Share the form link (get it from the form's Send button)
- Emphasize: Take photos immediately at the scene
- Bookmark the form on their phones for quick access
- Explain: Submitting the form alerts the ops team instantly
For Managers:
- Show them the email notification format
- Explain how to access the incident folder (one-click link)
- Walk through the Google Doc summary
- Show how to view all incidents (Drive folder view)
Sample Training Message:
Subject: New Vehicle Incident Reporting System
Hi team,
We've streamlined our vehicle incident reporting process. If you're involved in any
incident (damage, accident, near-miss), please:
- Take photos of the damage and scene
- Fill out this form: [LINK]
- Continue with your day - the ops team is automatically notified
The system organizes everything automatically, so we can respond faster and keep better records for insurance and compliance.
Questions? Contact [OPS MANAGER].
Ongoing Maintenance
Adding New Vehicles
- Add a row to the Master Vehicle List spreadsheet
- Create a new folder in Drive for the vehicle
- Add the license plate and folder ID to VEHICLE_FOLDER_MAP in the script
- Add the vehicle to the form dropdown options
Updating Email Recipients
- Open the Apps Script editor
- Update the RECIPIENT_EMAILS variable
- Save the script (changes take effect immediately)
Uploading Maintenance Records
When you receive service invoices:
- Name the file: Service - YYYY-MM-DD.pdf (e.g., "Service - 2024-03-15.pdf")
- Upload to the vehicle's folder
- The script will automatically detect it for the next incident
Troubleshooting
Emails Not Sending
- Check the Apps Script execution logs for errors
- Verify RECIPIENT_EMAILS uses valid addresses
- Check your Google Workspace admin console - is Gmail enabled?
- Daily limit: 1,500 emails per day (unlikely to hit with fleet incidents)
Files Not Moving from Upload Folder
- Verify UPLOAD_FOLDER_ID matches the form's upload destination
- Check Drive permissions - the script account needs edit access
- File IDs are extracted from the form response - check the spreadsheet column
Maintenance Data Shows "N/A"
- Check that service files have "service" in the filename (case-insensitive)
- Verify date format in filename: YYYY-MM-DD, YYYY/MM/DD, or YYYY_MM_DD
- If no date in filename, the script uses file creation date (check when it was uploaded)
Vehicle Lookup Failing
- Verify license plate format matches EXACTLY in:
- Master Vehicle List spreadsheet
- Google Form dropdown options
- VEHICLE_FOLDER_MAP in the script
- Check for extra spaces, different capitalization, or punctuation differences
Script Not Running
- Verify the trigger is installed (Apps Script → Triggers)
- Check that the trigger is set to "On form submit" (not "On open" or "Time-driven")
- Try deleting and recreating the trigger
- Check Apps Script execution quota (View → Executions → see if errors exist)
Support & Community
Getting Help
- GitHub Issues: Report bugs or request features
- Documentation: Technical deep dive for advanced users
Contributing
If you extend FleetTracker with new features (cost tracking, dashboard integration, etc.), please consider contributing back! Submit a pull request on GitHub.
Sharing Your Experience
Using FleetTracker at your org? We'd love to hear about it:
- How many vehicles are you managing?
- What improvements have you seen?
- What features would you like added?
Share your story in the GitHub Discussions.