Emails you a short, sourced briefing on each outside guest booked into your calls in the day ahead.

UsesCal.comGmailOpenAISerper

Brief yourself on the people you are meeting

ScheduleRun every day at 07:30.Run every day at 07:30.
ValuesSet briefRecipient to blank.Set briefRecipient to blank.
ValuesSet ownEmailDomains to blank.Set ownEmailDomains to blank.
ValuesSet lookAheadHours to 24.Set lookAheadHours to 24.
ValuesSet maxPeople to 6.Set maxPeople to 6.
TextTrim briefRecipient and save it as recipient.Trim briefRecipient and save it as recipient.
Decisions & LoopsIf recipient doesn't contain @ (ignoring case)If recipient doesn't contain @ (ignoring case)
Yes
Decisions & LoopsStop and report a problem: The 'briefRecipient' step is not an email address, so there is nowhere to send the briefing.Stop and report a problem: The 'briefRecipient' step is not an email address, so there is nowhere to send the briefing.
No
No steps
ValuesSet ignoredDomains to an empty list.Set ignoredDomains to an empty list.
Decisions & LoopsFor each rawDomain in ownEmailDomains split by ,:For each rawDomain in ownEmailDomains split by ,:
TextMake rawDomain lowercase and save it as ignoredDomain.Make rawDomain lowercase and save it as ignoredDomain.
Decisions & LoopsIf ignoredDomain is emptyIf ignoredDomain is empty
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ListsAdd ignoredDomain to the end of ignoredDomains and save it as ignoredDomains.Add ignoredDomain to the end of ignoredDomains and save it as ignoredDomains.
MathSet windowHours to lookAheadHours multiplied by 1.Set windowHours to lookAheadHours multiplied by 1.
Decisions & LoopsIf windowHours is greater than 168If windowHours is greater than 168
Yes
ValuesChange windowHours to 168.Change windowHours to 168.
No
No steps
Decisions & LoopsIf windowHours is less than 1If windowHours is less than 1
Yes
ValuesChange windowHours to 1.Change windowHours to 1.
No
No steps
MathRound maxPeople to the nearest integer and save it as peopleLimit.Round maxPeople to the nearest integer and save it as peopleLimit.
Decisions & LoopsIf peopleLimit is greater than 15If peopleLimit is greater than 15
Yes
ValuesChange peopleLimit to 15.Change peopleLimit to 15.
No
No steps
Decisions & LoopsIf peopleLimit is less than 1If peopleLimit is less than 1
Yes
ValuesChange peopleLimit to 1.Change peopleLimit to 1.
No
No steps
Cal.comCal.comList bookings. Save it as booked.List bookings. Save it as booked.
ValuesSet sections to an empty list.Set sections to an empty list.
ValuesSet coveredEmails to an empty list.Set coveredEmails to an empty list.
ValuesSet peopleCount to 0.Set peopleCount to 0.
ValuesSet callCount to 0.Set callCount to 0.
ValuesSet notLookedUp to an empty list.Set notLookedUp to an empty list.
ValuesSet searchFailures to 0.Set searchFailures to 0.
ValuesSet lastSearchError to blank.Set lastSearchError to blank.
Decisions & LoopsFor each booking in booked.bookings:For each booking in booked.bookings:
ValuesSet startsInHours to -1.Set startsInHours to -1.
Decisions & LoopsIf a step below fails, save the error as startErrorIf a step below fails, save the error as startError
Try
Dates & TimesCount the hours from the current date and time to booking.start and save it as startsInHours.Count the hours from the current date and time to booking.start and save it as startsInHours.
On error
ValuesChange startsInHours to -1.Change startsInHours to -1.
Decisions & LoopsIf startsInHours multiplied by 1 is less than 0 or startsInHours multiplied by 1…If startsInHours multiplied by 1 is less than 0 or startsInHours multiplied by 1…
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Dates & TimesMake booking.start readable as “Monday 2:05 PM” and save it as callTime.Make booking.start readable as “Monday 2:05 PM” and save it as callTime.
ValuesSet callHasBriefing to false.Set callHasBriefing to false.
TextTrim booking.title and save it as callTitle.Trim booking.title and save it as callTitle.
Decisions & LoopsIf callTitle is empty or callTitle is nullIf callTitle is empty or callTitle is null
Yes
ValuesChange callTitle to Untitled call.Change callTitle to Untitled call.
No
No steps
Decisions & LoopsFor each attendee in booking.attendees:For each attendee in booking.attendees:
TextMake attendee.email lowercase and save it as personEmail.Make attendee.email lowercase and save it as personEmail.
Decisions & LoopsIf personEmail is empty or personEmail is nullIf personEmail is empty or personEmail is null
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf personEmail doesn't contain @ (ignoring case)If personEmail doesn't contain @ (ignoring case)
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ListsGet the last item of personEmail split by @ and save it as personDomain.Get the last item of personEmail split by @ and save it as personDomain.
Decisions & LoopsIf coveredEmails contains personEmailIf coveredEmails contains personEmail
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
TextTrim attendee.name and save it as personName.Trim attendee.name and save it as personName.
ValuesSet guestLabel to personName.Set guestLabel to personName.
Decisions & LoopsIf personName is empty or personName is nullIf personName is empty or personName is null
Yes
ValuesChange guestLabel to personEmail.Change guestLabel to personEmail.
No
No steps
Decisions & LoopsIf ignoredDomains contains personDomainIf ignoredDomains contains personDomain
Yes
ListsAdd personEmail to the end of coveredEmails and save it as coveredEmails.Add personEmail to the end of coveredEmails and save it as coveredEmails.
ListsAdd guestLabel (on a domain you said to skip) to the end of notLookedUp and save it as notLookedUp.Add guestLabel (on a domain you said to skip) to the end of notLookedUp and save it as notLookedUp.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf personName is empty or personName is nullIf personName is empty or personName is null
Yes
ListsAdd personEmail to the end of coveredEmails and save it as coveredEmails.Add personEmail to the end of coveredEmails and save it as coveredEmails.
ListsAdd personEmail (no name on the booking) to the end of notLookedUp and save it as notLookedUp.Add personEmail (no name on the booking) to the end of notLookedUp and save it as notLookedUp.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf peopleCount is greater than or equal to peopleLimitIf peopleCount is greater than or equal to peopleLimit
Yes
ListsAdd personEmail to the end of coveredEmails and save it as coveredEmails.Add personEmail to the end of coveredEmails and save it as coveredEmails.
ListsAdd personName (past the limit of peopleLimit people a run) to the end of notLookedUp and save it as notLookedUp.Add personName (past the limit of peopleLimit people a run) to the end of notLookedUp and save it as notLookedUp.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ListsAdd personEmail to the end of coveredEmails and save it as coveredEmails.Add personEmail to the end of coveredEmails and save it as coveredEmails.
ValuesAdd 1 to peopleCount.Add 1 to peopleCount.
ValuesSet results to an empty list.Set results to an empty list.
ValuesSet searchFailed to false.Set searchFailed to false.
Decisions & LoopsIf a step below fails, save the error as searchErrorIf a step below fails, save the error as searchError
Try
ValuesChange results to the results from the Serper “Search Google” step.Change results to the results from the Serper “Search Google” step.
On error
ValuesChange searchFailed to true.Change searchFailed to true.
ValuesAdd 1 to searchFailures.Add 1 to searchFailures.
ValuesChange lastSearchError to searchError.message.Change lastSearchError to searchError.message.
ValuesSet sources to blank.Set sources to blank.
ValuesSet sourceCount to 0.Set sourceCount to 0.
Decisions & LoopsFor each result in results:For each result in results:
Decisions & LoopsIf sourceCount is greater than or equal to 5If sourceCount is greater than or equal to 5
Yes
Decisions & LoopsStop repeating.Stop repeating.
No
No steps
TextTrim result.snippet and save it as resultSnippet.Trim result.snippet and save it as resultSnippet.
Decisions & LoopsIf resultSnippet is emptyIf resultSnippet is empty
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
TextTrim result.title and save it as resultTitle.Trim result.title and save it as resultTitle.
TextTrim result.link and save it as resultLink.Trim result.link and save it as resultLink.
ValuesSet sourceLine to - resultTitle: resultSnippet.Set sourceLine to - resultTitle: resultSnippet.
ValuesChange sourceLine to sourceLineChange sourceLine to sourceLine resultLink .
MathChange sources to sources plus sourceLine.Change sources to sources plus sourceLine.
ValuesAdd 1 to sourceCount.Add 1 to sourceCount.
ValuesSet personHeading to personName <personEmail>.Set personHeading to personName <personEmail>.
ValuesChange personHeading to personHeadingChange personHeading to personHeading Meeting: callTitle, callTime.
ValuesChange callHasBriefing to true.Change callHasBriefing to true.
Decisions & LoopsIf searchFailed is yesIf searchFailed is yes
Yes
ListsAdd personHeadingAdd personHeading The web search for this person failed (lastSearchError), so nothing was looked up. That is not the same as there being nothing to find. to the end of sections and save it as sections.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf sourceCount is 0If sourceCount is 0
Yes
ListsAdd personHeadingAdd personHeading No public information was found for this person, so there is nothing to brief. to the end of sections and save it as sections.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesSet personPrompt to You are writing two or three sentences about ONE person, for someone who is about to meet them.Set personPrompt to You are writing two or three sentences about ONE person, for someone who is about to meet them. Rules you must follow, without exception: - Use ONLY the search results below. Every statement you write must be supported by one of them. - Do not state a job title, an employer, a history or anything else unless a result below states it. - Do not guess anything from the person's email address. - If the results below look like they are about a different person with a similar name, write only: 'The search results do not clearly match this person.' - Write nothing about their personal life, family, health, politics or beliefs, even if a result mentions it. - No advice, no opinions, no suggested talking points. - Plain text. No markdown, asterisks or hash marks. Person: personName.
ValuesChange personPrompt to personPromptChange personPrompt to personPrompt Email domain: personDomain.
ValuesChange personPrompt to personPromptChange personPrompt to personPrompt Search results: sources.
ValuesSet note to blank.Set note to blank.
Decisions & LoopsIf a step below fails, save the error as modelErrorIf a step below fails, save the error as modelError
Try
TextTrim the response text from the OpenAI “Ask OpenAI” step and save it as note.Trim the response text from the OpenAI “Ask OpenAI” step and save it as note.
On error
ValuesShow in the output: No briefing could be written for personName.Show in the output: No briefing could be written for personName.
Decisions & LoopsIf note is empty or note is nullIf note is empty or note is null
Yes
ValuesChange note to No briefing was written for this person this run. The sources found are listed below - read them yourself..Change note to No briefing was written for this person this run. The sources found are listed below - read them yourself..
No
No steps
ValuesSet section to personHeadingSet section to personHeading note truncated to 1500 characters using as the ellipsis.
ValuesChange section to sectionChange section to section What this is based on: sources.
ListsAdd section to the end of sections and save it as sections.Add section to the end of sections and save it as sections.
Decisions & LoopsIf callHasBriefing is yesIf callHasBriefing is yes
Yes
ValuesAdd 1 to callCount.Add 1 to callCount.
No
No steps
ValuesSet notLookedUpLine to blank.Set notLookedUpLine to blank.
ValuesSet emailClosing to blank.Set emailClosing to blank.
Decisions & LoopsIf notLookedUp isn't emptyIf notLookedUp isn't empty
Yes
TextJoin notLookedUp with , and save it as notLookedUpNames.Join notLookedUp with , and save it as notLookedUpNames.
TextBuild the text Not looked up: @notLookedUpNames. and save it as notLookedUpLine.Build the text Not looked up: @notLookedUpNames. and save it as notLookedUpLine.
ValuesChange emailClosing to Change emailClosing to ---------- notLookedUpLine.
No
No steps
Decisions & LoopsIf sections is emptyIf sections is empty
Yes
Decisions & LoopsFinish the run: Nobody outside your own domains could be looked up in the window ahead, so no briefing was sent. notLookedUpLine.Finish the run: Nobody outside your own domains could be looked up in the window ahead, so no briefing was sent. notLookedUpLine.
No
No steps
ValuesSet peopleWord to people.Set peopleWord to people.
Decisions & LoopsIf peopleCount is 1If peopleCount is 1
Yes
ValuesChange peopleWord to person.Change peopleWord to person.
No
No steps
ValuesSet callWord to calls.Set callWord to calls.
Decisions & LoopsIf callCount is 1If callCount is 1
Yes
ValuesChange callWord to call.Change callWord to call.
No
No steps
ValuesSet headline to peopleCount peopleWord across callCount callWord in the next windowHours hours.Set headline to peopleCount peopleWord across callCount callWord in the next windowHours hours.
ValuesSet emailIntro to headline.Set emailIntro to headline. Here is what public web sources say about them.
ValuesChange emailIntro to emailIntroEvery line comes from the sources quoted beneath it, and where nothing was found it says so. Check anything you plan to repeat out loud.Change emailIntro to emailIntroEvery line comes from the sources quoted beneath it, and where nothing was found it says so. Check anything you plan to repeat out loud.
TextJoin sections with "Join sections with ---------- and save it as allSections.
TextJoin [emailIntro, allSections, emailClosing] with nothing and save it as emailBody.Join [emailIntro, allSections, emailClosing] with nothing and save it as emailBody.
ValuesSet emailSubject to Who you are meeting: headline.Set emailSubject to Who you are meeting: headline.
GmailGmailSend an email to recipient.Send an email to recipient. Subject: emailSubjectemailBody
Decisions & LoopsIf searchFailures is greater than 0 and searchFailures is peopleCountIf searchFailures is greater than 0 and searchFailures is peopleCount
Yes
Decisions & LoopsStop and report a problem: Every web search failed (Serper said: lastSearchError), so the briefing that was sent has no research in it. Check your Serper connection under Integrations, then run it again.Stop and report a problem: Every web search failed (Serper said: lastSearchError), so the briefing that was sent has no research in it. Check your Serper connection under Integrations, then run it again.
No
No steps
ValuesShow in the output: Emailed a briefing covering headline.Show in the output: Emailed a briefing covering headline.