Field Service objects are tightly linked. A Service Appointment needs a parent record, a Service Territory needs Operating Hours, and a Service Resource needs an active user. Load them out of order and you get a wall of lookup errors, or worse, records that load but are silently wrong. This is the sequence I follow after product mapping and conversion updates are done.
The load order
- Reference data: Products, Price Books and Price Book Entries, Skills.
- Accounts, Contacts and Locations, including inventory locations such as warehouses and technician vans.
- Assets (installed products), linked to accounts, products and locations.
- Operating Hours and Time Slots.
- Service Territories, which reference Operating Hours.
- Users, then Service Resources. Technician resources need an active user with the Field Service resource permission set license.
- Service Territory Members, with the correct territory type (primary, secondary or relocation) and effective dates.
- Service Resource Skills, Work Types and Skill Requirements.
- Service Contracts and Entitlements.
- Work Orders, then Work Order Line Items.
- Service Appointments (parented to the work order or line item), then Assigned Resources for appointments that were already scheduled.
- Product Items (stock at each inventory location), then Products Consumed for historical parts usage.
The inventory trap
Inserting a ProductConsumed record against a Product Item reduces that item's quantity on hand and creates a Product Item Transaction. If you load current stock levels first and then load years of historical consumption, every van ends up with negative inventory.
Two ways to avoid it:
- Load historical consumption first, then set the final on-hand quantities from the legacy system's current stock.
- Or keep closed-job parts history in a separate reporting object, and only load consumption for open work.
Habits that make loads repeatable
- Upsert on a legacy external ID so any load can be rerun without creating duplicates.
- Bypass your own automation (triggers, flows, validation rules) during the load with a custom-permission or custom-setting switch, and remember to turn it back on.
- Use smaller batch sizes for appointments and assignments. Field Service automation does real work on these records and can hit limits in large batches.
- Reconcile every object: compare record counts, key sums (such as stock quantity per location), and a sample of records against the source.
Lesson learned: Do at least one full rehearsal in a full-copy sandbox and time it. The rehearsal is where you discover the missing user licence or the territory with no Operating Hours, not on cut-over night.