Importing & Exporting Contacts
Bring contacts into Owlat from a CSV or from Mailchimp and Stripe, export them back out, and run bulk operations on your audience.
Owlat gives you several ways to get contacts in and out: upload a CSV with column mapping, pull directly from Mailchimp or Stripe, export everything (or a filtered slice) back to CSV, and run bulk actions on whole selections at once. Everything in this guide lives on Audience > Contacts.
Importing contacts and the destructive bulk actions (add/remove topic, delete) require the owner or admin role. Exporting is available to any team member who can view the contact list. See Team & Permissions for the full role breakdown.
Import from CSV
The CSV importer parses your file in the browser, lets you map columns to contact fields, and uploads the rows in batches of 100. To start, open Audience > Contacts, click Import, and choose CSV File.
Upload
Drop a .csv file onto the upload area or click to browse. Your file must:
- Have column headers in the first row.
- Include at least a header row and one data row.
- Include an email column (you map it in the next step).
The importer reads the whole file up front, so you see the total row count before mapping.
Map columns to fields
Owlat auto-detects common headers (it recognises variants like email, first name, lastname, language, and list/topic), but you can override any column. Each column maps to one of:
| Field | Notes |
|---|---|
| Email (required) | Used as the unique identifier. You cannot continue without mapping a column to Email. |
| First Name | Personalization field. |
| Last Name | Personalization field. |
| Language | Preferred language for translated sends. |
| Topic | Per-contact topic membership read from the cell value (see below). |
| Custom property | Import the column as a custom contact property. The CSV header becomes the property key; new keys are auto-registered before import. |
| — Ignore this column | Skip the column entirely. |
To bring in any other column as a custom property, map it to Custom property — the CSV header becomes the property key, and Owlat auto-registers any not-yet-defined property keys before importing. (Mailchimp and Stripe imports auto-register every extra field; the CSV flow imports a custom column only when you explicitly map it to Custom property. See Integration import.)
Handle duplicates
Pick what happens when a row's email already exists in your audience:
- Skip duplicates — existing contacts are left untouched.
- Update existing — existing contacts are merged with the new field values from the CSV.
Duplicate emails within the same file are always collapsed to the first occurrence and counted as skipped.
Assign contacts to topics
You can add imported contacts to topics in one of two mutually exclusive ways:
- Global assignment — pick one topic under Add to Topic and every imported contact is added to it.
- Column mapping — map a CSV column to Topic. The importer reads each row's cell value (comma-separated values are supported for multiple topics), collects the unique names it finds, and shows a list-mapping step where you map each name in your file to an existing Owlat topic or Skip it. Names you skip are dropped.
Mapping a column to Topic takes precedence over a global selection — selecting a column disables the global picker.
Review and import
The preview step validates every row and shows a summary: valid contacts, invalid emails, duplicates, and missing emails, plus a sample of the first five rows with a per-row status icon. Expand View issue details to see exactly which rows have problems. Rows with invalid or missing emails are not imported; only valid rows count toward the import.
When you confirm, contacts are uploaded in batches with a progress bar, and the final screen reports how many were imported, updated, skipped, and failed, along with any errors (capped to the first several) and how many were added to topics.
Remove obvious duplicates and fix malformed addresses before uploading. Owlat's email check is intentionally lightweight — it catches missing @ and obviously broken addresses, but it does not verify that a mailbox actually exists.
Double opt-in and import
Whether a topic uses double opt-in (DOI) is decided at the topic level. When you assign imported contacts to a DOI-gated topic, each one normally has to confirm before they become an active subscriber.
The contact-import engine supports an admin-attest path: when the caller asserts that the contacts already confirmed their consent on another platform, those contacts are marked confirmed immediately instead of being sent a confirmation email. This attestation is recorded on each contact and in your audit log.
Admin-attest lives only on the internal import backend used by the in-app importer and the Mailchimp/Stripe integration imports, gated by your team session and the contacts:manage permission. It is not reachable through the public Contacts API today, and the in-app CSV import screen does not currently offer a DOI-attest toggle — so contacts imported through the dashboard into a DOI-gated topic follow the normal confirmation flow. Only attest consent you have actually collected — you remain responsible for it.
Import from Mailchimp or Stripe
Owlat can pull contacts directly from Mailchimp and Stripe without an intermediate CSV. Open Audience > Contacts, click Import, and choose Integrations.
Mailchimp
You'll need:
- A Mailchimp API key, in the
apikey-datacenterformat (for exampleabc123def456-us21). Find it in Mailchimp under Account > Extras > API keys. - An Audience List ID. Find it under Audience > Settings > Audience name and defaults.
Owlat maps Mailchimp's Email to email, and FNAME/LNAME to first and last name.
Stripe
You'll need a Stripe secret key (it must start with sk_). Find it in the Stripe Dashboard under Developers > API keys.
For Stripe, create a restricted API key scoped to Customers: Read only. Owlat maps a customer's email to email and their name to the first/last name fields.
Your API keys are used only for the duration of the import and are not stored.
Duplicates, topic, and progress
Both integrations share the same options as the CSV flow:
- Handle Duplicates — Skip duplicates or Update existing.
- Add to Topic — optionally add every imported contact to one topic.
Integration imports run in the background, page by page, on the server. The progress dialog shows a live count (Mailchimp reports a total estimate; Stripe shows running progress because it doesn't), and you can close the dialog — the import keeps going. When it finishes you get imported / updated / skipped / failed counts and any errors. You can Cancel Import while it's running.
Only one integration import can run at a time. If you start a second while one is still running, Owlat tells you an import is already in progress.
Unlike the web CSV flow, integration imports auto-register custom properties: extra fields from Mailchimp merge fields or Stripe metadata become contact properties automatically (tagged with their source), so you don't have to define them up front.
Export contacts to CSV
To export, open Audience > Contacts and click Export. Choose what to export:
- All contacts — every contact in your audience.
- Current search results — only contacts matching your current search (this option appears when a search is active).
Owlat generates the CSV in your browser and downloads it as contacts-export-YYYY-MM-DD.csv. Each row includes:
| Column | Description |
|---|---|
| The contact's email address. | |
| First Name / Last Name | Name fields. |
| Language | Preferred language. |
| Source | How the contact was added (api, csv, form, and so on). |
| Created At / Updated At | ISO-8601 timestamps. |
| Custom properties | One column per defined contact property, using its label as the header. |
Bulk operations
Select contacts to act on several at once. Tick the checkbox in any row, or use the header checkbox to select every contact currently loaded on the page. When your search has matched more contacts than are loaded, a Select all N action appears so you can select the entire filtered set, not just the visible rows.
With a selection active, the Actions menu offers:
| Action | What it does |
|---|---|
| Add to Topic | Subscribe the selected contacts to a topic. DOI rules for that topic still apply. |
| Remove from Topic | Unsubscribe the selected contacts from a topic. |
| Export Selected | Download just the selected contacts as a CSV. |
| Delete Selected | Permanently delete the selected contacts. |
Bulk add, remove, and delete process in batches with a progress indicator. Delete asks for confirmation first and warns that it is permanent — deleting a contact also removes them from every topic and deletes their custom property values.
There is no trash or recovery for deleted contacts. Export the selection first if you might need it later.