Skip to content

Some sales are yours to book in full, and some are only the fee for arranging them.

When a third party helps deliver a good or service, IFRS 15 and ASC 606 ask one question about each specified good or service: did you control it before it reached the customer? A principal books the gross amount and shows the pass through as a cost. An agent books only the fee for arranging it. The teams that store that answer as a governed record present revenue from evidence rather than from whoever sent the invoice.

Every sale with a middle in it asks one question.

Plenty of revenue arrives with more than one party in the picture. A platform sells a developer software to a buyer. A retailer lists a supplier product and takes the order. A services firm bundles a partner subscription into its own package. In each case money comes in and money goes out to the other party, and the entity keeps the difference. The accounting question is not how much you keep. It is how much of the sale is your revenue. If you controlled the good or service before it reached the customer, the whole sale is your revenue and the amount you pass on is a cost. If you did not, only your fee for arranging it is revenue.

That is the principal versus agent assessment, and the amount at stake is not small. Take a sale of 100 where 85 goes to the other party and 15 stays with you. As a principal you report 100 of revenue and 85 of cost of sales. As an agent you report 15 of revenue and no cost of sales. The margin is 15 either way, so profit does not move, but reported revenue is 100 or 15, a gap the size of the whole third party cost. For any business measured on its top line, that is the difference between two very different-looking companies, struck on a judgement that has to be made sale by sale.

This is worth revisiting now because the standard setters just took a hard look at it and left it in place. The IASB completed its post-implementation review of IFRS 15 on 30 September 2024 and concluded the standard is working as intended, with no fundamental questions about its core principles. In the same breath it kept a short list of application matters for its next agenda consultation, and assessing control to determine whether an entity is a principal or an agent was on it. The board staff paper that fed the review records principal versus agent as one of the most common topics raised, hardest in e-commerce platforms, internet advertising, software, telecom, and fintech, exactly the models that have grown fastest. The requirements are converged with US GAAP under Topic 606, so the same test decides gross or net for filers on both sides.

The review verdict is the useful part. The principle is sound and the difficulty is in applying it to complex fact patterns, which is precisely the case for holding the answer as data rather than re-deriving it every quarter. Read as a systems problem, gross or net becomes a governed attribute on the record: a revenue role per specified good or service and flow, backed by the three control indicators captured as evidence, with the gross and the net amounts held as separate fields. The rest of this piece walks through what the standard actually asks, then gets concrete about the revenue record worth building so the presentation is a lookup with an audit trail.

What the standard asks, step by step.

The assessment is short and the two frameworks agree on it. IFRS 15 sets it out in paragraphs B34 to B38. FASB ASU 2016-08 wrote the same requirements into ASC 606-10-55-36 to 55-40, and the two are converged, so a company reporting under either reaches the answer the same way. The table below sets out each step, where it sits in the guidance, what the standard asks, and what it should produce on the record.

