Contact Management
Contact management is available to Department Managers and Administrators only.
Overview
DutyCall's Contact Management system enables organizing, importing, and maintaining contact lists for manual dialing and campaign operations. Build robust contact databases with custom fields, tags, and bulk import capabilities.
Key Features:
- 📇 Centralized Database - All contacts in one searchable location
- 📊 Bulk Import - Google Sheets, CSV, or manual entry
- 🏷️ Custom Fields & Tags - Organize contacts your way
- 🔄 Duplicate Detection - Automatic phone number deduplication
- 📈 Call History Integration - See past interactions with contacts
- 🔍 Advanced Search - Filter by name, phone, tags, or custom fields
- 👥 Manager
- 🔧 Admin
For Managers: Managing Contacts
Creating Contacts
Method 1: Manual Creation
- Navigate to Outbound → Contacts
- Click "Create Contact" button
- Fill in contact details:
- Name: Full name (required)
- Phone: E.164 format with country code (required) - e.g., +15551234567
- Email: Email address (optional)
- Company: Organization name (optional)
- Tags: Comma-separated tags (e.g., "VIP, Q4-Campaign, High-Priority")
- Notes: Any relevant information
- Custom Fields: Additional fields configured by admin
- Click "Save Contact"
Method 2: Create During Manual Call
- Open Manual Dialer
- Enter phone number
- Click "Save as Contact" before calling
- Fill in details and save
- Contact added to database
Method 3: Bulk Import (see Importing Contacts below)
Importing Contacts
Import from Google Sheets
Step 1: Prepare Your Sheet
- Create Google Sheet with contact data
- Ensure first row has column headers
- Include at minimum: Name and Phone columns
- Share sheet publicly (View access only)
Step 2: Import to DutyCall
- Navigate to Contacts → Import
- Select "Google Sheets" tab
- Paste public share URL
- Click "Fetch Data"
Step 3: Map Columns
- Review preview of sheet data
- Map sheet columns to DutyCall fields:
- Name → Contact Name (required)
- Phone → Phone Number (required)
- Email → Email Address (optional)
- Company → Company Name (optional)
- Custom columns → Custom Fields
- Click "Validate Data"
Step 4: Review & Import
- System validates phone numbers and checks for duplicates
- Review validation results:
- ✅ Valid contacts ready to import
- ⚠️ Duplicates found (skip or update)
- ❌ Invalid entries (missing phone, bad format)
- Choose duplicate handling:
- Skip duplicates (keep existing)
- Update duplicates (overwrite with new data)
- Click "Import Contacts"
- Confirm number of contacts imported
Learn more: Google Sheets Import Guide
Import from CSV File
Step 1: Prepare CSV
- Create CSV file with comma-separated values
- First row must contain headers
- Save as
.csvformat (UTF-8 encoding)
Example CSV:
Name,Phone,Email,Tags
John Doe,+15551234567,john@example.com,"VIP,Q4"
Jane Smith,+15559876543,jane@example.com,"New Customer"
Step 2: Upload & Map
- Navigate to Contacts → Import
- Select "CSV File" tab
- Click "Upload CSV" and select file
- Map columns to DutyCall fields
- Validate and import (same as Google Sheets)
Searching & Filtering Contacts
Quick Search:
- Use search bar at top of Contacts page
- Searches across: Name, Phone, Email, Company
Advanced Filters:
- Click "Filters" button
- Apply multiple criteria:
- Tags: Select one or more tags
- Date Added: Contact creation date range
- Last Called: Filter by recent call activity
- Custom Fields: Filter by custom field values
- Click "Apply Filters"
Save Filter Presets:
- Configure filters
- Click "Save as Preset"
- Name your filter (e.g., "VIP Customers - Q4")
- Access saved filters from dropdown
Editing Contacts
Edit Single Contact:
- Find contact in list
- Click contact name or "Edit" icon
- Update fields as needed
- Click "Save Changes"
Bulk Edit:
- Select multiple contacts (checkboxes)
- Click "Bulk Actions" → "Edit Selected"
- Choose fields to update:
- Add tags
- Remove tags
- Update custom field
- Click "Apply to Selected Contacts"
Organizing with Tags
Adding Tags:
- During contact creation
- During edit
- Bulk action to multiple contacts
Tag Best Practices:
- Use consistent naming (e.g., "VIP" not "vip" or "V.I.P.")
- Create campaign-specific tags (e.g., "Q4-2025-Survey")
- Tag by customer status (e.g., "Active", "Inactive", "Prospect")
- Tag by segment (e.g., "Enterprise", "SMB", "Free-Tier")
Manage Tags:
- Navigate to Contacts → Tags
- View all tags with contact counts
- Rename tags (updates all contacts)
- Merge duplicate tags
- Delete unused tags
Using Custom Fields
Custom fields enable tracking additional data specific to your business.
Available Custom Fields (configured by Admin):
- Text fields (short text, long text)
- Number fields (integers, decimals)
- Date fields
- Dropdown selections (predefined options)
Example Use Cases:
- Customer ID: Link to external CRM system
- Account Value: Annual contract value
- Renewal Date: When to follow up
- Industry: Segment by vertical
- Lead Source: Track where contact originated
Filtering by Custom Fields:
- Click "Filters" → "Custom Fields"
- Select field and criteria
- Apply filter
Managing Duplicate Contacts
Duplicate Detection:
- System checks phone numbers for duplicates
- Duplicates flagged during import
- Manual duplicate check available anytime
Find Duplicates:
- Navigate to Contacts → Duplicates
- System shows potential duplicates grouped by phone number
- Review each group
Merge Duplicates:
- Select 2+ duplicate contacts
- Click "Merge Contacts"
- Choose which data to keep:
- Primary contact (keeps all its data)
- Merge tags from all contacts
- Merge notes from all contacts
- Preserve call history from all
- Click "Confirm Merge"
- Duplicate contacts removed, data consolidated
Deleting Contacts
Delete Single Contact:
- Click contact to open details
- Click "Delete" button
- Confirm deletion
- Contact removed permanently
Bulk Delete:
- Select multiple contacts
- Click "Bulk Actions" → "Delete Selected"
- Confirm deletion
- All selected contacts removed
Deleted contacts cannot be recovered. Call history associated with the contact is preserved but unlinked.
Exporting Contacts
Export All Contacts:
- Navigate to Contacts
- Click "Export" button
- Select format:
- CSV - For spreadsheets and external tools
- Excel - For advanced analysis
- vCard - For importing to phone/email clients
- Download file
Export Filtered Subset:
- Apply filters to narrow contact list
- Click "Export" → "Export Filtered"
- Only visible contacts are exported
What's Included in Export:
- Contact name, phone, email
- Tags (comma-separated)
- Custom field values
- Date added
- Last call date and outcome
- Notes
Learn more: Data Export
Contact Call History
View Contact's Call History:
- Open contact details
- Scroll to "Call History" section
- See all calls to/from this contact:
- Manual outbound calls
- Campaign calls
- Inbound calls (if they called in)
Call History Details:
- Date & time of call
- Duration
- Outcome (completed, no-answer, voicemail, etc.)
- Agent who handled
- Call notes
- Recording link (if available)
Actions from Call History:
- Click "Call Again" to redial contact
- Click "View Recording" to listen
- Click "View Full Call Log" for detailed view
Best Practices for Contact Management
Data Quality:
- ✅ Always use E.164 format for phone numbers (+1XXXXXXXXXX)
- ✅ Verify numbers before import (use validation tools)
- ✅ Keep contact data up-to-date (remove bounced numbers)
- ✅ Add meaningful notes (context for future calls)
Organization:
- ✅ Use consistent tagging conventions
- ✅ Create tags for campaigns, segments, and status
- ✅ Leverage custom fields for business-specific data
- ✅ Regularly merge duplicates (monthly review)
Privacy & Compliance:
- ✅ Honor opt-out requests immediately
- ✅ Tag opted-out contacts (e.g., "DNC" - Do Not Call)
- ✅ Filter out DNC contacts before campaigns
- ✅ Maintain records of consent where required
- ✅ Delete contact data upon request (GDPR/CCPA)
Import Hygiene:
- ✅ Clean data before import (remove duplicates in sheet)
- ✅ Validate phone numbers in source system first
- ✅ Test with small batch (50-100 contacts) before full import
- ✅ Review import summary for errors before proceeding
Troubleshooting Contact Management
Import fails with "Invalid phone number":
- ✅ Ensure phone numbers include country code (+1 for US)
- ✅ Remove spaces, dashes, parentheses (use +15551234567, not (555) 123-4567)
- ✅ Check for non-numeric characters
- ✅ Use text format in spreadsheet (not number format)
Duplicate detection not working:
- ✅ Phone numbers must be identical to detect duplicates
- ✅ Format differences prevent detection (+15551234567 vs 15551234567)
- ✅ Manually search for duplicates using search bar
- ✅ Export, clean in spreadsheet, re-import
Cannot delete contact:
- ✅ Check if contact is in active campaign (must remove from campaign first)
- ✅ Check permissions (Manager can only delete own dept contacts)
- ✅ Admin may need to delete if contact is system-critical
Custom fields not showing:
- ✅ Admin must configure custom fields first
- ✅ Refresh page to see newly added fields
- ✅ Check field visibility settings (Admin may have restricted)
For Admins: Contact System Configuration
Configuring Custom Fields
Create Custom Fields:
- Navigate to Administration → Contacts → Custom Fields
- Click "Create Custom Field"
- Configure field:
- Field Name: Internal identifier (e.g., "customer_id")
- Display Label: User-facing name (e.g., "Customer ID")
- Field Type: Select from:
- Text (short) - Single line input
- Text (long) - Multi-line textarea
- Number (integer) - Whole numbers only
- Number (decimal) - Supports decimals
- Date - Date picker
- Dropdown - Predefined options
- Checkbox - Yes/No boolean
- Required: Toggle if field is mandatory
- Visible to: Choose which roles can see field
- Click "Create Field"
Example Custom Fields:
Customer ID (Text):
Field Name: customer_id
Display Label: Customer ID
Type: Text (short)
Required: No
Visible to: All
Account Value (Number):
Field Name: account_value
Display Label: Annual Contract Value
Type: Number (decimal)
Required: No
Visible to: Manager+
Industry (Dropdown):
Field Name: industry
Display Label: Industry
Type: Dropdown
Options: Healthcare, Finance, Technology, Retail, Other
Required: No
Visible to: All
Manage Existing Fields:
- Edit: Change label, options, visibility
- Reorder: Drag to change display order
- Archive: Hide without deleting (preserves data)
- Delete: Permanently remove field and all data
Deleting a custom field removes all data stored in that field across all contacts. This cannot be undone.
Contact Database Schema
Core Contact Fields:
CREATE TABLE contacts (
id BIGINT PRIMARY KEY,
organization_id BIGINT NOT NULL,
department_id BIGINT NOT NULL,
created_by_user_id BIGINT NOT NULL,
-- Core fields
name VARCHAR(255) NOT NULL,
phone VARCHAR(20) NOT NULL UNIQUE,
email VARCHAR(255),
company VARCHAR(255),
-- Metadata
tags JSON,
custom_fields JSON,
notes TEXT,
-- Call tracking
last_called_at TIMESTAMP,
last_call_outcome VARCHAR(50),
total_calls INT DEFAULT 0,
-- Timestamps
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-- Indexes
INDEX idx_phone (phone),
INDEX idx_organization_dept (organization_id, department_id),
INDEX idx_tags (tags),
FULLTEXT INDEX idx_search (name, email, company, notes)
);
Custom Fields Storage:
- Stored as JSON in
custom_fieldscolumn - Allows flexible schema without migrations
- Indexed for search performance
Example Custom Fields JSON:
{
"customer_id": "CRM-12345",
"account_value": 50000.00,
"renewal_date": "2025-12-31",
"industry": "Healthcare",
"lead_source": "Trade Show"
}
Import System Configuration
Global Import Settings:
- Navigate to Administration → Contacts → Import Settings
- Configure:
- Max Import Size: Contacts per import (default: 10,000)
- Duplicate Handling: Default behavior (Skip, Update, Ask)
- Auto-Tagging: Add tag to all imported contacts (e.g., "Imported-2025-10")
- Validation Strictness: Strict (reject any errors) or Lenient (skip bad rows)
- Phone Formatting: Auto-format to E.164 if possible
Google Sheets Integration:
- No authentication required (uses public share URLs)
- Fetches data via CSV export endpoint
- Rate limited to 10 imports per hour per user
CSV Upload Limits:
- Max file size: 50MB
- Max rows: Configurable per organization
- Allowed formats: .csv, .txt (comma-delimited)
Duplicate Detection Configuration
Detection Settings:
- Navigate to Administration → Contacts → Duplicate Detection
- Configure rules:
- Primary Key: Phone number (always enabled)
- Fuzzy Matching: Name similarity threshold (0-100%)
- Email Matching: Also check email for duplicates
- Merge Behavior: Automatic or manual review
Fuzzy Name Matching:
- Uses Levenshtein distance algorithm
- Threshold 85% = "John Doe" matches "Jon Doe"
- Threshold 100% = Exact match only
Automatic Merging:
- Enable for automated duplicate resolution
- Set conflict resolution rules (keep newest, keep oldest, etc.)
- Log all auto-merge actions for audit
Data Privacy & Compliance
Opt-Out Management:
- Create tag: "DNC" (Do Not Call)
- Configure campaigns to exclude contacts with "DNC" tag
- Train managers to tag opted-out contacts immediately
Data Retention:
- Navigate to Administration → Data Management → Retention
- Set contact retention policy:
- Inactive contacts: Delete after N days of no call activity
- Opted-out contacts: Retain for compliance, exclude from campaigns
- Deleted contact logs: Retain metadata for audit trail
GDPR Compliance:
- Right to Access: Export contact data via "Export Contacts"
- Right to Erasure: Delete contact permanently via Admin panel
- Right to Rectification: Update contact data anytime
- Data Minimization: Only collect required fields (name, phone)
Learn more: Compliance & Retention
Contact API Endpoints
For integrations and custom tooling:
GET /api/contacts
- List contacts with pagination
- Filters: tags, department, date range
- Scoping: Manager (dept), Admin (org)
POST /api/contacts
- Create single contact
- Validates phone format and duplicates
- Returns created contact with ID
POST /api/contacts/bulk
- Bulk create contacts
- Accepts array of contact objects
- Returns success count and error details
GET /api/contacts/{id}
- Fetch single contact by ID
- Includes call history and custom fields
PUT /api/contacts/{id}
- Update contact
- Partial updates supported
DELETE /api/contacts/{id}
- Soft delete (archives contact)
- Hard delete via query param
?permanent=true
POST /api/contacts/import/google-sheets
- Initiate Google Sheets import
- Requires public share URL
- Returns import job ID for status tracking
Example API Request:
curl -X POST https://api.dutycall.net/api/contacts \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "John Doe",
"phone": "+15551234567",
"email": "john@example.com",
"tags": ["VIP", "Q4-Campaign"],
"custom_fields": {
"customer_id": "CRM-12345",
"account_value": 50000
}
}'
Performance Optimization
Database Indexing:
- Phone number (primary key for duplicates)
- Organization + Department (scoping queries)
- Tags (JSON index for fast tag filtering)
- Full-text index on name, email, company, notes
Query Optimization:
-- Fast contact search with tags
SELECT * FROM contacts
WHERE organization_id = ?
AND JSON_CONTAINS(tags, '"VIP"')
AND name LIKE '%John%'
LIMIT 50;
-- Duplicate detection query
SELECT phone, COUNT(*) as count
FROM contacts
WHERE organization_id = ?
GROUP BY phone
HAVING count > 1;
Caching Strategy:
- Cache contact counts per tag (5 min TTL)
- Cache custom field definitions (1 hour TTL)
- Cache duplicate detection results (manual invalidation)
Scaling Considerations:
- Sharding: Partition contacts by organization_id
- Read Replicas: Offload search queries to replicas
- Async Import: Process large imports in background queue
- Archive Old Contacts: Move inactive contacts to cold storage after 2 years
Monitoring & Troubleshooting
Contact System Health:
- Navigate to Administration → System Health → Contacts
- Monitor:
- Total contacts (org-wide)
- Import success rate
- Duplicate detection accuracy
- API error rate
- Storage usage
Common Admin Issues:
Slow contact search:
- Check full-text index status
- Rebuild indexes if fragmented:
OPTIMIZE TABLE contacts; - Consider pagination for large result sets
Import failures:
- Review import error logs:
storage/logs/contact-import.log - Check for phone format issues (most common)
- Verify Google Sheets are publicly accessible
- Check server memory during large imports
Duplicate detection missing duplicates:
- Phone numbers must be exactly identical
- Enable fuzzy name matching for better detection
- Manually merge edge cases
Custom fields not saving:
- Check JSON column size limits (64KB default)
- Verify custom field definitions exist
- Check validation rules for field type mismatch
Related Documentation
- Outbound Voice Overview
- Creating Campaigns
- Google Sheets Import
- Manual Calling
- Data Export
- Compliance & Retention
Need Help?
- Managers: Contact support for contact management assistance
- Admins: Check API documentation or contact technical support
Quick Links: