I know switching platforms is one of the scariest things a business owner can do. You have spent years building up your customer database, job history, invoices, technician records – and the thought of losing even a single record during the move is terrifying. I get it, because I have been there. That is exactly why we built the Migration Hub with AI-powered field mapping that does the heavy lifting for you. Instead of manually matching hundreds of data fields between your old system and Exoserva, our AI analyzes your data, figures out what goes where, and handles the transfer automatically. I have personally watched businesses migrate thousands of records – customers, jobs, invoices, everything – in under 15 minutes. This guide walks you through every step of the process, from connecting your old platform to verifying that everything came over correctly. Take a deep breath – your data is in good hands.
Estimated time: 20 minutes
Before You Begin
- An active Exoserva account with Owner or Admin role – migration is a powerful operation that imports data across your entire account, so it is restricted to the highest permission levels to prevent accidental data changes
- Access to your current platform – this means either login credentials (for API-based connections where Exoserva connects directly to your old system) or the ability to export CSV files from your current platform (most platforms have an “Export” or “Download Data” option in their settings)
- A backup of your data in your current platform before starting – while the migration is completely non-destructive (it only reads from your old platform, never modifies or deletes anything there), having a backup gives you peace of mind and a reference point if you need to verify that data came over correctly
- About 15-30 minutes of uninterrupted time – while the actual import runs in the background (you can close your browser and come back), the setup steps (choosing your source, uploading files, and reviewing field mappings) work best when done in one sitting without distractions
- If migrating via CSV: your exported files ready on your computer – most platforms let you export data as CSV (Comma Separated Values) files, which are basically spreadsheet files that any system can read. Export all the data types you want to bring over – customers, jobs, invoices, etc.
Step 1: Navigate to Migration Hub
Click “Migration Hub” in the left sidebar of your navigation menu. If you do not see this option, check that your user role has Owner or Admin permissions – the Migration Hub is intentionally restricted to prevent unauthorized data imports. You can also navigate directly to the migration page by typing the URL in your browser.
When the page loads, the first thing you will see is a prominent header with the title “Migration Hub” accompanied by a database icon in a pulsing ring animation – the pulsing is a subtle visual cue that this is a “live” tool that actively processes data, not just a static page. Below the title, a subtitle reads “Import data from other platforms,” which is exactly what we are about to do.
Below the header, you will see the 4-step progress wizard – this is your roadmap for the entire migration process. Think of it like a GPS for data migration – it shows you where you are, where you have been, and what is coming next. The four steps are: Step 1: Select Source (database icon – choose where your data is coming from), Step 2: Upload Files (upload icon – connect or upload your data), Step 3: Map Fields (link icon – tell the system how your old data fields match up with Exoserva fields), and Step 4: Import (download icon – actually bring the data in). Each step shows a numbered circle with an icon badge, and as you complete each step, it gets a green checkmark and a gradient connector bar fills in between the steps to show your progress.
Tip: If you previously started a migration and left the page before finishing, do not worry – the Migration Hub automatically saves your session and picks up right where you left off when you come back. The session is stored via a URL query parameter, so you can even bookmark the link to return to it later, or share the URL with a team member (with Admin access) who can continue the setup for you.
Step 2: Choose Your Source Platform
On the first step, the page wants to know one thing: where is your data coming from? If you are a first-time user, you will see a Welcome Hero section at the top with a friendly animated illustration showing data flowing from a source platform into Exoserva. This is just a visual welcome – scroll past it to get to the actual selection.
Below the hero, you will find a Popular Migration Sources quick-start grid – these are the four platforms that most of our users are migrating from: ServiceTitan, Jobber, HousecallPro, and CSV Files. Each one is displayed as a clickable card. If you are coming from one of these platforms, just click the card and the system will immediately create a migration session and move you to the next step. This is the fastest path.
If your platform is not in the quick-start grid, scroll down past the divider that reads “or select from all sources below.” The full Source Selector grid shows all eight supported platforms: ServiceTitan, Jobber, HousecallPro, ServiceNow, Workday, FieldEdge, Workiz, and CSV Files. Each source card clearly indicates whether it connects via API (a direct connection where Exoserva talks to your old platform’s servers to pull data automatically) or File Upload (where you export CSV files from your old platform and upload them here). API connections are generally easier because the system pulls your data directly – file uploads give you more control but require a bit more manual work.
If your platform is not listed at all, do not worry – that is what the CSV Files option is for. Almost every field service platform on the market lets you export your data as CSV files. Log into your old platform, find the export or download option (usually in Settings or Account), export your data, and then come back here and choose CSV Files.
Tip: If your current platform is not listed by name, always go with the CSV Files option. CSV is a universal data format – think of it as the “plain English” of data files. Literally any platform can export to CSV, and our Migration Hub handles CSV files with the same AI-powered mapping intelligence as the direct API connections. You will not lose any functionality.
From Vlad: We put ServiceTitan, Jobber, and HousecallPro front and center in the quick-start grid because those three platforms account for about 80% of all migrations we see. If you are coming from one of those, the experience is going to be noticeably smoother than CSV – the API connection pulls your data directly and our field mapping is pre-configured with high-confidence presets because we have done this migration thousands of times. We know exactly how ServiceTitan’s “customer_name” field maps to our “name” field, how Jobber’s invoice format translates to ours, and so on. It is like having a moving company that has moved from your exact apartment building before – they know all the quirks.
Step 3: Connect or Upload Your Data
What you see on Step 2 depends on which source platform you selected. There are two paths, and both are straightforward once you know what to expect.
If you chose an API-based source like ServiceTitan, Jobber, ServiceNow, or Workday, the page shows an OAuth authorization flow. Think of OAuth like giving someone a key to read your files but not change them – you are granting Exoserva permission to access your data in read-only mode. Click the “Connect” button and a popup window will open where you sign into your existing platform with your regular login credentials. Once you log in, your old platform will ask you to confirm that you want to allow Exoserva to access your data. Click “Allow” or “Authorize” and the popup will close automatically. For platforms that use API Key authentication instead of OAuth (like HousecallPro, FieldEdge, and Workiz), you will see an input field where you paste your API key directly – you can usually find your API key in your old platform’s Settings under “Integrations” or “API Access.”
If you chose CSV Files, a drag-and-drop upload zone appears on the page. It is a large rectangular area with a dashed border – you can either drag files from your computer’s file explorer directly onto this zone, or click the zone to open a file browser and select files manually. Each file can be up to 50MB in size, which is enough for tens of thousands of records. You can upload multiple files at once – for example, one file for customers, one for jobs, one for invoices, and so on.
After uploading files (or connecting via API), keep an eye on the header stats bar that appears at the top of the page. It shows four metrics that update as the system processes your data: Files (how many files you uploaded), Records (the total number of data rows detected across all files), Entities (the number of different data types detected – like Customers, Jobs, Invoices, etc.), and AI Confidence (the average confidence percentage for the AI’s automatic field mapping, shown with a color indicator – green for 80%+ confidence, amber for 60-79%). A sparkle icon spins next to the AI Confidence metric while the AI is still analyzing your data.
Warning: The OAuth popup window may be blocked by your browser’s popup blocker – this is the most common issue during API-based migration setup. If you click “Connect” and nothing happens (no popup appears), look for a blocked popup notification in your browser’s address bar and allow it. In Chrome, it appears as a small icon on the right side of the address bar. In Safari, a notification bar may appear at the top. Some corporate firewalls may also block the OAuth flow – if you are on a company network and cannot get the popup to work, contact your IT team or try from a personal device.
Step 4: Review AI Analysis Results
This is where the magic happens. After you upload your files or connect via API, the AI kicks in and automatically analyzes your data. You do not need to click anything – the analysis starts on its own. Think of the AI as a really smart assistant that looks at your data and says “I think this column is customer names, this column is phone numbers, and this file looks like invoices.”
For CSV files, the AI examines the column headers, the data patterns in each column (like recognizing phone number formats, email addresses, dollar amounts, and dates), and the file name itself to detect which entity type each file represents (Customers, Properties, Jobs, Invoices, etc.). Each detection comes with a confidence percentage – 95% confidence means the AI is very sure, 70% means it is making an educated guess. For API sources, the system fetches a preview of your data from the connected platform and displays record counts for each entity type (like “2,847 Customers, 12,341 Jobs, 8,902 Invoices”).
Watch the AI Confidence metric in the header stats bar as the analysis runs. The sparkle icon spins while the AI is working, and when it finishes, a green success toast pops up announcing the results – something like “Analysis complete: 8 entity types found.” The overall confidence score turns green (80%+), amber (60-79%), or stays uncolored if the AI is struggling to classify your data.
Once the analysis is complete, the wizard automatically advances to Step 3 (Map Fields). You do not need to click “Next” – it transitions on its own. If the analysis takes longer than expected (which can happen with very large files), just be patient. The AI is doing its best to understand your data structure.
Tip: The AI supports 12 entity types: Customers, Properties, Jobs, Invoices, Contacts, Employees, Inventory, Equipment, Estimates, Memberships, Leads, and Pricebook. If your CSV file names match these categories closely, the AI confidence will be higher because the file name is one of the signals it uses. For example, renaming “clients.csv” to “customers.csv” or “work_orders.csv” to “jobs.csv” before uploading can improve detection accuracy from 75% to 95%. A small effort that makes a big difference.
From Vlad: The AI analysis is probably the feature I am most proud of in the entire Migration Hub. When we first launched, users had to manually classify each file and each column – it took an hour of tedious clicking for a moderately complex migration. Now the AI does it in seconds with high accuracy. We trained it on thousands of real migrations from different platforms, so it has seen every weird column name variation you can imagine – “cust_nm,” “client_name,” “customer_full_name,” “name_of_customer” – and it knows they all mean the same thing.
Step 5: Map Your Fields (Simplified View)
Field mapping is the most important step of the migration, and it is where you tell the system exactly how the data from your old platform translates to Exoserva. But do not worry – the AI has already done most of the work for you. The Field Mapper opens in Simplified mode by default for API-based sources, showing a clean, streamlined view that focuses on what matters.
In Simplified mode, you see a summary card for each detected entity type (Customers, Jobs, Invoices, etc.). Each card shows the entity name, how many records were found, and the mapping status – either a green checkmark (all fields are mapped and ready to import) or a warning indicator (some fields need attention). For API-based migrations from supported platforms, the AI auto-applies preset field mappings that it has learned from thousands of previous migrations. A success toast confirms when auto-configuration is complete, saying something like “Auto-configured 8 entity types.”
In Simplified mode, your job is simply to review and approve the mappings, not to configure every field individually. Scroll through the entity cards, check that the record counts look reasonable (if you know you have about 3,000 customers, the card should show roughly that number), and confirm that everything has a green checkmark. If it does, you can skip ahead to the import step. This is the fastest path for API-based migrations where field names are already well-known to our system.
Tip: If you are doing an API-based migration from ServiceTitan, Jobber, or HousecallPro, you can often breeze through this step in under a minute. The presets handle 95%+ of the field mappings correctly. Just scan the cards, make sure the record counts look right, and move on. The detailed field-by-field review is available in Advanced mode if you need it, but most API migrations do not require it.
From Vlad: I spent months building the preset mapping system because I watched early users spend literal hours manually mapping fields from their old platform to Exoserva. It was painful to watch. Now the AI knows that ServiceTitan’s “customer_name” maps to our “name” field with 95%+ confidence. Jobber’s “client_email” maps to our “email” field. HousecallPro’s “work_order_date” maps to our “scheduled_start.” For most API migrations, you should not have to change a single mapping. If you do find yourself manually remapping lots of fields for an API migration, let us know – it means our presets need updating.
Step 6: Switch to Advanced Mapping If Needed
Most users will never need Advanced mode – Simplified mode handles the common cases beautifully. But if you are a detail-oriented person, or if you are doing a CSV import with unusual column names, or if you just want to see exactly how every field is being mapped, Advanced mode gives you full control.
To switch, click the toggle button to change from Simplified to Advanced mode. The view transforms into a two-column layout. The left column shows the list of all detected entity types – click any entity type to select it and see its field mappings. The right column shows a detailed field mapping table for the selected entity. Each row in the table has three important pieces: the Target Field (this is the Exoserva field name – where the data will end up), a Source Column dropdown (this lets you choose which column from your data should be mapped to this target field), and a Confidence bar showing how confident the AI is in this particular mapping (100% = it is certain, 50% = it is guessing).
Required fields are marked with a red asterisk (*) – these are fields that must have a mapping for the import to work. For example, a Customer entity requires at least a name. If any required field is unmapped (the Source Column dropdown shows “Select column”), you will need to choose the correct source column before you can proceed. There is also an Apply Preset button at the top – if you have made manual changes and want to undo them all and go back to the AI’s recommendations, clicking this button resets everything to the AI-suggested mappings.
Tip: Advanced mode is most useful for CSV imports where your column names are unusual or non-standard. For example, if your CSV has a column called “client_tel” instead of “phone,” the AI might map it with lower confidence or miss it entirely. In Advanced mode, you can manually tell the system that “client_tel” is actually the phone number field. For API imports from supported platforms, the Simplified mode usually gets everything right – only switch to Advanced if you noticed something that looked off in the Simplified view.
Warning: Required fields (the ones with a red asterisk) MUST be mapped before you can start the import. If any required field across any entity type is unmapped, the Start Import button stays disabled and greyed out. If you are stuck and cannot figure out which required field is missing, go through each entity type one by one and look for red asterisks next to dropdowns that say “Select column.”
Step 7: Verify Required Fields Before Importing
Before you hit the big import button, take a moment to do a final verification pass. This step might seem tedious, but it can save you from having to redo the entire import because of a missing field. Think of it like double-checking your packing list before a trip – better to catch a missing item now than when you are already at the airport.
Scan the field mapping table (in either Simplified or Advanced view) for any entity types that show a warning indicator instead of a green checkmark. In Advanced mode, look for rows with a red asterisk (*) that do not have a source column selected. The most common required fields are: customer name (first name or full name), at least one contact method (email or phone number), job title or description, and invoice number. If your source data genuinely does not have one of these fields – for example, some old platforms did not capture email addresses for every customer – you may need to go back to your original platform, add the missing data, re-export, and re-upload.
The Start Import button at the bottom of the wizard (or in the navigation bar) only becomes active when ALL required fields across ALL entity types are properly mapped. If the button is greyed out and you cannot figure out why, it means at least one required field somewhere is unmapped. Work through each entity type systematically until you find the missing mapping.
If mapping every single entity type feels overwhelming, here is some good news: for CSV imports, you can import entity types independently. Map and import your most critical data first (Customers and Jobs), then come back for a second import pass to bring in secondary data like Inventory, Estimates, or Memberships.
Tip: Prioritize your import in this order: Customers first (they are the foundation – jobs and invoices reference customers), then Properties (locations where work happens), then Jobs (your work history), then Invoices (your financial history). Everything else – Inventory, Equipment, Estimates, Memberships, Leads, Pricebook – can come in later passes. Getting Customers and Jobs imported correctly is the critical first milestone.
Step 8: Start the Import
This is the moment of truth. You have selected your source, uploaded or connected your data, reviewed the AI’s field mappings, and verified that all required fields are accounted for. Now click the “Start Import” button – it is the button with a download icon in the navigation bar or at the bottom of the mapping step. Take a breath and click it.
A confirmation toast will appear reading “Import started – processing in background.” The wizard advances to Step 4 (Import) and the progress view takes over the page. Here is the really important thing to understand: the import runs on our servers, not in your browser. This means you can safely close the browser tab, shut your laptop, go make a sandwich, or handle other work – the import will continue running regardless. Your session is saved, so when you come back and open the Migration Hub page, it will show you the progress from where the import currently stands.
That said, if you want to watch the progress in real time (and honestly, it is kind of satisfying to watch), the progress view updates automatically by polling the server every few seconds. You will see the numbers tick up as records are imported one by one.
Warning: Do NOT start a second import session while one is already in progress. The system is designed to prevent duplicate imports, but starting a new session will navigate you away from the progress view of your active import, and you might lose track of it. If you need to import additional data (from another source or more entity types), wait for the current import to finish completely, or cancel it first and start fresh. Patience here prevents duplicate records and confusion later.
From Vlad: People ask me all the time why we do not show a “Confirm import?” dialog with a scary warning. The reason is simple: the import is completely non-destructive. It only adds data to your Exoserva account – it never deletes or modifies anything in your source platform, and it does not overwrite existing data in Exoserva. If the results are not what you expected, you can always re-import with different mappings. I wanted the experience to feel safe, not scary, because it IS safe.
Step 9: Monitor Import Progress
The Import Progress view is your window into what is happening on the server. At the center of the page, you will see an animated progress circle that fills from 0% to 100% as the import runs. Below the circle, the current phase is displayed so you know exactly what the system is doing at any given moment.
The import goes through four phases: Validating (the system checks your data for integrity issues, like making sure required fields are present and data types are correct – this is like a pre-flight checklist), Importing (the system is actively writing your records into the Exoserva database – this is the main phase and takes the longest), Finalizing (the system creates relationships between imported entities – for example, linking jobs to the correct customers and properties), and finally Completed (everything is done!) or Failed (something went wrong – but do not panic, your data is still safe in your source platform).
Below the progress circle, four stat cards give you a detailed breakdown of the import: Total (the number of records the system plans to import), Imported (successfully written to the database so far), Skipped (records that were skipped – usually because they are duplicates of data already in Exoserva from a previous import attempt, or because they failed validation), and Errors (records that could not be imported due to data issues, with details about what went wrong).
The progress view automatically polls the server every 5 seconds for updates, so you will see the numbers change in near-real time. If the server is busy and responds with rate limiting (HTTP 429 status), the polling automatically slows down using exponential backoff – it waits a bit longer between each check to give the server breathing room. You do not need to do anything, this is all handled automatically.
Tip: If you see “Skipped” records after the import completes, do not be alarmed. Skipped records are almost always duplicates – records that already exist in your Exoserva account from a previous partial import attempt. The system detects them and skips them to avoid creating duplicate customers or jobs. If you see “Error” records, review the error details to understand what went wrong (common causes are missing required fields, invalid phone number formats, or dates in an unrecognized format).
From Vlad: I made imports run in the background instead of requiring you to sit and watch for one simple reason: large imports can take 10-20 minutes or more for 5,000+ records, and nobody should have to stare at a progress bar for that long. Start the import, go handle your business – answer calls, schedule jobs, do what you do. Come back when you are ready. The URL with your session ID is bookmarkable, so you can even check the progress from your phone while you are on a job site. I actually bookmarked mine and check it from my phone all the time.
Step 10: Verify and Clean Up
When the import finishes, the progress circle fills to 100% and the phase changes to “Completed” displayed in green (or “Failed” in red if errors occurred – but even “Failed” usually means most records imported successfully and only some had issues). A success toast pops up with the final count, something like “Successfully imported 2,847 records.” Take a moment to appreciate that – all those records moved over automatically in minutes instead of days of manual data entry.
Now comes the verification step, and this is important. Navigate to the relevant pages in Exoserva – the Customers page, the Properties page, the Jobs page, etc. – and do a spot-check. Open 5-10 customer profiles and verify that the names, phone numbers, email addresses, and mailing addresses look correct. Check a few jobs to make sure the descriptions, dates, and assigned technicians came over properly. Look at some invoices to confirm the amounts and line items match what you had in your old system.
Pay special attention to these common trouble spots: phone number formatting (some platforms store phone numbers differently, like with or without dashes, with or without country codes), address fields (street, city, state, and zip sometimes get merged or split differently between platforms), and custom fields (any data that your old platform stored in custom or non-standard fields may need manual review).
If you need to import additional data – maybe you did your first import with just Customers and Jobs and now want to bring in Invoices and Inventory – click the “New Import” button (refresh icon) in the header to start a fresh migration session. Each session is independent, so you can do as many import passes as you need to get all your data over.
Tip: Do a spot-check of at least 5-10 records per entity type right after importing. It only takes 5 minutes and catches mapping issues early, before they affect live operations. The most common post-import surprises are phone numbers that lost their formatting (showing as “5551234567” instead of “(555) 123-4567”) and addresses where city and state got swapped. These are easy to fix in bulk if you catch them early, but much harder to notice if you wait until a technician calls a customer with the wrong phone number on a job.
Warning: The Migration Hub is completely non-destructive to your source platform. Your data in ServiceTitan, Jobber, HousecallPro, or wherever you are coming from remains completely untouched – we only read from your old platform, we never write to it or delete anything. So there is zero risk to your original data. If the import results are not satisfactory for any reason, you can always start a fresh import session with different field mappings and try again. Think of it like making a photocopy – the original is always safe.
Common Mistakes to Avoid
- Not backing up your data in the source platform before starting – while the migration is 100% non-destructive (your old data is never modified or deleted), having a backup gives you peace of mind and a reference point. If a customer calls and says “my old invoice number was X,” you want to be able to look it up in the backup to verify it imported correctly.
- Uploading CSV files with inconsistent column names across files – for example, using “Customer Name” in one file, “client_name” in another, and “Cust” in a third. This confuses the AI because it sees what looks like three different fields when they are actually the same thing. Standardize your column headers before uploading – pick one naming convention and use it in all files.
- Skipping the field mapping verification step and trusting the AI blindly – the AI is good, but it is not perfect. An overall confidence of 80% means roughly 1 in 5 mappings might be wrong. Always review at least the required fields (marked with red asterisks) before starting the import. Spending 2 minutes on verification can save you 2 hours of fixing bad data later.
- Running multiple import sessions simultaneously for the same data – this can create duplicate records that are frustrating to clean up. If you started an import, wait for it to finish completely before starting another one. If you made a mistake, cancel the current import first.
- Importing everything at once on the first try instead of starting with the most critical data – if you have 50,000 records across 12 entity types, trying to do it all in one pass maximizes the chance of something going wrong. Start with Customers and Jobs (your most critical data), verify they imported correctly, then do a second pass for Invoices, a third for Inventory, and so on. Smaller batches are easier to verify.
- Not spot-checking the imported data before going live – some owners import their data, see “Successfully imported 5,000 records,” and immediately start scheduling jobs without checking if the phone numbers, addresses, and customer names actually came over correctly. Take 10 minutes to open random customer profiles and verify the data looks right. Finding a problem on day 1 is easy to fix; finding it three weeks later when a technician drives to the wrong address is not.
What’s Next?
Now that you’ve completed this guide, check out:
Need help? Post in the Tech Support category or contact support@exoserva.com.