The steps the principal versus agent assessment adds to revenue recognition, with the IFRS 15 and ASC 606 reference for each and what each should produce as data. The IFRS 15 requirements were read directly from the IASB staff paper Agenda reference 6B, and the US GAAP requirements from FASB ASU 2016-08, both downloaded as PDFs and read rather than summarised.
StepWhere it sitsWhat the standard asksWhat it produces in the ledger
Identify each specified good or serviceIFRS 15 B34, B34A; ASC 606-10-55-36When another party is involved, determine the nature of your promise for each specified good or service: to provide that good or service yourself, or to arrange for the other party to provide it. The unit of account is each specified good or service, which can be a distinct good or service or a distinct bundle.A revenue role assessed at the grain of each specified good or service and flow, rather than one policy for the whole entity, so a contract can hold more than one answer.
Test control before transferIFRS 15 B35, B36; ASC 606-10-55-37, 55-38You are the principal if you control the specified good or service before it is transferred to the customer, and the agent if you do not. Control is the principle. A principal promises to provide the good or service, an agent promises to arrange for another party to provide it.A recorded control conclusion per specified good or service, with the reasoning attached, rather than a presentation decided by who invoices the customer or by habit.
Recognise gross as principal, net as agentIFRS 15 B35, B36; ASC 606-10-55-37, 55-38A principal recognises revenue in the gross amount of consideration for the good or service transferred. An agent recognises revenue in the fee or commission it expects for arranging the other party to provide the good or service.Two amounts on the record, the gross consideration and the net fee, held as separate fields, so the presentation is a lookup and the amount owed to the other party is visible as a pass through rather than netted by hand.
Weigh the control indicators, do not tally themIFRS 15 B37, B37A; ASC 606-10-55-39, 55-39AThree indicators support the control assessment: whether the entity is primarily responsible for fulfilling the promise, including the good or service meeting the customer specification; whether it has inventory risk before or after transfer; and whether it has discretion in establishing the price. The indicators may be more or less relevant by contract and do not override the control conclusion.The three indicators captured as evidence per flow, each with its answer and its source, so the conclusion reads from recorded facts rather than from a checklist score that treats every indicator as equal weight.
Let one contract hold more than one roleIFRS 15 B34A; ASC 606-10-55-36Assess each specified good or service separately. An entity can be a principal for some specified goods or services in a contract and an agent for others.A line or obligation grain on the revenue record, so a single order can present some lines gross and others net without one answer being forced onto the whole contract.
Disclose the judgement and keep the workingIFRS 15.123; ASC 606-10-50Revenue disclosures include the significant judgements made in applying the standard that affect the amount and timing of revenue. For these arrangements that includes the principal versus agent determination.The assessment and its indicators stored as the evidence behind the disclosure, so the significant judgement note reads from the same record the ledger used rather than from a memo rebuilt each year.
The steps the principal versus agent assessment adds to revenue recognition, with the IFRS 15 and ASC 606 reference for each and what each should produce as data. The IFRS 15 requirements were read directly from the IASB staff paper Agenda reference 6B, and the US GAAP requirements from FASB ASU 2016-08, both downloaded as PDFs and read rather than summarised.

Two points are worth drawing out. The first is that control is the test and the indicators only support it. IFRS 15 paragraph B37 and ASC 606-10-55-39 list three, primary responsibility for fulfilling the promise, inventory risk, and discretion in establishing the price, and both standards then say the indicators may be more or less relevant depending on the contract and do not override the control conclusion. Treating them as a scorecard, where two out of three wins, reaches confident answers the standard does not support. They are inputs to a judgement about control, not a substitute for it.

The second is that the unit of account is the specified good or service, not the contract. The entity determines the nature of its promise for each specified good or service, and it can be a principal for some and an agent for others in the same arrangement. A bundle that mixes an entity own service with a partner subscription can carry both roles at once, one line gross and one line net. That is why the answer belongs on the line or obligation rather than on a company-wide policy or a contract header. Miss this and either the whole contract gets forced into one presentation, or the mix becomes an untraceable manual adjustment at close.

Gross or net, read as a governed record.

A worked example makes the record concrete. A marketplace resells a third party software licence to a customer for 100, remits 85 to the developer, and keeps 15. If the marketplace controls the licence before it transfers, primarily responsible to the customer for the licence meeting its specification, committed to the licence block before the order, and setting the price, then it is the principal and reports 100 of revenue with 85 of cost of sales. If it does not control the licence, it is the agent and reports the 15 fee. The same order might also include priority support that the marketplace merely arranges from a third party, where it is an agent and books only that arranging fee. One order, two roles, decided per specified good or service.

Here is that logic expressed as a record. The revenue role carries a control conclusion and its basis. The three indicators sit beneath it as evidence, each with an answer and the fact behind it. The presentation block holds the gross consideration, the amount owed to the other party, and the net fee as separate figures, with the recognised revenue following the conclusion. A second line on the same contract can carry a different role, and a completeness rule names any flow whose presentation and evidence disagree.

