Introduction
A field service organization already running a bidirectional Salesforce–Zuper integration for asset-driven job creation and job-driven case creation wanted to extend that relationship across the rest of the service lifecycle. This case study covers the design of eight additional synchronised capabilities spanning asset updates, case-initiated jobs, live status, attachments, master data, asset lifecycle, cancellations and historical migration — building a continuously synchronised relationship between the two platforms rather than a handful of one-off triggers.
Problem Statement
With only the original asset-to-job and job-to-case flows in place, several everyday touchpoints across the service lifecycle still relied on manual work. Edits made to an asset after its job existed had no way back into Zuper. Cases that were themselves service requests couldn't generate field jobs automatically. Status changes beyond simple completion never reached the linked case, so service teams answered customer queries from stale information. Photos, signatures and service reports stayed in Zuper with no path to Salesforce, master reference data drifted between the two systems, completed jobs didn't update asset service history, and cancellations or deletions risked leaving orphaned or duplicated records on either side.
Solution
We extended the existing Salesforce ↔ Zuper integration with eight event-driven capabilities, all built on the record links already established by the base integration — the Zuper Job ID held on the Salesforce case and the Salesforce Asset ID held on the Zuper job.
Asset Update Sync
Changes to a Salesforce asset flow through to its linked Zuper job or project, as long as the job is still open.
Case-Initiated Job Creation
Qualifying service-request cases in Salesforce automatically create a mapped job in Zuper, with the Job ID written straight back to the case.
Live Job Status Sync
Every mapped status change on a Zuper job, not only completion, updates the linked case in Salesforce.
Attachments & Service Reports
Photos, signatures, checklists and the completed service report transfer from Zuper to the linked Salesforce case automatically.
Master Data Sync
Accounts, contacts and products created or updated in Salesforce keep their Zuper organization, customer and item records aligned.
Asset Lifecycle Updates
Completed jobs push service dates, status and installation details back onto the linked Salesforce asset.
Cancellation & Deletion Handling
Cancellations propagate between systems in both directions, while deletions are always retained and flagged rather than removed.
Historical Migration
Assets, jobs and cases created before the integration went live are matched and linked retrospectively in controlled batches.
How It Works
Case-initiated job creation illustrates the pattern shared across the extended flows — a qualifying record on one side resolves its parent references, creates a linked record on the other, and writes the identifier back to close the loop:
- A case is created in Salesforce that represents a service request requiring field work.
- The case is evaluated against the agreed qualification criteria, such as case type or record type.
- The account, contact and asset on the case are resolved to the corresponding Zuper organization, customer and asset.
- A job is created in Zuper with the mapped title, description, category, priority and service address.
- The Zuper Job ID is written back to the case, so the reverse completion flow never generates a duplicate case.
From there, status changes, attachments, asset updates and master data keep flowing between the two linked records for the life of the job, with every update flagged at source so the receiving system never triggers the opposite flow.
Implementation
Implementation carried forward the record links already established by the base integration, so every extended flow could resolve its parent record without new identifiers to manage. Where the same record was edited in both systems within the same synchronisation window, the most recent change was applied and the conflict logged for review. No flow was allowed to create a record where its required parent reference couldn't be resolved — those cases were held as exceptions instead of failing silently.
Salesforce was treated as the system of record for account, contact and product master data, with records matched on an agreed unique key and deactivation mirrored as inactive rather than propagated as a deletion. Historical migration was scoped as a one-time, sandbox-tested exercise, executed in controlled batches outside business hours with a reconciliation report produced afterwards.
Results & Achievements
The extended scope turned a handful of one-way triggers into a continuously synchronised relationship across the full service lifecycle:
No Duplicate Jobs or Cases
Qualifying cases raise a job in Zuper without ever generating a second case back in Salesforce.
Live Status Everywhere
Every mapped job status reaches the linked case within the agreed processing window, keeping service teams current.
Automatic Documentation
Photos, signatures and the service report appear on the case as soon as the job is complete, ready to share with the customer.
Accurate Asset History
Completed jobs update asset service dates and status automatically, keeping Salesforce asset records current.
Conclusion
RethinkingWeb extended a live Salesforce–Zuper integration with eight additional synchronised capabilities — asset updates, case-initiated jobs, live status, attachments, master data, asset lifecycle, cancellation handling and historical migration — closing the gaps left by the base integration and giving field and CRM teams one consistent, always-current picture of every job.