Your CRM
The π CRM tab is the center of everything. One row per person — synced live with Google Contacts and updated automatically by Gmail and Calendar.
How the CRM Works
The CRM is a live two-way link between your spreadsheet and Google Contacts. Every contact has a Contact ID — a unique identifier assigned by Google — that ties the CRM row to the Google Contact record. When you sync, Water LLM matches rows to contacts by ID, not by name or position.
| What You Get | How It Works |
|---|---|
| One row per person | Every contact — clients, prospects, partners — lives as a single row |
| Synced with Google Contacts | Changes in the CRM push to Google Contacts (and vice versa) on your sync schedule |
| Communication history auto-filled | Gmail and Calendar scans populate last email dates, last meeting, and next meeting |
| Column order doesn't matter | Rearrange, hide, or freeze any column — Water LLM finds everything by header name |
Understanding the Column Layout
| Header Color | Meaning | What To Do |
|---|---|---|
| White | Editable — your data entry fields | Enter and edit freely |
| Gray | Auto-calculated by Water LLM (email dates, meeting dates, sync timestamps) | Do not edit. Overwritten on every sync or refresh. |
| Blue | System column — found by header name | Don't rename. You can reorder or hide safely. |
| Column | What It Is | Editable? |
|---|---|---|
| Contact ID | Unique ID from Google Contacts. The CRM–Google link. | No — assigned automatically |
| First Name / Last Name | Used in email templates, AI features, and the Name formula | Yes |
| Name | Auto-generated from First + Last Name by an array formula | No — formula column. Do not type here. |
| Company / Title / Department | Used in outreach templates, meeting prep, and AI context | Yes |
| Nickname | Informal name — usable as a template placeholder ({{NICKNAME}}) |
Yes |
| Birthday | Syncs with Google Contacts. Used by Birthday Drip. | Yes |
| Photo | Profile photo URL from Google Contacts | No — synced automatically |
Up to 4 email addresses, 3 phone numbers, and 3 websites are supported. Each field has a companion Type column that maps to the label in Google Contacts.
Typing something not in the dropdown into a Phone or Email Type column (like "cell," "biz," or anything other than the preset values) causes Google Contacts to silently reject the sync for that entire contact — no error message, it just skips the update. Valid values are: Mobile, Work, Home, Main, Other for phones; Work, Personal, Other for emails.
The Contact Composer only offers valid values — when in doubt, use it instead of editing the cell directly.
Communication Refresh scans Gmail for the most recent email sent to and received from Email 1 and Email 2 separately. If someone uses different addresses for work and personal correspondence, having both gives you a complete picture of your history with them.
These are filled automatically by Communication Refresh. Do not edit them manually — they're overwritten on every refresh run.
| Column | How It's Calculated |
|---|---|
| Last Email Received From Email 1 | Most recent email received from Email 1, up to 3 years back in Gmail |
| Last Email Received From Email 2 | Same for Email 2 |
| Last Email Sent To Email 1 / 2 | Most recent email you sent to that address, up to 3 years back |
| Last Met With Contact | Most recent past calendar event where the contact was a guest and didn't decline. "Free" events excluded. |
| Next Meet With Contact | Earliest upcoming calendar event with this person, within the next 6 months |
| LI Message Received / Sent | Most recent LinkedIn message dates (from LinkedIn archive import) |
| Last Contact | The most recent date across all communication columns above |
| Last Contact Method | Which source produced the Last Contact date (e.g., "Meeting," "Sent to Email 1") |
| Days Since Last Contact | Array formula: today minus Last Contact. Recalculates every time you open the sheet. Do not type here. |
| Field | Syncs to Google Contacts? | Use It For |
|---|---|---|
| Notes | Yes — visible in any app that reads your Google Contacts | Context you'd want on your phone or in Gmail (how you met, company overview) |
| Private Notes | No — CRM only, never synced | Sensitive internal notes, deal context, things you don't want on your phone |
Eight fully customizable columns you name anything you need: "Lead Status," "Referral Source," "Program Tier," "Industry," etc.
- Set labels in βοΈSettings, row 3 (columns A–H)
- Set dropdown values in βοΈSettings rows 4+ (same columns)
- These are the only headers safe to rename — renaming goes through the settings UI, not by editing the header cell directly
- Values sync with Google Contacts using stable internal IDs, so renaming a label doesn't lose existing data
Set it to DELETE from the dropdown to remove a contact. Never delete the row by right-clicking.
On the next Sync to Google run, a flagged contact is deleted from Google Contacts, removed from the CRM, and backed up to the Deleted Contacts sheet — which acts as a suppression list to prevent re-import from LinkedIn or sync.
The CRM backup preserves the row data, not the full Google Contact record. Make sure you intend to delete before flagging.
Syncing with Google Contacts
| Direction | What It Does | When to Use It |
|---|---|---|
| Sync to CRM Google β Sheet |
Reads your Google Contacts and updates/creates CRM rows | After editing contacts on your phone, in Gmail, or on contacts.google.com |
| Sync to Google Sheet β Google |
Pushes edited CRM rows to Google Contacts | After editing contact details in the spreadsheet |
Run manually via . Automate by toggling on βοΈAutomation rows 16–17 and setting a schedule.
- Name, nickname, company, title, department
- Up to 4 emails, 3 phones, 3 websites (with type labels)
- Full address, birthday, notes, photo
- All 8 user-defined fields
- Communication tracking dates (email, meeting, LinkedIn)
- Last Contact / Days Since Last Contact
- Invoice and billing data
- Biz Dev / pipeline data
- Private Notes
Water LLM uses an eTag (a version fingerprint from Google's API) to detect when a contact changed outside the CRM. If both sides changed, it flags the conflict rather than silently overwriting.
Run Sync to CRM first to pull the Google version in, then make your edits in the sheet, then run Sync to Google. This prevents a conflict.
Communication Refresh — Email and Meeting Dates
Communication Refresh scans your Gmail and Google Calendar to fill in all the communication tracking columns — last emails, last and next meeting dates, Last Contact, and Last Contact Method.
Run manually: . Automate via βοΈAutomation row 18.
Water LLM processes contacts in batches. Google Apps Script imposes a 6-minute execution limit per run. When that limit is hit, the job saves its progress and picks up where it left off on the next run.
For a CRM with 100+ contacts, the first Communication Refresh may need 2–5 passes before all contacts have updated dates. You'll see dates filling in gradually — some contacts show recent dates while others still show blank. This is by design, not a bug.
Don't run it manually over and over in quick succession. Rapid re-runs restart from the beginning of the batch, so progress doesn't accumulate. Let the automated schedule run (set it to hourly in βοΈAutomation), or wait at least a minute between manual runs and check the βοΈStatus tab to confirm each run completed before starting the next.
- Scans Gmail for last sent/received dates per contact email address
- Looks up the most recent past calendar meeting per contact
- Looks up the next upcoming calendar meeting per contact
- Recalculates Last Contact and Last Contact Method across all contacts
Any Google Calendar event where the contact's email appears in the guest list and they did not decline. Events marked "Free" (transparent) are excluded.
If you use a team or coaching calendar, add it via . Events from shared calendars are included in meeting scans.
The βοΈStatus tab logs every run — timestamp, how many contacts were processed, and any errors. If a run ends early due to the time limit, you'll see the partial count there.
Creating Contacts
| Method | Best For | How |
|---|---|---|
| Contact Composer | Creating a fully detailed contact with validation on every field | |
| Sync to CRM | Importing contacts already in Google Contacts | |
| LinkedIn Import | Adding your LinkedIn connections in bulk | LinkedIn Import guide → |
| CSV Import | Bulk import from another CRM or spreadsheet | |
| Calendar Invite Parser | Extracting contacts from Calendly/Acuity/Google scheduling confirmations automatically | |
| Manual row entry | Quick one-off additions | Type into a new row in the CRM. Leave Contact ID blank — assigned on next sync. |
A guided form that validates inputs and only offers valid values for Type dropdowns — impossible to enter an invalid phone/email type by accident. Available on desktop and via the mobile web app.
-
1Open
-
2Fill in the fields you need. Only First Name is required.
-
3Click Save. The contact is added to the CRM and queued for sync to Google Contacts.
To edit an existing contact, open the Composer and search by name, email, or company. Their current data loads into the form.
If you use Calendly, Acuity, or Google Event Scheduler, this feature reads each event description and extracts name, email, phone, company, and title — then creates or updates the CRM contact automatically.
Configure it at — select your scheduling platform and optionally filter by keywords so only certain meeting types trigger extraction (e.g., "Discovery Call", "Consultation").
Finding Contacts
- Contact Finder — : searches name, email, or company. Also available in the mobile web app.
- Sheets search — Ctrl+F / Cmd+F to search within the sheet directly. Great for a quick scan.
To find all contacts at a specific company, or all contacts with a status value, create a filter on that column. See Filtering Your Data for how.
Cleaning Up Contact Names
Contacts imported from LinkedIn often carry clutter in their names — credentials (MBA, PhD, PCC, MCC, ACC), titles (Dr., Prof.), pronouns (she/her), and emoji characters. These cause issues in outreach templates and AI features.
To clean your entire CRM in one pass:
Run this once after your first LinkedIn import. Nobody wants to receive an email that opens with "Hi Sarah Johnson MBA PCC,"
The Dashboard — Your Business at a Glance
The π Dashboard tab is auto-generated from your CRM, Invoices, Client Tracker, and Biz Dev data. You don't enter data there — just read it and refresh when you want an updated view.
| Section | What It Shows |
|---|---|
| Relationship Health | Active vs. dormant contacts, average days since last contact |
| Engagement Momentum | New contacts added, ghosting risk count, communication trends |
| Pipeline Overview | Deals by stage, win rate, 30/60/90-day revenue forecast |
| Who's Going Cold | Contacts 25–45 days since last contact — warm-to-cooling zone where a quick message can make a difference |
| Quick Wins | Upcoming birthdays, overdue deals, stale pipeline items to act on today |
| Financial Details | Invoiced, paid, and outstanding totals; monthly revenue breakdown; revenue by product/service |
| AI Insights | AI-generated narrative about your client portfolio, revenue trends, and business health |
To refresh: go to or enable automatic nightly refresh in βοΈAutomation.
The Dashboard preserves rows 1–3 as a user-owned area. Put your logo, title, or notes there — they won't be overwritten on refresh.

