Contacts.
Add, import, scan, and organize the people you work with.
Your contacts are the foundation of everything else in ListingStack. Leads get attached to a contact. Sales get attached to a contact. Emails go to contacts. The more complete your contact database, the more the rest of the app earns its keep.

Adding contacts
From Contacts, click Add contact. The button opens a small menu with two ways in:
- Add manually — the standard form. The fields are mostly self-explanatory, but two deserve a note:
- Type — one of
buyer,seller,past_client,sphere,agent, orother. This drives behavior elsewhere: new contacts markedpast_clientorsphereget a double opt-in invite for your drip campaign by default and join once they confirm (you can change this in email settings). - Tags — free-form labels for whatever you want (neighborhood, referral source, lead temperature, etc). You can filter the contact list by tag.
- Type — one of
- Scan business card — snap a photo of a business card (or pick one from your camera roll) and ListingStack reads the name, company, title, address, phones, and industry off it, then drops you into a pre-filled New Contact form so you can check it before saving. This same option is available from the Add contact menu on the Dashboard, and from the New Contact form itself.
As you type an email into the manual form, ListingStack checks it against your existing contacts. A match doesn't block you — you'll see a non-blocking notice ("Looks like <name> already exists") with Open contact and Create anyway options, so you can decide in the moment instead of finding out later.
You can also scan a card onto an existing contact — look for Scan business cardon a contact's detail page. This merges the scan in non-destructively: it only fills fields that are currently blank, adds any new phone numbers that aren't already on file (up to the 4-number limit), and adds the card's industry as a tag if you don't already have it. Nothing you've already entered gets overwritten, and the previous card image is archived rather than lost.
Multiple phone numbers
Each contact can hold up to four phone numbers, each with its own label — mobile, home, office, or other— and support for extensions (type an "x" after the number, e.g. (503) 555-0100 x12). Mark one number Bestand that's the number shown everywhere in the app — the contact list, lead and sale detail pages, and anywhere else a phone number appears in shorthand. The rest are still there when you open the contact.
Importing contacts
If you're coming from another CRM or a pile of paper, use Import at the top of the contacts page. There are two modes:
- CSV / Excel— upload a spreadsheet with headers matching the contact fields (first_name, last_name, email, phone, type, tags, and a few others). It previews what it found, shows any rows it can't parse, and lets you confirm before writing.
- PDF / Word— upload a document, even a scanned roster or a photo of a sign-in sheet, and AI reads the people off it. You land on a review step where every row is editable: fix a field, remove a row that doesn't belong, or add one that was missed. Rows that look like an existing contact are flagged with a Duplicate badge, and rows the AI is unsure about are flagged Low confidence and highlighted, so you know exactly what to double-check before importing. This mode reads up to 200 rows per file — split larger files and upload the rest separately. The review step also has an Import as toggle so the same importer can send rows to either Contacts or Leads.
Either way, duplicates are skipped on write: if an email matches an existing contact, the importer leaves the original alone. Phone is formatted automatically so it's searchable by digits alone.
Bulk actions
Check the boxes next to rows in the contacts table (or use the header checkbox to select everyone on the page) and a toolbar appears with Edit and Delete. Selection persists as you page, sort, or filter, so you can build up a batch across the whole list before acting.
- Edit applies a new type and/or adds or removes tags across every selected contact in one pass — leave a field blank to leave it unchanged.
- Deletepermanently removes the selected contacts along with their linked leads, sales, and email subscriptions; it shows you the exact counts before you confirm. Both actions cap at 100 contacts per batch — deselect down to that count if you're over.
Searching and filtering
The contact list has a search input that matches name, email, phone, address, and tags as you type. Above the table sit three filter pill groups — Type, Email Opt-in, and Buyer Readiness — and most columns sort by clicking their header. Search and filters stack, and Select all N results selects everything matching the current combination, not just the visible page. On a phone, the pills collapse behind a Filters button that shows a count of active filters.
The Readinesscolumn shows each contact's buyer pre-approval readiness badge — the first header click sorts the most-ready buyers to the top. See Buyer Profiles & Surveys for what drives the badge and how to collect the underlying info.
Possible duplicates
ListingStack watches for contacts that are probably the same person. Open Possible duplicates to review them as pairs — v1 matches on shared email only. Each pair has a one-click Merge that opens the merge modal pre-targeted at that pair, and a Not a duplicatedismiss that's remembered so the pair won't resurface. A banner appears on the main Contacts list whenever duplicates are waiting for review — that's the fastest way in.
Merging contacts
You can also start a merge from a single contact: look for Merge duplicate…on its detail page. The modal has you pick the other contact, choose which record survives (swappable, so a wrong first pick isn't a problem), and shows a preview of what will move or combine before anything happens. Type mergeto confirm. There's no undo, so use the preview.
The subscription status column
Every contact shows their current email subscription status in a dedicated column:
- Subscribed — they confirmed the double opt-in and will get drip emails
- Pending — they got the opt-in invite but haven't confirmed
- Unsubscribed — they opted out, and you shouldn't re-enroll them
- — (dash) — no subscription record; they've never been enrolled
The contact detail page

On a contact's detail page you can add connections — a buyer and their spouse, a referral source, a parent who pointed their adult kid at you. Connections are directional (with a relationship label) and show up on both linked contacts.
Two more cards live here worth knowing:
- Buyer Profile — the buyer-requirements survey, pre-approval readiness, and prep-email controls. Covered in full in Buyer Profiles & Surveys.
- Documents— upload files straight onto the contact (a pre-approval letter, an ID, a signed disclosure), get an AI summary of any upload, and generate documents from your templates with this contact's fields pre-filled. See the Documents guide for how the card works.
Notes
Every contact has a free-text Notes field on its detail page — and global search matches note content too, not just name and email (see Getting Started for how search works).
Deleting contacts
Deleting a contact from the detail page removes the record. Sales and leads that referenced that contact are left intact (they'll show "Unknown" in place of the name). That's intentional: you don't lose transaction history just because you cleaned up the rolodex.
past_client or sphere is the fastest way to seed your drip program. Those types get an opt-in invite as soon as you create them, and join the drip campaign once they confirm it.