A revenue role record for a specified good or service

# Revenue role governance for a specified good or service
# Figures are placeholders for shape, not real values.

contract: "ORD-48213"
customer: "end customer"
flow: "marketplace resale of a third party software licence"
owner: "revenue.accounting@entity"
version: 2026.3

specified_good_or_service: "third party software licence, 12 month term"
unit_of_account: "assessed on its own, separate from the support line below"

control_assessment:
  conclusion: principal            # controls the licence before transfer
  basis: "IFRS 15 B35 and B36; ASC 606-10-55-37"
  indicators:                      # IFRS 15 B37; ASC 606-10-55-39, support not tally
    primarily_responsible:
      answer: true
      evidence: "entity is responsible to the customer for the licence meeting spec"
    inventory_risk:
      answer: true
      evidence: "entity commits to the licence block before the customer order"
    pricing_discretion:
      answer: true
      evidence: "entity sets the price the customer pays"
  reviewed_on: 2026-06-30

presentation:
  gross_consideration: 100.00      # revenue if principal
  amount_to_other_party: 85.00     # cost of sales, the pass through
  net_fee: 15.00                   # revenue if agent
  recognised_revenue: 100.00       # follows the conclusion above
  basis: "principal recognises gross, agent recognises the net fee"

# same contract, a second line can carry a different role
second_line:
  specified_good_or_service: "priority support arranged from a third party"
  control_assessment: { conclusion: agent }   # does not control the support
  recognised_revenue: 4.00         # the arranging fee only

completeness_control:
  rule: >
    every revenue flow has a recorded control conclusion, and no flow
    presents gross while its indicators point to agent, or net while
    they point to principal
  blocked:
    - flow: "reseller SKU line 7742"
      presented: gross
      indicators_point_to: agent   # no inventory risk, no pricing discretion
      status: blocked              # presentation and recorded evidence disagree

The blocks at the end are what keep it honest. Holding the gross, the net fee, and the amount to the other party as three fields means the presentation is reversible and the pass through is visible, rather than collapsed into whichever figure the current booking used. Storing the indicators as evidence, not as a tally, keeps the conclusion tied to facts a reviewer can read. The second line shows a single contract carrying both roles without a manual adjustment. And the blocked list is the control: while any flow presents gross where its indicators point to agent, or has no recorded conclusion at all, the presentation is ahead of the evidence, and the list tells you exactly which flow to resolve. None of this is elaborate. It is ordinary revenue discipline pointed at a judgement most systems never stored.

How the control test routes a specified good or service to gross revenue as principal or the net fee as agent under IFRS 15 and ASC 606A flow that starts from a specified good or service in an arrangement where another party is involved. A control test asks whether the entity controls the specified good or service before it is transferred to the customer. If it does, the entity is a principal and recognises the gross amount of consideration as revenue, with the amount owed to the other party shown as cost of sales. If it does not, the entity is an agent and recognises only the fee or commission for arranging the other party to provide the good or service. Three indicators support the control test: whether the entity is primarily responsible for fulfilling the promise, whether it has inventory risk, and whether it has discretion in establishing the price. A guard beneath shows that the assessment is made for each specified good or service, so a single contract can be principal on one line and agent on another. A final note states that completeness is one query: any flow with no recorded control conclusion, or any flow whose presentation disagrees with its indicators.ONE CONTROL TEST DECIDES GROSS OR NETSPECIFIED GOOD OR SERVICEAnother party is involvedin providing itAssessed on its own,not per contractCONTROL BEFORE TRANSFER?Do you control it beforeit reaches the customer?Indicators support this:responsibility, risk, priceYES: PRINCIPALNO: AGENTGROSS AS PRINCIPALGross consideration to revenue,amount to the other party as costNET AS AGENTOnly the fee or commission forarranging the other party is revenueGUARD: ONE CONTRACT CAN HOLD BOTH ROLESThe test is run for each specified good or service, so a single order can present one line gross as a principaland another line net as an agent. The role belongs on the line or obligation, not on the contract header, so abundle that mixes your own service with a third party one books each part on its own footing.THE CONTROL THAT SAYS IT IS READYCompleteness is one query: any flow with no recorded control conclusion, or any flow that presents gross whileits indicators point to agent, or net while they point to principal. While that list has entries, the presentation is ahead of the evidence.
The control test routes each specified good or service to gross revenue as a principal, with the amount owed to the other party shown as cost of sales, or to the net fee as an agent. The three indicators support the test rather than deciding it by tally. Because the test is per specified good or service, one contract can hold both roles. The rule references are IFRS 15 B34 to B37A and ASC 606-10-55-36 to 55-39A.

