The Contacts page
What a contact is
A contact is a person who has interacted with your bot, across any channel. AskVault auto-creates contacts as visitors engage:
- Anonymous visitor. Starts as an unnamed contact tied to a session.
- Lead captured.
collect_leadskill upgrades the contact with name, email, phone. - Identity-verified. HMAC identity verification ties the contact to your user system.
Contacts merge automatically when the same email appears across channels (a visitor who chatted via widget then WhatsApp shows as one contact).
What the Contacts page shows
A searchable list with these columns by default:
- Name and email.
- Channels engaged. Widget, WhatsApp, Slack, email, etc.
- Audience tag. Free, paid, enterprise, internal.
- Identity verified. Yes/no badge.
- Conversations. Total count and most recent.
- Tags. Per-contact tags.
- Last seen. Timestamp.
- CRM sync status. Synced, pending, error (when CRM integration is on).
Customize columns under Contacts > View Options.
Contact detail view
Click any contact to see:
- Profile. Name, email, phone, company, identity-verified status, custom attributes.
- Conversation history. Every conversation with this contact across all channels, chronologically.
- Tags. Add or remove contact-level tags (different from conversation tags).
- Audience tag. Drives content gating per visitor.
- Notes. Agent-only notes on the contact (different from conversation notes).
- CRM links. Click to open the matched HubSpot, Salesforce, or other CRM record.
The detail view is where you build context before reaching out manually.
Auto-merge logic
When AskVault sees a new interaction, it tries to match against existing contacts:
- Email match. Same email = same contact. Highest confidence.
- Identity hash match. Same identity-verified
user_id= same contact. - Phone match. Same phone number (across SMS/WhatsApp) = same contact.
- Cookie match. Same browser session = same contact (anonymous visitors).
When two contacts merge, conversation history and tags combine. The auto-merge is reversible from the contact detail view (within 30 days).
Contact-level tags
Different from conversation tags:
- Contact tag. Lives on the contact record. Persists across conversations. Examples:
vip,power_user,champion,at_risk_renewal. - Conversation tag. Lives on a single conversation. Examples:
refund,outage,feature_request.
Use contact tags for long-term customer attributes. Use conversation tags for individual issue tracking. See tags overview.
Audience tag per contact
The audience tag drives content gating:
public(default for anonymous).paid_users(paying customers).enterprise,growth(plan-specific).internal(employee).
Set manually under the contact detail, or auto-set via:
- Identity verification.
identify()call passesplanwhich maps to audience tag. - CRM sync. HubSpot lifecycle stage or Stripe subscription status auto-updates the tag.
Filtering and searching contacts
The Contacts page supports:
- Full-text search. Match name, email, company, custom attributes.
- Tag filters. Has tag X. Has tag X but not Y.
- Channel filters. Engaged via WhatsApp. Hasn't engaged via email.
- Date filters. Created within. Last seen before/after.
- Audience filters. Audience equals.
- CRM sync state. Synced, pending, error.
Save common searches as Contact Views (same pattern as saved inbox views).
Bulk operations
Up to 200 contacts at a time:
- Apply tag to all selected.
- Remove tag.
- Change audience tag.
- Export to CSV.
- Force CRM re-sync.
See bulk operations for full bulk-action surface.
Contact merging
If two contacts represent the same person but didn't auto-merge:
- Open one of the contacts.
- Click "Merge into another contact".
- Search for the other contact.
- Pick which contact survives (keeps the canonical record).
- Confirm.
Merged data: conversation history, tags, audience tag, notes all combine. The non-surviving contact ID redirects to the survivor.
Reversible within 30 days from the audit log.
Identity verification flow
For contacts with identity verification:
- Status badge shows "Verified" with the timestamp.
- The
user_idfrom your system is stored on the contact. - Tier mismatches flag. If your system says
plan=enterprisebut AskVault thinkspaid_users, an alert surfaces. - Verification can be revoked if you suspect compromise. Re-verify on next session.
CRM sync state
When CRM integration is on (HubSpot, Salesforce):
- Synced. Contact mirrors to the CRM record.
- Pending. Sync queued, waiting (typically resolves within 60 seconds).
- Error. Sync failed. Click for the specific reason (rate limit, validation, etc.).
- Not synced. Contact below sync threshold (e.g., not yet qualified as a lead).
Force re-sync from the contact detail view.
Contact API
For automation:
curl "https://api.askvault.co/v1/contacts?audience=enterprise" \ -H "Authorization: Bearer ak_xxx"Fetch a single contact:
curl "https://api.askvault.co/v1/contacts/contact_xxx" \ -H "Authorization: Bearer ak_xxx"Update a contact:
curl -X PATCH https://api.askvault.co/v1/contacts/contact_xxx \ -H "Authorization: Bearer ak_xxx" \ -H "Content-Type: application/json" \ -d '{"tags": ["vip", "champion"], "audience": "enterprise"}'Useful for backend-driven tagging based on product activity.
Privacy and GDPR
What's stored:
- Email, name, phone when captured.
- Conversation history linked to the contact.
- Custom attributes passed via
identify()or API. - CRM sync metadata.
GDPR data deletion:
- Open Contacts > [contact] > Danger Zone > Delete contact.
- Confirmation prompt. Type the email to confirm.
- All conversations, notes, attached data wiped within 30 days.
- Backups purged at 90 days.
API endpoint: DELETE /v1/contacts/contact_xxx. Useful for automated GDPR Right-to-Erasure compliance.
Planned features (on the roadmap)
Documented for accuracy:
- Contact-level message thread. Today, conversations are channel-scoped. Planned: unified thread view across all of a contact's conversations.
- Contact tasks. Today, no task management. Planned: agent-assignable tasks per contact (follow up in 3 days).
- Custom contact properties. Today, attributes are flat JSON. Planned: structured custom properties with type validation.
Limits
- Contacts per workspace. No hard cap. Practical limit varies by query workload.
- Custom attributes per contact. 50.
- Tag values per contact. 50.
- Bulk operation cap. 200 contacts per action.
Common pitfalls
Duplicate contacts for the same person. Email format mismatch (gmail vs Gmail). AskVault normalizes (lowercase, strip plus-aliases) but some edge cases slip. Use Merge action manually.
Contact missing CRM sync. Threshold not met (e.g., lead score below cutoff). Either lower the threshold or sync manually.
Audience tag not updating from CRM. Webhook subscription missing. Confirm CRM lifecycle-stage webhooks are subscribed.
Identity verification badge missing. Visitor used the widget without identify(). Re-prompt or wait for next login.
FAQ
What's the difference between a contact and a lead?
A contact is any person who has interacted. A lead is a contact with captured contact info (email, phone) and buying intent. Leads appear in both the Contacts page and the Leads page.
Can I import contacts from a CSV?
Today, no native import. Sync via CRM integration, or use the API to create contacts programmatically. CSV import is on the roadmap.
Do anonymous visitors show as contacts?
Yes, with a session-based ID until they identify themselves. After identification (lead capture or identity verification), the anonymous record merges with the identified one.
Can I bulk-delete contacts?
Yes via bulk operations. Confirm carefully; deletion is irreversible after 30 days.
Does AskVault store sensitive customer attributes?
Only what you pass. We don't enrich from third-party sources. If you don't want a field stored, don't pass it.