Client meeting prep briefs for wealth advisors

By General Input

Every weekday at 6:30am ET, get a one-page Google Doc for each client review on your calendar, pre-loaded with portfolio prices, returns, and talking points.

Integrations

  • YCharts
  • Google Calendar
  • Google Sheets
  • Google Docs

Type

Agentic Task

Categories

  • Sales
  • Finance

Build me an agent workflow that runs every weekday at 6:30am America/New_York and files a one-page client meeting prep brief as a Google Doc for each client review on my calendar that day. I am a wealth advisor and this runs before my workday starts.

Trigger: cron, every weekday (Mon-Fri) at 6:30am ET.

Inputs the agent should accept as configuration:

- work_calendar_id: the Google Calendar to read (default: primary).

- client_meeting_title_prefix: optional string like "Review" or "Annual Review" used to identify client meetings by event title.

- client_attendee_domains: optional list of email domains that mark an event as a client meeting (use either the prefix, the domains, or both — if both are set, an event matching either rule counts).

- holdings_sheet_id and holdings_range: the Google Sheets spreadsheet that maps client name to holdings. Assume columns: client_name, ticker, security_type ("stock" or "mutual_fund"), shares. Mutual fund tickers in the sheet may or may not include the M: prefix — normalize before calling YCharts.

- output_drive_folder_id: optional folder where the briefs should live (otherwise drop in root).

Steps:

1. Call google-calendar List Events on work_calendar_id for today's date range in America/New_York (timeMin = today 00:00 ET, timeMax = today 23:59 ET, singleEvents = true). Filter to events whose title starts with client_meeting_title_prefix OR whose attendees include an address whose domain is in client_attendee_domains. Skip declined events and events you organized but have no external attendees on.

2. For each matched client meeting, derive the client name. Prefer an explicit "Client: <name>" line in the event description; fall back to the non-internal attendee's display name, then to the event title with the prefix stripped.

3. Call google-sheets Get Values on holdings_sheet_id/holdings_range and filter rows where client_name matches (case-insensitive, trimmed). If no rows match, still produce a brief with the meeting context but a note that no holdings were found.

4. Split holdings by security_type. For stocks/ETFs, batch tickers (up to 100) into a single ycharts Get Company Data Points call with calculation codes: price, day_price_pct_change, ytd_total_return, dividend_yield. For mutual funds, prepend M: to each ticker and batch into a single ycharts Get Mutual Fund Data Points call with the same calculation codes. Handle YCharts response envelope (top-level meta + response keyed by symbol) and surface any per-symbol errors gracefully without aborting the whole brief.

5. Compute, per holding: market_value = shares * price; day_change_value = market_value * (day_price_pct_change / 100). Sum to portfolio_value. Rank holdings by day_change_value to identify the top contributors and top detractors. Flag any holding whose absolute day move is more than 2% as "news-worthy."

6. Draft a one-page brief with these sections: header with client name, meeting time (in ET), and attendees; Portfolio snapshot (total value, day change in $ and %, YTD return weighted by market value, weighted dividend yield); Biggest contributors today (top 3 with $ impact); Biggest detractors today (bottom 3 with $ impact); Notable moves (any "news-worthy" flagged holdings); Suggested talking points (2-3 concise bullets the advisor can riff on, grounded in the data — for example a position that has driven YTD performance, a position whose dividend yield has shifted, a fund whose YTD diverges from the rest of the book).

7. Call google-docs Create Document with title "<Client name> — Prep <YYYY-MM-DD HH:MM ET>" then google-docs Batch Update Document to insert the brief content with simple structure (Heading 1 for the client name, Heading 2 for each section, bullets where appropriate). If output_drive_folder_id is set, move the doc into that folder.

8. After all meetings are processed, write a short run summary to the workflow log: how many meetings matched, how many briefs were created, any clients skipped for missing holdings, and any YCharts symbols that returned errors.

Guardrails: never make up prices or returns — if YCharts has no value for a symbol, mark it as "data unavailable" in the brief instead of guessing. Keep each brief to roughly one page. Use a consistent professional tone, not casual. Do not include client personal data beyond what is on the calendar and in the holdings sheet.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardA searchable RFP answer library your bid team drafts fromLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to Loops