Quick answer: Clean a marketing list by preserving each contact’s channel-specific status before you deduplicate or import. Keep the original export read-only, make a working copy, separate records with documented permission from unsubscribed, invalid, and unresolved records, and import suppressed contacts with the correct Brevo blocklist settings. Check the resulting statuses before enabling any campaign or automation. Sources: Brevo blocklisted import, why statuses matter.
Important constraint: A contact appearing in a new list is not evidence that they may receive marketing email. Brevo’s blocklisted-import choice applies the selected channels to every contact in that import file. Split files when channel states differ, and keep records with unclear permission out of the sendable cohort until their status is resolved. Source: Brevo blocklisted import.
Migrating only addresses and names can undo months of careful list management. An address that opted out of campaigns might look ordinary in a stripped CSV; an old hard bounce might be imported again as a fresh contact; someone blocked for email may have a different SMS preference. Brevo explains that deleting blocklisted contacts loses their status and history and creates a risk of accidental reimport without that protection. Treat the migration as a state transfer, not a file cleanup contest.
This guide uses Brevo’s published import and status instructions checked October 3, 2026. It covers the operational transfer of a marketing list into Brevo. Deciding whether a particular contact has a valid basis for a particular message requires the organization’s underlying records and applicable rules; a successful import does not make that decision for you.
Freeze a source snapshot and name the states
Export the old system’s contact records, marketing status, unsubscribe and bounce reasons, timestamps, source identifiers, and any channel-level preferences that will matter after migration. Keep that export read-only with its creation time and access owner. Work on a copy. If another person keeps changing the old list while you transform it, take a second snapshot or pause the relevant sync so you can reconcile the difference; otherwise the final counts will refer to different moments.
Create one row per source record in a staging sheet before deciding which rows become new contacts. Useful fields include old contact ID, email as supplied, new contact ID after import, channel, current status, reason, source timestamp, permission evidence reference, migration batch ID, and reviewer decision. If transactional email and marketing email have different statuses, use distinct fields. Brevo’s status guide distinguishes campaign preferences from transactional email and sender controls; a single universal “subscribed” flag would erase that distinction.
For an example with 1,000 source records, suppose the team has already put every row into exactly one preliminary category:
Scroll horizontally to read all columns.
| Preliminary category | Source rows | Import decision to prepare |
|---|---|---|
| Recorded marketing permission, no known block | 780 | Candidate for the sendable marketing cohort after checks. |
| Unsubscribed from marketing | 120 | Preserve the email-campaign block and its reason. |
| Invalid address or hard bounce | 50 | Preserve the relevant suppression; investigate any conflicting status. |
| Permission unknown | 30 | Withhold from marketing sends while records are checked. |
| Duplicate source rows needing reconciliation | 20 | Resolve identity and status before assigning the surviving contact state. |
| Total source rows | 1,000 | Categories are mutually exclusive only by this example’s design. |
The 780 are not “verified deliverable addresses,” and 1,000 is not the final number of unique contacts. A real export can contain overlapping reasons: someone may have both unsubscribed and later hard-bounced, or have a marketing block but a separate transactional relationship. Build explicit precedence and review rules for overlapping states rather than forcing them into this example’s tidy buckets. Keep the source row and reason even when the new system will show one contact.
Deduplicate without rewriting identity or permission
First identify exact repeated source IDs, exact repeated addresses, and likely matches that need a person to review. Do not silently strip plus aliases, periods, or punctuation from the local part of an address to force a merge. Two address strings that look related can refer to different mailboxes or different evidence trails. A normalized comparison key can help find candidates, but the final merge should have corroborating identity data and a written decision.
When two records for the same person disagree, the safer migration action is to withhold that contact from the sendable marketing cohort until the conflict is resolved. A newer “subscribed” value alone is not enough if an older unsubscribe and its context still matter. Trace the source timestamp, event, channel, and system that produced each state. Do not turn “latest row wins” into a blanket rule for consent. A manual resolution should record who decided, why, and which source records were merged into the new contact ID.
Handle duplicate counts separately from eligibility counts. In the 1,000-row example, 20 rows have been set aside as duplicates, but that does not prove the import should contain exactly 980 unique contacts. Some of the 20 may represent several records for one person; others may prove to be separate people. The final unique count must come from the resolved identity map. Likewise, removing a duplicate row does not remove the unsubscribe or bounce event attached to it. Carry that event into the surviving contact’s audit trail.
Split import batches by channel status

