Kommo + Brevo: email and SMS campaigns tied to pipeline stages

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 stageBrevo listAction on add
New leadLead NurturingStart email sequence (5 emails, 14 days)
QualifiedHot LeadsPersonal email from manager
Proposal sentProposal SentReminder in 3 days if not opened
WonClientsWelcome series -> onboarding
LostReactivation30-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.

More articles

All →