Headed to SuiteWorld? Find us at booth 442 — Oct 25–28, Las Vegas.  Find us at SuiteWorld →
Talk to an Expert
← Back to Answers

What Does NetSuite Need from Salesforce to Recognize Revenue Correctly?

A three-year deal closes in Salesforce at $500,000: a $450,000 software subscription and a $50,000 implementation. The sales order lands in NetSuite the same day. At the end of the first quarter, Finance has billed $200,000 and recognized about $92,600. Every one of those numbers can be right. Whether they are depends almost entirely on what the Salesforce deal carried into NetSuite when it arrived.

Salesforce and NetSuite each do their own job well. The Salesforce quoting layer, whether Salesforce CPQ today or Agentforce Revenue Management going forward, is built to price and close the deal. NetSuite Advanced Revenue Management (ARM) is built to allocate and recognize that deal's revenue under ASC 606. Salesforce NetSuite revenue recognition works when the handoff between them carries the right inputs. This article lists those inputs, explains what NetSuite does with each one, and shows how the list changes when a contract is amended.

What Does NetSuite Need from Salesforce to Recognize Revenue Correctly?

NetSuite needs each Salesforce deal to arrive as a source transaction with one line per distinct performance obligation, mapped to correctly configured items, with line-level prices, service start and end dates, the attributes NetSuite uses to look up standalone selling price, and, for amendments, a link to the original contract and the change's effective date.

Those inputs fall into three groups. Structure tells NetSuite what was sold: the transaction, the customer, the legal entity, and the lines. Timing tells NetSuite when each obligation is delivered: the service dates and, separately, the billing schedule. Context tells NetSuite how the deal relates to everything else: the pricing attributes behind fair value, any variable components such as usage or commitments, and the original contract when the deal is a change rather than a new sale.

Why Can't NetSuite Recognize a Multi-Part Deal from the Total Alone?

NetSuite can recognize a single line, but it can't correctly recognize a multi-part deal from one total, because ASC 606 allocates and recognizes revenue per performance obligation, and NetSuite ARM does the same. Each line becomes a revenue element with its own rule and dates. One $500,000 line gives ARM one element and no basis for splitting it.

In NetSuite ARM, the source transaction (typically the sales order) generates revenue elements, and those elements are grouped into a revenue arrangement. Oracle's documentation explains that, by default, revenue arrangements are created based on the configuration on the item record. Each item carries a revenue recognition rule that defines the recognition method, the amount source, and where the start and end dates come from. Much of the accounting policy for a sale is configured on the item and its rules, which is why the mapping from a Salesforce product to a NetSuite item matters so much.

NetSuite ARM is offered as Essentials plus a Revenue Allocation add-on, and the allocation feature uses fair value price lists to distribute the transaction price across elements. That is ASC 606 step four, allocating the transaction price on a relative standalone selling price basis, done inside NetSuite. It only works if the deal arrives with the obligations already separated into lines.

What Does Each Salesforce Input Do in NetSuite ARM?

Each input on a Salesforce deal drives a specific NetSuite ARM behavior: which items and rules apply, how the price is allocated, when recognition starts and ends, and how a change is treated. When an input is missing or wrong, ARM still runs, but it runs on the wrong facts, and Finance corrects the result at close.

Input from the Salesforce deal What NetSuite uses it for What happens if it's missing or wrong
Customer and legal entity Posts the transaction to the right customer and subsidiary books Revenue posts to the wrong entity and the transaction has to be corrected
Source transaction type Starts the ARM process (typically a sales order) Revenue elements aren't created, or are created on a later transaction than intended
One line per performance obligation Creates one revenue element per obligation Bundled lines can't be allocated or recognized on separate patterns
Product-to-item mapping Applies the item's recognition rule, accounts, and fair value settings The right amount is recognized on the wrong pattern, such as ratably instead of on delivery
Line quantity, price, and discounts Sets the transaction price that ARM allocates A discount that sits outside the amount NetSuite allocates overstates recognized revenue
Pricing attributes behind SSP Lets NetSuite select the right standalone selling price for allocation Allocation uses the wrong SSP, so each obligation's revenue is wrong even when the total is right
Service start and end dates per line Feeds the start and end dates of each revenue recognition plan Using the close date instead of the service start date shifts revenue into the wrong periods
Billing schedule Drives invoicing, separately from recognition Invoices go out on the wrong cycle; billing and revenue get confused with each other
Variable components (usage, commitments) Shows Finance which consideration depends on future usage or true-ups Usage and commitment terms aren't visible, so the variable consideration treatment can't be applied consistently
Original contract reference and effective date (amendments) Ties a change to the existing arrangement so the right modification treatment applies A change is booked as an unrelated new sale, or the original quantity is counted twice

