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 From Contact / LI Message Sent To Contact | Most recent LinkedIn message dates (from LinkedIn archive import) |
| Last Contact From Them | The most recent inbound date — emails received from any of their four addresses, LinkedIn messages received, and meetings that took place |
| Last Contacted By Me | The most recent outbound date — emails you sent to any of their four addresses, and LinkedIn messages you sent |
| Last Contact Method | Which single source is most recent overall — e.g. “Meeting”, “Received from Email 2”, “Sent to Email 1”, “Sent LI Message” |
| Days Since They Engaged | Array formula: today minus Last Contact From Them. Recalculates every time you open the sheet. Do not type here. |
| Health Score | 0–100 relationship score, recalculated after each Communication Refresh. See Health Score for the model and the bands. |
There used to be one Last Contact column holding the most recent date from either direction. A client emailing you out of the blue and you chasing a client who has gone quiet produced the same date, so nothing downstream could tell them apart.
Splitting them is what lets Water LLM distinguish Ghosting (you reached out, they never came back) from Follow-Up Due (they emailed you and the ball is in your court). Those are opposite problems and they need opposite actions. Follow-Up Due looks at emails and LinkedIn messages only, so a meeting never leaves you “owing” a reply.
Meetings count as inbound. A meeting that actually happened is the strongest engagement signal there is, so it credits Last Contact From Them even when you sent the invite. And because pressing send is not evidence of a relationship, the Health Score weights inbound more heavily than outbound.
There are two places to write about a person, and they do different jobs.
| Field | Syncs to Google Contacts? | Use It For |
|---|---|---|
| Notes | Yes — visible in any app that reads your Google Contacts, including your phone | Short context you want at hand everywhere: how you met, what the company does. One cell, so keep it brief. |
| Google Doc Notes | No — the column holds a link, and the document stays in your Drive | Everything else. Session notes, meeting records, anything sensitive. It is a real document, so it takes as much as you want to write and it is never pushed to Google Contacts. |
It was retired. Per-contact notes moved into Google Doc Notes, which does the same job properly — a document rather than a spreadsheet cell, with no length limit and no risk of a sync pushing it to your phone. If you still have a Private Notes column from an older sheet, nothing writes to it any more; move what is in it into the contact’s notes doc.
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
How each person first found you — Referral, LinkedIn, an event and so on. It’s a dropdown on π CRM, and π Biz Dev and π Clients show the same value from the CRM row. The list is yours to edit on the Dropdowns tab.
Water LLM fills it in only on contacts it creates itself: someone you promote from LinkedIn, a new contact from a calendar invite whose title matches one of your keywords (set the keyword → source pairs in ), and a new sponsored or referred client. Existing contacts are never changed — the rest is yours to set. Where your business comes from is summarised in the Business health area of π― My Focus.
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 both directions at once with , or one direction from . Both directions run nightly by default — outbound at 2:00 AM, inbound at 3:00 AM, on a 7:00 AM finishing time. Change either in .
- 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 From Them / Last Contacted By Me / Days Since They Engaged
- Invoice and billing data
- Biz Dev / pipeline data
- Google Doc Notes (the link; the document itself lives in your Drive)
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 From Them, Last Contacted By Me and Last Contact Method.
Run manually: . It also runs nightly by default, an hour after the Google Contacts sync, because almost everything else reads what it writes.
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 nightly schedule do the work, 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 From Them, Last Contacted By Me 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 & Close — or Save & New to add another straight away. 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.
Finding Duplicates
The same person arriving twice is the most common way a CRM goes wrong — a LinkedIn import, a CSV, and a Google contact can all describe one human. looks for them and shows you what it found.
Duplicate detection only ever suggests. Merging two people who were not the same person is unrecoverable, so that decision stays yours. The dashboard shows a count, never an action.
Two people who genuinely share a name, or a shared family address, will keep being suggested. Add them to the Don’t Merge With column once and they stop.
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,"
Where the CRM Shows Up on the Dashboard
The π Dashboard tab reads your CRM alongside Invoices, Clients and Biz Dev. Four blocks come straight from here:
| Block | From your CRM |
|---|---|
| Relationship Health | Your contacts grouped into health bands, plus the average score. |
| Engagement Momentum | New contacts in the last 30 days, and LinkedIn messages sent and received. |
| Quick Wins | Birthdays this month, contacts with no email address, and possible duplicates. |
| Needs Follow-Up | In the sidebar: people last spoken to 25–45 days ago — recent enough not to be awkward, long enough to have slipped. |
It refreshes every night on its own — that one has no switch, because every figure on the tab depends on it. To refresh it now, use .
Dashboard & Metrics gives the exact definition of every number on the tab, the thresholds behind each colour, and how to pull the same figures into tabs of your own.
The top three rows of the Dashboard are a user-owned area. Put your logo, a title or a note there — nothing overwrites them.
Still stuck? Email support@waterllm.com and we’ll get back to you within one business day — or use the contact form.