Where to start an import
Contacts page
Open Contacts and press Import in the page header.
Empty audience
A workspace with no contacts shows Import a file on the Contacts page.
Straight into a list
Open a list and press Import file. Everyone imported joins that list.
What you can import
Files
CSV, TSV, plain text, Excel
.csv, .tsv, .txt, and Excel workbooks in .xlsx, .xls, .xlsm or .xlsb.10 MB
A larger file is rejected before anything is read.
50,000 per import
The upload box states this as Up to 50,000 rows. Rows beyond the cap are not imported, and the import is flagged as incomplete in the log.
Google Sheets
If Google Sheets import is enabled for your workspace, the upload box also shows Import from Google Sheets.1
Connect Google
You connect your own Google account. The connection belongs to you, not to
the workspace, so a teammate importing a sheet connects their own account.
2
Pick the spreadsheet
Choosing the file in Google’s own picker is the permission grant. Senderz
only ever gets read access to the spreadsheet you picked. There is
deliberately no paste-a-link field, because a link you have not picked
is not readable under that permission.
3
Choose the tab and header row
Pick which sheet tab to read and confirm whether the first row contains
column names. The dialog previews the row count and the columns found.
4
Continue to mapping
From here the wizard is identical to a file import.
The sheet is read again when the import actually runs, not snapshotted at
preview time. Edits you make after previewing are picked up. That is also why
removing individual rows on the review step is not offered for a sheet.
The four steps
1
Upload
Choose the file or the Google Sheet.
2
Map fields
Confirm which column feeds which contact field.
3
Review
Check the preview and choose what happens to contacts you already have.
4
Subscription
Declare which channels these people gave you permission to market on.
Step 2: mapping columns
Senderz reads your headers and pre-selects a target field for each one. A column it recognised is marked Detected. Common names in English and Hebrew are matched automatically, including store export headers such asAccepts Email Marketing and Accepts SMS Marketing.
Review every row before continuing. Each column has a dropdown with three kinds of choice.
A built-in contact field
A built-in contact field
Email, first name, last name, phone, timezone, locale, country, tags and the
consent fields, grouped by category. Some catalog fields are calculated by
Senderz and are shown as computed. Those cannot be imported and are
disabled in the list.
Don't import this column
Don't import this column
The explicit skip. This is a real instruction, not just leaving the column
unmapped: a column you mark Don’t import this column is skipped even if
its header is one Senderz would otherwise recognise. A spare phone number or a
colleague’s birthday stays out of your contact records.
+ Create new custom field
+ Create new custom field
Pinned to the top of every dropdown. It opens the same new-field dialog as
Settings, and the value type is pre-selected from that column’s own sample
values, so a column of dates suggests date and a column of numbers
suggests number. You can change it before saving. The new field is
created and mapped to the column in one step. Available types are text,
number, date, true/false, single select, multi select, URL and list. There is
a 5,000 field safety limit per workspace; the dialog tells you if you reach it.
You must map either Email or Phone to continue. Everything else is
optional. Until one of them is mapped, the step says so and the Next button
stays disabled.
Consent columns
Map Email consent, SMS consent or WhatsApp consent and Senderz reads each row’s own opt-in state from the file. See what the values mean below.Consent date columns
Map Email consent date, SMS consent date or WhatsApp consent date and each contact keeps the date they actually opted in, rather than the date you switched to Senderz. The date format is strict on purpose.Step 3: review and duplicate handling
The review step shows how many rows are ready, a preview table of email, name and phone, and the duplicate setting.The preview is a sample
Senderz reads the first 100 rows for the preview so a large file does not have to be held in your browser. When that happens the step says Showing the first 100 rows of N. The full file will be imported. Everything after row 100 is still imported.Removing rows
You can drop an individual row from the preview with the trash icon. That is only offered when Senderz has the whole file in the browser, which means:- It is available for a file of 100 rows or fewer.
- It is not available once the preview is sampled, because most rows are not on screen to review.
- It is not available for a Google Sheet, because the sheet is re-read at import time and a removal made here would silently do nothing.
Existing contacts
Existing contacts decides what happens when a row matches a contact you already have. Matching is by email first, then by phone.
The Added to the list column only matters when you started the import from a list.
What Update existing actually changes
What Update existing actually changes
An update only ever fills values in. A blank cell in your file never wipes a
value the contact already has, so a partial export cannot erase your data.An existing email address or phone number is never overwritten by the file.
Custom properties are merged into what the contact already holds. Tags are the
one exception: a tags column with a value replaces the contact’s tag list,
while a blank tags cell leaves the existing tags alone.
Step 4: subscription
The final step. Imported contacts are not subscribed unless you say so. Tick each channel these contacts agreed to receive marketing on:- Subscribed to email
- Subscribed to SMS
- Subscribed to WhatsApp
- Subscribed to all channels
Selecting nothing is a valid answer. It is never blocked. It keeps the
conservative default: only rows whose own consent column says they opted in are
subscribed, and everyone else stays unsubscribed and cannot be sent marketing.
- An import never re-subscribes someone who opted out. A withdrawal recorded through Senderz always wins, including over the force-subscribe boxes, so a stale file cannot resurrect someone who unsubscribed last week. A genuine re-subscribe goes through the preference center.
- A channel the contact has no address for is skipped. Ticking email on a phone-only file marks nobody email-subscribed. Those rows stay honest and do not count toward your billable contact total.
Consent carried in the file
A mapped consent column is read per row and is three-way.
Values are matched without regard to case.
never_subscribed, which Klaviyo and Flashy both export, is deliberately not
treated as a withdrawal. It means the profile never opted in, not that it opted
out, so treating it as an opt-out would unsubscribe people the old platform had
no opinion about.An opt-out in the file is final
This is what makes a migration off another platform safe. When a row says unsubscribed:- The contact is set to unsubscribed on that channel.
- Their address or number is added to your suppression list in the same operation, so the two can never disagree.
Re-importing the same list is safe
A consent state that already matches is left alone rather than rewritten. Importing the same file twice does not restamp every opt-in date to today and bury your original evidence.What the consent record holds
Every consent change an import makes is written to the append-only consent log with the channel, the new state, a source of import, and the date. The date comes from your mapped consent-date column when there is one, otherwise the time of the import. IP address and user agent are empty for imports, because a file upload has neither. Store syncs are different: Shopify, WooCommerce and the other store connectors carry the provider’s own opt-in timestamp, so a customer who subscribed on your store two years ago keeps that date.Email validation
Every row that carries an email is checked in three stages before it is written.1
Syntax
Format check, plus trimming and lowercasing. A malformed address is rejected
as Invalid email address.
2
Domain mail server
A DNS lookup for the domain’s mail servers. A domain with none cannot receive
mail, so the row is rejected as Domain can’t receive email.
3
Quality
Disposable, throwaway domains are rejected. Role addresses such as
info@ or
admin@ are kept and flagged as risky. Addresses repeated inside the same
file are collapsed to one.Reject reasons
A role address is not a rejection. It imports and is flagged Risky so
you can decide for yourself.
Catch-all domains such as Gmail accept mail for any address, so no check at
import time can tell you a specific mailbox exists. A dead Gmail address
surfaces later as a bounce, and that bounce suppresses it automatically. See
Consent and compliance.
Watching the import run
The import runs in the background and you land on a live status page. You can leave the page and come back. It moves through two phases. First Validating emails, where the count climbs as rows are checked. Then Importing & consent, where contacts are written in batches of 500 and the de-duplicating and consent recording happen. The page reports the current count against the total throughout.An import that stops making progress is detected and marked as failed with
Import stopped, rather than spinning forever. Start a new import to try again.
The result
When it finishes you get four counts: New, Updated existing, Skipped and Invalid, plus First issues found, a short list of the first problems with their row numbers.Per-row results
Below that is a Per-row results table showing up to the first 1,000 rows, with:
Filter tabs across the top switch between All, Valid, Risky and Rejected.
Download failed rows
Download failed rows exports every row that was not clean as a CSV, with the row number, address, status, reason and suggested correction. Fix them in your source data and import that smaller file again.After the import
Contacts are live
Imported contacts are immediately searchable, filterable, usable in segments
and ready for campaigns.
List membership
If you imported into a list, everyone is added according to the duplicate
setting you chose.
Consent recorded
Every subscribe and unsubscribe the import made has a consent log entry with
its own date.
Setup step completed
A run that creates at least one new contact completes the Import step in
your workspace setup checklist.
The import and export log
Every import and export is recorded permanently, whichever source it came from. Open Contacts and choose the Import & export log tab. Each row shows:- The type, such as Contact import or Contact export, and where it came from: CSV file, Google Sheets, Shopify, WooCommerce, Konimbo, Magento, Stripe or WordPress.
- The status: Running, Completed, Completed with warning, or Failed.
- Rows processed, broken down into added, updated, skipped and rejected.
- A live progress bar for anything still running.
- The failure reason when something went wrong.
- A Download button to re-fetch a finished export file while it is still stored.
Completed with warning on an import usually means the file was over the
50,000 row cap. The log states how many rows were processed and that the rest
were not imported.