An implementation checklist.

  1. 1.Put the revenue role on the record, per specified good or service and flow. The standard asks the question for each specified good or service, not for the company. Store a principal or agent conclusion at the grain a flow actually books, a marketplace order, a reseller SKU, a drop-ship line, an arranged service, so the presentation is read from the record rather than reasoned out again each period.
  2. 2.Anchor the role to control, then keep the indicators as the working. The conclusion is a control decision: did you control the specified good or service before it reached the customer? Record that decision and its basis, then attach the three indicators, primary responsibility, inventory risk, and pricing discretion, each with an answer and a source. The indicators support the decision and do not replace it, so store them as evidence, not as a score.
  3. 3.Hold the gross and the net as two fields. Keep the gross consideration and the net fee or commission on the record as separate amounts, with the amount owed to the other party alongside. A principal books the gross and shows the pass through as cost of sales; an agent books the net fee. When both amounts are stored, moving between the two presentations is a lookup, and the difference is visible rather than buried in a manual net.
  4. 4.Model the contract so it can carry more than one role. Because the assessment is per specified good or service, a single order can be principal on one line and agent on another. Put the role at the line or obligation grain, not on the contract header, so a bundle that mixes your own service with a third party one books each part on its own footing.
  5. 5.Write the indicator questions down in plain terms and answer them from facts. Primary responsibility is about who the customer holds to account for the good or service meeting its specification. Inventory risk is about who is exposed before or after transfer, including a right of return. Pricing discretion is about who sets the price the customer pays. Capture the answer and the evidence for each, so a reviewer sees the facts, not an assertion.
  6. 6.Route the presentation from the role automatically. Once the role is on the record, the booking should follow it: gross to revenue with the pass through to cost of sales for a principal, the net fee to revenue for an agent. When the presentation is derived from the stored role rather than set on each transaction, a change in the assessment updates the booking in one place and leaves an audit trail.
  7. 7.Prove it with one completeness query at close. The control that matters is short: any revenue flow with no recorded control conclusion, and any flow that presents gross while its indicators point to agent or net while they point to principal. While that list has entries, revenue is being presented on a basis the evidence does not support. When it is empty, the presentation and the working agree, and the check can run every close rather than once in a restatement.

