You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 (ContactsApp in GAS) provides contact list access with groups/labels. GmailApp.search() can find the last email date per contact address. CalendarApp can 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
Dimension
Score
Rationale
Feasibility
high
People API, Gmail search, Calendar API all available in GAS; architecture pattern proven; monthly trigger is simple
Impact
med
Opens new Workspace surface (Contacts); personal CRM is a growing category; but appeal is narrower than email/calendar automation
Urgency
low
No competitive pressure or platform change forcing this now; opportunity is stable and can be pursued when bandwidth allows
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 excludeCalendars to 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 its batchSize config. 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-manager script: 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.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
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