Importing contacts
Bring people in from a CSV file, and why importing opens after your first clean campaigns.
Most contacts arrive on their own: from the widget as people use your product, or from your server through the API. Importing is for people you already have somewhere else, such as a CRM, Shopify or Stripe export, or a spreadsheet.
When importing opens
Importing opens once your project has sent three campaigns with few bounces and spam complaints. Until then, contacts come from your app. This protects every sender on UserSignal from bad lists, including you.
Import a file
- Go to Users and choose Import.
- Upload a CSV file. The first row names the columns.
- Match the columns: say what each one is. Email is required. Others can be the name, language, your app's user ID, whether they are subscribed, or a contact variable with a name and a type.
- Confirm permission: that everyone in the file agreed to receive email from you, and where they agreed.
What is checked
Every address is checked before anything is imported. These are skipped:
- Invalid addresses and domains that receive no email.
- Throwaway addresses.
- Role accounts such as
info@orsales@. - Duplicates within the file.
If too many addresses in a file are like this for a list people opted into, the whole file is refused and nothing is imported.
After importing
You see how many contacts were new, updated or skipped. People who unsubscribed or are on your never-email list stay that way: importing them again doesn't resubscribe them.
Contact variables
Every property your contacts carry, from the widget, the API or imports, is a contact variable. Use them in segments and in emails, like {{plan}}.
Updated October 12, 2026