<!-- Source: https://docs.vinsi.ai/crm/admin/data-automation -->
# Data & Automation

Import and manage CRM data, and automate workflows across your team.

Created April 1, 2026

Updated: September 17, 2026

## Overview

Data & Automation gives you the tools to move data in and out of the CRM at scale, build automated workflows, run email campaigns, and monitor email health across your team.

Open it from [CRM → Admin](https://docs.vinsi.ai/crm/admin) and scroll to the **Data & Automation** section (subtitle: _Import, manage CRM data and automate workflows_). Each card opens in a slide-up panel over the admin grid — close it with the round **X** in the corner. The **Search settings...** box above the grid filters cards by title and description.

**Tip:** every panel has a direct link. Add `?panel=` and the panel name to the admin URL — for example `/crm/admin?panel=import-contacts`. Valid names are `workflows`, `email-campaigns`, `reports`, `email-reports`, `import-contacts`, `bulk-assign`, `bulk-delete`, `unsubscribe`, `website-visitors`, and `dnc-registry`.

## Who Can Use These Cards

Organization admins and owners can use every card. Everyone else needs the matching permission, granted per member in [Team Settings → CRM Team](https://docs.vinsi.ai/crm/admin/team-settings). **Read** lets a member open the card; **Write** lets them change something.

| Card                   | Permission name                                   | Write permission controls                   |
| ---------------------- | ------------------------------------------------- | ------------------------------------------- |
| Workflows              | Workflows                                         | The **New Workflow** button                 |
| Email Campaigns        | Email Campaigns                                   | The **New Campaign** button                 |
| Reports                | Reports                                           | —                                           |
| Email Reports          | Email Reports                                     | —                                           |
| Import Contacts        | Import Contacts                                   | The **Choose CSV File** button              |
| Bulk Assign            | Bulk Assign                                       | The whole panel, including the contact list |
| Bulk Delete            | Bulk Delete                                       | The whole panel, including the contact list |
| Business Card          | Business Card                                     | —                                           |
| Unsubscribe Management | Unsubscribe Management                            | The **Add Unsubscribe** button              |
| Website Visitors       | None — visible to anyone who can open the section | —                                           |
| Do Not Call Registry   | None — visible to anyone who can open the section | —                                           |

The whole section is also behind a parent **Data Automation** permission. If a member can't see the section at all, that's the one to grant first.

### Workflows

_Build drag-and-drop automations triggered by contact, deal, and order events._ A workflow watches for one event in the CRM, optionally checks a few conditions, and then does things for you — change a lead status, assign an owner, send an email or SMS, open a ticket, create an activity, and so on. Use it to stop asking people to remember manual follow-up steps.

Workflows is the only card that takes over the full admin screen instead of opening a slide-up panel. The list screen is titled **CRM Workflow Automator** (_Create automations that trigger when contacts, deals, or orders change_) and has a **Back to CRM Admin** link at the top left.

### Create a Workflow

1. Open **CRM → Admin → Data & Automation → Workflows**.
2. Click **New Workflow**. If you don't see the button, ask an admin for write access to Workflows. On an empty list you'll see: _No workflows yet. Create one to automate CRM actions like assigning owners, changing statuses, and sending emails._
3. In the **New CRM Workflow** window, type a **Workflow Name** (required) — the placeholder suggests _e.g. Auto-assign new leads_.
4. Pick a **Trigger Source**: **Native CRM** or **Custom Objects**. Custom Objects is greyed out until your organization has at least one custom object (see [CRM Configuration](https://docs.vinsi.ai/crm/admin/crm-configuration)).
5. Choose the **Entity** (Contact, Company, Deal, Order, or AI Phone Agent — or one of your custom objects) and then the **Event**. The events offered depend on the entity; see the [Triggers](https://docs.vinsi.ai/crm/admin/data-automation#crm-da-wf-triggers) table.
6. Optionally add a **Description** (_What does this workflow do?_) so other admins know what it's for.
7. Click **Create Workflow**. You'll see **Workflow created** and drop straight into the builder. Leaving out the name or trigger shows **Name and trigger are required**.

**New workflows are live immediately.** There is no draft state — a workflow is created as **Active**. Until you wire it up it has nothing to do, but the moment you save a trigger connected to an action it starts running against real records. If you want to build it quietly, click **Deactivate** first and turn it back on when you're finished.

### Build the Flow

The builder has three parts: the **Nodes** palette on the left (collapsible with the chevron), the canvas in the middle, and a **Configure Node** panel that slides in on the right when you select a node.

1. Drag the trigger from the **Triggers** group onto the canvas. Only the trigger you chose at creation is listed, and once it's placed it gets a tick and can't be dragged again. Dropping a second trigger shows **Only one trigger node allowed per workflow**.
2. Drag in the **Conditions** and **Actions** you need, plus an **End** node if you want the branch to stop explicitly.
3. Connect nodes by dragging from a node's right-hand handle to the next node's left-hand handle. Condition nodes have two outputs — **YES** (green, upper) and **NO** (red, lower). Each output can feed only one connection; a second attempt shows **This output is already connected**. Hover a connection and click the red ✕ to remove it.
4. Click a node to open **Configure Node**. Every node has a **Title** and an optional **Description** (_Optional note_), followed by settings specific to that node type. **Delete Node** at the bottom removes it and its connections.
5. Use **Fit View** in the header (_Fit all nodes in view_) to re-centre a large diagram.
6. Click **Save**. You'll see **Workflow saved**; a failure shows **Failed to save**.

Renaming a node's **Title** is safe — it only changes the label on the canvas, not which action runs. Use it to say what this step is for, and put longer notes in the **Description** field.

### Triggers

Every workflow has exactly one trigger, chosen when you create it and fixed afterwards. To change a trigger you create a new workflow.

| Entity         | Event                                 | Fires when                                                                                                                                      |
| -------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| Contact        | Record is created                     | A new contact is created.                                                                                                                       |
| Contact        | Record is updated                     | A contact is edited — but only when no more specific event applies. A lead-status or disposition change fires that event instead, not this one. |
| Contact        | Lead status changes                   | The contact's lead status moves to a different value.                                                                                           |
| Contact        | Disposition changes                   | The contact's call disposition changes.                                                                                                         |
| Contact        | Custom field changes                  | A custom field on the contact gets a new value.                                                                                                 |
| Company        | Custom field changes                  | A custom field on the company gets a new value. This is the only company event available.                                                       |
| Deal           | Record is created                     | A new deal is created.                                                                                                                          |
| Deal           | Stage changes                         | A deal moves to a different pipeline stage.                                                                                                     |
| Order          | Record is created                     | A new order (engagement) is created.                                                                                                            |
| AI Phone Agent | After call                            | An AI phone agent call has ended and its results are available.                                                                                 |
| Custom object  | Record is created / Record is updated | A record of that custom object is created or updated.                                                                                           |

The trigger node itself has no settings beyond Title and Description — there is nothing to configure on it.

### Conditions

A condition checks one field and splits the flow into a **YES** branch and a **NO** branch. The palette only offers the conditions that make sense for your trigger, so the list you see is shorter than the full set below.

| Condition node         | Checks                                       | Shown for                                    |
| ---------------------- | -------------------------------------------- | -------------------------------------------- |
| Check Lead Status      | Lead status                                  | Contact, deal, order and call triggers       |
| Check Contact Type     | Contact type                                 | Contact, deal, order and call triggers       |
| Check Source           | Contact source                               | Contact, deal, order and call triggers       |
| Check Disposition      | Contact disposition                          | Contact, deal, order and call triggers       |
| Check Company          | Company name                                 | Contact, deal, order and call triggers       |
| Check Field            | Any one contact field you pick               | Contact, deal, order and call triggers       |
| Check Deal Stage       | Deal stage                                   | Contact, deal and order triggers             |
| Check Deal Amount      | Deal value                                   | Contact, deal and order triggers             |
| Check Pipeline         | Pipeline                                     | Contact, deal and order triggers             |
| Check Call Disposition | The disposition the AI agent set on the call | AI Phone Agent trigger only                  |
| Check Call Summary     | Text of the call summary                     | AI Phone Agent trigger only                  |
| Check Transferred To   | Where the call was transferred               | AI Phone Agent trigger only                  |
| Check Custom Field     | A custom field on the contact or company     | The two _custom field changes_ triggers only |
| Check Object Field     | A field on the custom object record          | Custom object triggers only                  |

Each condition has three settings:

| Setting  | Details                                                                                                                                                                                                                                                                                                                                                                                                 |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Field    | Locked to the node type and shown greyed out, except on **Check Field**, where you choose from Lead Status, Contact Type, Source, Disposition, Deal Stage, Deal Amount, Pipeline, Company, Email, Phone, or Industry. **Check Custom Field** and **Check Object Field** add their own field picker instead (_Select custom field..._ / _Select field..._).                                              |
| Operator | Defaults to **equals**. Options: equals, does not equal, contains, does not contain, is empty, is not empty. **greater than** and **less than** appear only when the field is Deal Amount. Text comparisons ignore upper/lower case.                                                                                                                                                                    |
| Value    | Hidden for _is empty_ and _is not empty_. Becomes a dropdown of your configured options for Lead Status, Source, Disposition, Pipeline and Industry; a Pipeline → Stage list for Deal Stage; lead / customer / partner / vendor / other for Contact Type; and a free-text or number box otherwise. Call Disposition lists the dispositions defined on your AI agents, or shows _No dispositions found_. |

**There is no AND / OR builder.** One condition node tests one field. To require two things, chain condition nodes — feed the first node's **YES** output into the second node. A condition that is missing its field or operator is treated as passing, so always fill both in.

### Actions

Actions are the work the workflow does. Drag them from the **Actions** group.

| Action           | Settings                                                                                                                                                                                                                                                                                                              |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Set Lead Status  | **Lead Status** — one of your configured lead statuses.                                                                                                                                                                                                                                                               |
| Set Disposition  | **Disposition** — one of your configured dispositions.                                                                                                                                                                                                                                                                |
| Set Contact Type | **Contact Type** — lead, customer, partner, vendor, or other.                                                                                                                                                                                                                                                         |
| Assign Owner     | **Team Member** — pick from _Select member..._ and the member list.                                                                                                                                                                                                                                                   |
| Set Deal Stage   | **Deal Stage** — listed as _Pipeline → Stage_.                                                                                                                                                                                                                                                                        |
| Create Deal      | **Deal Name** (placeholder _Use {{contact\_name}} for dynamic_), **Pipeline**, and **Amount** (number, placeholder _0.00_).                                                                                                                                                                                           |
| Send Email       | **Email Template** (or **Custom (no template)**), **To** (only without a template — accepts _contact_, _owner_, or an address), **Subject**, and **Body** in a rich editor. Choosing a template sends to the contact and keeps using the template's latest content.                                                   |
| Send SMS         | **SMS Template** (or Custom), **From Phone Number**, **To** — Phone (Primary), Phone 2, or Phone 3 — and **Message**. Supports {{name}}, {{email}}, and {{phone}}.                                                                                                                                                    |
| Make Phone Call  | **AI Agent** (required) — one of your phone agents — **Call To** (_contact_, the default, dials the contact's primary number; anything else is dialled as typed), and **Call Purpose**, which is passed to the agent as context. The call is placed as soon as the workflow reaches this node.                        |
| Wait             | **Delay** (a number) and **Unit** (minutes, hours, or days). Everything after this node is put on hold and picked up once the delay is over — see the note below.                                                                                                                                                     |
| Add Note         | **Note Content** — free text added to the contact.                                                                                                                                                                                                                                                                    |
| Create Ticket    | **Subject** (required), **Description**, **Priority** (Low, Medium — default, High, Urgent), **Type** (Incident — default, Request, Question, Problem), **Assign To** (default Unassigned, which means whoever triggered the workflow), and **Due In (days)** (No due date — default, 1, 2, 3, 5, 7, 14, 30, 60, 90). |
| Create Activity  | Same fields as Create Ticket, plus two dynamic assignees: **Lead Owner (whoever the contact is assigned to)** and **Workflow Trigger User (whoever triggered it)**. Left unassigned, the activity stays unassigned.                                                                                                   |
| Set Object Field | Custom-object triggers only. Pick the **Object Field** and its **New Value**. On other triggers it shows _This workflow trigger is not linked to a custom object._                                                                                                                                                    |
| End              | No settings. Marks the end of a branch.                                                                                                                                                                                                                                                                               |

Placeholders accepted in ticket and activity subjects and descriptions: `{{contact_name}}`, `{{first_name}}`, `{{last_name}}`, `{{email}}`, `{{company}}`, `{{lead_status}}`, `{{deal_name}}`, and `{{deal_stage}}`. SMS templates are managed in [CRM Configuration → SMS Templates](https://docs.vinsi.ai/crm/admin/crm-configuration), email templates in [Email Templates](https://docs.vinsi.ai/crm/email-templates).

### Activate, Rename, Delete

| Task                      | How                                                                                                                                                                                                                                         |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Turn a workflow on or off | Flip the switch on the workflow's row in the list, or click **Activate** / **Deactivate** in the builder header. The pill next to the name reads **Active** or **Inactive**. You'll see **Workflow activated** or **Workflow deactivated**. |
| Rename                    | Open the workflow and click the pencil next to its name (_Rename workflow_). Press Enter to save, Escape to cancel. Confirms with **Workflow renamed**.                                                                                     |
| Delete                    | Click the trash icon on the row, or **Delete** in the builder header. The **Delete Workflow** window asks **Delete this workflow?** and warns _This cannot be undone. Any automations will stop running._ Confirm with **Delete**.          |
| See how often it runs     | The list row shows the trigger, the node and connection counts, a **run** count once it has fired at least once, and the created date. Deactivated workflows lose the coloured bar on the left of the row.                                  |

### Workflow Gotchas

- **No test mode.** There is no simulate or dry-run button. To check a workflow, activate it and perform the real action on a throwaway record.
- **No run log.** Only the run counter on the list row tells you anything, and it only counts runs that actually performed at least one action. A workflow whose conditions never match shows nothing.
- **Nothing warns you about a half-built flow.** A trigger with no connected actions saves and activates happily.
- **One trigger, one edge per output.** Branch by using a condition's YES and NO outputs, not by dragging two connections off the same handle.
- **Each node runs at most once per trigger.** If two branches converge on the same node, that node fires on whichever branch reaches it first.
- **Contact updates are specific.** If you want to catch a lead-status change, use the _Lead status changes_ trigger — _Record is updated_ will not fire for it.
- **Rich HTML templates are preview-only.** If an email template contains tables or inline styles, the Body field in the builder shows a read-only **(Template Preview)** instead of an editor. Edit the template itself in [Email Templates](https://docs.vinsi.ai/crm/email-templates).
- **A Wait pauses only its own branch.** Everything after the Wait node is stored and resumed once the delay is over; other branches keep running immediately. If the workflow is switched off before the delay elapses, the paused steps are dropped.
- **Send Email and Send SMS need delivery set up.** Email uses your SMTP settings in [Team Settings → Email Settings](https://docs.vinsi.ai/crm/admin/team-settings); SMS needs a phone number your organization owns.

### Email Campaigns

_Send bulk emails using CSV or CRM contacts with email verification and send rate controls._ Use this for one-off blasts and nurture sends to a list, as opposed to the one-to-one email you send from a contact record.

**Building a campaign?** The five-step wizard — recipients, compose, send settings, review, sending — is covered end to end in the [Email Campaign step-by-step guide](https://docs.vinsi.ai/step-guides/email-campaign). This section covers the admin card itself.

1. Open **Data & Automation → Email Campaigns**. The card opens on **Campaign History**, not the wizard.
2. Click **New Campaign** at the bottom of the panel to start the wizard. The button is hidden while you are inside the wizard, and hidden entirely without write access.
3. Use **Campaign History** to come back to the list from any step of the wizard.
4. Click **Refresh** to re-poll a campaign that is still sending.

Every campaign in the history list carries a status and a set of actions:

| Status    | Meaning                                                                                                  |
| --------- | -------------------------------------------------------------------------------------------------------- |
| Scheduled | Queued for a future date and time.                                                                       |
| Verifying | Addresses are being checked before the first email goes out.                                             |
| Pending   | Accepted and waiting for the sender to pick it up.                                                       |
| Sending   | Emails are going out at your configured rate.                                                            |
| Paused    | Stopped by you. Two variants appear on their own: **Paused — high bounce** and **Paused — worker down**. |
| Completed | Every recipient has been processed.                                                                      |
| Cancelled | Stopped before finishing and not resumable.                                                              |
| Error     | The campaign failed. Check your SMTP settings first.                                                     |

| Action          | What it does                                                                                                   |
| --------------- | -------------------------------------------------------------------------------------------------------------- |
| Live View       | Opens the progress view for a campaign that is sending.                                                        |
| Pause / Resume  | Stops and restarts sending. Confirms with **Campaign paused** / **Campaign resumed**.                          |
| Reactivate      | Asks _Restart sending for this campaign?_ then reports **Campaign reactivated — sending will resume shortly**. |
| Cancel Campaign | Asks _Are you sure you want to cancel this campaign?_ Cancelling cannot be undone.                             |
| Edit            | Reopens the campaign in the wizard.                                                                            |
| Duplicate       | Offers **Duplicate with same recipients** or **Duplicate — choose new recipients**.                            |
| Delete          | Titled **Delete Campaign** with the warning _This cannot be undone._                                           |

Each row also reports **Recipients**, **Sent**, **Failed**, **Skipped**, **Opened**, **Clicked**, **Bounced**, and **Unopened**. Click into the numbers to see which addresses were affected and why a recipient was skipped — reasons include _Unsubscribed_, _Already sent in last 24h_, _Duplicate in list_, _No mail server (bad/typo domain)_, and _Bounced in a recent campaign_.

**Gotchas.** Campaigns need SMTP configured — without it you'll see _No custom SMTP settings configured. Go to Email Settings to set up your SMTP server._ Unsubscribed contacts and addresses that bounced in the last six months are skipped automatically, so your **Sent** count will be lower than your **Recipients** count. Sending continues in the background — you can safely close the panel.

### Reports

_View 20+ CRM reports with charts across contacts, deals, orders, calls and more._ This is the read-only analytics view over your whole CRM — use it for pipeline reviews, activity checks, and per-rep performance. The full catalogue of charts is listed on the [Admin Reports](https://docs.vinsi.ai/crm/reports) page.

1. Open **Data & Automation → Reports**. The screen is titled **CRM Reports** and has a **← Back to CRM Admin** link.
2. Narrow to one person with the team-member list, which defaults to **All Team Members**.
3. Pick a date range, then click **Refresh** if you want to re-pull the numbers.
4. Click any summary tile or chart segment to drill into the underlying records.
5. In a drill-down, click **Export CSV** to download those rows.

| Control       | Options and defaults                                                                                                            |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Team member   | **All Team Members** (default), or one member.                                                                                  |
| Date range    | Today, Last 7 Days, Last 30 Days, Last 90 Days, This Year, All Time, Custom.                                                    |
| Custom range  | Choose **Date Range** (from and to) or **Specific Date**. The end date can't be earlier than the start date.                    |
| Summary tiles | Total Contacts, Total Companies, Total Deals, Deal Value, Total Engagements, Revenue, Appointments, Total Calls. All clickable. |
| Sections      | Team Member Performance, Calls, Contacts, Companies, Deals, Engagements.                                                        |
| Export        | **Export CSV**, available inside a drill-down only.                                                                             |

**Gotcha.** A chart with nothing to show renders an empty-state placeholder rather than disappearing, so a blank panel usually means your date range or team-member filter is too narrow — not that the data is missing.

### Email Reports

_View email sending analytics, volume trends, and delivery insights._ Email Reports is the health check on your sending reputation: it shows how much mail your team sends, how much of it lands, and who is getting hit repeatedly. Watch it if you care about not being blocked by the big mailbox providers.

1. Open **Data & Automation → Email Reports**. The panel is titled **Email Reports** (_Email sending analytics and delivery insights_).
2. Choose a period from the date-range list. It opens on **Last 30 days**.
3. Read the KPI cards across the top, then the charts and lists below them.
4. Click **View details →** on any KPI card, or a bar or slice on a chart, to see the individual emails behind that number.
5. In a drill-down, use **Back to Reports** to return.

| Control or metric  | Details                                                                                       |
| ------------------ | --------------------------------------------------------------------------------------------- |
| Date range         | Today, Last 7 days, **Last 30 days** (default), Last 90 days, Last year.                      |
| Total Sent         | All emails sent in the period, with a daily average underneath.                               |
| This Week          | Current week against the previous week, as a percentage.                                      |
| Open Rate          | Percentage opened, with the raw _x of y opened_ count.                                        |
| Click Rate         | Percentage clicked, with the raw _x of y clicked_ count.                                      |
| Bounce Rate        | Percentage that failed to deliver, plus the bounced count. The number to watch.               |
| Unique Recipients  | Distinct contacts mailed, shown against your total contact count.                             |
| Unsubscribed       | Opt-outs in the period plus an all-time figure.                                               |
| Charts             | Daily Email Volume, Emails by Source, Sending Activity by Hour.                               |
| Lists              | Top Recipients, Top Senders (Team), and Recent Emails with a **View All Emails** link.        |
| Drill-down columns | Subject, To, Source, Sent By, Status, Date. Status badges are Delivered, Opened, and Bounced. |

**Gotchas.** Email Reports has no export — to download rows, use the **Export CSV** button in [Reports](https://docs.vinsi.ai/crm/admin/data-automation#crm-da-reports) instead. A rising bounce rate paired with a growing unsubscribe count is the earliest signal that your domain is heading for trouble; clean the list from [Unsubscribe Management](https://docs.vinsi.ai/crm/admin/data-automation#crm-da-unsubscribe) before you send again.

### Import Contacts

_Bulk import leads from a CSV file and assign them to team members._ The wizard runs in six stages: **Upload → Map Columns → Enrich → Assign → Importing → Done**.

1. Open **Data & Automation → Import Contacts** and click **Choose CSV File**, or click **Download sample template** first to get a correctly-headed file. The file must have a header row and at least one data row, otherwise you'll see _CSV must have at least a header row and one data row_.
2. On **Map Columns**, check the automatic mapping. Each CRM field has a dropdown over your CSV headers; set anything you don't want to bring across to **— Skip this field —**. Use **Preview (first 3 rows)** to confirm the columns line up, and **Start Over** if the file was wrong.
3. Tick **Skip Enrichment** if you want your CSV used exactly as written (_no lookups, no fallback fill_). Then click **Next: Enrich** — or **Next: Assign** if you skipped enrichment.
4. On **Enrich**, VINSI looks your company names up on Google (_Looking up companies on Google..._) and reports _Found N of M companies on Google. Toggle which ones to enrich._ Turn off any match you don't trust, then click **Next: Assign**.
5. On **Assign & Defaults**, set the owner, the default lead status and source, and the **Duplicate check**. Read the warning box — its text changes with the duplicate rule you pick. Confirm the count in the **Ready to import** tile.
6. Click **Start Import** and leave the panel open. Progress shows as _N of M processed_.
7. On **Import Complete**, review **Contacts Imported**, **Companies Created**, **Skipped** and **Errors**. Click the imported count to list the new contacts. Finish with **Import Another File** or **Back to CRM Admin**.

| Field or option       | Details                                                                                                                                                                                                                                                                                 |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CSV columns           | First Name, Last Name, Title, Email, Phone, Phone Ext, Phone 2, Phone 2 Ext, Phone 3, Phone 3 Ext, Company, Source, Lead Status, Notes, Street, City, State, Zip, Review Rating, Review Count, Website, Industry. Only **Email** is expected; every column is mapped by hand in step 2. |
| File type             | .csv only.                                                                                                                                                                                                                                                                              |
| Skip Enrichment       | Off by default. When on, the Enrich stage is skipped entirely.                                                                                                                                                                                                                          |
| Assign to Team Member | Defaults to **— Unassigned —**. Applies to every row in the batch.                                                                                                                                                                                                                      |
| Default Lead Status   | Your configured lead statuses. Used only where the CSV row has no status of its own.                                                                                                                                                                                                    |
| Default Source        | Your configured sources. Used only where the CSV row has no source of its own.                                                                                                                                                                                                          |
| Duplicate check       | **By Email (default)** · By Name (first + last) · By Company name · By Phone · Skip duplicate check. Matching rows are skipped, not merged.                                                                                                                                             |
| Imported record type  | Every imported contact is created as a **lead**.                                                                                                                                                                                                                                        |

Do not map a combined "Full Name" column to First Name.

If your CSV has a single column containing both first and last name together, do **not** map it to the First Name field — the whole name will be stored as the first name. You have two options:

- Use the **VINSI CSV Formatter Tool** to split the column into First Name and Last Name before importing.
- Contact **VINSI Sales** for help preparing the file.

**Gotchas.** The file is parsed in your browser, so keep batches to a few thousand rows and split anything larger — very big files make the tab slow. Save your export as plain comma-separated CSV: values containing line breaks, escaped quotes, or semicolon separators will not parse correctly. Rows with no email are still imported, using a placeholder address. A row with a company but no person's name becomes a contact named after the company. Check that your **Default Lead Status** and **Default Source** dropdowns are actually showing a selected value before you start — if your organization has renamed those options in [CRM Configuration](https://docs.vinsi.ai/crm/admin/crm-configuration), pick them explicitly. Imported contacts land in [CRM → Contacts](https://docs.vinsi.ai/crm/contacts).

### Bulk Assign

_Reassign multiple contacts to a different team member at once._ Use it when someone leaves, when you rebalance territories, or to hand a freshly imported batch to a rep. The panel is titled **Bulk Assign Contacts**.

1. Open **Data & Automation → Bulk Assign**. Contacts load automatically — you'll see _Loading N of M contacts…_ while that happens.
2. Narrow the list with the filter bar. Changing any filter clears your current selection, so filter first and select second.
3. Select contacts: click rows, use the header checkbox, or pick a preset from **Select Amount**.
4. At the bottom, open the **— Select team member —** list and choose the new owner.
5. Click **Assign**. The button shows the count, for example **Assign (37)**.
6. Watch the progress bar. When it finishes you'll see a _N contacts reassigned_ confirmation, the selection clears, and the list reloads.

| Control                 | Options and defaults                                                                                           |
| ----------------------- | -------------------------------------------------------------------------------------------------------------- |
| Search                  | Placeholder _Name, email, company..._ — matches name, email address, or company.                               |
| Lead Status             | **All** (default), plus your configured lead statuses.                                                         |
| Type                    | **All** (default), Lead, Customer, Archived.                                                                   |
| Disposition             | **All** (default), plus your configured dispositions.                                                          |
| Assigned To             | **All members** (default), Unassigned, or a specific member.                                                   |
| Select Amount           | **None** (default), 10, 50, 100, 200, 400, 1000, **All (count)**, or **Custom** with a number box (minimum 1). |
| Rows per page           | 50, fixed.                                                                                                     |
| Maximum contacts loaded | 50,000 per organization.                                                                                       |

**Gotchas.** There is no confirmation step — **Assign** applies immediately. Selection and the header checkbox cover the whole filtered set, not just the 50 rows you can see, so always check the _N of M selected_ counter before you click. On organizations with more than 50,000 contacts the list stops loading at that ceiling without warning; filter harder and work in batches.

### Bulk Delete

_Select and permanently remove multiple contacts at once._ The panel is titled **Bulk Delete Contacts** and warns in red: **This action cannot be undone.** Use it to clear out a bad import or a stale list — not as a general tidy-up tool.

1. Open **Data & Automation → Bulk Delete**. Contacts load automatically.
2. Filter and select exactly as in [Bulk Assign](https://docs.vinsi.ai/crm/admin/data-automation#crm-da-bulk-assign) — the filter bar, **Select Amount** list, and 50-row pages are identical.
3. Click the red **Delete** button at the bottom; it shows the count, for example **Delete (37)**.
4. A confirmation banner appears in the panel asking **Permanently delete N contacts?**. Click **Yes, delete** to go ahead, or **Cancel** to back out. Nothing needs to be typed — it is two clicks in total.
5. Read the result. It reports what happened in one line, for example _120 contacts deleted · 4 skipped (3 with deals, 1 from client companies)_. If nothing could be deleted you get a warning instead of a success message.

| Point                        | Details                                                                        |
| ---------------------------- | ------------------------------------------------------------------------------ |
| Reversible?                  | No. Deleted contacts are gone, along with their activities, emails, and tags.  |
| Contacts with a deal         | Skipped, and counted as _with deals_ in the result.                            |
| Contacts on a client company | Skipped, and counted as _from client companies_ in the result.                 |
| Confirmation                 | An in-panel banner with **Yes, delete** and **Cancel**. No typed confirmation. |
| Maximum contacts loaded      | 50,000 per organization, same as Bulk Assign.                                  |

**Gotchas.** If your selection is entirely deals-linked or client-company contacts, the delete completes but removes nothing — the message will show a skip count and no deletions. To remove one of those contacts, detach the deal or change the company type first. As with Bulk Assign, the selection covers the whole filtered set, not the visible page.

### Business Card

_Scan a business card image to create a contact and company._ Photograph a card at an event, upload it, and VINSI reads the details for you to check before saving. Unlike the other cards this one opens a window titled **Create from Business Card** rather than a panel.

1. Open **Data & Automation → Business Card**.
2. Under **Upload a photo of the business card** (_We'll read the contact and company details for you to review._), choose an image. A preview appears once it is loaded.
3. Click **Scan Card**. The button changes to **Reading…** while the card is processed.
4. Check the **Contact** and **Company** sections and correct anything that was misread. If VINSI finds matching businesses it offers them under _Found on Google — pick one to fill verified details:_; clicking one overwrites the company fields with the verified data.
5. Click **Create**. On success you'll see **Contact and company created**, or a contact-only confirmation if the company already existed.

| Field or limit       | Details                                                                                            |
| -------------------- | -------------------------------------------------------------------------------------------------- |
| Contact fields       | First Name (required), Last Name, Job Title, Email, Phone, Ext.                                    |
| Company fields       | Company Name, Website, Industry, Company Email, Company Phone, Address, City, State, Zip, Country. |
| Accepted image types | PNG, JPG, WEBP, HEIC. One file at a time.                                                          |
| Maximum file size    | 10 MB. Large photos are automatically shrunk to 1600 px on the long edge before upload.            |
| New contact defaults | Lead status **New**, type **lead**, source **Business Card**, owned by you.                        |
| New company defaults | Type **prospect**, owned by you. The new contact becomes its primary contact.                      |

**Gotchas.** Existing companies are matched on exact name first, then on the website domain — if neither matches, a second company record is created, so tidy the company name before saving. A contact whose email address already exists in your CRM is rejected; open the existing contact in [CRM → Contacts](https://docs.vinsi.ai/crm/contacts) and update it instead. Always re-read the scanned phone number and email before clicking Create: a misread digit is much harder to spot later.

### Unsubscribe Management

_View unsubscribed contacts and re-subscribe contacts._ This is the suppression list your campaigns and workflow emails check before every send. It holds both people who opted out and addresses that bounced recently, so it is the first place to look when someone says "I never got your email".

The list header reads **Suppressed recipients (count)** and explains what qualifies: addresses skipped on send — unsubscribed contacts, and anything that bounced in the last six months, including CSV-only recipients that aren't CRM contacts.

**Find someone**

1. Open **Data & Automation → Unsubscribe Management**. Page 1 loads automatically.
2. Type into the box (placeholder _Search name, email, company..._) and press Enter or click **Search**.
3. Page through with **« First**, **‹ Prev**, **Next ›**, and **Last »**.

**Put someone back on the list**

1. Find the person and click the green **Re-subscribe** button on their row.
2. The **Re-subscribe Contact** window asks _Re-subscribe \[name\]? They will start receiving emails again._ Confirm with **Re-subscribe**.
3. You'll see **Contact re-subscribed** and the row disappears from the list. This clears both the opt-out and any bounce record.

**Suppress an address by hand**

1. Click **Add Unsubscribe** at the bottom of the panel.
2. Type the address into **Contact email address** (placeholder _name@example.com_) and press Enter or click **Add Unsubscribe**.
3. If the address belongs to an existing contact it is flagged. If it is unknown, a stub record is created so campaigns still honour it. Already-suppressed addresses report _This contact is already unsubscribed_.

**Clear a bounce without changing the opt-out**

1. Click **Re-enable a bounced email** in the panel header.
2. Enter the address under **Email address** and click **Re-enable**.
3. The result reports how many bounces were cleared, or tells you there was no recent bounce or unsubscribe on record for that address.

| Row element           | Details                                                                                   |
| --------------------- | ----------------------------------------------------------------------------------------- |
| Name                  | The contact's full name, or a dash when it isn't known — common for CSV-only recipients.  |
| Email · Company       | Address and company on the second line.                                                   |
| Unsubscribed \[date\] | Red badge. The person clicked the unsubscribe link, or an admin added them.               |
| Bounced \[date\]      | Warning badge marked **Hard** (red) or **Soft** (amber), with the bounce reason on hover. |
| Rows per page         | 25, fixed. Pagination appears once there are more than 25 entries.                        |
| Empty states          | _No contacts have unsubscribed._ or _No unsubscribed contacts match "\[search\]"._        |

**Gotchas.** Re-subscribing someone who genuinely opted out is a compliance risk — only do it when they have asked you to. Bounce suppression is separate from unsubscribe: an address can be skipped purely because it bounced, which is what **Re-enable a bounced email** is for. The unsubscribe link itself is generated automatically in each outgoing email footer; there is nothing to copy from this panel.

### Website Visitors

_Track anonymous visitors on your marketing site — city, ISP, pages viewed. See who's browsing and reach out._ A small script on your site reports each session back to VINSI, so you can spot companies researching you before they ever fill in a form. Anyone who can open Data & Automation can use this card.

**Set up tracking**

1. Open **Data & Automation → Website Visitors** and expand **Tracking snippet**.
2. Fill in **Allowed domains** — comma or space separated, for example `vinsi.ai, www.vinsi.ai`. Leave it blank to accept any origin.
3. Click **Save & generate key**. You'll see **Tracking key generated** and a green **Active** chip.
4. Click **Copy snippet** and paste it just before the closing `</body>` tag on every page of your marketing site.
5. Visit your own site once, then come back and click the refresh button — the session should appear.

**Work the list**

1. Pick a period and search for a city, ISP, IP address, page URL, referrer, or UTM value.
2. Click **Details** on a row to see the page history and user agent; click **Hide** to collapse it.
3. Click **Edit** to open **Identify this visitor** and record what you know — business name, contact name, city, state, and notes. Click **Save**. Your entry applies to every session from that IP address and always overrides the automatic guess.
4. Click **Add to CRM** to create a company record from the row. Once linked the button becomes a green **In CRM** link that opens the company.
5. Use the trash button to remove a row. It asks **Delete this visitor record?** and cannot be undone.

| Control or field    | Options and defaults                                                                                                   |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| Allowed domains     | Comma or space separated. Blank accepts any origin.                                                                    |
| Tracking key button | **Save & generate key** the first time, **Save & rotate key** afterwards.                                              |
| Date filter         | Last 24 hours, Last 7 days, **Last 30 days** (default), Last 90 days, All time.                                        |
| Rows per page       | **10** (default), 25, 50, 100.                                                                                         |
| Visitor name        | Your manual entry first, then the Google match, then the ISP or organization, then the raw IP, then _Unknown visitor_. |
| Row chips           | Page count, **Manual** when you identified it by hand, and the industry when known.                                    |
| Details panel       | Entry page, referrer, UTM values, page history (last 20 pages with times), and user agent.                             |
| Identify fields     | Business name, Contact name, City, State, Notes — all free text.                                                       |

**Gotchas.** **Save & rotate key** invalidates the old key — the snippet already on your site stops reporting until you paste the new one, so always re-copy the snippet after rotating. Traffic from cloud and datacenter networks is almost always crawlers, so those rows are hidden from the list and reported as _Hiding N bot/cloud rows on this page_; they still count toward the total, which is why a page can look shorter than the count suggests. Identifying a row by hand brings it back into view. This card tracks anonymous sessions only — it is not a form-capture tool.

### Do Not Call Registry

_Numbers blocked from all outbound batch and manual dialing. "Do Not Call" dispositions and the AI's mid-call add feed this list automatically._ Anyone who can open Data & Automation can use this card.

**Add a number**

1. Open **Data & Automation → Do Not Call Registry**.
2. Under **Add a number**, type the **Phone number** (placeholder _(555) 555-1234_) and optional **Notes**.
3. Click **Add**. You'll see **Added to DNC list**, or **Already on the DNC list** if it was already blocked. Fewer than ten digits gives **Enter at least 10 digits**.

**Import a list**

1. Expand **Bulk import from CSV**.
2. Paste one phone number per line, or CSV rows whose first column is the phone number — extra columns are ignored.
3. Click **Import**. The result is reported as a summary, for example _240 added · 12 already listed · 3 invalid_.

**Unblock a number**

1. Find it with the search box (_Search by number or notes…_).
2. Click the red trash button (_Remove from DNC list_).
3. Confirm the prompt: _Remove \[number\] from the DNC list? This number will be dialable again on future batches._ There is no undo.

| Field, column or limit | Details                                                                                                   |
| ---------------------- | --------------------------------------------------------------------------------------------------------- |
| Phone number           | Required. Minimum 10 digits. Formatting is ignored — spaces, dashes, brackets and a leading +1 all match. |
| Notes                  | Optional, up to 500 characters.                                                                           |
| CSV import             | Paste-only — there is no file picker. Duplicates and numbers under 10 digits are skipped.                 |
| Phone column           | Shown as _+1 (555) 555-1234_ or _(555) 555-1234_.                                                         |
| Source column          | **Manual** (added here), **CSV Import**, **Disposition**, **AI Agent**, or **API**.                       |
| Notes column           | Your note, the originating call reference, or a dash.                                                     |
| Added column           | Local date and time.                                                                                      |
| Rows per page          | 25, **50** (default), 100, 250.                                                                           |

Numbers arrive on this list from four places:

- **Manual** — added in this panel.
- **CSV Import** — pasted into the bulk import box.
- **Disposition** — saving a call with a disposition of _do not call_, _dnc_, _remove me_, or _do not contact_ adds the number automatically.
- **AI Agent** — an AI phone agent adds the number mid-call when the person asks not to be contacted again.

Outbound calls check this list before dialing. In [Batch Calls](https://docs.vinsi.ai/telephony/batchCall), blocked rows are reported with their own **DNC skipped** status rather than as errors, and a DNC badge appears next to the number in the batch contact list.

**Gotchas.** Internal extension dialing deliberately bypasses the registry, so a coworker's extension is never blocked. Very large pastes are processed one line at a time and can time out — split anything over a few thousand numbers. Removing a number takes effect on future batches, not on a batch that is already running.
