Historical Data Migration Guide
When you connect a new platform to FluxCascade, you likely have existing data in both systems. This guide walks you through migrating historical data safely — without creating duplicates or losing information.
Overview
Goal: Populate both systems with each other's existing records so they start from a consistent baseline before ongoing sync begins.
What You'll Achieve:
- All existing source records created in the target system
- Matching records linked (not duplicated)
- Clean data foundation for ongoing sync
Time Required: 30-60 minutes setup, plus sync runtime (depends on record count)
Before You Start
Assess Your Data
Before running a migration, answer these questions:
- How many records? This affects sync duration and API rate limits
- How clean is the data? Duplicates and incomplete records cause problems
- Which direction? Usually one system is more complete than the other
- What's the matching key? Email, external ID, or another field
Record Count Guidelines
| Record Count | Expected Duration | Approach |
|---|---|---|
| Under 500 | A few minutes | Single full sync |
| 500 – 5,000 | 15-30 minutes | Single full sync, monitor progress |
| 5,000 – 50,000 | 1-4 hours | Batched full sync, off-hours recommended |
| Over 50,000 | Several hours | Contact support for assisted migration |
Step 1: Clean Your Source Data
Invest time in data quality before migrating. Fixing issues after records are synced to both systems is much harder.
Deduplicate
Check for duplicate records in your source system:
- Multiple contacts with the same email
- Company names with slight variations ("ABC Corp" vs "ABC Corporation")
- Phone numbers that match when formatted
Fill Required Fields
Ensure required fields have values:
- Every contact needs an email (if using email matching)
- Names should be populated (avoid blank first/last names)
- Phone numbers should be in a parseable format
Standardize Formats
Apply consistent formatting before migration:
- Capitalize names properly
- Standardize phone numbers
- Use consistent address formatting
Step 2: Set Up Your Mapping
Create the mapping as you normally would (see the HubSpot + Jobber guide for a full walkthrough), with these migration-specific settings:
Direction
For the initial migration, use one-way sync from your more complete system to the less complete one:
More complete system → Less complete system
(e.g., HubSpot → Jobber if HubSpot has more records)
After the migration completes, you can change to bidirectional.
Matching Strategy
Configure matching before the migration to prevent duplicates:
- Set email as the primary matching field
- Enable Case Insensitive Matching
- Consider adding a secondary matching field (phone or name combination)
Records that match will be updated, not duplicated. Only unmatched records create new entries.
Step 3: Run a Test Sync
Before migrating all data, test with a small subset:
- Open your mapping
- Click Test Sync
- Review the preview:
- How many records will be created vs. updated?
- Are field values transforming correctly?
- Are there any errors?
What to Check
- Created count: Does this match the number of records you expect to add?
- Updated count: These are existing matches — verify a few look correct
- Skipped count: Records skipped due to missing required data
- Error count: Records that failed transformation or validation
If the test reveals issues, fix your mapping configuration and test again.
Step 4: Run the Full Migration
When the test looks good:
- Click Sync Now
- Select Full Sync (not incremental — you want all records)
- Start the sync
Monitor Progress
While the migration runs:
- Go to Syncs in the sidebar
- Click on the active sync job
- Watch real-time statistics:
- Records processed / total
- Created, updated, skipped, failed counts
- Estimated time remaining
If Something Goes Wrong
You can pause a running sync at any time:
- Click the Pause button on the active sync
- Review the records processed so far
- Fix any issues in your mapping
- Resume to continue from where it left off, or Cancel to stop
Records already synced are not rolled back on pause or cancel — only future records are affected.
Step 5: Verify the Migration
After the sync completes:
Check Record Counts
Compare record counts between systems:
Source system: 1,250 contacts
Target system: 1,245 contacts (5 skipped due to missing email)
FluxCascade: Created 800, Updated 445, Skipped 5
The numbers should add up. If they don't, check the sync error log.
Spot-Check Records
Manually verify 10-20 records across both systems:
- Do field values match?
- Are transforms applied correctly (phone formatting, address structure)?
- Are there any unexpected duplicates?
Review Error Logs
Go to the completed sync's detail view and review any errors:
- Missing required fields: Clean the data and re-sync those records
- Transformation failures: Adjust transforms or fix source data
- API errors: Rate limits or permission issues — retry after a delay
Step 6: Run the Reverse Migration (If Needed)
If the target system also has unique records that don't exist in the source:
- Create a second mapping in the reverse direction
- Run a Full Sync from target → source
- This populates the source with any records only in the target
Or Switch to Bidirectional
After both sides are populated:
- Edit your original mapping
- Change direction to Bidirectional
- Run one more Full Sync to reconcile any differences
- Enable scheduled sync for ongoing synchronization
Step 7: Enable Ongoing Sync
Once migration is complete and verified:
- Set sync frequency (every 15 minutes recommended for active data)
- Optionally enable webhook-triggered sync for real-time updates
- Configure email notifications for sync failures
Handling Large Migrations
For datasets over 5,000 records:
Schedule Off-Hours
Run the migration during low-activity periods to avoid:
- API rate limit conflicts with regular platform usage
- Confusion from records appearing in real-time for users of the target system
Rate Limit Awareness
Each platform has API rate limits:
| Platform | Typical Rate Limit |
|---|---|
| HubSpot | 100 requests/10 seconds (varies by plan) |
| Jobber | Varies by endpoint |
| Pipedrive | Varies by plan tier |
| Salesforce | Based on org edition and API type |
FluxCascade automatically throttles requests to respect these limits, which is why large migrations take longer.
Troubleshooting
Duplicate Records Created
Cause: Matching field was empty or inconsistent
Solution:
- Identify duplicates in the target system
- Merge them in the target platform
- Ensure matching fields are populated
- Re-run sync — FluxCascade will match on subsequent syncs
Migration Timeout
Cause: Very large dataset exceeding session limits
Solution: Contact support for assisted migration with batch processing
Partial Migration (Some Records Missing)
Cause: Records skipped due to validation errors
Solution:
- Check the sync error log for specific records
- Fix the data in the source system
- Run another Full Sync — only missing records will be created
Data Looks Different After Migration
Cause: Transforms changing the display format
Solution: This is expected for fields with transforms (e.g., phone numbers reformatted to E.164). Verify the data is correct, just formatted differently.
Best Practices
-
Always test first — Run a test sync before the full migration
-
Migrate in one direction first — Don't start with bidirectional; establish a baseline, then open the other direction
-
Document your migration — Note the date, record counts, and any decisions made
-
Clean data before, not after — Fixing data in one system is easier than fixing it in two
-
Keep a backup — Export your target system's data before the migration in case you need to reference the pre-migration state
-
Communicate with your team — Let users know when the migration will run and that new records will appear in their systems
Next Steps
- HubSpot + Jobber Guide — Set up your first integration
- Error Handling — Handle sync failures during and after migration
- Scheduling — Configure ongoing sync after migration