Brevo’s blocklisted-import instructions say that the channels selected at import apply to all rows in that file. If one group is blocked for email campaigns only and another for both email and SMS campaigns, those groups need different files. The same instructions show options for email, SMS, and WhatsApp campaign blocklisting. Do not send one mixed file through one block setting and hope per-row status columns override it unless the current Brevo import flow explicitly supports the mapping you intend.
Prepare a batch manifest before importing:
Scroll horizontally to read all columns.
| Batch field | Example value | Check before confirmation |
|---|---|---|
| Batch ID and source snapshot | MIG-03, source export at a recorded time | Every row traces back to the frozen export. |
| Intended channel state | Email-campaign block only | All rows in this file share that setting. |
| Expected source rows and resolved contacts | Counts from the staging sheet | Duplicates are explained, not silently dropped. |
| Import mapping | Email, old ID reference, permitted attributes | No status or timestamp column is confused with a name field. |
| Reviewer and hold status | Named owner, approved for controlled import | Unknown or conflicting records stay outside sendable batches. |
Importing suppressed contacts is not the same as mailing them. It lets the destination retain the state that prevents a future send to a person already excluded for that channel. Brevo explicitly advises retaining blocklisted status and history rather than deleting rows and later recreating them without context. Retention and data minimization decisions still need the organization’s own policy; do not retain every old field merely because the software allows it.
Do not confuse a bulk campaign block with a universal block. Brevo’s status documentation describes separate campaign channels and transactional email controls. The bulk block action discussed there applies to email campaigns; transactional sender handling has its own controls. If the old system has a global suppression concept, map exactly what it meant to the destination’s separate states. A transactional receipt, marketing newsletter, SMS promotion, and WhatsApp message should not inherit an assumed common status simply because they share one address or phone number.
Reconcile the import before any send
Run a small controlled batch first, including a few records known to be suppressed in the source. Before the import, pause relevant automations, triggers, and scheduled campaign sends or isolate the staging audience according to the destination’s controls. Check the current account setup and sender configuration. After import, inspect the new contact records and their channel chips, not only the file-import success banner. The goal is to prove that the intended block state survived on individual examples.
Brevo’s import report includes counts such as added, existing, and invalid addresses. Reconcile those to the batch manifest, allowing for explained overlaps with contacts already in the destination. An “existing” count does not tell you which status prevailed; sample the affected records. An “invalid” count is not permission to discard the source reason; retain it in the migration record and decide how that row will stay out of future sends.
Scroll horizontally to read all columns.
| Reconciliation question | Evidence to retain | Stop when… |
|---|---|---|
| Did every batch use its intended channel setting? | Import options and batch ID | A file contains mixed channel states. |
| Are known unsubscribed records blocked after import? | Source ID → new ID sample | Any sampled record is sendable for the blocked channel. |
| Do added, existing, and invalid counts reconcile? | Brevo report plus source manifest | A difference has no traceable explanation. |
| Did unknown-permission rows stay withheld? | Quarantine count and location | They appear in a campaign audience. |
| Are automations still controlled? | Destination configuration check | A trigger can run before status checks finish. |
When a sample fails, pause the batch and find the mapping or import-setting error before importing more records. A later corrected file is not a substitute for knowing whether the first file made a suppressed contact sendable. Preserve before-and-after IDs and correction notes so a reviewer can trace the fix. Only enable the planned campaigns and automations after the relevant status samples, counts, and exclusions match the migration manifest.
Hand the clean list to the next workflow
The operational handoff should contain the frozen source export, transformation rules, resolved identity map, batch manifests, Brevo import reports, quarantined unknowns, and a short sign-off for each communication channel. The marketing owner can then build an audience from records with the required evidence and destination status; the data owner retains the suppression history and exceptions for future imports. Keep an explicit route for newly discovered old unsubscribes or hard bounces to correct the destination promptly.
After the list is stable, calculate expected monthly sends from the eligible audience and actual campaign schedule, not from the 1,000 source-row example. A welcome sequence should use the migrated permission state and should remain paused until its audience rule has been checked. A clean file makes those next steps possible, but the final safeguard is the verified status in the destination account before any message leaves it.
Sources and checking
Product terms can change. These are the sources checked for this article; follow the links to verify current details before you buy.
- Brevo Help: Import a list of blocklisted contacts (checked 2026-10-03)
- Brevo Help: Why not delete blocklisted contacts? (checked 2026-10-03)
- Brevo Help: Blocklist, unblock, or resubscribe contacts (checked 2026-10-03)
