ServiceMax is good at running the job. Dispatchers schedule, engineers record time and parts on site, and the work order moves from open to complete. Where it tends to fall short is the Monday conversation: how many jobs did each team finish, how many took a second trip, what did we use from stock, and what is sitting in the backlog getting old. Those answers are all in ServiceMax, but they are spread across three objects, and the standard Salesforce report builder makes joining them harder than it should be. This page shows which objects hold what, how they link, and what a weekly operations report built from them looks like.
First, which ServiceMax are you on?
PTC documents ServiceMax Core and Asset 360 separately, and the two store work in different places.
- ServiceMax Core is a managed package on Salesforce. Its objects carry the
SVMXC__prefix, and the work order is a custom object,SVMXC__Service_Order__c. Most of this page is about Core. - Asset 360 is built on Salesforce's standard field service objects. PTC's list of standard objects used in Asset 360 includes
WorkOrder,WorkOrderLineItemandProductConsumed(an item from inventory used to complete a work order), and notes that some of these only apply if you also hold a Salesforce Field Service licence.
The report logic below is the same on both. The object and field names are not, so check which one your org runs before anyone writes a query.
The three objects that hold a week of field work
On ServiceMax Core, a weekly operations report needs work orders, the visits made against them, and the parts and labour recorded on them. Every API name in these tables is taken from PTC's ServiceMax Core data dictionary, linked in each heading.
Work orders: Work Order
| Field label | API name | Used for |
|---|---|---|
| Order Status | SVMXC__Order_Status__c |
Open, complete or cancelled at week end |
| Order Type | SVMXC__Order_Type__c |
Splitting breakdowns from planned work |
| Completed Date Time | SVMXC__Completed_Date_Time__c |
Deciding which week a job belongs to |
| Service Team | SVMXC__Service_Group__c |
The team row on the report |
| Technician | SVMXC__Group_Member__c |
Lookup to Technician/Equipment |
| Account | SVMXC__Company__c |
Customer |
| Site | SVMXC__Site__c |
Lookup to Location |
| Billing Type | SVMXC__Billing_Type__c |
Contract versus chargeable work |
Order Status and Order Type are picklists, so the values are whatever your administrator set up. Map them once in the warehouse rather than hard-coding "Completed" in every report.
Visits: ServiceMax Event
PTC describes SVMXC__SVMX_Event__c as holding calendar events for technicians who are not Salesforce users, and for equipment whose calendars are tracked for dispatching. Each event has SVMXC__StartDateTime__c, SVMXC__EndDateTime__c, SVMXC__Technician__c, a SVMXC__WhatId__c pointing at the source record, and a SVMXC__Service_Order__c lookup to the work order. If some of your engineers are licensed Salesforce users, their appointments may sit on the standard Salesforce Event object instead, so a visit count has to read both.
Parts and labour: Work Detail
Work Detail (SVMXC__Service_Order_Line__c) is the line-level record under a work order. SVMXC__Line_Type__c says whether a line is Parts, Labor or Expenses.
| Field label | API name | Used for |
|---|---|---|
| Work Order | SVMXC__Service_Order__c |
Master-detail link to the job |
| Line Type | SVMXC__Line_Type__c |
Parts, Labor or Expenses |
| Part | SVMXC__Product__c |
Lookup to Product |
| Line Qty | SVMXC__Actual_Quantity2__c |
Quantity; its meaning depends on Line Type |
| Line Price Per Unit | SVMXC__Actual_Price2__c |
Unit price |
| Total Line Price | SVMXC__Total_Line_Price__c |
Formula field |
| Is Billable | SVMXC__Is_Billable__c |
Chargeable or absorbed |
| Billable Qty, Billable Line Price | SVMXC__Billable_Quantity__c, SVMXC__Billable_Line_Price__c |
What the customer is charged |
| Consumed From Location | SVMXC__Consumed_From_Location__c |
Which van or store the part came from |
| Start / End Date and Time | SVMXC__Start_Date_and_Time__c, SVMXC__End_Date_and_Time__c |
Labour hours |
Service teams and engineers live on Technician/Equipment (SVMXC__Service_Group_Members__c), which links to its team through SVMXC__Service_Group__c and carries an SVMXC__Active__c flag.
How the objects join
| From | To | Key | Watch for |
|---|---|---|---|
| ServiceMax Event | Work Order | SVMXC__Service_Order__c |
If the lookup is blank, SVMXC__WhatId__c holds the source record's ID |
| Work Detail | Work Order | SVMXC__Service_Order__c (master-detail) |
Lines are deleted with their work order |
| Work Order | Service Team | SVMXC__Service_Group__c |
Decide once whether a reassigned job counts for the team that finished it (we do) |
| Technician/Equipment | Service Team | SVMXC__Service_Group__c |
Inactive engineers still own past events |
The formulas behind each line
| Report line | Formula |
|---|---|
| Completed | count of work orders with a complete status and Completed Date Time inside the week |
| Visits per work order | events linked to the week's completed work orders ÷ completed work orders |
| Multi-visit share | completed work orders with two or more events ÷ completed work orders |
| Labour hours | sum of (End − Start) on Labor lines of completed work orders |
| Parts used | sum of Line Qty × Line Price Per Unit on Parts lines of completed work orders |
| Billable parts | the same sum where Is Billable is ticked |
| Parts with no location | Parts lines where Consumed From Location is empty |
| Open over 14 days | open work orders where report date − created date > 14 |
Two of these need care. Multi-visit share is a rate, so the all-teams figure must come from the summed counts, not from averaging the team percentages. And "parts with no location" is a stock control check: a part logged without a location doesn't say which van or store it came from, so your stock figures may still think it is on the shelf.
Week 26 Oct 2026 – 1 Nov 2026
ServiceMax weekly report · Hallowfield Process Equipment (fictional)
36 work orders completed,
10 needed more than one visit.
Built from three ServiceMax objects: Work Order, ServiceMax Event and Work Detail. Completed means Order Status complete with a completed date inside the week.
- Completed
- 36
- 26 opened in the week
- Visits per work order
- 1.42
- 51 visits on completed WOs
- Parts used
- £39,165
- £35,000 billable
- Open over 14 days
- 11
- of 22 open at week end
By service team
| Team | Opened | Completed | Visits / WO | Multi-visit | Labour h | Parts used | Billable parts | Open > 14 d |
|---|---|---|---|---|---|---|---|---|
| North | 10 | 14 | 1.36 | 4 · 28.6% | 136 | £22,220 | £20,390 | 4 of 8 |
| Midlands | 10 | 11 | 1.55 | 4 · 36.4% | 63 | £6,540 | £5,225 | 4 of 8 |
| South | 6 | 11 | 1.36 | 2 · 18.2% | 86 | £10,405 | £9,385 | 3 of 6 |
| All teams | 26 | 36 | 1.42 | 10 · 27.8% | 285 | £39,165 | £35,000 | 11 of 22 |
Multi-visit share above the all-teams figure is marked for a look. All-teams rates are recalculated from the counts, not averaged across teams.
Open work orders by age
Completed work by type
- Breakdown18 done · 5 multi-visit
- Planned service8 done · 3 multi-visit
- Installation10 done · 2 multi-visit
Parts used with no stock location
Work Detail lines of type Parts on this week’s completed work orders with Consumed From Location empty: £5,650 of stock that inventory may not have been decremented for.
| Work order | Team · site | Qty × price | Value |
|---|---|---|---|
| WO-00048231 | NorthFernlow Distillery | 2 × £535 | £1,070 |
| WO-00048218 | NorthWythen Cold Stores | 4 × £205 | £820 |
| WO-00048235 | MidlandsQuarrendon Chemicals | 4 × £190 | £760 |
| WO-00048221 | NorthQuarrendon Chemicals | 3 × £200 | £600 |
| WO-00048231 | NorthFernlow Distillery | 1 × £595 | £595 |
| WO-00048222 | NorthBrackwell Foods | 1 × £585 | £585 |
| WO-00048219 | NorthHatchgate Paper Mill | 1 × £520 | £520 |
| WO-00048253 | MidlandsSallowmere Brewery | 2 × £220 | £440 |
| WO-00048222 | NorthBrackwell Foods | 2 × £85 | £170 |
| WO-00048254 | SouthOakhanger Pharma Unit | 1 × £90 | £90 |
Where each line comes from
- Work Order SVMXC__Service_Order__c63 recordsSynced
- ServiceMax Event SVMXC__SVMX_Event__c70 eventsSynced
- Work Detail (Parts lines) SVMXC__Service_Order_Line__c133 linesSynced
Worked example (illustrative, fictional)
Hallowfield Process Equipment is an invented pump and process equipment service business with three teams. Its report for the week of Monday 26 October to Sunday 1 November 2026 runs on Monday 2 November. Here is the Midlands row, worked through from the records.
Work orders. Ten Midlands work orders were opened in the week and eleven were completed (status complete, completed date inside the week).
Visits. Those eleven jobs had 17 ServiceMax Events between them. Seven jobs took one visit each (7 events). Four took more: WO-00048236 and WO-00048244 took two each, and WO-00048250 and WO-00048253 took three each (2 + 2 + 3 + 3 = 10 events). So 7 + 10 = 17 visits, and visits per work order is 17 ÷ 11 = 1.55. The multi-visit share is 4 ÷ 11 = 36.4%. Across all three teams it is 10 ÷ 36 = 27.8%, so Midlands is the team to ask about. Two of its four multi-visit jobs were planned services, which is worth a question about whether the engineer arrived with the right kit list.
Labour. Labor lines on the eleven completed jobs add up to 63 hours.
Parts. Parts lines on those jobs total £6,540 at Line Qty × Line Price Per Unit. Of that, £5,225 is billable. The other £1,315 sits on three planned service jobs (£680 + £375 + £260) where parts are covered by the contract, which is expected but should be visible to whoever prices the renewal.
Stock. Two Midlands parts lines have no Consumed From Location: 4 × £190 = £760 on WO-00048235 and 2 × £220 = £440 on WO-00048253. That is £1,200, or 18.3% of the team's parts value, that inventory may not have been decremented for.
Backlog. Eight Midlands work orders were open at week end. Four are more than 14 days old, at 18, 23, 29 and 34 days since creation.
Read across the asset above and the priorities for Monday are clear enough: ask Midlands about its repeat trips, fix the location on ten parts lines (£5,650 across all teams), and go through the eleven work orders that have been open for more than a fortnight.
Getting the data out of Salesforce
ServiceMax Core data lives in your Salesforce org, so the extraction route is Salesforce's, not a separate ServiceMax export. Airbyte's Salesforce source documentation is a useful reference for what to expect from any warehouse sync:
- It reads custom objects as well as standard ones, so
SVMXC__objects come through like any other, provided the integration user can query them. - It uses the Bulk API by default and falls back to REST for some objects, which uses more of the org's daily API allowance. If a sync hits the daily limit it stops early and resumes next time, which only works for incremental streams.
- Deleted records are marked
isDeleted=trueon streams that support it, read from the recycle bin. Because Work Detail is a master-detail child, deleting a work order removes its lines too, and the warehouse has to notice. - Formula fields such as Total Line Price are a trap. Airbyte notes that if a formula changes and no other field on the record updates, the stream has to be reset and backfilled. Calculating Line Qty × Line Price Per Unit in the warehouse avoids depending on it.
Give the sync its own read-only Salesforce user with access to the ServiceMax objects and nothing it doesn't need.
What makes ServiceMax numbers drift
- Status changes after the week closes. A job reopened on Tuesday changes last week's completed count. Freeze each week's figures when the report runs and show restatements separately.
- Events not linked to a work order. Dispatchers sometimes create calendar blocks for travel or training. Leave out events with no work order link rather than counting them as visits.
- Two calendars. If engineers are split between ServiceMax Events and standard Salesforce Events, a report reading only one undercounts visits.
- Picklist edits. New Order Type or Line Type values arrive without warning. A warehouse test that fails on an unmapped value catches them on the day.
For which measures belong on a weekly page in the first place, see field service KPIs. If the report is going to a facilities client under a contract, FM contract KPI reporting covers that side. Using a different job system? There are equivalent pages for Uptick and Simpro.
Running the report with IVP.ai
The IVP.ai Data Layer pulls the ServiceMax objects out of Salesforce alongside your finance system and spreadsheets, keeps the joins and formulas above as tested definitions, and runs the weekly operations report as a report or agent before the Monday meeting. Deskless by IVP.ai can then send each team lead their own exceptions, such as parts with no stock location, and by default it flags and waits for a person rather than changing records. See the platform and field service reporting for more.
A national fire safety and security company used the same approach to bring HubSpot, Uptick and finance spreadsheets into one governed view and now saves 10+ hours a week on reporting (case study).
To see your own ServiceMax data in this shape, start a free 48-hour pilot. We connect up to three sources, clean the data and have one report or agent running on your real data within 48 hours of read-only access. You then have 14 days of access to decide whether to choose a plan or walk away.