Two of these rows are common sources of trouble. The first is line structure. Deals are sometimes quoted as a bundle because it's simpler for the customer, and that's a reasonable commercial choice. The structure just has to be preserved underneath the bundle so NetSuite still receives one line per obligation. The second is dates. Salesforce records both the close date and, on quote and order lines, service start and end dates. NetSuite needs the line dates, which often differ from the close date and sometimes differ from line to line, so the handoff has to pass those rather than the close date. When Finance does have to post a manual journal entry at close, work backward from it: it usually points to the specific input in the table that didn't make the trip.

Who Should Own Standalone Selling Price: Salesforce or NetSuite?

Standalone selling price is an accounting estimate, so Finance owns it, not the quote. Some teams maintain it in NetSuite's fair value price lists, while others keep a separate SSP analysis and load the results into NetSuite. Salesforce's role is to carry the negotiated price and the deal attributes that determine which SSP applies.

ASC 606 defines standalone selling price as the price at which an entity would sell a promised good or service separately to a customer. The best evidence is an observable price from standalone sales. When that doesn't exist, Finance estimates it using an approach such as adjusted market assessment or expected cost plus a margin, documents the method, and reviews it periodically.

Negotiated prices aren't SSP, but they aren't irrelevant either. When a product is sold on its own, the prices actually charged, discounts included, are the evidence Finance uses to set SSP. Many companies express SSP as a range rather than a single number and use the contract price when it falls inside that range. One heavily discounted deal doesn't reset SSP by itself; a pattern of pricing over time can, which is why the analysis is revisited.

Three practical points follow for the handoff:

List price isn't automatically SSP. The list price in a Salesforce price book is a commercial starting point. It can serve as SSP only when it reflects what customers actually pay in standalone sales, such as a self-serve product sold at list. Using it as fair value by default is a shortcut auditors tend to question.

The attributes behind SSP have to make the trip. If SSP varies by customer segment, region, or deal size, NetSuite needs those attributes on the transaction to select the right fair value. When one is missing, allocation uses the wrong SSP and each obligation's revenue is off, even though the deal total is correct.

Allocation only matters on multi-obligation deals. A deal with a single performance obligation needs no allocation. And in NetSuite, allocation across elements runs through the Revenue Allocation feature, so it applies only where that feature is in use.

How Do the Inputs Change When a Contract Is Amended?

When a contract is amended, NetSuite also needs to know which existing contract the change belongs to, its effective date, and exactly what changed. Those facts decide whether ASC 606 treats the change as a separate contract, prospectively, or as a cumulative catch-up, and NetSuite can only reflect that treatment if the change arrives linked to the original.

ASC 606 sets out the options in two paragraphs. Under 606-10-25-12, a modification is a separate contract when it adds distinct goods or services at a price that reflects their standalone selling price. When it doesn't meet that test, 606-10-25-13 applies: the change is accounted for prospectively if the remaining goods or services are distinct from those already transferred, as a cumulative catch-up if they aren't, or as a combination of the two.

For most SaaS amendments, the answer is one of the first two. Deloitte's guidance on cloud-based hosted software arrangements notes that SaaS modifications are generally accounted for either as a separate contract under 25-12 or prospectively under 25-13(a), because the services provided after the modification are typically distinct from those already provided. Cumulative catch-up is the less common case for subscription software, though it does arise.

That's why amendment inputs matter so much. A seat add priced at standalone selling price can correctly arrive as its own new sale. A seat add priced below standalone selling price usually needs prospective treatment, which means NetSuite has to combine the remaining value of the original contract with the change, a task ARM supports by merging arrangements. Either way, the change has to arrive with:

  • A reference to the original contract, so NetSuite can find the existing arrangement.
  • The effective date of the change, so recognition shifts from the right day.
  • A clear statement of what changed, whether sent as the change alone or as a revised contract linked to the original, so the original quantity isn't counted twice.
  • The price of the change, so Finance can compare it to standalone selling price and choose the right treatment.

We cover the operational side of amendments, including cancel-and-rebill patterns, in how Salesforce-to-NetSuite integrations handle contract amendments.

