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.
| Step | Where it sits | What the standard asks | What it produces in the ledger |
|---|---|---|---|
| Identify each specified good or service | IFRS 15 B34, B34A; ASC 606-10-55-36 | When 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 transfer | IFRS 15 B35, B36; ASC 606-10-55-37, 55-38 | You 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 agent | IFRS 15 B35, B36; ASC 606-10-55-37, 55-38 | A 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 them | IFRS 15 B37, B37A; ASC 606-10-55-39, 55-39A | Three 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 role | IFRS 15 B34A; ASC 606-10-55-36 | Assess 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 working | IFRS 15.123; ASC 606-10-50 | Revenue 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. |
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 disagreeThe 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.
An implementation checklist.
- 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.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.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.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.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.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.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.
- IFRS Foundation, Project Summary and Feedback Statement, Post-implementation Review of IFRS 15 Revenue from Contracts with Customers, September 2024. Downloaded as a PDF and read directly rather than through a summariser, per the primary source rule. Source for the overall conclusion that the requirements in IFRS 15 are working as intended with no fundamental questions or fatal flaws, and for the short list of matters classified as low priority that the IASB decided to consider in its next agenda consultation, including assessing control over services and intangible assets to determine whether an entity acts as a principal or an agent, reporting consideration payable to a customer, and applying IFRS 15 with IFRIC 12, IFRS 10 and IFRS 11
- IFRS Foundation, IASB staff paper, Agenda reference 6B, Post-implementation Review of IFRS 15, Principal versus agent considerations, February 2024. Downloaded and read directly. Source for the summary of the IFRS 15 requirements read from the paper itself: paragraph B34 and B34A on identifying each specified good or service and determining the nature of the promise, paragraphs B35 and B36 that a principal controls a good or service before transfer and recognises the gross amount while an agent does not control it and recognises the fee or commission for arranging it, and the paragraph B37 indicators of control. Also the source for the feedback that principal versus agent was one of the most common application matters raised, the industries where it is hardest, and the staff recommendation to classify the control matter as low priority and consider it in the next agenda consultation
- IFRS Foundation, news, IASB review concludes the revenue Standard is working as intended, 30 September 2024. The IASB announcement of the post-implementation review outcome and the matters identified for further consideration, used for the conclusion and the framing of the matters carried forward
- IFRS Foundation, Post-implementation Review of IFRS 15 Revenue from Contracts with Customers, completed project page. The project record confirming the review was completed in September 2024 and listing the matters the IASB decided to consider in its next agenda consultation
- Financial Accounting Standards Board, Accounting Standards Update 2016-08, Revenue from Contracts with Customers (Topic 606): Principal versus Agent Considerations (Reporting Revenue Gross versus Net), March 2016. Downloaded as a PDF and read directly. Source for the converged US GAAP requirements: a principal recognises revenue in the gross amount of consideration and an agent recognises the net fee or commission, the assessment is made for each specified good or service so an entity can be a principal for some and an agent for others in one contract, the control indicators in paragraph 606-10-55-39, and the clarification in 606-10-55-39A that the indicators support the assessment of control and do not override it
- Grant Thornton, Insights into IFRS 15: Principal versus agent considerations. A near primary practitioner walk-through of the control assessment and the three indicators, used to cross check the primary standard-setter text rather than as a load bearing source on its own
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.