SAP SuccessFactors foundation object sync
SAPSF ObjectSync
Production-grade utility to synchronise SAP SuccessFactors Organisational Management foundation objects from a source tenant to a lower target tenant through OData v2.
5object levels supported
3auth modes
2interfaces: CLI + web UI
1audit trail per run
Architecture - how sync works
Every sync run follows the same safe path: resolve ancestors, dry-run preview, review reports, then optionally apply.
Source PRD
OData v2 read
OData v2 read
→
Dry-Run Engine
Resolve + compare
Resolve + compare
→
Target Dev
OData upsert
OData upsert
Before writes
Excel report
Audit trail
Run log
Rollback data
Pre-sync snapshot
Dry-run first - see what will change before anything writes
Every run defaults to dry-run mode. You see the full sync preview, changes, and reports before a single record is touched on the target tenant.
Example dry-run output
$ python -m src.sync_engine --file input.xlsx --dry-run
=== DRY RUN (no writes) ===
Source: PRD (prod-api.sap.com)
Target: Dev (dev-api.sap.com)
Resolving hierarchy for: UK HR Ops (Sub Department)
Sub Department: UK HR Ops
Department: UK HR Central
Division: UK Human Resources
Business Unit: UK Corporate
Legal Entity: UK Ltd (GB01)
Objects to sync: 5
CREATE Sub Department UK HR Ops (missing on target)
UPDATE Department UK HR Central (name differs)
UPDATE Division UK Human Resources (status changed)
SKIP Business Unit UK Corporate (identical)
SKIP Legal Entity UK Ltd (identical)
Changes: 3 (2 UPDATE, 1 CREATE)
Skips: 2 (no change needed)
Reports written to:
output/sync_report_20260515_143002.xlsx
output/sync_20260515_143002.log
# Dry-run succeeded. Review reports, then re-run with --no-dry-run to apply.
What you get
- Object-by-object preview - see exactly which records will be created, updated, or skipped
- Change detail - which fields differ between source and target
- Excel report - downloadable workbook with colour-coded rows and summary sheets
- Audit log - timestamped, append-only run log with all decisions
- Zero risk - no writes happen in dry-run mode. Guaranteed.
Object coverage matrix
Foundation objects supported for sync, with OData entities, dependencies, and operational notes.
| Level | Canonical Name | OData Entity Set | Dependencies | Create | Update | Risk notes |
|---|---|---|---|---|---|---|
| 5 | Sub Department | cust_SubDepartment | Department must exist on target | YES | YES | Custom object; entity set name varies by tenant |
| 4 | Department | FODepartment | Division must exist on target | YES | YES | Standard FO; name and status fields tracked |
| 3 | Division | FODivision | Business Unit must exist; Division-BU junction must align | YES | YES | Junction table sync required for BU linkage |
| 2 | Business Unit | FOBusinessUnit | Legal Entity must exist; BU-LE junction must align | DRY-RUN | YES | Create via API requires careful parent resolution |
| 1 | Legal Entity | FOCompany | None (leaf-level; no parent FO) | DRY-RUN | YES | Rarely synced; typically exists in all tenants already |
🛡 Safety checklist - before, during, and after a sync
These steps are built into the tool's workflow. Follow them for every sync run.
Before sync
- Verify target tenant is a lower environment (Dev/Test), never PRD
- Confirm source and target credentials in
.envare correct - Run
--dry-runfirst and review the Excel report - Check the run log for any unexpected SKIP or ERROR lines
- Validate ancestor resolution is correct for all input rows
During sync
- Monitor the live log output for CREATE/UPDATE confirmations
- Watch for HTTP errors or OData validation failures mid-run
- If a mid-sync error occurs, the tool stops and logs the failure point
- Partial syncs are logged; you can resume or roll back
After sync
- Open the Excel report and confirm all rows are green (synced)
- Spot-check 2-3 objects on the target tenant via SF UI
- Archive the run log and Excel report for audit evidence
- Run the PIC (Position Integrity Checker) if positions reference these objects
If you need to roll back
- Use the pre-sync snapshot data from the log to identify affected records
- For UPDATEs: the old values are recorded in the run log
- For CREATEs: delete the newly created object via SF UI or OData
- Re-run ObjectSync with the original target data or restore from SF backup
- Always test rollback in Dev before attempting in Test
When to use it
Post-PRD change
- PRD foundation objects were updated
- Dev environments need the same structure
- Manual copy would be slow and error-prone
Pre-release alignment
- Align Dev structure to PRD before testing
- Ensure test scenarios use current hierarchy
- Catch missing objects before configuration build
Consultant onboarding
- New team member needs representative Dev data
- Seed a fresh Dev tenant with current structure
- Reduce setup time from hours to minutes
SAP SuccessFactors toolkit
This tool is part of the SF Compass consulting suite.