Brevo (formerly Sendinblue) is a platform for email and SMS marketing. Kommo is a CRM with a sales pipeline. In most companies these run in parallel: marketing sends emails to its own lists, sales manages deals in the CRM. The context does not cross — the manager does not know whether the client opened an email, and the marketer does not know what pipeline stage the client is in. The Kommo and Brevo integration synchronizes both flows: deal stage -> segment in Brevo, response to email -> data in the Kommo card.
What gets synchronized between Kommo and Brevo
Kommo -> Brevo: — New lead at “Qualification” stage -> contact added to Brevo list “Warm Leads” -> nurturing sequence starts — Lead moved to “Commercial Proposal” -> contact moved to “Hot” list -> individual email with proposal — Lead closed (Won) -> added to “Clients” list -> welcome series — Lead lost (Lost) -> added to “Reactivation” list -> series in 30–60 days
Brevo -> Kommo: — Contact opened email -> Note in Kommo card “Opened email [name] [date]” — Contact clicked link -> Note “Clicked [URL] in email [name]” — SMS delivered / not delivered -> status in custom field
Integration architecture
Kommo: deal stage change
↓ Webhook -> Backend
1. GET deal contact (email)
2. Brevo API: getContactInfo(email)
-> found: updateContact (update attributes, lists)
-> not found: createContact
3. Brevo API: addContactToList(listId)
4. Brevo API: sendTransactionalEmail (if a one-time email is needed)
Brevo Webhook: opened / clicked
↓ Backend
1. Find contact in Kommo by email
2. Create Note on the linked deal
3. (Optionally) Update scoring field on contact
Brevo REST API: key methods
Brevo API authenticates via api-key in the header.
Creating or updating a contact:
import sib_api_v3_sdk
configuration = sib_api_v3_sdk.Configuration()
configuration.api_key['api-key'] = BREVO_API_KEY
api = sib_api_v3_sdk.ContactsApi(sib_api_v3_sdk.ApiClient(configuration))
# Create or update contact with attributes from Kommo
create_contact = sib_api_v3_sdk.CreateContact(
email=email,
attributes={
'FIRSTNAME': first_name,
'LASTNAME': last_name,
'PHONE': phone,
'CRM_STAGE': kommo_stage_name,
'CRM_DEAL_VALUE': deal_price
},
list_ids=[target_list_id],
update_enabled=True # Update if contact already exists
)
api.create_contact(create_contact)
Sending a transactional email:
send_email = sib_api_v3_sdk.SendSmtpEmail(
to=[{'email': email, 'name': contact_name}],
template_id=BREVO_TEMPLATE_ID,
params={
'deal_name': deal_name,
'manager_name': manager_name,
'proposal_link': proposal_url
}
)
api_instance.send_transac_email(send_email)
Sending an SMS:
sms_api = sib_api_v3_sdk.TransactionalSMSApi(sib_api_v3_sdk.ApiClient(configuration))
send_sms = sib_api_v3_sdk.SendTransacSms(
sender='Exceltic',
recipient=phone,
content=f'Your proposal from {manager_name} has been sent to your email. Questions? Reply to this message.'
)
sms_api.send_transac_sms(send_sms)
Kommo stage -> Brevo list mapping
| Kommo stage | Brevo list | Action on add |
|---|---|---|
| New lead | Lead Nurturing | Start email sequence (5 emails, 14 days) |
| Qualified | Hot Leads | Personal email from manager |
| Proposal sent | Proposal Sent | Reminder in 3 days if not opened |
| Won | Clients | Welcome series -> onboarding |
| Lost | Reactivation | 30-day pause -> reactivation |
A contact in Brevo can be in multiple lists simultaneously — this is normal. It is important to manage unsubscribes correctly: if a contact has unsubscribed, Brevo should not receive repeated requests to add them to lists.
Handling unsubscribes
Brevo automatically marks a contact as emailBlacklisted: true when they unsubscribe. Before adding a new contact or updating one:
def safe_add_to_list(email: str, list_id: int):
contact_info = api.get_contact_info(email)
if contact_info.email_blacklisted:
# Do not touch unsubscribed contact
return
api.add_contact_to_list(list_id, {'emails': [email]})
This is critical: attempting to add an unsubscribed contact to a list violates GDPR and can lead to a Brevo account ban.
Real case
B2B company (SaaS, 60–80 leads per month, deal cycle 3–6 weeks):
- Before integration: marketing sent newsletters to everyone indiscriminately. Hot leads at the “Negotiation” stage received the same emails as cold ones from the database — without personalization.
- After: leads from Kommo are automatically distributed across Brevo segments depending on the stage. “Hot” leads receive a 1-on-1 email from the manager (transactional template). Lost leads enter a reactivation sequence after 45 days.
- Result: open rate of transactional emails from the manager — 61% (versus 22% for mass campaigns). Three reactivated clients within the first 2 months from the lost segment.
We applied the same segmentation principle for the Kommo and ActiveCampaign integration — the key question there is also correct two-way status synchronization.
Who should use this
The Kommo + Brevo integration makes sense if: — Brevo is used for email and/or SMS and there are no plans to change it — Different sequences are needed for different pipeline stages, not one campaign for everyone — It is important to see in Kommo whether the client opened an email before a call — The company sends SMS reminders or transactional SMS messages
Frequently asked questions
Brevo has a CRM — why use Kommo in parallel?
Brevo CRM is a minimalist tool built for marketing tasks. Kommo is a full-featured CRM with Digital Pipeline, telephony, tasks, and funnels. They serve different needs: Kommo — the sales process, Brevo — marketing communication. The integration lets both teams work in their preferred tools.
Sendinblue was renamed to Brevo — did the API change?
The API remained backward compatible. The endpoint api.brevo.com works alongside the old api.sendinblue.com. The SDK was updated: the old sib-api-v3-sdk (Python) was renamed to brevo-python, but the old one continues to work as well.
How do you transfer contact personal data to Brevo in accordance with GDPR?
Brevo is a European company with servers in the EU and is GDPR-compliant. For data transfer you need: (1) a legal basis (contract or consent); (2) if using Brevo for marketing — explicit consent for marketing emails. Mark contacts in Brevo with the smsBlacklisted or emailBlacklisted flag if consent is absent.
How does the Brevo webhook pass email open events?
The Brevo Webhook is configured under Settings -> Webhooks. Supported events: opened, clicked, delivered, bounced, unsubscribed. Each webhook contains the contact email, campaign ID, and timestamp — enough to link to Kommo by email.
Summary
- Kommo + Brevo: two-way synchronization — pipeline stage determines the Brevo segment, email response lands in Kommo
- Transactional emails and SMS from Brevo are triggered by Kommo events
- Unsubscribe handling (emailBlacklisted) is mandatory — a violation leads to account suspension
- Typical development timeline — 2–3 weeks
- Relevant for companies with a deal cycle of 2+ weeks where email nurturing affects conversion
If you use Brevo and Kommo and want to connect marketing campaigns to your pipeline — describe your current stage and segment structure. Exceltic.dev will propose a synchronization scheme for your logic.