Log every external Google Calendar meeting in HubSpot automatically

When a new external meeting hits your Google Calendar, Geni files a HubSpot note on the contact and deal, then posts a Slack confirmation to the deal owner.

Agentic Task
Google CalendarHubSpotSlackSalesOperationsData SyncMeeting WorkflowsNotifications & Alerts

Build me an agent workflow that keeps HubSpot up to date with every external sales meeting on my Google Calendar, with no manual logging.

Trigger: Google Calendar, poll trigger, event type new_event on my primary calendar. Ask me for my own company email domain on first run so the agent knows what counts as internal versus external.

When a new event fires, inspect the attendee list. If every attendee email shares my own company domain, ignore the event and stop. This keeps internal standups and 1:1s out of the CRM.

Otherwise, for each external attendee on the event, run HubSpot Search Contacts filtered by email. If a contact exists, use that contact. If no contact exists, call HubSpot Create Contact first, parsing first name, last name, and email from the calendar attendee, then continue with the new contact.

For the matched or newly created contact, also run HubSpot Search Deals scoped to the contact's associated company, sorted by most recently updated, to find the active deal if there is one.

Then call HubSpot Create Note associated with the contact (and the deal if one was found) with a body that contains a Meeting scheduled header, the meeting title, the start time in the calendar's time zone, the organizer email, the attendee list, and the agenda copied from the event description. Keep the note short and scannable.

Finally, post a Slack Send a Message confirmation to the deal owner. Resolve the owner from the HubSpot deal record (fall back to the contact owner if there is no deal). Use a per-owner channel if one is configured, otherwise DM the owner. The message should summarize what was logged in one or two sentences, name the contact and company, and link to the HubSpot note so the rep can jump in.

Be defensive: skip attendees with obviously invalid emails, do not create duplicate contacts within a single run, and if the HubSpot or Slack call fails, log the error and continue with the remaining attendees rather than aborting the whole event.

Additional information

What does this prompt do?
  • Watches your Google Calendar for new events and ignores any meeting where every attendee shares your own email domain.
  • For each external attendee, looks them up in HubSpot by email and creates the contact if they do not exist yet.
  • Files a Create Note on the contact (and any associated deal found via Search Deals) capturing meeting title, time, organizer, agenda from the event description, and a Meeting scheduled header.
  • Posts a short Slack confirmation to the deal owner so reps can see exactly what was logged without opening HubSpot.
What do I need to use this?
  • A Google Calendar account connected to General Input with read access to the calendar that holds your sales meetings.
  • A HubSpot account with permission to read contacts and deals and to write contacts and notes.
  • A Slack workspace connected with permission to send messages on the deal owner channel.
  • Your own company email domain so the agent knows which attendees count as external.
How can I customize it?
  • Swap the Slack target from a per-owner channel to a shared #sales-activity channel if leadership wants one feed.
  • Tighten or widen the external filter, for example treat partner domains as internal so partner syncs do not pollute the CRM.
  • Change the note body template, add fields like meeting link, location, or a one-line AI summary of the agenda.

Frequently asked questions

How does the agent decide whether a meeting is external?
It compares every attendee email domain against your own company domain. If at least one attendee is on a different domain the meeting is treated as external and logged. If everyone is on your domain, for example an internal standup, the agent skips it.
What happens if the attendee does not exist in HubSpot yet?
The agent calls HubSpot Create Contact first, parsing first and last name and email from the calendar attendee, then attaches the meeting note to the new contact. No external prospect ever falls through the cracks.
Does it associate the note with the deal too?
Yes. After it has the contact, the agent runs Search Deals scoped to the contact's company so the note shows up on the active deal timeline, not just the contact record.
Will it log the same meeting twice if the event gets edited?
No. The Google Calendar new_event poll trigger only fires for newly created events, so reschedules and updates do not create duplicate HubSpot notes.
Can I route the Slack confirmation somewhere other than the deal owner?
Yes. The agent reads the deal owner from HubSpot to pick a channel, but you can edit the prompt to send to a fixed channel, a manager DM, or any other Slack destination.

Stop letting external meetings disappear from your CRM.

Connect Google Calendar, HubSpot, and Slack once, and Geni logs every external sales meeting the moment it lands on your calendar.