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

  1. Reference data: Products, Price Books and Price Book Entries, Skills.
  2. Accounts, Contacts and Locations, including inventory locations such as warehouses and technician vans.
  3. Assets (installed products), linked to accounts, products and locations.
  4. Operating Hours and Time Slots.
  5. Service Territories, which reference Operating Hours.
  6. Users, then Service Resources. Technician resources need an active user with the Field Service resource permission set license.
  7. Service Territory Members, with the correct territory type (primary, secondary or relocation) and effective dates.
  8. Service Resource Skills, Work Types and Skill Requirements.
  9. Service Contracts and Entitlements.
  10. Work Orders, then Work Order Line Items.
  11. Service Appointments (parented to the work order or line item), then Assigned Resources for appointments that were already scheduled.
  12. 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.