Eksport danych i migracja w Brevo: jak przenieść dane do środka lub na zewnątrz
Wyeksportuj kontakty, statystyki i logi z Brevo, dowiedz się dokładnie, co nie przenosi się razem z nimi, i przejdź krok po kroku listę kontrolną migracji w obie strony.
Popularność fraz w rodzaju „brevo data export migration to another platform” napędza jedna obawa: że dane, które nagromadziłeś, łatwiej włożyć niż wyjąć. Uczciwa odpowiedź w przypadku Brevo brzmi tak: większość wychodzi czysto, część wychodzi w formie, którą trzeba odbudować, a niewielka, ale ważna część nie może się przenieść w ogóle.
Ten przewodnik obejmuje oba kierunki. Wymienia dokładnie, co się eksportuje, a co nie, podaje wywołania API dla kont zbyt dużych na interfejs oraz listę kontrolną migracji, która traktuje listy wykluczeń i reputację nadawczą jako sprawy pierwszej wagi, a nie dodatek na koniec.
Co faktycznie da się wyeksportować z Brevo
| Dane | Jak wychodzą | Format |
|---|---|---|
| Kontakty i atrybuty | Eksport ze strony kontaktów lub POST /v3/contacts/export | CSV |
| Przynależność do list | Eksport per lista lub pole metadanych _listIds | CSV |
| Status subskrypcji | exportSubscriptionStatus w zadaniu eksportu | CSV |
| Statystyki kampanii | Eksport raportu kampanii lub GET /v3/emailCampaigns | CSV, PDF, JSON |
| Logi zdarzeń transakcyjnych | GET /v3/smtp/statistics/events lub zadanie eksportu masowego | JSON, CSV |
| Szablony | GET /v3/smtp/templates zwraca htmlContent | JSON |
| Firmy i szanse sprzedaży | Eksport z odpowiedniej strony CRM | CSV |
Kontakty i atrybuty
Ścieżka w interfejsie to CRM, a potem Contacts. Żeby wyeksportować całą bazę, upewnij się, że nie jest wczytana żadna lista ani segment i że nie zastosowano żadnych filtrów. Żeby wyeksportować jedną listę lub segment, kliknij „Load a list or segment” i najpierw ją wybierz.
Następnie wybierasz, które atrybuty standardowe i niestandardowe uwzględnić. EMAIL, data ostatniej zmiany i data utworzenia są zaznaczone domyślnie, a resztę dodajesz sam, i to jest krok, który ludzie najczęściej robią źle. Wybierz separator pól CSV, średnik lub przecinek, i opcjonalnie włącz „Send export by email”, żeby link do pobrania trafił na adres właściciela konta. Kliknij „Start export”, a potem pobierz plik z dzwonka powiadomień obok nazwy konta.
Listy i segmenty
Listy eksportują się jako przynależność: uruchom jeden eksport na listę albo dołącz metadane _listIds do pojedynczego pełnego eksportu i podziel plik później. GET /v3/contacts/lists daje Ci nazwy list, identyfikatory i identyfikatory folderów, żebyś mógł odtworzyć strukturę po drugiej stronie.
Segmenty to inna historia i tu pojawia się pierwsza prawdziwa luka. GET /v3/contacts/segments zwraca tylko id, segmentName, categoryName i updatedAt. Warunki filtrów, które definiują segment, nie są udostępniane. Możesz wyeksportować członków segmentu w danym momencie, ale regułę, która ich wygenerowała, trzeba odczytać z ekranu i odbudować ręcznie w nowym narzędziu. Zrób zrzut ekranu każdego segmentu, zanim zamkniesz konto.
Statystyki kampanii
Z raportu kampanii możesz wyeksportować dane jako CSV, a raporty emailowe i SMS oferują też wersję PDF do udostępnienia lub wydruku. Do pełnego pobrania historii GET /v3/emailCampaigns przyjmuje parametr statistics z wartościami globalStats, linksStats lub statsByDomain oraz parę startDate i endDate obejmującą zakres do dwóch lat.
Logi transakcyjne
Dwie ścieżki, z różnymi oknami czasowymi.
GET /v3/smtp/statistics/events zwraca pojedyncze zdarzenia filtrowane po typie (delivered, opened, clicks, hardBounces, spam, unsubscribed i inne). Zakres dat nie może przekroczyć 90 dni, a domyślnie obejmuje ostatnie 30 dni, jeśli nie podasz ani zakresu, ani parametru days.
Do zadań masowych POST /v3/webhooks/export tworzy zadanie eksportu obejmujące ostatnie 7 dni surowych zdarzeń, z pułapem 20 zadań eksportu na okres 7 dni. Zwraca processId, wywołuje Twój adres powiadomienia po zakończeniu i dostarcza CSV z kolumnami takimi jak date, email, event, message-id, reason, sending_ip, subject, tag i template_id. Duże wolumeny przychodzą jako skompresowane archiwum z kilkoma plikami CSV.
Praktyczna konsekwencja: jeśli chcesz mieć więcej niż 90 dni historii transakcyjnej, powinieneś był eksportować ją regularnie od samego początku. Ustaw to zadanie teraz, a nie w tygodniu, w którym zdecydujesz się odejść.
Co nie idzie z Tobą
To jest część, którą większość przewodników po migracji pomija.
- Struktury procesów automatyzacji. API potrafi wyzwalać automatyzacje przez zdarzenia, ale nie ma udokumentowanego endpointu, który odczytałby rozgałęzienia, opóźnienia i warunki procesu. Każdy proces odbudowujesz ręcznie na nowej platformie.
- Definicje filtrów segmentów. Jak wyżej, pobrać można wyłącznie nazwy i aktualnych członków.
- Pełną historię zaangażowania per kontakt. Możesz wyeksportować osoby, które otworzyły, kliknęły, nie otworzyły, wypisały się, twardo odbiły lub miękko odbiły w konkretnej kampanii, używając
customContactFilterna endpoincie eksportu. Czego nie pobierzesz, to jednego porządnego pliku typu „każde otwarcie i kliknięcie, jakie ten kontakt kiedykolwiek wykonał”, bo surowe endpointy zdarzeń są ograniczone do 90 dni. - Wierność renderowania szablonów.
htmlContenteksportuje się czysto, ale bloki przeciągnij i upuść, składnia znaczników scalających oraz miejsca na link wypisu są specyficzne dla platformy. Wyeksportowany HTML to punkt wyjścia, a nie gotowy szablon. Zaplanuj czas na ponowne przetestowanie każdego szablonu w nowym edytorze. - Reputację dostarczalności. Reputacja nadawcy żyje na adresach IP nadawczych i uwierzytelnionej domenie. Nowa platforma, nowa pula IP, nowa rozgrzewka. Zachowanie tej samej domeny i konfiguracji DKIM chroni domenową stronę reputacji, co naprawdę pomaga, ale nie przenosi strony adresowej.
- Identyfikatory formularzy, stron docelowych i śledzenia. Formularze zapisu, strony docelowe i skrypt śledzący mają identyfikatory specyficzne dla platformy. Wszystko osadzone na Twojej stronie trzeba wymienić, a każda analityka powiązana z tymi identyfikatorami przestaje działać w momencie przełączenia.
Skryptowy eksport dla dużych kont
Powyżej mniej więcej 100 000 kontaktów eksport z interfejsu robi się powolny i niewygodny, a i tak chcesz mieć powtarzalne zadanie. Endpoint eksportu kontaktów jest asynchroniczny: przyjmuje filtr, zwraca identyfikator procesu i wydaje Ci plik CSV po zakończeniu.
curl --request POST \ --url https://api.brevo.com/v3/contacts/export \ --header 'accept: application/json' \ --header 'content-type: application/json' \ --header 'api-key: YOUR_API_KEY' \ --data '{ "customContactFilter": { "actionForContacts": "allContacts" }, "exportMandatoryAttributes": true, "exportAttributes": ["FIRSTNAME", "LASTNAME", "SMS", "COUNTRY"], "exportMetadata": ["_listIds", "ADDED_TIME", "MODIFIED_TIME"], "exportSubscriptionStatus": ["email_marketing", "sms_marketing"], "exportDateInUTC": true, "notifyUrl": "https://example.com/hooks/brevo-export" }'Udane wywołanie zwraca HTTP 202 i ciało zawierające processId. exportMandatoryAttributes domyślnie ma wartość true i obejmuje EMAIL, ADDED_TIME i MODIFIED_TIME, więc exportAttributes to miejsce, gdzie wymieniasz swoje pola niestandardowe. Ustawienie exportSubscriptionStatus to właśnie to, co wprowadza do pliku stan zgody marketingowej dla email i SMS, a jego pominięcie to najczęstszy sposób na wyprodukowanie eksportu bezużytecznego dla zgodnej z prawem migracji.
Jeśli wolisz stronicować po rekordach niż czekać na zadanie, GET /v3/contacts przyjmuje limit do 1000 wraz z offset oraz modifiedSince i createdSince do pobrań przyrostowych. Każdy kontakt wraca z polami emailBlacklisted, smsBlacklisted, listIds, listUnsubscribed i consentGroups, czyli wszystkim, czego potrzebujesz, żeby odtworzyć stan zgód.
Pilnuj limitów zapytań, kiedy to skryptujesz. Endpointy kontaktów dopuszczają 36 000 zapytań na godzinę i 10 na sekundę na planach standardowych, dwa razy więcej na poziomach Professional i Enterprise, podczas gdy większość pozostałych endpointów siedzi na 100 zapytaniach na godzinę. Przejście miliona kontaktów po 1000 na stronę to 1000 zapytań, komfortowo w budżecie kontaktów, ale zapętlone bombardowanie endpointów kampanii lub szablonów już nie.
Dlaczego lista wykluczeń musi migrować pierwsza
Przenieś rezygnacje, zanim przeniesiesz cokolwiek innego.
Argument prawny jest prosty. Kontakt, który się wypisał, wycofał zgodę wobec Twojej marki. To wycofanie nie resetuje się dlatego, że zmieniłeś dostawcę. W świetle GDPR rejestr zgody i jej wycofania to Twój obowiązek jako administratora, a w świetle CAN-SPAM rezygnacja musi zostać uszanowana w ciągu dziesięciu dni roboczych i pozostaje uszanowana bezterminowo. Utrata tej listy w migracji nie jest wypadkiem technicznym, tylko naruszeniem zgodności z papierowym śladem wskazującym na Ciebie.
Argument dostarczalnościowy jest w praktyce jeszcze gorszy. Wśród wykluczonych adresów nieproporcjonalnie dużo jest osób, które złożyły skargę, twardo się odbiły albo aktywnie chciały się wypisać. Wysyłka do nich z zupełnie nowego adresu IP bez reputacji to najszybszy znany sposób, żeby świeża konfiguracja nadawcza została zdławiona lub zablokowana w pierwszym tygodniu. Kilka tysięcy odzyskanych pułapek spamowych i skarżących potrafi zniweczyć miesiąc starannej rozgrzewki.
Dlatego eksportuj wykluczone kohorty jawnie, zamiast liczyć na to, że są dorozumiane. Na endpoincie eksportu actionForContacts przyjmuje unsubscribed dla kontaktów zablokowanych w dowolny sposób i unsubscribedPerList dla kontaktów, które zrezygnowały z jednej konkretnej listy. Zrób osobne przejście dla hardBounces per kampania. Po stronie wejścia na nową platformę zaimportuj ten plik do jej listy wykluczeń, a nie do listy wysyłkowej.
Brevo obsługuje też przypadek odwrotny: pozwala zaimportować listę kontaktów na czarnej liście, a API importu przyjmuje wartości logiczne emailBlacklist i smsBlacklist, więc zaimportowany plik ląduje jako wykluczony. Zwróć uwagę na asymetrię, którą Brevo słusznie wymusza: kontaktów nie da się masowo zdjąć z czarnej listy, bo masowe ponowne zapisanie kogoś, kto prosił o spokój, byłoby niezgodne z prawem. Wykluczenie łatwo dodać i celowo trudno usunąć. Traktuj to jako zachowanie poprawne, a nie jako przeszkodę.
Lista kontrolna migracji, wyjście z Brevo
- Audyt. Policz kontakty, listy, segmenty, aktywne automatyzacje, szablony i integracje. Zapisz, które integracje piszą do Brevo, bo to są rury, które będziesz musiał przepiąć.
- Eksport. Kontakty ze wszystkimi atrybutami i statusem subskrypcji, jeden plik na listę albo jeden plik z polem
_listIds, kohorty wykluczeń jako osobne pliki, statystyki kampanii, zdarzenia transakcyjne tak daleko wstecz, jak pozwala okno 90 dni, oraz HTML szablonów. - Zarchiwizuj to, co wygasa. Wszystko ograniczone czasowo (surowe zdarzenia, logi) znika, gdy okno się przesunie. Zapisz to teraz we własnej hurtowni albo pamięci obiektowej.
- Wyczyść i zmapuj. Zdeduplikuj, znormalizuj formaty dat i telefonów oraz spisz jawne mapowanie kolumn na pola nowej platformy. To też naturalny moment, żeby usunąć adresy, które nie zaangażowały się od roku, bo to tańsze niż płacenie za rozgrzewanie martwego balastu. Nasz przewodnik po czyszczeniu listy emailowej opisuje progi.
- Załaduj wykluczenia jako pierwsze. Zaimportuj rezygnacje i twarde odbicia do listy wykluczeń nowej platformy, sprawdź, czy liczby zgadzają się z Twoim eksportem, i dopiero potem ładuj kontakty do wysyłki.
- Rozgrzewka. Zacznij od najbardziej zaangażowanego segmentu, zwiększaj wolumen stopniowo i codziennie obserwuj wskaźniki odbić i skarg. Nasz przewodnik po dostarczalności emaili opisuje tę sekwencję szczegółowo.
- Działaj równolegle. Utrzymaj Brevo w ruchu i przy wysyłce krytycznej poczty transakcyjnej, podczas gdy nowa platforma obsługuje rosnący udział wysyłek marketingowych. Nie przełączaj obu naraz.
- Zweryfikuj. Uzgodnij liczby kontaktów, sprawdź wyrywkowo dwadzieścia kontaktów pole po polu, potwierdź wysyłką testową, że wykluczone kontakty faktycznie są wykluczone, i porównaj tydzień wolumenu wysyłki ze starą platformą.
- Przełącz i zachowaj drogę odwrotu. Zmieniaj DNS i endpointy integracji w oknie, w którym ktoś patrzy. Utrzymaj konto Brevo aktywne i opłacone przez co najmniej jeden pełny cykl rozliczeniowy po przełączeniu, z wyeksportowanymi plikami przechowywanymi poza obiema platformami. To, a nie obietnica dostawcy, jest Twoim faktycznym planem wycofania.
Migracja do Brevo z innej platformy
Ta sama lista kontrolna działa w odwrotną stronę, z trzema uwagami specyficznymi dla Brevo.
Uzyskaj prawdziwy eksport od dotychczasowego dostawcy. Większość platform da Ci kontakty i ich pola niestandardowe jako CSV. Poproś wprost o listę wykluczeń i listę odbić, które często są w osobnym eksporcie, o który ludzie zapominają. Jeśli przychodzisz z modelu rozliczania per kontakt, porównaj, ile faktycznie zapłacisz po przejściu, z naszym przewodnikiem po cenniku Brevo.
Zmapuj pola przed wgraniem. Atrybuty w Brevo mają typy (tekst, liczba, data, wartość logiczna, kategoria), a data, która wyląduje w atrybucie tekstowym, nie będzie później filtrowalna. Najpierw utwórz atrybuty z właściwymi typami, a dopiero potem importuj.
Importuj przez API wszystko, co ma jakikolwiek rozmiar. POST /v3/contacts/import przyjmuje wpisany wprost CSV w fileBody, tablicę JSON w jsonBody, oba z pułapem około 10 MB, albo zdalny plik przez fileUrl, plus listIds lub obiekt newList. updateExistingContacts domyślnie ma wartość true i dopasowuje po adresie email. Uruchom jeden import z emailBlacklist ustawionym na true dla pliku wykluczeń, a potem drugi import dla kontaktów do wysyłki. Kompletne, działające skrypty znajdziesz w naszym przewodniku o importowaniu kontaktów z CSV do Brevo skryptem.
Potem odbuduj to, co się nie przeniosło: automatyzacje, segmenty, formularze i szablony. Wyślij test kontrolny do garstki dostawców skrzynek, zanim wyślesz do kogokolwiek prawdziwego.
Nie pozwól, żeby następna migracja była przepaścią
Powód, dla którego migracja platformy wydaje się przepaścią, jest taki, że platforma stała się systemem źródłowym. Historia zamówień, stan subskrybentów i wyniki kampanii żyją wewnątrz jednego dostawcy, a przeniesienie ich oznacza ewakuację.
Alternatywa to utrzymywanie własnego źródła prawdy i pozwolenie, by platforma wysyłkowa była miejscem docelowym, a nie skarbcem. Jeśli dane Twojego sklepu, stan zgód i zdarzenia zaangażowania są synchronizowane na bieżąco do Twoich własnych systemów, zmiana albo dodanie kanału to zmiana konfiguracji, a nie projekt. To właśnie robi Tajo między Brevo a stosem technologicznym sprzedawcy: utrzymuje przepływ danych w obie strony, żeby platforma nigdy nie była jedyną kopią.
Tak czy inaczej, opisane wyżej zadania eksportu warto uruchomić cyklicznie już teraz, niezależnie od tego, czy planujesz odejść. Najtańsza migracja to taka, w której dane są już poza platformą, gdy podejmujesz decyzję.