CRM
CRM
Manage contacts, lists, deals, and prospecting for your brand in one place.
What is CRM?
SWAI CRM lives under Contacts in the SWAI Dashboard. It is where you store people and companies, organize them into lists, review their journey, add notes, run a sales Deal Room, and bring in new people with Import Contacts, Prospecting, or Visitor Intel.
You use it to:
- Browse and search contacts by type and list
- Quick-add contacts or import from CSV / Excel
- Find and enrich prospects, then add them to CRM
- Identify website visitor companies with Visitor Intel, enrich decision-makers, and sync leads
- Open a contact for profile, journey, notes, AI insights, and deals
- Build a pipeline in Deal Room and move clients through stages
- Create contact webhooks so a website JavaScript form can add people to CRM, with AI assigning matching lists from the description
Main screens
| Screen | What it’s for |
|---|---|
| Contacts | List, search, filter, bulk actions, and Add contact |
| Conversations | Messaging hub for contact threads (related tab) |
| Deal Room | Pipeline board and client workspace |
| Contact detail | Profile, Journey, Details, Deal, Notes |
| Import Contacts | Upload a file, map fields, import into lists |
| Prospecting | Search, enrich emails, add a list to CRM |
| Visitor Intel | Track website company visits, enrich roles, sync leads to lists |
| Setup webhooks | Origin-allowlisted URL so a JS form can create contacts; AI assigns matching brand lists |
Note: Open Contacts from the SWAI Dashboard sidebar. CRM uses your brand session — there is no separate CRM sign-up.
Note: From Add contact you may also open Visitor Intel and Signal Marketing. For Listening Signals, see the Signal Marketing Help article (Contacts → Add contact → Signal Marketing).
Before you start
You can add contacts anytime. Import, Prospecting, Visitor Intel, and Deal Room work best when a few basics are ready.
Checklist
Open Contacts from SWAI
Use the Contacts sidebar item so you are signed in for the correct brand.Lists
Create at least one list if you plan to Import Contacts, bulk-add people to lists, or organize audiences for outreach and agents. Webhook ingest can still create contacts with no lists if none match.Prospecting / enrichment credits (optional)
Prospecting and Visitor Intel enrichment charge credits only when a verified email is found (0.3 credits each in the UI). Check your wallet balance before large searches or enrichments.Visitor Intel tracking script (optional)
To identify website companies, install the Tracking script from Visitor Intel on your site before you expect the Intelligence feed to fill.Deal Room (optional)
Launch a pipeline once (niche, stages, key facts, documents) before you add deals.
Important warnings
Warning: If you see Missing brand or authentication, sign in again and reopen Contacts from the Dashboard.
Warning: Deleting contacts or notes cannot be undone. Confirm counts carefully before Delete.
Tip: Use lists early — import, prospecting, webhooks, filters, and many outbound tools all rely on them.
Quick start
- Open Contacts.
- Click Add contact → Quick Add (or Import Contacts / Prospecting / Visitor Intel / Setup webhooks).
- Optionally click Create List and add people to lists.
- Open a contact to review Journey, add a Note, or check Deal.
- Open the Deal Room tab to set up a pipeline and add deals.
- Use search and Filter by list to find people later.
Contacts
Path: Sidebar → Contacts → tab Contacts.
Browse and find
| Control | What it does |
|---|---|
| Type folders | All, Prospect, Lead, Customer |
| Filter by list | All lists, No source, or a specific list with counts |
| Search contacts... | Find contacts in the current view |
| Table | Name, Type, Email, Phone, Source, Updated, edit |
Empty state: No contacts yet. Add your first contact to get started.
Contacts without a display name may show as Unnamed contact.
Bulk actions
Select rows (or select all matching), then:
| Action | What it does |
|---|---|
| Delete | Delete Contact — confirm how many contacts will be removed |
| Add to agent | Pick a launched agent (empty: No launched agents) |
| Add to list | Open Add Contacts to Lists |
| Create List | Create a list without selecting contacts first |
Add contact menu
Add contact opens:
| Option | Purpose |
|---|---|
| Quick Add | Create one contact in a modal |
| Import Contacts | File upload wizard |
| Prospecting | Search and enrich prospects |
| Visitor Intel | Identify website visitor companies, enrich roles, sync leads |
| Signal Marketing | Listening Signals → matches to a contact list |
| Setup webhooks | Create an Origin-allowlisted webhook for website JS forms |
Quick Add
Modal title: Add Contact.
Required / typical fields:
- First name, Last name
- Email, Phone, Company Name
- Description* — give enough detail for accurate segmentation
Warning: Phone must start with + and contain digits (for example
+15551234567).
Actions: Cancel, Add contact. SWAI may generate description/type with AI before save.
Edit and delete
- Open a contact from the name or pencil to edit on the detail page.
- Batch delete uses a confirmation: Are you sure you want to delete N contact(s)? → Cancel / Delete.
Setup webhooks
Path: Add contact → Setup webhooks.
Use Setup webhooks when a JavaScript client on your website (or app) should create contacts in CRM. Each webhook is locked to allowed origin domains (the sites where your script runs). After create, AI matches the contact description against all lists on the brand. If none match, description is empty, or classification fails, the contact is created with no lists.
Tip: You must add at least one origin domain when you create a webhook. Include a clear description in the payload so AI can choose lists. List descriptions on the brand improve matching.
What Origin allowlisting means
Allowed domains are browser Origin hosts, not email domains. Examples:
www.mysite.comapp.partner.iolocalhost:3000(for local testing)
SWAI hosted sites on *.site.swaihosting.online are allowed for every brand automatically. You do not need to add that host on each webhook.
The request must include a matching Origin header (browsers send this automatically on cross-origin fetch). If the Origin (or Referer host) is missing or not allowlisted, the webhook returns 403.
Warning: Do not share the webhook URL publicly beyond your own site. The path includes a secret token. Origin checks protect browser use; anyone who can forge an Origin header from a server can still call the URL — treat the URL like an API key for your site.
Create a webhook
- Open Contacts → Add contact → Setup webhooks.
- Optional: enter a Name (for example Website form).
- Under Allowed origin domains, type a host (for example
www.mysite.com) and click Add. Add every site where the script will run. - Click Create webhook. Lists are not selected on the webhook — AI assigns from all brand lists using
description.
After create, the webhook appears under Your webhooks. Select it to see the ingest URL and helpers at the bottom of the modal.
Manage webhooks
Under Your webhooks:
| Action | How |
|---|---|
| Browse | See name, ingest URL, origins, and Disabled badge when off |
| Select | Click a webhook card to show its sample curl / Copy for AI footer |
| Copy | Copy the ingest URL |
| Edit | Change name, origins, or Enabled; Save changes or Cancel / Back to list |
| Delete | Confirm delete — the ingest URL stops working |
| New webhook | Open the create form |
After create or save, you return to the list. Footer helpers (Sample curl, Copy curl, Copy for AI) appear when a webhook is selected on the list view.
Payload (JSON)
POST to the webhook ingest URL with Content-Type: application/json.
Example body:
{
"first_name": "Ada",
"last_name": "Lovelace",
"email": "ada@example.com",
"phone": "+15551234567",
"company": "Acme",
"job_title": "Engineer",
"type": "Lead",
"description": "From website form",
"notes": "optional"
}
Rules:
- At least one of first_name, last_name, email, phone, or company is required.
- CamelCase aliases (
firstName,lastName,jobTitle, and so on) are accepted. - Do not send list IDs in the payload. AI assigns lists from description against all brand lists; if none match, the contact has no lists.
- Typical
typevalues: Lead, Prospect, Customer.
Browser example
await fetch("https://webhook.swai.ai/contact/YOUR_BRAND_UNIQUE_ID", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
first_name: "Ada",
last_name: "Lovelace",
email: "ada@example.com",
type: "Lead",
description: "From website form",
}),
});
Replace the URL with Copy URL from the modal (https://webhook.swai.ai/contact/{brandUniqueId}). Run this only on pages hosted on an allowlisted origin. Do not call api.swai.ai from the browser for ingest.
Server-side callers use the same URL and must send a matching Origin (or Referer) header.
After a successful call
The contact is created (or updated if they already exist) in CRM. Matching brand lists are added when AI can classify the description; otherwise the contact has no lists. Notifications follow normal Contacts settings when applicable (in-app and/or email per Settings → Notifications — see Notifications, or go to app.swai.ai/setting/notifications). Open Contacts to confirm.
Lists
Lists are named groups of contacts. They are not a separate sidebar item — you manage them from Contacts, import, and Prospecting.
| Action | How |
|---|---|
| Filter the table | Filter by list |
| Create | Create List → List Name* , Description (Optional) → Create List |
| Bulk add | Select contacts → list icon → Add Contacts to Lists → select or Create New List → Add to N List(s) |
| On a contact | Lists tags; empty: Not in any lists yet.; remove with X |
Empty picker: No lists available.
Tip: No source in the list filter means contacts with no source and no list membership.
Import Contacts
Path: Add contact → Import Contacts.
Header: Import Contacts — Upload a CSV or Excel file, map columns, then add contacts to your lists.
Supported files: CSV, XLS, XLSX.
Step 1 — Upload & Lists
- Lists* — select existing lists or Create list "…". Contacts are added to these lists.
- Description prompt* — tell AI who these contacts are (used for descriptions / segmentation).
- Drop zone: Drop your file here or Choose File.
Warning: Select at least one list and fill the description before uploading.
Busy state: Reading file…
Step 2 — Map Fields
Map columns to:
- Full Name / First Name / Last Name / Company / Email / Phone
- Options such as Use Full Name… or Use AI to detect First Name and Last Name…
- Social media links (LinkedIn, Twitter/X, Facebook, Instagram, YouTube, TikTok, Other)
- Custom fields (create Text, Number, Date, Yes/No, Select, Multi-select)
Review the preview of the first rows, then Continue to Import.
Validation expects enough identity data (for example name and/or email/phone/company).
Step 3 — Import
- Start import → Processing contacts… then Importing contacts…
- Keep the window open until import finishes.
- When done: review results, Export Results CSV, Import another file, or Reset.
Warning: If you see Missing brand or authentication, sign in again before retrying.
Contact details
Path: click a contact → /contacts/{id}.
Profile
- Back to contacts
- Header: name, type badge (Prospect / Lead / Customer), company
- Optional Lead score (
N/10) - Fields: Name, Phone, Birthday, Email, Company, plus custom fields
- Description — empty: No description added.
- Contact status (display): A — Satisfied, B — Neutral, C — Unsatisfied
- Lists membership tags
- Social profiles (LinkedIn, Instagram, Twitter, Facebook) when present
Email may show No email if none is on file.
CRM tabs
On the contact: Journey | Details | Deal | Notes (Journey is the default).
Journey and activities
Journey is the activity timeline for the contact.
Sub-tabs:
| Tab | What you see |
|---|---|
| All | Combined timeline |
| Communications | SMS, Email, WhatsApp messages |
| Touch Points | System events (visits, forms, email opens, bookings, and more) |
Empty states:
- No activity found.
- No communication activity found.
- No touch point activity found.
Message contact
From Journey you can message the contact:
| Channel | Typical setup |
|---|---|
| SMS | Send from a connected phone number |
| Send from a WhatsApp integration | |
| From name / sending identity |
Touch point examples
Page visited, appointment booked, contact created, purchase, opportunity created, message or email opened / clicked / responded, quiz taken or submitted, webinar registered or attended, email sent, email bounced.
Notes
On the contact Notes tab:
- Add note → Write a note... → Save Note (or Cancel)
- Edit an existing note → Save
- Delete → Delete Note (cannot be undone)
Empty: No notes yet — Add a note to track context for this contact.
Details (AI insights)
On the Details tab:
- AI contact insights — Generate a real-time summary for this contact.
- Click Get details (busy: Generating…)
Use this when you want a quick AI summary without reading the full journey yourself.
Deal Room
Path: Contacts → tab Deal Room (or Open Deal Room from a contact’s Deal tab).
First-time pipeline setup
If no pipeline exists, Pipeline Setup asks you to:
- What's your primary service? (niche — for example Mortgage Broker, Financial Planner, Coach, Medical Professional, Other)
- Define your client journey (process stages)
- Key Facts (fields) and Document Checklist
- Review your configuration → Launch Pipeline
Or use Generate with AI → Create Pipeline to draft the setup faster. Templates can prefill stages, facts, and documents for common niches.
After launch — board and workspace
Toolbar: Pipeline settings, New Deal
Sub-nav: Pipeline Board | Client Workspace
| View | Purpose |
|---|---|
| Pipeline Board | Stage columns; + Add Card; optional Archive for closed deals |
| Client Workspace | One deal’s journey, status, documents, key facts, activity |
Card info typically includes name, service, amount, owner, expected close, Docs: received/total, and closed badges Closed > Won / Closed > Lost.
New Deal
New Deal / Add New Deal — Select a contact to add to your pipeline.
- Search contacts, Select contact
- Service (optional)
- Amount, currency, and expected close (optional)
- Add to Pipeline
You can add another deal for a contact already on the board (renewal, upsell, or a new opportunity).
Empty search: No contacts in this brand. / No matching contacts…
Client Workspace
- Status: Open | Closed > Lost | Closed > Won
- Next action — every open deal keeps a follow-up task (due date, type); complete or skip it, then add the next one. Cards without a next action (or quiet longer than your stale window) show Stale
- Document Checklist — Pending / Received / Overdue; No file uploaded when empty
- Key Facts — default Not Collected until filled
- Activity History — empty: No activity recorded yet.
- Move the deal between stages; drag from Archive into a stage to reopen when supported
Pipeline settings
Edit niche, stages, facts, documents, allowed currencies, and stale after (days) (deals use that short currency dropdown; chase goes quiet after the stale window); Replace with template…; or Delete pipeline? (permanently deletes the pipeline and associated deals).
Contact → Deal tab
| State | What you see |
|---|---|
| No deal | Not in pipeline → Open Deal Room |
| Has deal | Amount, owner, close date, facts collected, docs pending, key facts, documents, View in Deal Room |
| Multiple deals | Switcher to pick which deal to view; add another deal from Deal Room |
Prospecting
Path: Add contact → Prospecting.
Header: Prospecting — Search, enrich, and import prospects into your contact lists.
Billing callout: you pay when a verified email is found (0.3 credits per result). Importing enriched contacts into CRM is free after enrichment. The UI shows your balance and how many prospects you can enrich.
Step 1 — Search
- List name* (for example Tech Companies Q1)
- Number of prospects* (limited by wallet)
- Prospect description*
- Target job titles (chips + Add)
- Search prospects
If the session fails, use Retry.
Step 2 — Results
- Count: N prospects found · M selected
- Columns: First name, Last name, Company, LinkedIn (View profile), Match (%)
- Check all / Uncheck all
- Find emails to enrich selection; Back to search to revise
Empty: No prospects found.
Step 3 — Enriched emails
- Review email status, company, title, email (Copy)
- Add list to CRM → success Successfully imported contacts to CRM (button may show Added)
Warning: Contacts need a name and email to import. Enrichment may stop if you hit your credit or selection cap — reduce selection or add credits.
Visitor Intel
Path: Add contact → Visitor Intel.
Visitor Intel identifies companies that visit your website, shows page-level engagement, finds decision-makers at those companies (email enrichment), and syncs them into CRM as Lead contacts on a named list.
Header: Visitor Intel — Identify and enrich website visitors, then sync them to your lists.
Wallet display may show {n} credits / {n} left (or {n} enrichments left on smaller screens).
Main areas
| Area | What it’s for |
|---|---|
| Intelligence feed | Visitors grouped by organization; select, expand, archive, enrich |
| Tracking script | Copy embed code and pixel URL for your website |
| Lead enrichment | Choose job roles and list name, scan domains, sync contacts |
Note: Visitor Intel uses your brand session from Contacts. If the session fails, reopen from Add contact → Visitor Intel.
Before you use Visitor Intel
- Open Contacts for the correct brand.
- Confirm wallet credits for enrichment (0.3 credits per verified email found).
- Install the Tracking script on the website you want to monitor.
Tracking script
- Open Visitor Intel. If the feed is empty, Tracking script often opens automatically (or use the Tracking script control).
- Dialog: Tracking script — Add this script to your website to start tracking visitors.
- Embed code → Copy (or Copied).
- Note the Pixel URL (
https://stats.swai.ai/{brandId}style). - Paste the script into your site HTML, ideally before the closing
</body>tag. - Publish the site, then return and use Refresh visitors.
Steps in the dialog: Copy the script above → Paste it into your website HTML… → Publish your site and return here to see visitor activity → Got it.
Tip: Empty feed usually means the script is not installed yet, or no business visitors have been identified — use Tracking script and wait for traffic.
Intelligence feed
Columns: Organization, Activity, Type, Last visit.
| Control | What it does |
|---|---|
| Select rows | Choose organizations to archive or enrich |
| Expand row | See visits: Page URL, Engagement, Time |
| Activity | {n} visits · {n}m active |
| Type badges | Business (company resolved) or Shadow |
| Archive selected | Hide selected records from the feed (confirm: Archive N selected record(s)?) |
| Enrich selected | Start Lead enrichment for selected companies |
| Refresh visitors | Reload the feed |
Header counts: {n} organization(s) · {n} selected.
Empty: No visitor activity detected yet.
Warning: Enrichment needs companies with a known domain. Selection without domains fails with No domains found in selected visitors.
Lead enrichment
- Select organizations → Enrich selected.
- Wizard Lead enrichment — Step 1 of 2 — find decision-makers at selected companies.
- Set Campaign title (becomes the CRM list name; default like Prospects {date}).
- Set Job roles to search (defaults often include CEO, Founder). Add roles with Enter (Enter role and press Enter / Add role...).
- Review credit note: You only pay when we find a verified email (0.3 credits each…).
- Click Launch scan (or Cancel).
- Step 2: review discovered contacts (Name, Company, Role). Empty: No contacts found for the selected domains and roles.
- Click Sync contacts (or Back).
- Success: Sync completed — Enriched contacts were added to your CRM.
Synced people appear as Lead contacts on the list named by Campaign title, with job title, company, email, optional LinkedIn, and journey activity such as Page visited.
Warning: Insufficient balance stops enrichment. Add credits or reduce how many emails you expect to find.
Warning: Session expired or invalid. Please reopen Visitor Intel. — close and open Visitor Intel again from Add contact.
Tip: Campaign title is the CRM list name for synced leads. Filter Contacts by that list after sync.
Common warnings and troubleshooting
Contacts won’t load / missing brand
Warning: Sign in again and open Contacts from the Dashboard for the correct brand.
I can’t import
- Choose at least one list and fill the description prompt.
- Use CSV, XLS, or XLSX.
- Map enough identity fields (name and/or email/phone/company).
- Keep the window open until import finishes.
Phone rejected on Quick Add
Use international format starting with + and digits only after the plus.
Prospecting finds no emails / can’t enrich
- Confirm wallet balance and the 0.3 credits per verified email.
- Reduce Number of prospects or selection size.
- Refine the description and job titles, then search again.
Visitor Intel feed is empty
- Open Tracking script, Copy the embed code, paste it before
</body>, and publish. - Confirm the site is live and generating traffic.
- Click Refresh visitors. Only business visitors (company identified) appear in the CRM feed.
Visitor Intel enrichment / sync fails
- Confirm selected organizations have a company domain (No domains found in selected visitors).
- Add at least one Job role (Please add at least one role).
- Check wallet balance for 0.3 credits per verified email.
- If you see Session expired or invalid…, reopen Add contact → Visitor Intel.
- After Sync contacts, filter Contacts by the Campaign title list name.
Deal Room is empty / can’t add a deal
- Complete Pipeline Setup and Launch Pipeline.
- Use New Deal and pick a contact. A contact can have more than one deal.
- For a renewal or upsell, add another deal for the same contact instead of editing the closed one.
Journey shows no activity
Empty timelines are normal for new contacts. Activity appears as they message, open emails, book, take quizzes, or hit other touch points.
Webhook returns 403 / contact not created
- Confirm the page runs on an allowlisted origin (exact host, for example
www.mysite.comvsmysite.com). - Add both hosts if your site redirects between them.
- Browsers must send Origin (normal for cross-origin
fetch). A bare curl without-H "Origin: …"will fail. - Confirm the webhook was not Deleted and that you used Copy URL from Setup webhooks.
- Confirm at least one of name, email, phone, or company is in the JSON body.
Delete failed or partial
Confirm selection and brand context. Batch delete has size limits — try fewer contacts if needed.
Glossary
| Term | Meaning |
|---|---|
| Contact | A person (or company-linked person) in CRM |
| Prospect / Lead / Customer | Contact type folders |
| List | Named group of contacts |
| Source | Origin of the contact; No source = none and no lists |
| Journey | Timeline of communications and touch points |
| Touch Points | System events (visits, opens, bookings, quizzes, and more) |
| Communications | SMS / Email / WhatsApp messages |
| Lead score | Warmth score from 1–10 |
| Contact status | A Satisfied / B Neutral / C Unsatisfied |
| Notes | Free-form context on a contact |
| Details | AI-generated contact insights |
| Deal Room | Pipeline board and client workspace |
| Pipeline | Niche + stages + key facts + document checklist |
| Archive | Column for closed or orphan-stage deals |
| Client Workspace | Per-deal status, docs, facts, and history |
| Import Contacts | File → map → import into lists |
| Prospecting | Search → select → enrich emails → add list to CRM |
| Visitor Intel | Website company visits → enrich roles → sync Leads to a list |
| Intelligence feed | Grouped visiting organizations in Visitor Intel |
| Tracking script | Brand embed that tracks visits for Visitor Intel |
| Lead enrichment | Domain + job-role email find flow in Visitor Intel |
| Campaign title (Visitor Intel) | CRM list name used when syncing enriched leads |
| Setup webhooks | Origin-allowlisted URL for JS forms to create contacts; AI assigns matching brand lists |
| Allowed origin | Host where the webhook’s JavaScript client is allowed to run |
| Description prompt | AI context used when importing contacts |
| Custom fields | Brand-defined fields on contacts |
Need more help?
If something still fails after the checklist above:
- Confirm you opened Contacts for the correct brand.
- Note whether the issue is list, import, prospecting, Visitor Intel, webhook, contact detail, or Deal Room.
- For Prospecting or Visitor Intel enrichment, note credit balance and how many emails you tried to find.
- For Visitor Intel, note whether the tracking script is installed and whether organizations have domains.
- For webhooks, note the allowlisted origins, ingest URL (without sharing the full token publicly), and the HTTP status (for example 403).
- Contact your SWAI admin or support with the contact/list/deal name and what you expected to happen.