Reads the calls booked in the next day, researches the companies you are meeting, and emails you a brief.

UsesClaudeGmailGoogle MeetSerper

Company news brief before your calls

ScheduleRun every weekday at 07:00.Run every weekday at 07:00.
ValuesSet briefRecipient to blank.Set briefRecipient to blank.
ValuesSet ignoredDomains to blank.Set ignoredDomains to blank.
ValuesSet hoursAhead to 24.Set hoursAhead to 24.
ValuesSet maxMeetings to 20.Set maxMeetings to 20.
ValuesSet headlinesPerCompany to 5.Set headlinesPerCompany to 5.
ValuesSet skipDomains to an empty list.Set skipDomains to an empty list.
Decisions & LoopsFor each rawDomain in ignoredDomains in lowercase split by ,:For each rawDomain in ignoredDomains in lowercase split by ,:
TextTrim rawDomain and save it as cleanedDomain.Trim rawDomain and save it as cleanedDomain.
Decisions & LoopsIf cleanedDomain isn't emptyIf cleanedDomain isn't empty
Yes
ListsAdd cleanedDomain to the end of skipDomains and save it as skipDomains.Add cleanedDomain to the end of skipDomains and save it as skipDomains.
No
No steps
Dates & TimesGet the current date and time and save it as windowStart.Get the current date and time and save it as windowStart.
Dates & TimesMove windowStart by hoursAhead hours and save it as windowEnd.Move windowStart by hoursAhead hours and save it as windowEnd.
Google MeetGoogle MeetList upcoming meetings. Save it as schedule.List upcoming meetings. Save it as schedule.
ValuesSet meetings to schedule.meetings.Set meetings to schedule.meetings.
ValuesSet meetingCount to 0.Set meetingCount to 0.
Decisions & LoopsIf a step below fails, save the error as calendarUnreadableIf a step below fails, save the error as calendarUnreadable
Try
ListsCount the items in meetings and save it as meetingCount.Count the items in meetings and save it as meetingCount.
On error
ValuesChange meetingCount to 0.Change meetingCount to 0.
Decisions & LoopsIf meetingCount is 0If meetingCount is 0
Yes
Decisions & LoopsFinish the run: No calls with a meeting link are booked in the window, so there was nothing to brief.Finish the run: No calls with a meeting link are booked in the window, so there was nothing to brief.
No
No steps
ValuesSet briefedDomains to an empty list.Set briefedDomains to an empty list.
ValuesSet briefedNames to an empty list.Set briefedNames to an empty list.
ValuesSet sections to an empty list.Set sections to an empty list.
Decisions & LoopsFor each meeting in meetings:For each meeting in meetings:
ValuesSet meetingTitle to Untitled meeting.Set meetingTitle to Untitled meeting.
Decisions & LoopsIf a step below fails, save the error as untitledMeetingIf a step below fails, save the error as untitledMeeting
Try
TextTrim meeting.title and save it as meetingTitle.Trim meeting.title and save it as meetingTitle.
On error
ValuesChange meetingTitle to Untitled meeting.Change meetingTitle to Untitled meeting.
Decisions & LoopsIf meetingTitle is emptyIf meetingTitle is empty
Yes
ValuesChange meetingTitle to Untitled meeting.Change meetingTitle to Untitled meeting.
No
No steps
ValuesSet meetingStart to blank.Set meetingStart to blank.
Decisions & LoopsIf a step below fails, save the error as undatedMeetingIf a step below fails, save the error as undatedMeeting
Try
TextTrim meeting.start and save it as meetingStart.Trim meeting.start and save it as meetingStart.
On error
ValuesChange meetingStart to blank.Change meetingStart to blank.
ValuesSet guestDomain to blank.Set guestDomain to blank.
Decisions & LoopsFor each attendee in meeting.attendees:For each attendee in meeting.attendees:
ValuesSet guestAddress to blank.Set guestAddress to blank.
Decisions & LoopsIf a step below fails, save the error as unreadableAttendeeIf a step below fails, save the error as unreadableAttendee
Try
TextMake attendee lowercase and save it as guestAddress.Make attendee lowercase and save it as guestAddress.
On error
ValuesChange guestAddress to blank.Change guestAddress to blank.
Decisions & LoopsIf guestAddress doesn't contain @If guestAddress doesn't contain @
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ListsGet the last item of guestAddress split by @ and save it as attendeeDomain.Get the last item of guestAddress split by @ and save it as attendeeDomain.
Decisions & LoopsIf attendeeDomain ends with resource.calendar.google.comIf attendeeDomain ends with resource.calendar.google.com
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf skipDomains contains attendeeDomainIf skipDomains contains attendeeDomain
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesChange guestDomain to attendeeDomain.Change guestDomain to attendeeDomain.
Decisions & LoopsStop repeating.Stop repeating.
Decisions & LoopsIf guestDomain is emptyIf guestDomain is empty
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf briefedDomains contains guestDomainIf briefedDomains contains guestDomain
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ListsAdd guestDomain to the end of briefedDomains and save it as briefedDomains.Add guestDomain to the end of briefedDomains and save it as briefedDomains.
ValuesSet companyName to blank.Set companyName to blank.
Decisions & LoopsIf a step below fails, save the error as nameLookupFailedIf a step below fails, save the error as nameLookupFailed
Try
ClaudeClaudeAsk Claude: 'Name the company that owns this email domain. Reply with the company's usual trading name and nothing else - no punctuation, no explanation, no legal suffix. If the domain is a personal mail provider or you do not recognise it, reply with the single word unknown.Ask Claude: 'Name the company that owns this email domain. Reply with the company's usual trading name and nothing else - no punctuation, no explanation, no legal suffix. If the domain is a personal mail provider or you do not recognise it, reply with the single word unknown. Domain: guestDomain'. Save it as nameGuess. Maximum response length: 24
TextTrim nameGuess.response_text and save it as companyName.Trim nameGuess.response_text and save it as companyName.
On error
ValuesChange companyName to blank.Change companyName to blank.
Decisions & LoopsIf companyName is emptyIf companyName is empty
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf companyName in lowercase is unknownIf companyName in lowercase is unknown
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesSet articles to an empty list.Set articles to an empty list.
Decisions & LoopsIf a step below fails, save the error as newsSearchFailedIf a step below fails, save the error as newsSearchFailed
Try
SerperSerperSearch Google News for companyName. Save it as searchResult.Search Google News for companyName. Save it as searchResult.
ValuesChange articles to searchResult.articles.Change articles to searchResult.articles.
On error
ValuesChange articles to an empty list.Change articles to an empty list.
ValuesSet headlineLines to an empty list.Set headlineLines to an empty list.
Decisions & LoopsFor each article in articles:For each article in articles:
ValuesSet headline to blank.Set headline to blank.
ValuesSet headlineLink to blank.Set headlineLink to blank.
Decisions & LoopsIf a step below fails, save the error as incompleteArticleIf a step below fails, save the error as incompleteArticle
Try
TextTrim article.title and save it as headline.Trim article.title and save it as headline.
TextTrim article.link and save it as headlineLink.Trim article.link and save it as headlineLink.
On error
ValuesChange headline to blank.Change headline to blank.
Decisions & LoopsIf headline is emptyIf headline is empty
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf headlineLink is emptyIf headlineLink is empty
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesSet published to blank.Set published to blank.
Decisions & LoopsIf a step below fails, save the error as undatedArticleIf a step below fails, save the error as undatedArticle
Try
TextTrim article.date and save it as published.Trim article.date and save it as published.
On error
ValuesChange published to blank.Change published to blank.
ValuesSet line to - headline.Set line to - headline.
Decisions & LoopsIf published isn't emptyIf published isn't empty
Yes
ValuesChange line to line (published).Change line to line (published).
No
No steps
ValuesChange line to lineChange line to line headlineLink.
ListsAdd line to the end of headlineLines and save it as headlineLines.Add line to the end of headlineLines and save it as headlineLines.
ValuesSet sectionBody to blank.Set sectionBody to blank.
Decisions & LoopsIf headlineLines is emptyIf headlineLines is empty
Yes
ValuesChange sectionBody to No news from the last month mentions companyName.Change sectionBody to No news from the last month mentions companyName.
No
TextJoin headlineLines with a new line and save it as headlineText.Join headlineLines with a new line and save it as headlineText.
Decisions & LoopsIf a step below fails, save the error as briefFailedIf a step below fails, save the error as briefFailed
Try
ClaudeClaudeAsk Claude: 'You are writing a short pre-call brief for a salesperson who has a call with this company in the next few hours. Using only the headlines below, write at most four bullet points covering what has changed recently and why it matters for the call. Start each bullet with '- '. Write nothing before or after the bullets. If the headlines are about a different company with a similar name, say so in a single bullet instead of guessing.Ask Claude: 'You are writing a short pre-call brief for a salesperson who has a call with this company in the next few hours. Using only the headlines below, write at most four bullet points covering what has changed recently and why it matters for the call. Start each bullet with '- '. Write nothing before or after the bullets. If the headlines are about a different company with a similar name, say so in a single bullet instead of guessing. Company: companyName Meeting: meetingTitle Headlines: headlineText'. Save it as written. Maximum response length: 400
TextTrim written.response_text and save it as sectionBody.Trim written.response_text and save it as sectionBody.
On error
ValuesChange sectionBody to blank.Change sectionBody to blank.
Decisions & LoopsIf sectionBody is emptyIf sectionBody is empty
Yes
ValuesChange sectionBody to headlineText.Change sectionBody to headlineText.
No
ValuesChange sectionBody to sectionBodyChange sectionBody to sectionBody Headlines: headlineText.
ValuesSet sectionHeader to companyName - meetingTitle.Set sectionHeader to companyName - meetingTitle.
Decisions & LoopsIf meetingStart isn't emptyIf meetingStart isn't empty
Yes
ValuesChange sectionHeader to sectionHeaderChange sectionHeader to sectionHeader Starts: meetingStart.
No
No steps
ValuesChange sectionHeader to sectionHeaderChange sectionHeader to sectionHeader Domain: guestDomain.
ListsAdd sectionHeaderAdd sectionHeader sectionBody to the end of sections and save it as sections.
ListsAdd companyName to the end of briefedNames and save it as briefedNames.Add companyName to the end of briefedNames and save it as briefedNames.
Decisions & LoopsIf sections is emptyIf sections is empty
Yes
Decisions & LoopsFinish the run: Every call in the window is with people inside your own organisation, so there was nothing to research.Finish the run: Every call in the window is with people inside your own organisation, so there was nothing to research.
No
No steps
TextShorten Call brief: briefedNames joined by , to 120 characters and save it as briefSubject.Shorten Call brief: briefedNames joined by , to 120 characters and save it as briefSubject.
ValuesSet briefBody to Here is what has been in the news about the companies you are speaking to today.Set briefBody to Here is what has been in the news about the companies you are speaking to today. sections joined by ---------- .
GmailGmailSend an email to briefRecipient.Send an email to briefRecipient. Subject: briefSubjectbriefBody