We want to know which domains are opening our emails. The only way I can see to do this is to download the CSV of « Opens breakdown by domains » for each campaign, one at a time, aggregate and then query that table. Does anyone know of a more efficient way to do this? I am not a developer, but all ideas welcome.
Yes, the answer is: The excellent Brevo API delivers it.
This ‹ endpoint › delivers all the stats:
GET ``https://api.brevo.com/v3/emailCampaigns?status=sent&statistics=statsByDomain&excludeHtmlContent=true&limit=100&offset=0
It goes only back 6 months though. Going back further may work through this, have not tried it yet:
GET https://api.brevo.com/v3/emailCampaigns/{campaignId}?statistics=statsByDomain&excludeHtmlContent=true
Being neck deep into the API these days anyways I just ran the code on one of my available accounts:
2026-06-05 09:11:36,330 INFO [main] 35 sent campaigns to aggregate
2026-06-05 09:11:36,330 INFO [main] campaigns=35 range=2025-12-28..2026-06-02 total_sent=24111 avg_sent=688.9
2026-06-05 10:40:47,069 INFO [main] aggregated 20 domains — 17543 unique opens across 34380 delivered
2026-06-05 10:40:47,070 INFO [write_csv] wrote 20 domains to /Users/bremer/Workspace/probauherr/probauherr-app/data/brevo_opens_by_domain.csv
Campaign set:
campaigns: 35
date range: 2025-12-28 .. 2026-06-02
total sent: 33967
avg / camp: 970.5
Top domains by unique opens:
domain delivered del% uOpens view% open%
--------------------------------------------------------
other 10324 30.0 5628 32.1 54.5
gmail.com 7573 22.0 4248 24.2 56.1
gmx.de 4947 14.4 2309 13.2 46.7
web.de 4915 14.3 1897 10.8 38.6
t-online.de 1715 5.0 819 4.7 47.8
googlemail.com 1263 3.7 720 4.1 57.0
icloud.com 807 2.3 711 4.1 88.1
yahoo.de 968 2.8 509 2.9 52.6
gmx.net 877 2.6 329 1.9 37.5
hotmail.de 458 1.3 161 0.9 35.2
outlook.de 417 1.2 150 0.9 36.0
me.com 23 0.1 22 0.1 95.7
(other does not come from the same API but can be calculated from general stats.)
Notice that all these stats today are significantly skewed by which events are blocked or not. So use with care. In the case above, Brevo seems to do a decent job in getting them anyways. Does not seem too far off.
If it has any value to you, I can publish a quick helper page for you to run it on your own data.
