Skip to main content

Brevo Contact Sync

LIKE MAGIC can push your guest profiles into your own Brevo account as contacts. Each contact carries the guest's contact details, their communication preferences and a set of stay and revenue attributes, so you can build segments and campaigns in Brevo on real stay behaviour instead of an exported list.

The sync runs in one direction: LIKE MAGIC writes to Brevo. Changes you make to a contact inside Brevo are never read back into the guest profile, and a later push from LIKE MAGIC overwrites the attributes it sends.

This is a reference article for the person who owns marketing in Brevo. It tells you exactly when a contact is pushed and what each push contains.


1. What the Integration Doesโ€‹

Whenever something meaningful happens to a guest in LIKE MAGIC, the platform builds the guest's current profile and sends it to Brevo as a contact, creating the contact if it does not exist yet and updating it if it does.

The profile that gets sent is always the current, complete picture of that guest, not just the part that changed. A guest who checks out with their fourth stay arrives in Brevo with their recalculated averages, room nights and revenue totals in the same push.

โ„น๏ธ This is a built-in integration with Brevo specifically. If you want to feed a different CRM, that is a separate build against Webhooks & Events and the Event & Data Hub.


2. Before You Startโ€‹

๐Ÿงฉ The integration is enabled per account by LIKE MAGIC. Request activation via a Support Ticket.

What you bring:

  • A Brevo account, on a plan that covers the contact volume you expect.
  • A Brevo API key, created in your Brevo account and handed over with the activation request. LIKE MAGIC uses it to write contacts into your account, so treat it as a credential and send it the way your Support Ticket tells you to, not in a plain message.
  • The custom attributes created in Brevo. Brevo only stores an attribute that already exists on your account, with a matching name and a compatible type. Create the attributes from section 4 before the first push, otherwise the contacts arrive with those values missing.

๐Ÿ’ก Ask for a one-time initial load together with the activation. It walks your existing guest profiles and creates them in Brevo, so you start with your full contact base instead of only the guests who happen to travel next.


3. When a Contact Is Pushedโ€‹

A push happens on these events, and only on these events:

EventWhat it means
Profile createdA new guest profile comes into existence.
Profile updatedGuest data changes, for example through pre-check-in, the guest account or a staff edit.
Reservation checked inThe guest arrives.
Reservation checked outThe guest departs. Stay totals and averages are recalculated before the push.
Reservation no-showThe reservation is marked as a No-Show.
Reservation cancelledThe reservation is cancelled.

โš ๏ธ A new booking on its own does not push the contact. There is no push when a reservation is created. A first-time guest who books today reaches Brevo when their profile is created or updated, or at the latest when they check in, not at the moment of booking.


4. What Is Pushedโ€‹

Every push sends the attributes below. An attribute the guest profile has no value for is left out of the push rather than sent empty, so a value already held in Brevo stays as it is.

a) Identity and Contact Detailsโ€‹

Brevo attributeContent
EXT_IDThe guest's identifier in LIKE MAGIC. Stable across stays and the reliable key when you match Brevo data back to LIKE MAGIC.
emailEmail address. Also the key Brevo matches on, see section 5.
FIRSTNAME, VORNAMEFirst name, written to both attributes.
LASTNAME, NACHNAMELast name, written to both attributes.
GENDERGender as held on the profile.
BIRTHDATEDate of birth.
NATIONALITYNationality as a country code.
LANGUAGEPreferred language as a language code. Use it to pick the language of a campaign.
ADDRESS_1, ADDRESS_2Street address, first and second line.
POSTAL_CODE, CITY, COUNTRYPostal code, city and country code.
SMS, WHATSAPPMobile number, written to both attributes.

โ„น๏ธ The mobile number is only sent when it belongs to exactly one guest profile. Brevo requires a phone number to be unique across contacts, so a number shared by several profiles (a family booking under one number) is left out and the contact is written without it.


Brevo attributeContent
OPT_INWhether the guest opted in to marketing communication.
DOUBLE_OPT-INYes or No, whether the guest confirmed that opt-in through the confirmation step.
HAS_ACCOUNTWhether the guest has a Guest User Account.
COMMUNICATION_CHANNELThe channel the guest prefers to be contacted on.