Failure modes, framed so you can avoid them.

  • Deciding gross or net by who invoices the customer. The most common shortcut is to book gross whenever the entity bills the customer and collects the cash, and net when it does not. Billing mechanics are not the test. The standard asks whether the entity controlled the specified good or service before transfer, and an entity can invoice and collect while acting as an agent, or collect only a net settlement while acting as a principal.
  • Setting one principal or agent policy for the whole company. A single entity-level answer cannot be right when the assessment is per specified good or service. A model that stamps every sale the same way will overstate revenue on the flows where it is really an agent and understate it on the flows where it is really a principal, and it hides the mix from anyone reviewing it.
  • Treating the three indicators as a checklist to be tallied. The indicators support the control assessment; they are not a vote where two out of three wins. IFRS 15 and Topic 606 both say the indicators may be more or less relevant depending on the contract and do not override the control conclusion. A system that scores them and picks the majority will reach confident answers that the standard does not support.
  • Losing the working once the conclusion is reached. Teams often record the answer, principal or agent, and discard the reasoning. When the auditor or a regulator asks why, the judgement has to be reconstructed from memory. Storing the indicators and their evidence next to the conclusion turns the significant judgement disclosure into a read rather than a rebuild.
  • Netting the pass through by hand instead of holding both amounts. When only one figure is stored, moving from gross to net or back means a manual re-post, and the amount owed to the other party disappears into the net. Holding the gross, the net fee, and the amount to the other party as separate fields keeps the presentation reversible and the pass through visible.
  • Forgetting that inventory risk can arise after transfer. Inventory risk is not only about holding stock before a sale. A right of return exposes the entity after transfer too, and that exposure is part of the assessment. A model that only looks at pre-sale stock misses a fact the standard names explicitly.
  • Assuming a digital or intangible item has no control question. The hardest fact patterns the review flagged are in software, platforms, internet advertising, and other digital arrangements, where there is no physical good to point at. Control still has to be assessed for the specified service or right, and skipping the question because nothing is warehoused is exactly where diversity in practice shows up.
  • Letting the assessment go stale as the arrangement changes. A role set when a contract was signed can be wrong after the commercial terms change, a fulfilment partner is added, or pricing control moves. Without a review date and a trigger to reassess, the record keeps presenting on last year basis while the facts have moved underneath it.

What this asks of the data model.

  • The unit of account is the specified good or service, not the contract. Control, the indicators, and the gross or net conclusion all live at the grain of each specified good or service and flow. Modelling the record at that grain is what lets one order be principal on one line and agent on another, which is exactly the case the standard describes.
  • The revenue role is a stored conclusion with a basis, not a derived flag. Whether the entity is a principal or an agent is a judgement about control, recorded with its reasoning. Deriving it on the fly from billing direction or cash flow misses the test, because those are not what the standard asks about.
  • The three indicators are evidence fields, each with an answer and a source. Primary responsibility, inventory risk, and pricing discretion are stored per flow, each carrying its answer and the fact behind it. Holding them as structured evidence, rather than as a single yes or no, is what lets a reviewer see why the conclusion went the way it did.
  • The gross and the net are two amounts, held side by side. The gross consideration, the net fee, and the amount owed to the other party are separate fields on the record. Storing all three keeps the presentation reversible and shows the pass through, rather than collapsing to whichever number the current presentation happens to use.
  • The presentation is derived from the role, not set per transaction. When the booking reads the stored role, gross with a pass through for a principal and the net fee for an agent, a change in the assessment updates the ledger in one place. A model that sets the presentation transaction by transaction scatters the judgement and makes a reassessment a data cleanup.
  • Indicators do not carry equal weight, and the record should not imply they do. The standard says different indicators may be more persuasive in different contracts. A data model that reduces them to a count encodes a rule the standard rejects, so the record should hold the indicators as inputs to a judgement, with room for the judgement itself.
  • A review date and a reassessment trigger belong on the record. Because a role can go stale when terms change, the record needs a last reviewed date and a way to flag a flow for reassessment when a fulfilment partner, a return right, or pricing control changes. That keeps the presentation tied to current facts rather than to the day the contract was signed.
  • Completeness reduces to one testable query. Because the rule is short, any flow with no control conclusion, and any flow whose presentation disagrees with its indicators, the control is a single exception list. That query is the readiness signal, and it can run at every close rather than surfacing in a restatement.

