The Google Sheets integration is available on the Pro plan.
Overview
Turn any Google Sheet into a live order source. Share your spreadsheet with Bodha Route Planner, map the columns, and rows become delivery orders in your inbox — automatically, on a schedule. Why teams love this:- Your dispatchers, sales team, or customers keep editing the same sheet they always have
- Bodha Route Planner reads new rows on each sync
- No code, no API, no OAuth consent screens — just share a sheet
- Works with any spreadsheet format you already have
How it works
- You share your Google Sheet with a Bodha Route Planner service account email address
- You paste the sheet URL and pick which tab to read
- Bodha Route Planner reads the header row (row 1) and shows you every column with a sample value
- You map columns to Bodha Route Planner order fields (address, name, phone, etc.)
- Bodha Route Planner reads the sheet on a schedule and turns new rows into orders
- Orders land in your inbox, geocoded and ready to add to routes
The sheet is read in full every sync. Google Sheets has no change feed, so Bodha Route Planner reads all rows each time and uses deduplication to avoid creating duplicate orders. Edits to existing rows are picked up automatically.
Setup
1
Share your sheet
When you open the Google Sheets integration in Bodha Route Planner, you’ll see a service account email address like:In Google Sheets:
- Open the spreadsheet you want to connect
- Click Share (top right)
- Paste the service account email address
- Set permission to Viewer (Bodha Route Planner only needs to read)
- Click Send
2
Connect in Bodha Route Planner
- Go to Integrations in the main navigation
- Find Google Sheets and click Connect
- Give the connection a name (e.g. “Daily Orders Sheet”)
- Paste your Google Sheet URL (the full URL from your browser’s address bar)
- Optionally, enter the tab name if you want to read a specific tab instead of the first one
- Click Test Connection — Bodha Route Planner verifies it can read the sheet
3
Map your columns
Bodha Route Planner reads the header row and the first data row, and shows you every column with a sample value. Map each column to the matching Bodha Route Planner field:
The header row is row 1. Your first row must contain column names (Address, Name, Phone, etc.). Data starts from row 2. If your sheet doesn’t have a header row, add one.
4
Preview and confirm
Click Preview to see what the first few rows will look like as orders. Check that addresses and details look correct.When you’re happy, click Save. The first sync runs immediately.
Sync settings
You can trigger a sync manually by clicking Sync Now on the integration page.
How deduplication works
Since the entire sheet is read every sync, Bodha Route Planner needs to know which rows it has already seen.With a key column (recommended)
If you map an Order number or Reference ID column, that value is the unique key. The same reference always maps to the same order — editing the row updates the existing order instead of creating a new one. This is the best approach because:- You can reorder rows freely
- You can insert or delete rows without affecting other orders
- Editing an address updates the order rather than creating a duplicate
Without a key column
If no key column is mapped, Bodha Route Planner generates an ID from the row’s content (a hash of the address, name, phone, and email). This means:- Editing an address creates a new order (because the hash changes)
- Identical rows are treated as one order (same hash = same order)
- The order survives rows being reordered or new rows being inserted
Sheet format tips
Dates
Bodha Route Planner recognizes these date formats in your sheet:Dates are interpreted as day/month/year by default. If your sheet uses month/day/year (US format), contact support to adjust the date parsing for your connection.
Null values
These values in your sheet are treated as empty (not as literal text):\N, NULL, null, N/A, n/a, -, #N/A
This is useful when your sheet is exported from a database or other tool that writes null markers.
Blank rows
Blank rows (all cells empty) are automatically skipped. They don’t create orders and don’t cause errors.Rows without an address
Rows that have no value in the mapped Address column are skipped. They’re treated as spacer rows, totals, or notes — not as orders.Multiple sheets
You can connect multiple Google Sheets as separate integrations. Each one has its own:- Name
- Column mapping
- Sync frequency
- Service area
- Different teams submit orders in separate sheets
- You have separate sheets for different regions or depots
- Customers send you their own spreadsheets
What Bodha Route Planner can see
When you share a sheet with Viewer access, Bodha Route Planner can:
The service account has read-only scope (
spreadsheets.readonly). It cannot write to your sheet even if you grant Editor access.
Troubleshooting
'Google Sheets access is not switched on for Bodha yet'
'Google Sheets access is not switched on for Bodha yet'
This is a server-side configuration issue, not a problem with your sheet. The Google Sheets API needs to be enabled for the Bodha Route Planner Google project. Contact support@bodharouteplanner.com — the team will enable it.
'That sheet or tab could not be found'
'That sheet or tab could not be found'
Either the sheet URL is wrong or the tab name doesn’t match.
- Check the URL you pasted — it should be the full URL from your browser
- If you specified a tab name, make sure it matches exactly (case-sensitive)
- Make sure the sheet hasn’t been moved to trash
'The first row is empty'
'The first row is empty'
Your sheet needs a header row in row 1 (Address, Name, Phone, etc.). Data starts from row 2.
- Open your sheet and add column headers in row 1
- Try the connection test again
Orders not updating when I edit the sheet
Orders not updating when I edit the sheet
If you’re editing existing rows and don’t have a key column mapped:
- Changing an address creates a new order (the content hash changed)
- To enable true updates, add an Order Number column and map it
- With a key column, editing any field on a row updates the existing order
Duplicate orders appearing
Duplicate orders appearing
Check these common causes:
- No key column: Map an Order Number column so each row has a stable identity
- Same data via two sources: Are you also importing the same data via CSV or API?
- Tab name wrong: You might be reading a different tab that has similar data
Old rows keep syncing
Old rows keep syncing
The entire sheet is read every sync. To stop old orders from being re-read:
- Move completed/old rows to an archive tab
- Use a cutoff time so only recent entries become today’s orders
- Or use a filter column: add a “Status” column and only map rows where Status is “New”