c) Stay Behaviourโ€‹

Brevo attributeContent
FIRST_RESERVATION_CREATEDDate of the guest's first reservation.
LAST_RESERVATION_DEPARTUREDeparture date of the most recent stay.
AMOUNT_RESERVATIONS_CHECKEDOUTNumber of reservations the guest actually completed.
ROOM_NIGHTSTotal nights stayed across all stays.
AVERAGE_LENGTH_OF_STAYAverage nights per stay.
AVERAGE_AMOUNT_OF_GUESTS_PER_STAYAverage number of guests per stay.
AVERAGE_RESERVATION_LEAD_TIMEAverage days between booking and arrival.
MOST_USED_PROPERTY, LAST_PROPERTYThe property the guest books most often, and the most recent one.
MOST_USED_CHANNEL, LAST_CHANNELThe booking channel used most often, and the most recent one. Use it to separate direct bookers from OTA guests.
MOST_USED_CHECKIN_METHOD, LAST_CHECKIN_METHODHow the guest usually checks in, and how they did last time.
MOST_USED_CHECKOUT_METHOD, LAST_CHECKOUT_METHODHow the guest usually checks out, and how they did last time.

d) Value and Revenueโ€‹

Every amount covers completed stays and includes all charges on the folio (accommodation, Services and taxes).

Brevo attributeContent
SUM_RESERVATIONS_PRICETotal revenue from the guest across all completed stays.
AVERAGE_SPEND_PER_STAYAverage revenue per completed stay.
AVERAGE_DAILY_RATEAverage price per night, total revenue divided by room nights.
AVERAGE_CANCELLATION_RATEShare of the guest's reservations that were cancelled.
AVERAGE_NOSHOW_RATEShare of the guest's reservations that ended as a No-Show.

5. How Contacts Are Matchedโ€‹

Brevo identifies a contact by email address. Each push either creates a contact under that address or updates the existing one, so a returning guest does not produce a second contact.

Two consequences worth planning for:

  • A guest profile without an email address has nothing for Brevo to match on and does not become a contact.
  • A guest who books under two different email addresses becomes two contacts. EXT_ID still tells you they are the same person in LIKE MAGIC, so segment or de-duplicate on EXT_ID when that matters.

โš ๏ธ The push itself is not filtered by consent. A guest profile is sent to Brevo whether or not the guest opted in, with the opt-in state carried in the OPT_IN and DOUBLE_OPT-IN attributes. Deciding who may actually receive a marketing message happens on your side, in Brevo.

Before you send a campaign, build your list from a Brevo segment that filters on OPT_IN (and on DOUBLE_OPT-IN where your market requires a confirmed opt-in). Sending to the full contact list reaches guests who never consented.

๐Ÿ’ก Set those segments up once, right after activation, and use them as the basis for every campaign rather than filtering per send.


7. Troubleshootingโ€‹

What you seeWhat to check
A guest is missing from Brevo entirelyThe profile has no email address (section 5), or nothing has happened to that guest yet that triggers a push (section 3). Consent is not the reason, contacts are pushed regardless of opt-in.
Guests from before the activation are missingThe initial load was not run. Request it via a Support Ticket.
An attribute stays empty on every contactThe custom attribute does not exist in Brevo yet, or its name or type does not match. Create it as described in section 2 and trigger a fresh push by having the guest data change.
SMS and WHATSAPP are empty although the profile has a numberThe number is used on more than one guest profile, so it is left out.
The contact did not update after a new bookingReservation creation does not trigger a push. The contact updates on check-in, checkout, cancellation, no-show or the next profile change.
Stay totals look one stay behindTotals are recalculated at checkout. A stay that has not been checked out yet is not counted.
Addresses ending in a particular domain never arriveEmail domains that your account treats as invalid, typically OTA alias addresses, are skipped instead of being pushed.

8. Conclusionโ€‹

Once Brevo is connected, your contact base keeps itself current: every arrival, departure and profile change refreshes the guest's attributes, and your segments follow along without an export. The two things to get right up front are the custom attributes in Brevo, so the data has somewhere to land, and your consent segments, so campaigns only reach guests who opted in.

Related reading:

Was this article helpful?