Bulk work order import format specification

We are preparing to migrate approximately 12,000 historical work orders from our legacy system into FieldPulse. I have reviewed the Bulk Importing Inventory via CSV documentation, but I am seeking clarification on the specific schema requirements for work order imports, as the available documentation appears to focus on inventory rather than work order entities.

Specifically, I would appreciate confirmation on the following points:

  1. Required vs. optional fields: Which fields are mandatory for a successful import? I assume work_order_number, customer_id (or customer_email), and scheduled_date are required, but I would like explicit confirmation.
  2. Date/time formats: The documentation references ISO 8601, but does not specify whether timezone offsets are supported (e.g., 2025-09-22T14:00:00-04:00) or if all timestamps must be normalized to UTC.
  3. Status mapping: Our legacy system uses non-standard status values (e.g., "Dispatched," "In Progress," "Awaiting Parts"). Is there a defined mapping to FieldPulse's internal status enum, or must we pre-transform these values?
  4. Technician assignment: Can we assign technicians via technician_email at import time, or does this require a separate API call post-import?
  5. Custom fields: We have approximately 40 custom fields defined in our legacy system. Are these supported in the bulk import, and if so, what is the expected column naming convention (e.g., custom_field_{id} or cf_{name})?
  6. Validation and error reporting: Does the import process support partial success (i.e., importing valid rows while reporting errors for invalid rows), or is it atomic? What is the granularity of error reporting—row-level, field-level, or batch-level?
  7. Rate limiting and throughput: Are there documented limits on import file size (rows or bytes) and concurrent import operations?

Additionally, I would like to understand whether there is a sandbox or staging environment where we can validate our transformation pipeline before performing the production import. Our migration window is constrained, and we would prefer to avoid iterative correction cycles against production data.

I have attached a sample of our transformed data structure below for reference. Any clarification on the above points would be greatly appreciated.

work_order_number,customer_email,scheduled_date,status,technician_email,custom_field_site_id,custom_field_equipment_type
WO-2019-0042,customer@example.com,2019-03-15T09:00:00,Dispatched,tech@company.com,SITE-442,HVAC-Commercial
Parents
  • Heads up on a gotcha we hit: the importer validates customer existence by email at import time, but if you have duplicate customers with the same email (e.g., from previous partial migrations or manual entry), the import will fail with AMBIGUOUS_CUSTOMER_REFERENCE even though the email exists.

    We had to dedupe our customer base first. The API's /customers endpoint with ?email= returns all matches—worth checking programmatically before your import run.

    YMMV, but we ended up doing customer sync via API first, then using customer_id in the work order import rather than email. Eliminated a whole class of reference errors.

  • Excellent point regarding ambiguous references. I have confirmed that our customer dataset contains approximately 340 duplicate email records from legacy data quality issues. We will implement a pre-import deduplication pass.

    One additional observation: the work_order_number field appears to enforce uniqueness at the account level, not merely within a given import batch. This is the expected behavior, I presume, but it was not explicitly documented. We have historical collisions where our legacy system's sequence reset annually; we will need to namespace these (e.g., WO-2019-0042MIG-2019-0042).

Reply
  • Excellent point regarding ambiguous references. I have confirmed that our customer dataset contains approximately 340 duplicate email records from legacy data quality issues. We will implement a pre-import deduplication pass.

    One additional observation: the work_order_number field appears to enforce uniqueness at the account level, not merely within a given import batch. This is the expected behavior, I presume, but it was not explicitly documented. We have historical collisions where our legacy system's sequence reset annually; we will need to namespace these (e.g., WO-2019-0042MIG-2019-0042).

Children
No Data