media · scheduled segment export + CRM lookup + subscription check + three-way sort + dry-run report + list cleanup

Moved engaged Brevo readers into HubSpot newsletters every week, with a dry run first, for a regional news publisher

Client snapshot

A regional news publisher with a small audience team. Brevo ran the lead magnet and event emails. HubSpot ran the three newsletters and held the advertiser reporting. Brevo kept a segment of engaged readers: anyone who had opened three emails or clicked more than three links.

The problem

Those engaged readers were the best newsletter prospects, but they stayed in Brevo. Once a month someone exported the segment, cleaned it in a spreadsheet and imported it into HubSpot. Some readers ended up subscribed twice, some were imported but never made marketing contacts, and nobody removed them from the Brevo list, so they kept getting emails from both tools.

What we built

One n8n workflow on a weekly schedule.

  1. Pull the segment. Every Friday the workflow reads the engaged segment from Brevo's API, page by page, and lowercases every email.
  2. Check HubSpot in batches. Each email is looked up in HubSpot 100 at a time. For readers who exist, the workflow reads their status for each of the three newsletters from HubSpot's communication preferences.
  3. Sort into three groups. Already subscribed to a newsletter: remove from the Brevo list only. In HubSpot but not subscribed or not a marketing contact: set marketing contact and subscribe to the weekly newsletter. Not in HubSpot: create the contact, then the same.
  4. Dry run first. The first runs only wrote a report to a Google Sheet: who would be created, who would become a marketing contact, who would be subscribed. The audience lead checked it, and we found readers who had unsubscribed in HubSpot before. They are now flagged and never resubscribed.
  5. Clean up Brevo. After the HubSpot changes, each reader is removed from the Brevo leads list but stays in Brevo, so their history is kept.

Every run adds a summary row to the Sheet: counts per group and any records HubSpot rejected.

Results, 8 weeks in

  • Engaged readers moving into a HubSpot newsletter: none on a regular basis → about 300 a week.
  • Readers subscribed twice or emailed from both tools: about one in six → none.
  • The weekly export and cleanup: around 2 hours → a 5 minute look at the run summary.
  • Marketing contact growth is visible before it happens, because the report shows the count first.

Quote

"The dry run sold it. We saw exactly who would be added before a single contact changed." Audience lead

Build snapshot

  • Timeline: 3 business days
  • Stack: Brevo, HubSpot, n8n, Google Sheets
  • Investment: $450
  • Who owned it: the audience lead switches dry-run mode on or off with one setting and reviews the weekly summary.

The pattern

Moving people between two email tools is mostly a matching problem: clean the emails, check both the contact and their subscriptions, and sort before you write anything. A dry-run report first catches the edge cases, like past unsubscribes, before they reach a real inbox.


This is an illustrative composite drawn from operator engagements. Names, identifying details, and exact metrics are anonymised. The workflow, stack, and approach are real.

Looks like your situation?

A 30-minute call tells us whether the same pattern fits your operation, and what it would cost to ship it.