Importing consent
Bring topic consent over from another platform — mapping their groups to Bitelio topics and preserving the original opt-in date
When you migrate from another platform, you don't just move contacts — you move what each of them agreed to. The consent importer ingests topic consent from a CSV, mapping the other tool's groups to Bitelio topics and preserving the original opt-in date in each contact's consent history. Find it in Settings › Data › Import consent.
Before you start
Import consent maps onto data that already exists — it never creates contacts or topics:
- Import your contacts first.
- Create the topics you're mapping to, and note each topic's key.
A row whose email doesn't match a contact, or whose topic_key doesn't match a topic, is skipped and counted — never guessed.
CSV format
Download the template from the card, or build a file with these columns:
email,topic_key,status,date
jane@acme.com,weekly_digest,subscribed,2023-05-01
john@acme.com,promotions,unsubscribed,2023-06-15| Column | Required | Notes |
|---|---|---|
email | Yes | Must match an existing contact in the project (case-insensitive). |
topic_key | Yes | Must match a topic's key (not its display name). |
status | Yes | subscribed or unsubscribed. no / false / 0 also count as unsubscribed. |
date | No | The original opt-in date (ISO YYYY-MM-DD). Preserved in the consent history rather than "today". |
A header row is detected and skipped automatically.
Running the import
- Upload CSV (or paste the rows into the box).
- Review the rows.
- Import.
You get a summary — how many rows were imported and how many skipped. Each imported row sets the contact's per-topic consent and appends a consent history entry marked import, dated to the original date.
Doing it programmatically
The same import is available on the API:
POST /consent/import
{ "rows": [ { "email": "jane@acme.com", "topicKey": "weekly_digest", "status": "subscribed", "occurredAt": "2023-05-01", "source": "mailchimp" } ] }
→ { "imported": 1, "skipped": 0, "errors": [] }