Daily Brevo deliverability log in Google Sheets

Every morning, a new row appears for each hard bounce, soft bounce, and unsubscribe from the last 24 hours of Brevo activity.

Deterministic Code
BrevoGoogle SheetsMarketingOperationsData SyncDaily DigestsResearch & Monitoring

Build me a code workflow that runs every morning at 7am and writes my Brevo deliverability events from the last 24 hours into a Google Sheet. This is a pure deterministic ETL: list events, shape rows, append. No LLM steps, no judgement calls. Make it a code workflow, not an agent.

Trigger: daily cron at 7am in my local timezone.

Step 1. Call Brevo Get Email Event Reports for the previous calendar day, scoped to startDate = yesterday 00:00 UTC and endDate = today 00:00 UTC. I need three event types: hardBounces, softBounces, and unsubscribed. You can either call the operation three times (once per event type) or use the multi-event filter if Brevo accepts it in a single call. Paginate until every event in the window is drained, not just the first page.

Step 2. For each event, build a row with these columns in order: date (event timestamp), recipient email, event type (hardBounce, softBounce, or unsubscribed), campaign or template id (whichever the event carries), and reason text. Use the event's reason field where available; leave it blank if Brevo didn't return one.

Step 3. Use Google Sheets Append Values to append the rows to a tab called 'Brevo deliverability log' in my chosen spreadsheet. Rows should land in chronological order (oldest event first). If there are zero events for the day, log a short message and exit cleanly without writing anything.

Ask me at build time which spreadsheet to write to, and confirm the tab name and column order before finalizing.

Additional information

What does this prompt do?
  • Pulls yesterday's hard bounces, soft bounces, and unsubscribes from Brevo every morning at 7am.
  • Appends one row per event to a 'Brevo deliverability log' tab in your chosen Google Sheet.
  • Captures the date, recipient email, event type, campaign or template, and reason for each event.
  • Builds a running audit trail you can sort, filter, and review for list health trends over time.
What do I need to use this?
  • A Brevo account with permission to generate an API key.
  • A Google account connected to Google Sheets.
  • A spreadsheet ready to receive the log (Geni will help you set up the tab when you build the workflow).
How can I customize it?
  • Change the run time, the timezone, or run it twice a day instead of once.
  • Add or drop event types. You can also track opens, clicks, deferreds, blocked addresses, or spam complaints.
  • Scope the log to a specific campaign, template, or sender so it stays focused on the lists you actually care about.

Frequently asked questions

Will this overwrite my existing log?
No. New rows are appended below the last filled row, so your full history stays intact.
Can I point it at a different spreadsheet or tab name?
Yes. Geni will ask which spreadsheet to write to and what to name the tab when you build the workflow.
What happens if there were no bounces or unsubscribes yesterday?
The workflow exits cleanly without writing any rows. You'll still see the run in your history so you know it ran.
Does this affect my Brevo sending or pause any campaigns?
No. The workflow only reads event reports. It never sends, edits, or pauses anything in your Brevo account.
Can I add other deliverability signals like spam complaints or blocked addresses?
Yes. Brevo reports those too. Just mention them when you build the workflow and they'll be added to the daily pull.

Stop guessing at your Brevo list health.

Connect Brevo and Google Sheets once, and Geni keeps a clean audit trail of every bounce and unsubscribe, delivered to your spreadsheet at 7am each morning.