Salesforce Spiff Data Mapping Checklist: A Field-by-Field Implementation Guide
A reliable Spiff Salesforce integration starts with a data contract, not with turning on the connector. Before configuring a Salesforce integration with Spiff, document the source objects, record grain, keys, relationships, earning-event dates, amount fields, source-of-truth system, transformations, validation rules and exception treatment for every commission input.
That is also Salesforce’s recommended order of work: create a data-mapping spreadsheet listing the objects and fields before importing data into Spiff. Salesforce followed the same underlying discipline in its own large Spiff migration—auditing and cleaning source data first, then testing the complete journey from Salesforce through Snowflake and Spiff to Workday. The project covered more than 30,000 sellers, 120 compensation plans and 3.5 billion commission-related data points.
The central principle: Map only data that a compensation rule, control, statement or reconciliation actually needs, but map enough context to explain every payout later.
Salesforce Spiff Data Mapping Checklist At a Glance
Before approving the Spiff Salesforce integration design, confirm that you can answer yes to each of these questions:
- Does every mapped object have one documented row-level grain?
- Does every record have a stable, unique external ID?
- Are all parent-child relationships mapped with immutable IDs rather than names?
- Does every commission rule name its amount, earning date, payee and eligibility fields?
- Are booked, invoiced and collected revenue represented as different business events?
- Is a source-of-truth system assigned to every important attribute?
- Can refunds, cancellations, credits and clawbacks be linked to the original transaction?
- Are currency, conversion date, business calendar and time-zone rules explicit?
- Are duplicates, nulls, late records, deleted fields and renamed picklist values handled?
- Has the team reconciled record counts, amounts, credits and payouts end to end?
- Can Finance trace a statement line back to the original Salesforce or ERP record?
- Is the mapping version-controlled and owned jointly by Sales Operations, Finance and IT?
If any answer is no, the Salesforce integration with Spiff is not ready for production, even if a technical sync succeeds.
Which Salesforce Objects Does Spiff Need?
Spiff does not need every Salesforce object. It needs the smallest connected data model that can reproduce your compensation plans and their audit trail. Start from each earning rule—such as closed-won ARR, product margin, first-year billings or collected cash—and work backward to the objects holding the event, amount, payee and eligibility data.
A typical Spiff Salesforce integration considers the following objects:
| Salesforce source | Typical Spiff purpose | Include it when |
| User | Payee identity and organizational attributes | Salesforce users are commission recipients, managers or record owners |
| Account | Customer segment, territory, region and account ownership | Rates or eligibility depend on customer attributes |
| Opportunity | Deal header, booking event and header-level value | Compensation is based on won deals, bookings, ARR or opportunity ownership |
| OpportunityLineItem | Product-level quantity, value, term and economics | Rates differ by product, SKU, margin, term or new-versus-renewal classification |
| Product2 / price-book data | Product taxonomy and compensation category | Product master attributes drive eligibility or rates |
| OpportunitySplit | Opportunity-level credit allocation | Multiple sellers share credit for one opportunity |
| OpportunityLineItemSplit | Product-line credit allocation | Credit varies by product line rather than only by opportunity |
| Currency-rate data | Currency normalization | Deals, plans or reps use more than one currency |
| Order, Contract or custom booking objects | Fulfilment or contractual events | Closed-won is not the company’s authoritative booking event |
| Custom invoice, payment, usage or credit objects | Post-sale earning events | The plan pays on invoicing, collection, consumption, activation or retention |
Salesforce describes objects and fields as analogous to database tables and columns; the practical implication is that object selection also determines record grain and relationship structure. Do not start with a long field inventory and hope a model emerges afterward.
For each object, record why it is needed, its primary key, its parent key, its expected volume, its owner and the compensation rules that consume it. If nobody can name a rule or control that needs an object, leave it out of the first release.
Which Salesforce Fields Are Required for Commission Calculations?
There is no universal list of required Salesforce fields because the answer depends on the compensation plan. However, every Salesforce integration with Spiff normally needs fields from six functional groups:
| Field group | Common Salesforce examples | Question the mapping must answer |
| Identity | Id, source-system ID, employee ID | Which exact record is this? |
| Relationships | OwnerId, AccountId, OpportunityId, Product2Id, SplitOwnerId | How does this row connect to the deal, product, customer and payee? |
| Earning event | StageName, IsWon, CloseDate, invoice date, paid date, activation date | What happened, and when did commission become eligible? |
| Commission value | Amount, ARR, ACV, TCV, quantity, margin, TotalPrice, split amount | What monetary or operational value enters the rule? |
| Classification | type, segment, region, product family, deal motion, new/renewal flag | Which eligibility, rate or accelerator applies? |
| Audit | CreatedDate, LastModifiedDate, status, adjustment reason, original-record ID | Can the team explain changes and reconcile the result? |
For Opportunity data, a practical minimum often includes Id, OwnerId, AccountId, status or stage, the earning date, the relevant value field and CurrencyIsoCode where multi-currency is enabled. Product-level plans also need line IDs, opportunity IDs, product IDs, quantities and the actual commission basis. Split plans need the credited user, split type, percentage or amount, and the parent opportunity or line.
“Required” should mean required by a named business rule—not simply available in Salesforce. This reduces data exposure and makes the map testable. The security point is not theoretical: in a Salesforce Trailblazer Community discussion about a Spiff connection, an architect described difficulty granting read-only access to only selected Account fields without exposing much broader permissions. Treat field minimization and least privilege as design requirements, then validate the actual integration user’s object- and field-level access.
Source: Trailblazer Community discussion
Can Spiff Synchronize Custom Salesforce Objects and Fields?
Yes, custom data can participate in a Spiff Salesforce integration, but “custom” should never be treated as “automatically supported.” Confirm that the required object is available to the connector, that its fields are syncable, that the integration user can read them and that the object can be mapped at the correct grain.
Use this decision sequence for a Salesforce integration with Spiff:
- Check whether the standard Salesforce connector exposes the custom object and fields under synced objects and fields.
- Map the custom source to an existing normalized Spiff concept where the semantics genuinely match.
- If no direct mapping is appropriate, use a third-party connector or webhook mapping with a deliberately designed Spiff record structure.
- Test insert, update, null, duplicate and delete behavior—not merely a successful first load.
Salesforce’s Spiff Webhook API explicitly supports mappings from third-party source data to Spiff records, along with authenticated upsert and delete operations. That makes it a useful route for product usage, ERP invoices, payment applications or other commission events that do not live naturally on a standard Salesforce object.
Do not copy a custom formula field without documenting its dependencies. If Finance cannot reproduce the formula outside Salesforce, it becomes a hidden upstream commission rule. Either move the derived logic into Spiff or formally govern the Salesforce formula as part of the compensation data contract.
How Should Opportunities, Opportunity Products and Opportunity Splits be Mapped?
Map each object at its natural grain:
- One Opportunity row represents one deal header.
- One Opportunity Product row represents one product line on that deal.
- One Opportunity Split row represents one credit allocation for one person on that deal.
- One Opportunity Line Item Split row represents one credit allocation for one person on one product line.
This distinction prevents one of the most damaging data-model errors in a Salesforce integration with Spiff: joining multiple products to multiple opportunity splits and accidentally multiplying revenue. A deal with three product lines and two sellers can become six rows after a naive join. If each row carries the full deal amount, commissionable value is overstated.
Choose the calculation grain before joining:
- For header-level commission, calculate from Opportunity and apply Opportunity Split credit once.
- For product-level commission with the same split across all products, calculate each line and allocate it using the documented opportunity split.
- For product-level commission with different credited sellers, use line-level splits or an equivalent allocation table.
- Reconcile line totals to the deal total where the two are expected to agree, and reconcile percentage splits to 100% for the applicable split type.
Salesforce defines Opportunity Split as crediting one or more opportunity-team members with portions of an opportunity amount. Preserve the split type, owner, percentage and amount because different split types may have different business meanings.
Current-state fields are not always enough. A Reddit administrator described a Spiff plan paying 10% at Opportunity Stage 8 and 90% at Stage 12, then asked whether moving to Stage 12 would erase evidence of the earlier Stage 8 payment. That is a data-model warning: if compensation depends on crossing a stage, map an immutable stage-change or payout event, not only the Opportunity’s current StageName. Reddit: Spiff implementation help
What Should be Used as the External ID in Spiff?
For Salesforce-originated records, use the immutable Salesforce record Id as the base external ID. For multi-source data, namespace it—for example, SFDC:006…, ERP:INV-10452 or PRODUCT:usage_event_789. The external ID must be stable, unique and independent of values that people can edit.
Do not use an Opportunity name, customer name, rep name or email address as the primary key. Those fields change, can be duplicated and often fail when users are rehired or records are merged.
For records whose business identity is composite, create a deterministic key from immutable parts. Examples include:
- OpportunityId + SplitOwnerId + SplitTypeId
- InvoiceId + InvoiceLineNumber
- PaymentId + InvoiceId + ApplicationSequence
- CurrencyCode + EffectiveDate + RateType
Salesforce’s Spiff training states that the user external ID is unique and that no two Spiff users can share one. Its currency guidance likewise requires a unique external ID for each effective conversion-rate record rather than overwriting an earlier rate. Apply that same version-aware discipline throughout the Spiff Salesforce integration.
How Are Salesforce Users Matched with Spiff Users?
Use Salesforce User.Id as the Spiff user external ID when Salesforce is the authoritative source for commission recipients. Match transactions to users through IDs such as OwnerId or SplitOwnerId; use email only as a secondary reconciliation field.
The user map for a Salesforce integration with Spiff should include:
- Salesforce User ID and Spiff external ID
- Employee or HR identifier, if available
- Corporate email and display name
- Active/inactive status and effective dates
- Manager and organizational assignment
- Spiff role and access level
- Preferred currency
- Hire, transfer and termination dates where plan eligibility requires them
Salesforce advises adding users from one source: if users arrive through a connector, do not also add the same people through the upload template. Its Spiff template also defines external ID as unique and includes email, name, role and preferred currency.
Keep identity separate from organizational attributes. A rep can change manager, region, role or email without becoming a new person. Where compensation is determined by the organization at the time of sale, preserve effective-dated assignments rather than applying today’s territory to last quarter’s deal.
How Should Duplicate Records be Handled Before Integration?
Resolve duplicates in the source or a governed staging layer before they enter commission calculations. Spiff should not be asked to decide whether two source records represent the same business event.
Classify duplicates first:
- Technical duplicate: the same source ID appears more than once.
- Business duplicate: different IDs represent the same sale, invoice, payment or person.
- Join duplicate: valid rows multiply because the relationship or calculation grain is wrong.
- Version duplicate: two records claim to be the effective version for the same date or period.
The pre-sync checklist should test unique primary keys, orphaned relationships, repeated employee identities, duplicate payment applications, split totals and unintended row multiplication. Quarantine ambiguous rows for review; do not silently keep the first record.
Spiff’s currency import workflow demonstrates why duplicate behavior must be explicit: it asks whether to skip duplicates, override existing fields or update missing fields, and requires each new rate record to have a unique external ID. The correct choice depends on the business meaning of the record, so document it per object.
A dependable Spiff Salesforce integration should also produce a duplicate exception report with source ID, suspected duplicate group, reason, financial exposure, owner and resolution status.
How Much Historical Salesforce Data Should Be Imported?
Import enough history to calculate every still-active obligation and explain every opening balance—but not automatically every record ever created.
Set the historical cutoff using the earliest of:
- the oldest open or adjustable commission period;
- the beginning of the longest clawback, cancellation or refund window;
- the oldest deal still relevant to renewal, expansion or multi-year crediting;
- the oldest unsettled dispute or prior-period adjustment;
- the period required for agreed audit, tax and control evidence;
- the start date needed to reproduce year-to-date attainment and accelerators.
For older closed periods, retain signed statements, payout totals and source snapshots in an auditable archive. Do not load unnecessary raw history simply because it exists. Large volumes increase reconciliation effort and may bring obsolete fields, duplicate identities and retired plan logic into the new model.
Salesforce’s own migration began by asking what data was needed, what was not needed, where it lived and whether it was clean and structured. It then used phased rollout and five stages of end-to-end testing. That is a stronger model for Salesforce integration with Spiff than a one-time bulk load followed by spot checking.
At cutover, reconcile at least record counts, total eligible value, credit allocation, attainment, commission expense and payout by period, plan and payee. Keep a signed cutoff record so late-arriving transactions can be identified and routed into prior-period processing.
How Should Booked, Invoiced and Collected Revenue be Distinguished?
Treat booking, invoice and collection as separate events—not as three labels for the same Opportunity amount.
| Event | Typical authoritative source | Required data |
| Booked | Salesforce Opportunity, Order or Contract | booking ID, booking date, booked amount, currency, status and credited parties |
| Invoiced | ERP or billing platform | invoice and line ID, source deal/order ID, invoice date, amount, currency, tax treatment and status |
| Collected | ERP, payment processor or accounts-receivable system | payment/application ID, invoice ID, receipt date, applied amount, currency and reversal status |
One booking can produce several invoices; one invoice can receive several payments; one payment can be applied across several invoices. Model those one-to-many and many-to-many relationships explicitly. The Spiff Salesforce integration should never assume that Opportunity.Amount proves an invoice was issued or cash was received.
Community questions expose this gap well. A RevOps practitioner looking for commission software wanted Salesforce data combined with product-usage activity and daily incentive updates; a respondent observed that the hard part is often making usage data accessible. A Quora question asking how to integrate QuickBooks and Salesforce is another useful demand signal: compensation inputs often cross the CRM-accounting boundary. The question—not an unverified Quora answer—is the relevant evidence here.
Check out these threads on Reddit n Quora
For a Salesforce integration with Spiff that pays on product usage, invoicing or collections, create stable external IDs and event dates in the originating system, then map those records into Spiff through the appropriate connector or webhook.
Which System Should Own the Final Commissionable Amount?
Spiff should own the derived commission calculation; it should not become the source of truth for raw revenue facts.
A practical ownership model is:
- Salesforce owns deal identity, customer, opportunity status, sales ownership and CRM classifications.
- The ERP or billing system owns invoices, credit memos, payments, collections and accounting status.
- HR or HCM owns employee identity, employment dates and formal organization data.
- A governed warehouse may own approved cross-system metrics such as normalized ARR or net new annual order value.
- Spiff owns compensation-specific eligibility, crediting, rate application, tiers, accelerators, adjustments and the resulting commissionable amount and payout.
In other words, the base amount should come from the system that authoritatively records the event; the final commissionable amount should be calculated in Spiff from governed inputs. If Finance already owns an approved commission basis in a warehouse, map that value and its lineage rather than recreating a competing definition in Salesforce.
Salesforce’s enterprise design illustrates attribute-level ownership: deal data originated in Salesforce, was aggregated in Snowflake, calculated in Spiff and paid through Workday, with validation at every handoff. A Spiff Salesforce integration should therefore have a source-of-truth matrix, not a vague declaration that one platform “owns the data.”
What Happens When a Synchronized Salesforce Field is Renamed or Deleted?
A label change may be harmless if the API name remains unchanged, but changing or deleting the source API field can leave a mapped connector field stale, break formulas or cause data to stop updating. Picklist-value changes can be just as serious when rules compare exact text.
Manage synchronized fields as a versioned data contract:
- Search the mapping spreadsheet, Spiff calculations, reports and reconciliations for every dependency.
- Create the replacement field and populate it before retiring the old field.
- Sync both fields in a test environment or controlled parallel run.
- Compare record counts, null rates, values and payout results.
- Update downstream calculations and obtain Finance approval.
- Deprecate the old field for a complete commission cycle before deletion.
Salesforce’s guidance for maintaining the Spiff connector notes that updating a connector does not automatically delete its mappings, fields or data. That protects against immediate loss but makes dependency review more important: an old field can remain visible while no longer receiving the intended source value.
User reports reinforce the operational risk. A G2 reviewer asked for faster synchronization and said correct Salesforce data could take too long to appear; a TrustRadius reviewer described manually finding and recalculating late opportunities. These are anecdotes, not product guarantees, but they show why the Salesforce integration with Spiff needs freshness monitoring, late-arrival reports and period-recalculation procedures.
How Should Refunds, Cancellations and Credits be Represented?
Represent them as immutable adjustment events linked to the original transaction. Do not overwrite the original sale or invoice amount, because doing so destroys the history needed to explain the original payment and later clawback.
Each refund, cancellation, credit memo or write-off record should include:
- its own unique external ID;
- the original booking, invoice, line or payment ID;
- adjustment type and reason code;
- effective date and accounting date;
- amount and currency;
- full or partial indicator;
- product and credited payee where required;
- approval and dispute status;
- the plan rule and period that process the adjustment.
The compensation plan must then state whether the event reduces attainment, commissionable value, payout or some combination; whether recovery is immediate or capped; and what happens after termination. A robust Spiff Salesforce integration preserves both the positive source event and the negative adjustment so a rep can trace the net result.
This is also where historical scope matters. If the longest refund or clawback window is 12 months, importing only the current quarter leaves Spiff without the original transaction needed to calculate and explain a valid reversal.
How Do Close Dates and Time Zones Affect Commission Periods?
First decide which business event determines the commission period. Opportunity.CloseDate is appropriate only when the plan says the booking or close date is the earning event. Invoice date, paid date, service-start date, activation timestamp or approval date may be correct for other plans.
For every date or timestamp in a Salesforce integration with Spiff, document:
- source field and data type;
- business meaning;
- source time zone;
- conversion to UTC;
- business-local date used for period assignment;
- fiscal calendar and period boundary;
- late-arrival and backdating policy;
- daylight-saving behavior for timestamped events.
Date-only fields deserve special care because they have no time-of-day or zone. Timestamped events should retain the original timestamp and offset, then derive the approved business date. Test records immediately before and after month, quarter and year boundaries in every relevant region.
Currency conversion adds another date dependency. Salesforce’s Spiff guidance says the conversion date selects the rate in effect at that time and identifies CloseDate or a statement-period date as common choices. It also warns that every rep used in preferred-currency calculations needs a preferred currency and that calculations should use consistent currencies to avoid mismatch errors.
The Spiff Salesforce integration mapping should therefore distinguish at least transaction date, earning date, statement period, conversion date and payout date. Treating them as one date creates unexplained period and foreign-exchange differences.
What Should a Salesforce-to-Spiff Data-Mapping Spreadsheet Contain?
The spreadsheet should be a living data contract that connects business policy to technical configuration. Salesforce explicitly recommends creating a spreadsheet of objects and fields before importing data into Spiff; expand that minimum into a workbook that can support design, testing, audit and change control.
At minimum, the field-mapping tab should contain:
| Column | What to record |
| Mapping ID | Stable identifier for discussion, testing and change requests |
| Business definition | Plain-language meaning of the field |
| Source system | Salesforce, ERP, HCM, warehouse, product system or other source |
| Source object and API name | Exact source table/object |
| Source field and API name | Exact field, including namespace where applicable |
| Record grain | What one row represents |
| Data type and format | Text, ID, decimal, currency, date, timestamp, Boolean or picklist |
| Required/null rule | When the value must exist and what null means |
| Primary/foreign key | Identity and relationship role |
| Spiff target object and field | Exact mapped destination |
| Transformation | Formula, lookup, normalization, sign, rounding or value translation |
| Source of truth | Team and system authorized to change the value |
| Plan usage | Rule, statement, report or reconciliation that consumes it |
| Effective-date rule | Which version applies at a given time |
| Sync mode and freshness | Batch, webhook or connector; expected latency and monitoring threshold |
| Duplicate/update/delete behavior | Upsert key, collision rule, reversal and deletion treatment |
| Security classification | Sensitivity and least-privilege access requirement |
| Validation rule | Count, total, referential, range, uniqueness or cross-system check |
| Test case and expected result | Input record and expected commission effect |
| Owner and approval | Business owner, technical owner and sign-off status |
| Change history | Version, date, reason and impacted periods |
Use separate workbook tabs for scope and plan requirements, object mapping, field mapping, picklist translations, user identity, source ownership, exception handling, test cases, reconciliations and change history.
A few sample rows make the standard concrete:
| Source | Spiff use | Key control |
| Opportunity.Id | Deal external ID | Unique, non-null and immutable |
| Opportunity.Amount or approved ARR field | Candidate booking basis | Reconcile to approved bookings; do not assume it equals invoices or cash |
| Opportunity.CloseDate | Earning or conversion date only when plan-approved | Boundary-test against fiscal periods |
| OpportunitySplit.SplitOwnerId | Credited payee | Must resolve to one active or historically valid Spiff user |
| ERP credit-memo ID | Negative adjustment external ID | Must link to the original invoice or booking |
The finished spreadsheet should allow a new administrator to answer four questions for every statement line: Where did this value come from? Why was it included? Which rule changed it? How was the final amount validated?
That is the real completion test for Salesforce integration with Spiff. A connector can move data without creating a trustworthy compensation process; a governed map makes the process explainable and repeatable.
Final Recommendation
Build the map from compensation events outward, keep each object at its natural grain, use immutable IDs, separate raw revenue facts from Spiff calculations, and preserve adjustments instead of rewriting history. Then validate the complete chain from Salesforce or another source through Spiff statements and into payroll or accounting.
If you’re looking for Spiff Salesforce integration for your organization, please contact us and get your free consultation booked with us today.


Leave Comment
Was this blog helpful?
Was this blog helpful?