Bulk Operations & Data Import
Import, export, and mass-update records efficiently with validation, mapping, and rollback capabilities.
Overview
Bulk Operations in SalesOS enable administrators and authorized users to efficiently manage large volumes of CRM data. Whether you are migrating from another system, performing quarterly data cleanup, reassigning territories, or exporting records for external analysis, SalesOS provides robust tooling with built-in validation, error handling, and rollback capabilities to protect data integrity at scale.
These operations are designed for both one-time migrations and recurring data maintenance workflows, with safeguards that prevent accidental data loss while maintaining the speed necessary for enterprise-scale operations.
Data Import
Supported File Formats
| Format | Extension | Max File Size | Notes |
|---|---|---|---|
| CSV | .csv | 50 MB | UTF-8 encoding recommended |
| Excel | .xlsx, .xls | 50 MB | First sheet used by default; multi-sheet supported |
| TSV | .tsv | 50 MB | Tab-separated values |
| JSON | .json | 25 MB | Array of objects format |
| vCard | .vcf | 10 MB | Contact imports only |
Import Workflow
The import process follows a structured five-step workflow:
Step 1: Upload
Navigate to Settings > Data Management > Import and upload your file. SalesOS immediately validates the file format, encoding, and structure before proceeding.
Step 2: Object Selection
Select the target object for import (Leads, Contacts, Accounts, Opportunities, Products, or Custom Objects). If your file contains data for multiple objects, run separate imports for each.
Step 3: Field Mapping
The field mapping interface presents your file's columns alongside available SalesOS fields:
| Your Column Header | Mapped To | Status |
|---|---|---|
| Company Name | Account.name | Mapped (auto-detected) |
| Annual Rev | Account.annualRevenue | Mapped (manual) |
| Phone Number | Account.phone | Mapped (auto-detected) |
| Custom Field ABC | --- | Unmapped (skip or create field) |
SalesOS auto-maps columns using header name matching and data type analysis. Unmapped columns can be:
- Manually mapped to an existing field.
- Used to create a new custom field on the fly.
- Skipped (data in that column will not be imported).
Step 4: Validation Preview
Before committing, SalesOS validates every row and presents a summary:
- Ready to import: Records that pass all validation rules.
- Warnings: Records that will import but have potential issues (e.g., missing optional fields).
- Errors: Records that cannot be imported (e.g., missing required fields, invalid formats, constraint violations).
You can download the error report, fix issues in your source file, and re-upload, or proceed with only the valid records.
Step 5: Execute
Confirm the import to begin processing. Progress is displayed in real time with record counts for success, skip, and failure. Large imports (10,000+ records) run asynchronously with email notification on completion.
Field Mapping Details
Auto-Mapping Intelligence
SalesOS uses multiple strategies to suggest field mappings:
- Exact name match: Column header matches field API name or label.
- Fuzzy match: Similar names (e.g., "Phone #" maps to "Phone").
- Data type inference: Columns with email patterns map to email fields; currency values map to currency fields.
- Historical mapping: If you have imported to this object before, previously used mappings are suggested.
Data Transformations
During mapping, you can apply transformations:
| Transformation | Example |
|---|---|
| Date format conversion | "MM/DD/YYYY" to ISO 8601 |
| Currency normalization | Strip symbols, standardize decimal |
| Phone formatting | Normalize to E.164 international format |
| Text case | UPPER, lower, Title Case |
| Value mapping | "Y"/"N" to true/false |
| Default values | Fill blank cells with a specified value |
| Concatenation | Combine "First" + "Last" into "Full Name" |
| Split | Split "City, State" into separate fields |
Duplicate Handling
During import, SalesOS checks for duplicates using configurable matching rules:
Match Criteria Options:
- Email address (exact match).
- Company name + domain (fuzzy match).
- Phone number (normalized match).
- Custom field combination (e.g., external ID from source system).
Duplicate Actions:
| Action | Behavior |
|---|---|
| Skip | Do not import the duplicate record |
| Update | Overwrite existing record with imported data |
| Update Blanks Only | Fill only empty fields on the existing record |
| Create Duplicate | Import as a new record regardless |
| Flag for Review | Import but mark for manual deduplication |
Validation Rules
SalesOS enforces multiple validation layers during import:
- Required fields: Records missing mandatory fields are rejected.
- Data type validation: Ensures values match expected formats (dates, numbers, emails).
- Picklist validation: Checks that values match defined picklist options.
- Uniqueness constraints: Enforces unique field rules (e.g., no duplicate email addresses).
- Relational integrity: Validates that lookup references point to existing records.
- Custom validation rules: Any custom validation logic defined on the object applies.
- Field length limits: Text values exceeding maximum character counts are flagged.
Import Templates
SalesOS provides downloadable templates for common import scenarios:
Standard Templates
| Template | Description | Fields Included |
|---|---|---|
| Leads (Basic) | Minimal lead import | Name, Email, Company, Phone, Source |
| Leads (Full) | Complete lead import | All standard + common custom fields |
| Accounts | Company records | Name, Domain, Industry, Size, Address |
| Contacts | People records | Name, Email, Phone, Title, Account |
| Opportunities | Deal records | Name, Account, Stage, Amount, Close Date |
| Products | Catalog items | Name, SKU, Price, Category, Description |
Custom Templates
Create custom import templates that include:
- Only the fields relevant to your workflow.
- Pre-filled picklist values as data validation dropdowns (Excel).
- Instructions and formatting guidelines in a header row.
- Sample data rows showing expected formats.
Templates can be shared with team members and versioned as your schema evolves.
Mass Update
Mass update allows you to change field values across multiple records simultaneously.
Mass Update Workflow
-
Select Records: Use list views, search results, or report output to select target records. Selection options include:
- Manual checkbox selection (up to current page).
- Select all matching current filters (includes unpaginated results).
- Upload a list of record IDs.
-
Choose Fields: Select one or more fields to update. Multiple fields can be updated in a single operation.
-
Set Values: For each selected field, specify the new value:
- Static value (same value for all records).
- Calculated value (formula-based, e.g., increase Amount by 10%).
- Clear value (set to null/empty).
- Copy from another field.
-
Preview Changes: Review a sample of affected records showing before/after values. The preview displays the first 100 records and total count.
-
Execute: Confirm to apply changes. A background job processes the update with progress tracking.
Supported Mass Update Fields
All standard and custom fields that are editable support mass update, including:
- Text, number, and currency fields.
- Picklist and multi-select picklist values.
- Date and datetime fields.
- Lookup/relationship fields (reassignment).
- Checkbox/boolean fields.
Excluded from mass update:
- System fields (Created Date, Last Modified Date).
- Formula fields (read-only).
- Auto-number fields.
Mass Delete
Mass delete removes multiple records in a single operation with appropriate safeguards.
Safeguards
| Safeguard | Description |
|---|---|
| Permission Check | Only users with delete permission on the object can mass delete |
| Record Limit | Maximum 10,000 records per operation (larger batches require admin approval) |
| Confirmation Required | Must type "DELETE" to confirm after reviewing affected count |
| Recycle Bin | Deleted records move to Recycle Bin for 30 days before permanent removal |
| Cascade Warning | Displays count of related records that will be affected |
| Audit Log | Every mass delete is logged with user, timestamp, record count, and criteria |
Mass Delete Process
- Filter records to identify deletion candidates.
- Review the matched record list carefully.
- Confirm the deletion by typing the confirmation phrase.
- Records move to Recycle Bin (recoverable for 30 days).
- Related child records are handled per cascade configuration.
Cascade Behaviors
| Parent Object | Child Handling | Example |
|---|---|---|
| Account | Reassign or cascade delete | Deleting Account can reassign its Contacts |
| Opportunity | Archive or cascade | Deleting Opportunity archives related Activities |
| Contact | Nullify references | Deleting Contact clears lookups on Activities |
Mass Reassignment
Mass reassignment transfers record ownership across users, teams, or territories.
Reassignment Options
- Direct reassignment: All selected records move to a specific user.
- Round-robin: Records distributed evenly across a set of users.
- Rule-based: Assignment rules evaluate each record individually.
- Territory-based: Records reassigned based on current territory definitions.
Reassignment Scope
Choose what transfers with ownership:
| Option | Description |
|---|---|
| Record only | Only the parent record ownership changes |
| Record + open activities | Open tasks and events transfer to new owner |
| Record + all activities | Complete activity history transfers |
| Full cascade | Record, activities, open opportunities, and related children transfer |
Common Reassignment Scenarios
- Rep departure: Reassign all records to a specific backup or distribute across team.
- Territory change: Bulk reassign based on new territory rules.
- Team restructuring: Move records between teams based on new org chart.
- Load balancing: Redistribute from overloaded reps to those with capacity.
Export
Export Methods
List View Export Export records currently displayed in any list view. Exports honor active filters and column selections.
Report Export Export any saved report's results in multiple formats (see Custom Reports documentation).
Full Object Export Export all records of a specific object type with all fields or selected fields.
Filtered Export Apply custom filter criteria and export matching records.
Scheduled Exports
Configure recurring exports that run automatically:
| Setting | Description |
|---|---|
| Frequency | Daily, weekly, monthly |
| Format | CSV, Excel, JSON |
| Delivery | Email attachment, SFTP, cloud storage (S3, GCS) |
| Scope | Full export or incremental (only changed records since last export) |
| Filters | Applied to each run (supports relative dates) |
Export Limits
| Plan | Records per Export | Exports per Day | Scheduled Exports |
|---|---|---|---|
| Starter | 10,000 | 10 | 2 |
| Professional | 100,000 | 50 | 10 |
| Enterprise | Unlimited | Unlimited | Unlimited |
Import History and Rollback
Import History
Every import operation is recorded with complete metadata:
| Field | Description |
|---|---|
| Import ID | Unique identifier for the operation |
| Date/Time | When the import was executed |
| User | Who performed the import |
| Object | Target object type |
| Source File | Original file name (file retained for 90 days) |
| Total Records | Count of rows in the source file |
| Succeeded | Records successfully created or updated |
| Failed | Records that could not be imported |
| Skipped | Records skipped due to duplicate rules |
| Duration | Time taken to complete the import |
Rollback Capability
SalesOS supports full rollback of import operations within 30 days:
- Navigate to Settings > Data Management > Import History.
- Find the import to rollback and click Undo Import.
- SalesOS identifies all records created by that import.
- Preview shows which records will be deleted and which updates will be reverted.
- Confirm rollback to execute.
Rollback limitations:
- Records modified after import will show a warning (rollback reverts to pre-import state, losing subsequent changes).
- Records that have been referenced by other records (e.g., an Account now linked to new Opportunities) require handling of those references before rollback.
- Rollback is all-or-nothing for a given import batch.
Error Handling
Error Categories
| Category | Examples | Resolution |
|---|---|---|
| Format Errors | Invalid date, non-numeric in number field | Fix source data format |
| Validation Errors | Missing required field, picklist mismatch | Add missing data or correct values |
| Constraint Errors | Duplicate unique field, exceeded field length | Deduplicate or truncate |
| Reference Errors | Lookup target does not exist | Create referenced record first or correct ID |
| Permission Errors | User lacks create/edit permission | Contact admin for access |
| System Errors | Timeout, connection failure | Retry; contact support if persistent |
Error Reports
Failed records generate a downloadable error report containing:
- Original row data from the source file.
- Specific field(s) causing the error.
- Error code and human-readable message.
- Suggested fix for common errors.
This report can be corrected and re-uploaded to import only the previously failed records.
Partial Success Handling
When an import partially succeeds:
- Successfully imported records are committed and visible immediately.
- Failed records are collected into an error file.
- The import history shows both success and failure counts.
- You can re-import only the corrected error file without duplicating successful records (using duplicate detection).
Limits and Performance
Operation Limits
| Operation | Limit | Notes |
|---|---|---|
| Import file size | 50 MB | Split larger files into batches |
| Records per import | 500,000 | Larger imports processed in background |
| Fields per record | 200 | Per-object field limit applies |
| Mass update batch | 50,000 | Larger batches require admin role |
| Mass delete batch | 10,000 | Safety limit; admin can override |
| Concurrent operations | 3 | Per user; prevents resource contention |
| Daily API operations | Varies by plan | Check usage in Settings > Limits |
Performance Tips
- Time your imports: Schedule large imports during off-peak hours for faster processing.
- Batch strategically: Break very large files into 50,000-record batches for optimal throughput.
- Minimize triggers: If automation rules fire on record creation, temporarily disable non-critical automations during bulk imports.
- Use external IDs: Include external system IDs for faster duplicate matching vs. fuzzy name matching.
- Index your match fields: Ensure fields used for duplicate detection are indexed.
Best Practices
-
Always preview before executing. Never skip the validation preview step, regardless of how confident you are in your data quality. A two-minute review can prevent hours of cleanup work.
-
Start with a small test batch. Before importing 100,000 records, import 100 first. Verify field mapping, duplicate handling, and validation behavior on the small batch, then proceed with confidence to the full dataset.
-
Maintain import templates. Create and version-control templates for recurring import scenarios. Templates with pre-defined mappings, validation rules, and instructions reduce errors and enable delegation.
-
Document your imports. Use the description field on each import to note the purpose, source system, and any special handling. Your future self and colleagues will appreciate the context when reviewing import history.
-
Back up before mass operations. Before any mass update or delete, export the affected records first. While SalesOS provides rollback, having an independent backup adds an extra safety net.
-
Use external IDs for system integrations. When importing from external systems, always include the source system's unique identifier. This enables reliable duplicate detection and future re-imports without creating duplicates.
-
Clean data before importing. Invest time in source data cleanup (standardizing formats, removing invalid entries, deduplicating) before upload. The validation step catches errors, but prevention is more efficient than correction.
-
Assign ownership deliberately. Ensure every imported record has a valid owner. Records without ownership create orphans that slip through reporting and territory coverage. Use the default owner setting as a safety net.
-
Communicate mass changes in advance. Before performing mass updates or reassignments that affect other users' records, notify the impacted team members. Unexpected changes to their pipeline or accounts create confusion and erode trust.
-
Review and retire old import history. Periodically review import history and confirm that rollback capability is no longer needed for older imports. While SalesOS retains history automatically, understanding what is recoverable helps in incident response.