Repository navigation
💡 New script: contacts-relationship-manager (Google Contacts hygiene & reconnection intelligence) #574
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Summary
A Google Apps Script that periodically scans Google Contacts (via the People API), cross-references last communication dates from Gmail and Calendar, identifies stale relationships (contacts not communicated with in a configurable threshold, default 90 days), and delivers a monthly reconnection nudge email with context. Brings the Contacts/People API into the project's coverage — a Workspace surface with zero existing scripts or ideas in the backlog.
Market Signal
Personal CRM and relationship management is a growing product category: Clay, Dex, and Monica CRM all target professionals who want to maintain their network without dedicated enterprise CRM software. LinkedIn's "Keep in Touch" feature validates mainstream demand for automated reconnection nudges. The Google People API is mature and fully available in GAS (
ContactsApp), but no open-source, GAS-based relationship management tool exists. Inbox Zero's analytics dashboard demonstrates that users value meta-analysis of their communication patterns — the contacts-relationship-manager extends this insight from email volume analytics to relationship health scoring.User Signal
The project's 34 existing ideas cover Gmail (10+), Calendar (5+), Drive (4+), Tasks, Sheets, Docs, Slides, Forms, and Meet — but zero Contacts/People API scripts. This represents a genuine coverage gap. gmail-contact-intelligence (#551) is the closest existing idea but focuses on email relationship analytics and blind spot alerts from the Gmail side — it doesn't start from Contacts, doesn't cross-reference Calendar meetings, and doesn't deliver proactive reconnection nudges. The gmail-ai-classifier's multi-account household support shows the project already processes contact-level metadata, validating the technical surface.
Technical Opportunity
The People API (
ContactsAppin GAS) provides contact list access with groups/labels.GmailApp.search()can find the last email date per contact address.CalendarAppcan find the last calendar event with a contact as attendee. The existing dual-layer architecture (code.gs → src/index.js with dependency injection) applies directly. The monthly schedule-in-config pattern from calendar-to-briefing-doc handles the low-frequency trigger naturally (hourly trigger +shouldRunNow()checking monthly schedule). Output is a simple email report — no new output surfaces needed. Batching across hourly trigger runs handles large contact lists within GAS execution time limits, following the same pattern as gmail-to-drive-by-labels.Assessment
Adversarial Review
Strongest objection: Most people don't actively manage contacts — the script would surface a large number of "stale" contacts that users intentionally don't communicate with. Privacy-sensitive users may object to automated analysis of their communication patterns. Processing all contacts × all Gmail history could hit GAS execution time limits.
Rebuttal: The script uses configurable thresholds and opt-in contact groups — users can limit analysis to a specific Contacts group (e.g., "Inner Circle" or "Professional Network") rather than scanning all contacts. This mirrors how calendar-to-briefing-doc uses
excludeCalendarsto let users control scope. All processing stays entirely within the user's own Google account with zero data exfiltration — no external APIs, no third-party services. Execution limits are managed by batching contacts across hourly trigger runs, exactly as gmail-to-drive-by-labels handles large thread volumes with itsbatchSizeconfig. The real value is passive: a monthly email that says "You haven't talked to Sarah in 4 months — you last discussed the Q3 budget" requires zero ongoing effort from the user.Suggested Next Step
Build a minimal
contacts-relationship-managerscript: read a user-specified Contacts group, query Gmail for last-sent date per contact email, and email a monthly report of contacts not communicated with in 90+ days. Follow the calendar-to-briefing-doc dual-layer architecture (code.gs→src/index.js). Add Calendar cross-referencing (last meeting with contact as attendee) in a second iteration.All reactions