Nodes:
name: Setup
type: n8n-nodes-base.set
parameters: fields: values: name: apiKey
stringValue: 32aa914c947342169c4998b6701a77e0
name: newsAge
type: numberValue
numberValue: 10
name: maxArticles
stringValue: 20
name: emails
name: Extract company name
type: n8n-nodes-base.set
parameters: fields: values: name: companyName
stringValue: ={{ $json.summary.toLowerCase().replace('meeting with', '').replace('call with', '').trim() }}
name: Sticky Note
type: n8n-nodes-base.stickyNote
parameters: color: 4
width: 436
height: 192
content: ### Latest company news before a call

This workflow will send you a list of latest news about a company for every meeting in your calendar each day, keeping you up to date with your leads and meeting partners.

name: Every morning @ 7
type: n8n-nodes-base.scheduleTrigger
parameters: rule: interval: 7
name: Filter meetings
type: n8n-nodes-base.if
parameters: conditions: options: caseSensitive: yes
typeValidation: strict
combinator: or
conditions: operator: type: string
operation: startsWith
leftValue: ={{ $json.summary.toLowerCase() }}
rightValue: call with
operator: type: string
operation: startsWith
leftValue: ={{ $json.summary.toLowerCase() }}
rightValue: meeting with
name: Get latest news
type: n8n-nodes-base.httpRequest
parameters: url: =https://newsapi.org/v2/everything?apiKey={{ $('Setup').first().json.apiKey }}&q={{ $json.companyName }}&from={{ DateTime.now().minus({ days: $('Setup').first().json.newsAge }).toFormat('yyyy-MM-dd') }}&sortBy=publishedAt&language=en&pageSize={{ $('Setup').first().json.maxArticles }}&searchIn=title
name: Format for email
type: n8n-nodes-base.code
parameters: mode: runOnceForEachItem
jsCode: let html = `<table style="width: 100%">`;
html += '</table>';

for(article of $input.item.json.articles) {
  console.log(article)
  html += `
    <tr>
      <td style="display: flex; background-color: #f2f4f8; font-family: sans-serif; padding: 0.3em 0.5em">
        <div style="padding: 1em">
          <a style="display: block; margin-bottom: 10px; font-size: 1.2em" href="${article.url}">${article.title}</a>
          <i>
            ${article.description ? article.description : article.content}
          </i>
          <div style="margin-top: 1em">
            ${ article.source?.name ? '<b>Source:</b> ' + article.source?.name : '' }
          </div>
        </div>
      </td>
    </tr>
  `
}
return { "html": html };
name: Send news
type: n8n-nodes-base.gmail
parameters: sendTo: ={{ $('Setup').first().json.emails }}
message: ={{ $json.html }}
subject: =Latest news for '{{ $('Extract company name').item.json.summary }}'
name: Sticky Note1
type: n8n-nodes-base.stickyNote
parameters: height: 511.499984507795
content: 














### Configure your workflow here
1. `apiKey` - Your API key for [News API](https://newsapi.org)
2. `newsAge` - How old should news be, in days
3. `maxArticles` - Number of articles that will be sent, max 100
4. `emails`- List of email addresses that should receive the news, separated by commas
name: Sticky Note2
type: n8n-nodes-base.stickyNote
parameters: width: 231.52514020446353
height: 275.2500697149263
content: 












This will get all meetings that start with *Meeting with* or *Call with* but feel free to update the filter to suit your needs.
name: No meetings today
type: n8n-nodes-base.noOp
name: Get meetings for today
type: n8n-nodes-base.googleCalendar
parameters: options: timeMax: ={{ $today.plus({ days: 1 }) }}
timeMin: ={{ $today }}
singleEvents: yes
calendar: __rl: yes
mode: list
value: milorad.filipovic19@gmail.com
cachedResultName: milorad.filipovic19@gmail.com
operation: getAll

Connections:
Setup: main: node: Get meetings for today
type: main
Filter meetings: main: node: Extract company name
type: main
node: No meetings today
type: main
Get latest news: main: node: Format for email
type: main
Format for email: main: node: Send news
type: main
Every morning @ 7: main: node: Setup
type: main
Extract company name: main: node: Get latest news
type: main
Get meetings for today: main: node: Filter meetings
type: main