What Does One Deal Look Like from Salesforce to NetSuite?

Follow one deal through the handoff: the booking in Salesforce, the allocation by standalone selling price, the billing schedule, and recognition at quarter end. The three numbers differ by design, and with the right inputs each one traces back to the same deal.

Take the deal from the opening. The customer signs on January 1 for a three-year subscription at $450,000 ($150,000 a year, billed annually in advance) and a $50,000 implementation, billed at signing and completed in the first quarter. Assume Finance has set standalone selling prices of $480,000 for the three-year subscription and $60,000 for the implementation, and has concluded the implementation is a distinct performance obligation. That last assumption varies: many SaaS implementations are not distinct from the subscription and are recognized over the subscription term instead.

Measure Amount How it's calculated
Booking (Salesforce) $500,000 $450,000 subscription + $50,000 implementation
Allocated to subscription $444,444 500,000 × (480,000 ÷ $540,000 total SSP)
Allocated to implementation $55,556 500,000 × (60,000 ÷ $540,000 total SSP)
Billed in Q1 $200,000 First annual subscription invoice + implementation invoice
Recognized in Q1 $92,593 444,444 × 3/36 months ($37,037) + implementation complete ($55,556)

Notice that the implementation recognizes $55,556, not the $50,000 on the quote, because allocation follows standalone selling price rather than line price. That's correct under ASC 606, and it only happens if the deal arrives as two lines, mapped to items with the right rules and fair value inputs, with a January 1 service start date. Send the same deal as a single $500,000 line, and NetSuite recognizes the whole amount on one pattern. If that pattern is ratable over 36 months, Q1 revenue comes out at about $41,667 instead of $92,593. The booking is still $500,000, but the recognized revenue for the quarter is wrong.

The example is illustrative. Your own SSPs, performance obligation conclusions, and recognition patterns depend on your contracts and accounting policies.

Key Takeaways

Accurate Salesforce NetSuite revenue recognition depends on the structure a Salesforce deal carries, not on its total. NetSuite ARM needs one line per performance obligation, mapped to items with the right recognition rules, line-level prices, service start and end dates, and the pricing attributes used to select standalone selling price. Finance owns SSP as an accounting estimate, and Salesforce should carry the attributes that select it. Amendments add one more requirement: a link to the original contract, an effective date, and a clear record of what changed, so NetSuite can apply the right ASC 606 modification treatment. When those inputs arrive intact, booking, billing, and recognized revenue differ for the right reasons and each one traces back to the same deal. For the broader picture of why these handoffs break down, see what breaks between Salesforce and NetSuite, and for teams moving to Agentforce Revenue Management, see Agentforce Revenue Management and NetSuite.

Frequently asked questions

What does NetSuite need from Salesforce to recognize revenue correctly?

NetSuite needs each deal as a source transaction with one line per distinct performance obligation, mapped to correctly configured items, plus line-level prices, service start and end dates, and the attributes used to look up standalone selling price. Amendments also need a link to the original contract and the change's effective date.

Why can't NetSuite recognize revenue from the total deal value?

ASC 606 allocates and recognizes revenue per performance obligation, and NetSuite ARM creates one revenue element per transaction line. A single bundled line gives ARM one element, so it can't allocate the price across obligations or recognize each on its own pattern.

Should standalone selling price be set in Salesforce or NetSuite?

Standalone selling price is an accounting estimate owned by Finance, maintained either in NetSuite's fair value price lists or in a separate SSP analysis loaded into NetSuite. Salesforce carries the negotiated price and the deal attributes, such as segment, region, or deal size, that determine which SSP applies.

How are SaaS contract amendments treated under ASC 606?

Under ASC 606-10-25-12 and 25-13, a modification is a separate contract if it adds distinct services at standalone selling price, otherwise it's accounted for prospectively or as a cumulative catch-up. Most SaaS amendments are either separate contracts or prospective, because the remaining services are typically distinct.

Why does recognized revenue differ from what Salesforce booked?

Booking is the contract value at signing. Recognized revenue is the portion earned as each obligation is delivered, allocated by standalone selling price. A three-year subscription booked at signing recognizes over 36 months, so the two differ by design. The goal is that each number traces back to the same deal.

Get the Salesforce-to-NetSuite handoff right — at the transaction, line, and SSP level.

See how Continuous structures Salesforce deal data to meet NetSuite Advanced Revenue Management's requirements, from performance obligation line structure to contract amendments.

Talk to an Expert Request a Demo