The audit evidence to keep.

  • The revenue role for each specified good or service and flow, principal or agent, with the control conclusion and the basis for it, so the presentation can be tied to a documented judgement rather than to billing direction.
  • The three control indicators for each flow, primary responsibility, inventory risk, and pricing discretion, each with its answer and the fact behind it, evidencing that the indicators were considered as support for the control conclusion and not tallied.
  • The gross and net amounts for a sample of flows, showing the gross consideration, the amount owed to the other party, and the net fee, so a reviewer can confirm a principal booked the gross with the pass through to cost of sales and an agent booked the fee.
  • A worked case of a single contract carrying more than one role, showing one line presented gross and another net, evidencing that the assessment was made per specified good or service rather than for the contract as a whole.
  • The derivation from role to presentation, showing that the booking follows the stored conclusion, so a change in the assessment can be traced to the ledger entries it moved.
  • The significant judgement disclosure for principal versus agent, drawn from the same stored assessment and indicators, so the note and the ledger read from one record.
  • The review dates and any reassessment triggers for flows whose terms changed, evidencing that a role set at signing was revisited when a fulfilment partner, a return right, or pricing control moved.
  • The completeness exception report at close, ideally empty, listing any flow with no control conclusion or any flow whose presentation disagrees with its indicators, so a reader can see the two conditions were checked before the books closed.

Questions worth asking in your own review.

  • For each revenue flow with a third party in the middle, can we state whether we are the principal or the agent, and point to the control conclusion behind it?
  • Is that conclusion recorded per specified good or service, so a single contract can be principal on one line and agent on another?
  • Do we store the three indicators, primary responsibility, inventory risk, and pricing discretion, as evidence with a source, or only as a final answer?
  • Do we hold the gross consideration, the amount owed to the other party, and the net fee as separate fields, so the presentation is reversible and the pass through is visible?
  • Does the booking derive from the stored role, so a change in the assessment updates the ledger in one place with a trail?
  • Have we mistaken who invoices the customer for who controls the good or service, anywhere in the current presentation?
  • When a fulfilment partner, a return right, or pricing control changes, is the affected flow flagged for reassessment, and is the review date on the record?
  • Could we produce, today, a list of every flow with no recorded control conclusion and every flow whose presentation disagrees with its indicators?

What this adds up to.

The principal versus agent assessment is a good piece of standard setting, and one of the places where IFRS and US GAAP say the same thing in almost the same words. It stops a business from reporting a partner sale as its own revenue when it only arranged the sale, and it lets a genuine reseller show the full value it stands behind. The review that just concluded confirmed the principle holds. What it flagged is that applying it to platforms, bundles, and digital arrangements is where teams struggle, and that is a systems and data gap as much as a technical accounting one.

The build that makes it easy is small and worth having in any year. Put the revenue role on the record per specified good or service and flow. Anchor it to a control conclusion and keep the three indicators as the working. Hold the gross and the net as separate fields, so the pass through stays visible and the presentation stays reversible. Model the contract so it can carry both roles at once. Do that and the booking, the disclosure, and the review all read from one record, and an auditor who asks why a sale was reported gross gets an answer that does not depend on anyone remembering the call.

If there is one place to start, run the completeness query against your own flows this quarter: any flow with no recorded control conclusion, and any flow that presents gross while its indicators point to agent or net while they point to principal. For a business with few third party arrangements that list is short and the assessment is a note to file. For a platform or a reseller it is the work, and it is worth doing while the quarter is open, because the payoff is a top line you can stand behind and a judgement you can show.

Sources.

The principal versus agent requirements, the control test, the gross and net recognition, and the three indicators were read directly from the IASB staff paper Agenda reference 6B and from FASB ASU 2016-08, both downloaded as PDFs and read rather than summarised, so the paragraph references B34 to B37A and ASC 606-10-55-36 to 55-39A rest on the primary text. The conclusion that IFRS 15 is working as intended, and the decision to carry the control matter to the next agenda consultation, were read from the IFRS 15 post-implementation review project summary and feedback statement and cross checked against the IASB news announcement and the completed project page. A practitioner walk-through was used only to corroborate the standard-setter text. No embedded posts from X appear in this article, because no public post on this topic could be verified as current, relevant and authentic at the time of writing, and an unverified embed is worse than none. Nothing here is accounting, tax or legal advice for a specific company. The figures in the worked example and the model are placeholders for shape rather than real values, and whether an entity is a principal or an agent for a given good or service depends on that entity own facts applied under the relevant standard.