Codex Meeting Prep Automation for Sales
A nightly workflow that reads calendar plus CRM plus signals, writes the brief, lands in your inbox by 7 AM.
What This Replaces
AEs spend 15 to 25 minutes preparing for each sales call. Pulling the account record from the CRM, reading the last touchpoint, checking LinkedIn for the attendees, scanning recent news. Across a calendar of 5 to 8 calls per day, that's 75 minutes to over 3 hours of prep work daily.
A Codex meeting prep workflow runs at 8 PM, processes tomorrow's booked calls, and lands a one-page brief in each AE's inbox before 7 AM. Same prep, no manual work. The AE reads the brief with coffee and walks into the call ready.
For the broader Codex CLI patterns, see the Codex CLI guide. For the Claude Code equivalent, swap codex exec for claude -p.
The Architecture
Six components. Calendar source (Google or Outlook MCP). CRM (HubSpot or Salesforce MCP). LinkedIn data source (Sales Navigator export or community MCP). News search (web search MCP). Output destination (email via Resend or Notion via the Notion MCP). The orchestrating workflow file.
Step 1: Wire the Calendar MCP
For Google Calendar, the official MCP server handles OAuth and exposes calendar reads:
[mcp_servers.gcal]url = "https://mcp.google.com/calendar"bearer_token_env_var = "GCAL_TOKEN"
For Outlook, use a community MCP server or wrap the Microsoft Graph API. The scope should be calendar.read.shared so the workflow can see meetings on shared calendars too (assistant-managed calendars are common for senior AEs).
Step 2: Define the Calendar Filter
Not every meeting on the calendar is a sales call. The workflow needs to filter.
Common filters: meeting title contains "demo", "discovery", "call", "intro" (case insensitive). Attendee domain is not your company's domain. Meeting is on a sales calendar (if you use category-based calendars). Meeting is not internal (filter out 1:1s, team meetings, recruiting).
Store the filter rules in filters.json so the GTM team can adjust them without changing the workflow logic.
Step 3: Write the Brief Generation Prompt
For each filtered meeting, the workflow runs this prompt structure.
Inputs. Meeting title, attendees (names and email domains), scheduled start time, meeting duration, calendar description if any.
Steps. 1. Match each attendee email domain to a company in the CRM. 2. Read the company record: industry, employee count, recent activity, current lifecycle stage, owner. 3. Read open opportunities for the company. 4. Read recent touchpoints (emails, calls, meetings) in last 30 days. 5. For each attendee with a known name, search LinkedIn for substantive posts in last 30 days. 6. Search the web for recent news about the company in last 60 days. 7. Synthesize into a one-page brief in the format below.
Output format. Header (company, meeting title, attendees). Account context (4-6 bullets). Attendee context (per person, 2-3 lines each). Recent signals (3-5 bullets if any). Suggested questions (3 specific questions the AE could ask). The angle (one paragraph on the recommended approach).
Step 4: Schedule and Deliver
Schedule the workflow for 8 PM PT every weekday.
0 20 * * 1-5 cd ~/gtm-agents && codex exec "prep tomorrow's sales meetings" >> logs/meetings.log 2>&1
Briefs deliver via email (one email per AE with all their briefs, threaded) or Notion (a page per AE in the Daily Briefs database).
Most teams use email because AEs check email first thing. Notion works if your team already uses it as the morning ritual.
Step 5: Add the CRM Follow-Up Hook (Optional)
After the meeting happens (the AE has a calendar event in the past), a separate workflow runs to capture the outcome. The AE adds a one-paragraph note to the meeting event ("Discussed pain in their current vendor, demo next week"). The workflow reads new past meetings every hour, extracts the AE's note, and updates the CRM opportunity record with the outcome and any next steps.
This part is optional but valuable. It removes the "log this in CRM" step that AEs skip or delay.
What Breaks
Three failure modes. Wrong account match. The attendee's personal email domain (gmail.com, outlook.com) doesn't match a CRM account. Handle by checking the attendee's company on LinkedIn instead. Stale CRM data. The opportunity record is from 6 months ago and doesn't reflect recent activity. Add a freshness check and a warning in the brief. Generic LinkedIn posts. The model treats "Excited to start at new company!" as substantive. Tighten the prompt to filter for posts that mention the prospect's role responsibilities or industry topics.
For related patterns, see the sales agent guide, the pulse report template, and the broader agent fleet pattern.
Authoritative References
For Codex CLI and codex exec, see OpenAI's Codex CLI documentation. For Google Calendar API and OAuth scopes, see Google Calendar API documentation.
Frequently Asked Questions
What does a Codex meeting prep workflow output?
A one-page brief for every booked sales call tomorrow. The brief includes: account context (recent activity, deal stage, open opportunities), attendee context (titles, recent LinkedIn posts, prior touchpoints), three suggested questions to ask, the recommended angle, and the explicit ask for the meeting. The brief lands in the AE's email or Notion before 7 AM so they read it with coffee.
How does the workflow pull calendar events?
Through a calendar MCP server (Google Calendar's official one or an Outlook community server). The workflow reads tomorrow's meetings filtered by category (Sales calls only, not internal or recruiting). For each meeting, it parses the attendee list to extract names and email domains, then matches each domain to an account in the CRM.
Should the meeting brief include the prospect's social media posts?
Yes, but selectively. Recent LinkedIn posts (last 30 days) from the prospect about the problem you solve, your industry, or their work are useful. Generic posts about coffee or weekend hikes are not. The workflow should filter for substantive posts. Most teams include the top 3 most-recent substantive posts with a one-line summary each.
What's the right cadence for running the meeting prep workflow?
Once per evening at 8 PM PT for the next day's calls. Calling it more frequently wastes compute since calendars don't change much intraday. For same-day meetings booked after 8 PM, run an additional ad-hoc command in the morning that prepares briefs for any new same-day calls.
Does the meeting brief workflow need write access to the CRM?
Optional. Read-only is sufficient for producing the brief. Some teams add write access so the workflow can log a 'Brief generated by Codex on [date]' note to the related opportunity. Most teams keep it read-only and write the brief to Notion or send via email instead. Less risk, same value.
Source: State of GTM Engineering Report 2026 (n=228). Salary data combines survey responses from 228 GTM Engineers across 32 countries with analysis of 3,342 job postings.