Repository navigation
Copilot Investment
Web Portal → Copilot investment
Available since Stable 1857 (PR #787, with contributor-threshold privacy hardening in PR #791).
Copilot investment asks one question: what does Microsoft 365 Copilot cost here, and what does the evidence of use support? It sets the licence run rate, the billed Copilot Studio credits and the preview consumed-credit readings beside each licensed person's observed use, then models a return from your organisation's own assumptions: a licence price, an hourly cost, and the minutes of time Copilot gives back on a day someone uses it.
Money on this page is modelled from those assumptions over observed activity. It is not an invoice, it is not a measured saving, and the page never claims that Copilot caused a change. Until an administrator saves the assumptions (or you try your own with What-if), the page still shows the evidence of use and says that money is not modelled.
Copilot spend is the companion page: facts from the billing sources only, with no prices and no assumptions. For how each cost and value figure relates to the others, and which ones must never be added together, see the cost and value map.
| Where |
Insights → Copilot → Copilot investment (#/insights/copilot-investment), after Copilot Adoption and before Copilot spend
|
| Periods | The last 7, 28, 90 or 180 days (28 by default) |
| Who can open it | Any signed-in reader sees the aggregate figures. See PII adds the People tab, a user filter, and grouping by manager or custom attribute. Saving the assumptions needs Administration, which does not include See PII (Portal Permissions) |
| Filters | The global report filter, which narrows everything on the page. Readers with See PII also get a user filter |
| Needs | The user import (GraphUsersMetadata); at least one source of evidence of use, either the Copilot audit import (Copilot) or Microsoft's Copilot usage reports (GraphCopilotUsageReports); and saved assumptions for any money figure, which are kept in the solution's Storage account (Copilot Investment Assumptions). The Copilot Studio credit import and the credit history are optional |
| Output | Excel report, Print (or save as PDF) and What-if |
- What the page needs
- Toolbar, filters and badges
- What-if: try your own figures
- Connection warnings
- Executive summary
- Value and break-even
- Organisation
- Credits and sources
- People and person detail
- Method and trust
- What the page withholds
- Excel report
- When something is missing or fails
- Try it with the Contoso demo
- Limitations
The page has six tabs, in this order: Executive summary, Value & break-even, Organisation, Credits & sources, People and Method & trust. The People tab is hidden without See PII. The Credits & sources tab reads its history only when you open it.
The page works out for itself which sources it can use, from the importer's ImportJobSettings, and says what is missing in a note under the toolbar:
| Note | Shown when | What to do |
|---|---|---|
| The user import is switched off, so there is nobody to report on. |
GraphUsersMetadata is off |
Turn the user import on: Configuration Reference |
| Neither the Copilot audit import nor Microsoft's Copilot usage reports are switched on, so there is no evidence of use. Costs and consumed credits are still shown. |
Copilot and GraphCopilotUsageReports are both off |
Turn one on. The audit import gives day-by-day detail (Copilot Adoption Setup) |
| The Copilot audit import is switched off. Evidence comes from Microsoft's usage report alone, which has no day-by-day detail for a person's drill-down. |
Copilot is off and GraphCopilotUsageReports is on |
Optional: turn the audit import on for the weekly trend and the person detail |
| The Copilot Studio per-user credit import is switched off, so no billed Studio credits are shown. |
CopilotStudioCredits is off |
Agent Costs Import Configuration |
| Copilot credit history (preview) is not being collected. Any readings shown were kept from before collection stopped. |
CopilotCostManagement or the CopilotCostConnectionEnabled app setting is off |
Turn collection on only after the connection is set up |
Evidence of use is the same evidence as the Copilot Adoption report: audit events where they are imported, Microsoft's usage report otherwise (Copilot Adoption data sources). The unit is an active day, a day on which a person used Copilot. Prompts are not counted, so sending more prompts on the same day adds nothing.
Still being prepared. If the shared Copilot evidence is not ready within about 20 seconds, the server answers HTTP 202 with a short retry hint, and the page shows Preparing the investment report… and asks again every few seconds, for up to 10 minutes. After that it says The Copilot evidence behind this report is taking longer than expected to prepare. Try again in a few minutes.
The toolbar, left to right: the period selector; What-if (it reads What-if (N changed) and becomes the primary button once you have changed a figure); Refresh; and, at the right, Print and the primary Excel report button. Print prints the tab you are on, or saves it as a PDF.
Under the toolbar the page shows the date range and the number of days, Generated {when}, and Narrowed by the filters above when a filter applies. Then, in order: the global filter bar, the connection warnings, the user filter (See PII only), and any notes or errors.
A reader without See PII has no filter of their own, and the Organisation tab does not offer grouping by manager or by a custom attribute.
Small badges say what kind of figure a heading or tile is:
| Badge | Meaning |
|---|---|
| Modelled | Observed activity multiplied by your assumptions (the tiles that carry money) |
| Observed | Read from a source as it was reported, for example the consumed-credit readings over time |
| Preview | Comes from Copilot credit history (preview) |
| Tenant-wide | Describes the whole tenant whatever the filters say (spending policies, the tenant credit balance) |
Every KPI tile also has a small i button. It opens a popover with what the figure claims, how it is worked out, the formula and, where there is one, the source.
What-if lets any reader try their own figures without saving anything.
- The figures apply only to this page and its Excel report, in this browser tab. They are never saved and nobody else sees them. Leave a field empty to keep the organisation's figure; each field shows Organisation figure: {value} or Not set by the organisation.
- Figures take effect when you click Apply, so typing never sends a request per keystroke. Back to organisation defaults clears them. A full stop or a comma works as the decimal separator.
- To model the return you need a currency, a licence price, an hourly cost, and three values each (conservative, base, upside) for the minutes Copilot gives back on an active day and the share of that time turned into business value (entered as a percentage). A Copilot Studio credit price and a Copilot credit price are optional: each adds a source of cost. The meaning and limits of each figure are on Copilot Investment Assumptions.
- While your own figures are applied the page says so (Your own what-if figures are applied. They are not saved and nobody else sees them.), and the Assumptions in force card marks them Your what-if.
- A figure that breaks a rule is refused: The what-if figures break a rule: every price must be above zero, a range needs all three values from lowest to highest, and realisation is a share from 0 to 1.
- Try illustrative example figures fills the dialog with a worked example: EUR, a licence at 25 a month, a Studio credit and a Copilot credit at 0.01, an hourly cost of 60, minutes of 15 / 30 / 45 and realisation of 30 / 50 / 70 %. The page then shows a warning bar, Illustrative example figures are in use. Every amount below is modelled from them: they are not Microsoft prices, your organisation's figures or measured savings, and only you see them., with a Clear example figures button.
- Administrators also see Set the organisation's figures, which opens the assumptions page. Everyone else sees A portal administrator sets them for everyone under Administration.
If the Copilot credit history connection or the Copilot Studio billing connection needs attention, a banner appears under the filters, exactly as on Copilot spend. It checks every minute, shows nothing while the connection is healthy, switched off or not set up, and otherwise says what is wrong. The wording of each state and what to do about it are on Copilot spend → Connection warnings.
The opening tab, written for the person deciding whether to keep, trim or extend the licences. Its cards run in this order: the verdict, the key figures, value against cost, what would change the answer, what to do next, what the evidence says beside how far to trust it, how often people use Copilot beside whether use is growing, the spend and consumption figures, and the assumptions in force.
The investment case card says it in one sentence:
- Short of cost: On your assumptions, the licences return {roi} in the base case ({roiLow} to {roiHigh}): {gap} a month short of their modelled cost. Break-even needs {needed} of time back on each active day; you assume {assumed}.
- Ahead of cost: the same shape, {gap} a month more than their modelled cost. They break even at {needed} of time back on each active day; you assume {assumed}.
- Assumptions missing: Money is not modelled yet: {count} assumptions are missing. The evidence of use below does not depend on them.
- Nobody measured: No licensed user's Copilot use was measured in this period, so value and return are not modelled. Licences and spend are still shown.
Beneath it, every time: An assumed time value on observed active days - not an invoice and not a measured saving.
Each tile has an i button with what it claims, how it is worked out and its formula. A tile that cannot be worked out says what is missing instead of showing a zero, for example Set a licence price to model this or Needs a licence price, an hourly cost, minutes and realisation.
The return on your assumptions (all Modelled)
| Tile | What it says | Formula |
|---|---|---|
| Modelled cost a month | What the analysed licensed users cost each month: their licences, plus their own billed Copilot Studio credits when a Studio price is set. The return is measured against exactly this. Holders measured only in another period, or not analysed, are left out of both sides of the return | (licence price × licence-days ÷ 30.44 + holders' billed Studio credits × Studio price) ÷ months in the period |
| Modelled value (base) | The time Copilot is assumed to give back on days people actually use it, valued at your hourly cost, with the conservative-to-upside range beneath. Only licensed users count: people without a licence are a separate, metered view | active days × minutes per active day ÷ 60 × realisation × hourly cost ÷ months in the period |
| Net a month (base) | Value minus cost, with the conservative and upside results beneath. A shortfall is not money lost: it is how much more value the assumptions would need to find for the licences to pay for themselves | (modelled value − modelled cost) ÷ months in the period |
| Modelled return (base) | Value divided by cost for the same people over the same period, with the conservative and upside returns beneath. Preview consumed-credit readings are never in it | modelled value ÷ (licence cost for the period + holders' billed Studio credits × Studio price) |
What it takes, and how much the licences are used
| Tile | What it says | Formula |
|---|---|---|
| Licences in active use | The share of analysed licensed users with at least one day of observed Copilot use in the period | licensed users with ≥ 1 active day ÷ analysed licensed users |
| Licence cost per active holder | What each actively used licence effectively costs a month once idle licences are paid for too. Licences only, and shown only when it can be worked out. It falls towards the licence price as idle licences are reclaimed or put to use | analysed holders' licence cost a month ÷ holders with ≥ 1 active day |
| Break-even | The minutes Copilot would have to give back on each active day for value to equal cost, with every other assumption held, and the margin of safety: a margin above zero means the base assumption can fall by that share before the investment stops paying back | modelled cost ÷ (active days × realisation × hourly cost ÷ 60) |
Spend and consumption beside the return sits lower on the tab, just above Assumptions in force. These are facts from the billing sources for every licence and person in scope. They are not added to each other, and the cost above already includes the analysed holders' share of licences and Copilot Studio credits.
| Tile | What it says | Formula |
|---|---|---|
| Licence run rate (all licences) | What the Copilot licences held today cost each month at your assumed licence price: every current licensed user in scope, including any measured only in another period or not analysed. Modelled from your price, not an invoice. | licensed users × licence price per month |
| Consumed credits (latest reading) | The credits each person had used in the source's current period, as of the newest sweep. Shown only when the credit source has data. The source does not say which period a reading covers, so readings are never added across days, never treated as monthly spend and never put into the return | none |
| Copilot Studio credits (billed) | Credits Microsoft billed for Copilot Studio agents, per person and day, in the period. It is a daily ledger, so it is compared with the previous period of equal length when the ledger reaches back that far (No comparison: the ledger does not reach back over the previous {days} days) | none |
Tile colours. A grey tile means the figure is not modelled.
| Tile | Green | Amber | Red |
|---|---|---|---|
| Net a month (base) | The base case is at or above zero | Only the upside case is at or above zero | Neither is |
| Modelled return (base) | The conservative return is at least 1× | The base return is at least 1× but the conservative is not | The base return is below 1× |
| Break-even | A margin of safety of 25 % or more | 0 to 25 % | Negative |
| Licences in active use | 80 % or more | 60 % or more | Below 60 % |
A chart of the modelled cost with the value range around it: Cost {cost} a month; value {low} (conservative) to {high} (upside), {base} in the base case. Where the range sits relative to the cost is the investment case in one picture. Without assumptions it says Value cannot be modelled until the assumptions are set.
The levers, each a month, on the same licensed users as the return and with the base assumptions. The card has a What-if button and a link to the Value & break-even tab.
- The gap: Close the {gap} a month shortfall with {days} more active licence-days a month - about {perHolder} more for each holder who already uses Copilot. When the base case is ahead: The base case clears its modelled cost by {gap} a month.
- The minutes: Or Copilot would have to give back {needed} on each active day, against the {assumed} you assume.
- Reclaiming idle licences: Reclaiming the {count} idle licences that are safe to reclaim frees {monthly} a month of licence cost and moves the base return to {roi}. A cash saving only where licences can be reduced.
- Rebalancing: {evidenced} people without a licence already use Copilot often enough to pay for one. Reclaimed licences could cover {reassignable} of them; licences for the other {netNew} would add {netNewMonthly} a month.
Without assumptions it says Set the assumptions to see what would change the answer.
Recommendations, grouped by kind of decision in a fixed order: licences nobody uses, licences used lightly, licences to add, spend to review, then data and set-up. Each card says what its amount is, and amounts of different kinds are never added together or ranked against each other. With nothing to act on the tab says No action is indicated for this period.
| Card | Who it covers | The amount shown |
|---|---|---|
| Reclaim idle licences (warning) | Licensed people with no active day in the period who are not too new to judge, and whom the Copilot Adoption analysis rates as certain or probable reclaim candidates (Reclaim candidate) | Frees {amount} a month of licence cost, and Base return without them: {roi}. |
| Review idle licences (warning) | The other idle licences: no active day, not too new to judge, not reclaim candidates and not excluded (Idle, to review). Ask before reassigning. | {amount} a month of licence cost on idle licences |
| Support people below break-even | Licensed people with some use whose base-case value is below their own cost (Below break-even (base)) | {amount} a month of modelled value still missing, and The typical one needs {days} more active days a month. |
| Help light users build a habit | Shown instead of the card above while money is not modelled: licensed people with some use who are below the Developing adoption band (Light evidence) | none |
| Extend licences to evidenced users | People without a licence who use Copilot on at least as many days a month as a licence needs to break even (Uses enough for a licence). Their use shows demand, not the gain a licence would bring. | Adds {amount} a month in licences |
| Consider licences for recommended people | Shown instead of the card above when break-even cannot be worked out: people the adoption analysis recommends for a licence (Licence candidate) | Adds {amount} a month in licences, when a licence price is set |
| Review high spend on thin evidence (warning) | The High spend, thin evidence flag. Check for scheduled agents or automations before raising any limit. | {amount} a month if the readings were a month's spend, only when a credit price is set, with Valued as if the reading were a month's spend. |
| Review limits for evidenced heavy users | People at or near a credit limit whose use is strong and regular (At a limit, strong use) | none |
| Compare metered spend with a licence | People without a licence whose billed Studio credits cost more a month than a licence would (Studio billing above a licence) | {amount} a month billed in Copilot Studio credits |
| Close gaps in the credit data | Readings that are partial, out of date, or that belong to accounts the user import has not matched. It has an Open Credits & sources button | none |
| Set the investment assumptions | Shown while money cannot be modelled: {count} assumptions are missing, so value, return and break-even cannot be modelled. Administrators get a link to the assumptions page, and everyone gets a What-if button | none |
For readers with See PII, a card that covers people has a See the {count} people button (or See the person) that opens the People tab filtered to exactly those people. A card's count and its list use the same rule, so they cannot disagree. Readers without See PII see the counts and not the names.
Findings, most important first (critical, warning, opportunity, good, then neutral). The top five show; Show all {count} findings shows the rest and Show the main findings only goes back. Anything the verdict, the next-step cards or the trend already say is not repeated, and a quiet period says Nothing in this period stands out. The findings the page can make:
- Licence run rate: what the licences cost a month, and what each active licence costs once idle ones are paid for too.
- Idle licences: how many licensed users did not use Copilot at all, split into those to review, those too new to judge and, when safe, those that can be reclaimed, with the licence cost freed and the base return afterwards.
- Concentration of use: the most active 20 % of licensed users and their share of all active days.
- Concentration of credits: the top 10 % of credit consumers and their share of the consumed credits in the latest readings.
- High spend, thin evidence: people with the most consumed credits and little use of their own. More spend is not more evidence: review what is running in their name.
- People without a licence who already use Copilot enough to break even on one, with what licensing them would cost; or, when break-even cannot be worked out, the people the adoption analysis recommends for a licence.
- People who have used their whole credit limit, and how many of them show strong, regular use.
- Copilot Studio trend: credits billed in the period against the previous period of the same length, or a note that there is no comparison.
- Unverified credit readings: reported beside the return, not inside it, because the source does not confirm which period they cover. When a credit price is set, a stress floor shows what the base return would be if each reading were an extra month of spend on top of everything else.
- Weekly trend: weekly active licensed users, from the first measured week to the latest.
Confidence is answered for each question separately: Evidence of use, Cost, Assumptions and Consumed credits (preview readings), each rated High, Medium or Low, plus an overall level. The overall level leaves out the consumed-credit readings, because they are not part of the return. The card says Every source is complete for this period. or links to See all {count} caveats on the Method & trust tab, which explains what moves each rating.
How often licensed users use Copilot groups licensed users by active days a month, with a marker at the number of active days a licence needs to break even on its own, and says {above} of {holders} analysed licensed users are at or above break-even; {below} use Copilot less often and {none} not at all.
Is use growing? shows the licensed users who used Copilot in each complete week, as a share of today's licences. It covers the whole tenant, so it is hidden while a filter narrows the view (The weekly trend covers the whole tenant, so it is hidden while a filter narrows the view.). It needs the Copilot audit import, and it says Not enough complete weeks to show a trend yet. until there are enough weeks. A week the audit import does not cover is marked as not covered, not drawn as zero.
The headline assumptions the figures use: licence price, Studio credit price, Copilot credit price, hourly cost, and the base minutes and realisation. It marks figures that come from your what-if (Includes your what-if figures, which only you can see and which are not saved.), lists what is missing (Missing: {fields}.), and says The saved assumptions could not be read, so money is not modelled. Evidence is still shown. when the store cannot be reached. Edit assumptions, for administrators only, opens Copilot Investment Assumptions.
The arithmetic behind the verdict, with every column shown so it can be checked.
- Three scenarios. The same observed active days under the conservative, base and upside assumptions. Columns: Scenario, Minutes per active day, Realisation, Assisted hours, Realised hours, Value in period, Value a month, Return, Net in period, Holders at or above break-even.
- Sensitivity: what changes the answer. The return under every combination of the minutes and realisation scenarios. A cell below 1× does not pay back; each says Pays back or Short of cost.
-
Other levers. Each shows {value} ({delta} on the base case):
- an hourly cost 20 % lower, and 20 % higher;
- Without the licences safe to reclaim (their Studio use stays billed);
- the stress floor, each reading an extra month of spend. This is a stress test only: the source does not say what period a reading covers, and readings may overlap Studio billing already in the cost.
- Break-even. Minutes needed per active day, Margin of safety, Active days a month one licence needs, Minutes a working day one licence needs, Holders at or above, Holders below and Holders with no use.
- By adoption band. Licensed users grouped by their Copilot Adoption band (Never used, Dormant, Trialling, Developing, Established, Champion), with holders, share of holders, median active days, share of active days, modelled cost and value a month, consumed credits and Studio credits. The same assumptions apply to every band, so bands differ only by how much each uses Copilot.
Two notices can replace the figures:
- Value is not modelled yet — Missing assumptions: {fields}. An administrator can set them, or try your own with What-if.
- No like-for-like evidence to value: No licensed user's Copilot use was measured in this period - only Microsoft's usage report for its own period, or nothing. Licences are counted, but value and return need use measured in the same period as the cost.
Where the investment and the evidence sit. Licensed users are grouped by a directory attribute: Department (the default), Company, Country or region, Job title, Office location, Email domain or Usage location. With See PII the list also offers grouping by manager and by custom attributes.
Columns: Group, Analysed licensed users, Active, Active days a holder a month, Modelled cost a month, Modelled value a month (base), Return, Consumed credits (latest reading), Studio credits (period) and Active without a licence.
Small groups. The minimum group size is 5, or the larger Minimum seats per segment an administrator has set in Copilot Adoption settings, which this report follows. Groups with fewer people than that are combined into one Smaller groups combined row, and the page says {count} smaller groups are combined. A row also withholds every figure if fewer than the minimum contribute to any of its figures: for example, five people in a department do not make a one-person credit balance or one active holder safe to show. The page and workbook say Fewer than {count} people contribute to at least one figure: figures not shown. When no group is large enough it says No group has enough licensed users to show.
Manager grouping names people, so it needs See PII: the option is not offered without it, and the server refuses the request (HTTP 403) if it is asked for anyway.
How evenly use and spend are spread. Two curves: active days across licensed users, and consumed credits across the people who have any. A curve hugging the diagonal is even; a deep bow means a few people account for most of it. Each says Top {X} hold {Y}; Gini {Z}., or Too few people to measure. The active-days curve reports the most active 20 % of licensed users and the credits curve the top 10 % of consumers.
People with a consumed-credit reading are split at the median reading and at about one active day a week (4 active days a month) into four groups: More credits consumed, regular use; More credits consumed, light use; Fewer credits consumed, regular use; and Fewer credits consumed, light use. Each shows its people and credits. It is a broader cut than the High spend, thin evidence flag, which looks only at the top 10 % of readings. Licence holders measured only in Microsoft's usage report, or not analysed, sit out, because there is no use from this period to set beside their credits.
Where each source stands, and the preview consumed-credit readings in detail.
Three cards open the tab:
- Copilot evidence: Analysed {holders} licensed users. Generated {when}. Or No Copilot evidence is available on this deployment. It also counts the holders measured only in Microsoft's usage report, for its own period and those not analysed: they count as licences and are left out of value.
- Copilot credits consumed, latest readings (preview) (Preview): Latest sweep {date}: {observed} people observed. {sweeps} of {started} sweeps in the period completed. Or No readings have been collected for this period., The database has not been upgraded for credit history yet. or The credit history could not be read just now: readings are missing, not zero.
- Copilot Studio ledger: Last import {when}., No billed Studio credits are stored for this period., The latest import reported an error. or The ledger could not be read just now: its figures are missing, not zero.
A failed read is shown before "not upgraded" or "no data", and a source that is switched off says so with the same note as under What the page needs.
Marked Observed. Each point is one sweep's readings, read on that day. Points are never added together: a reading falls back when the source starts a new period, and days without a sweep have no point. A bar chart and a table (Sweep date, Credits consumed, People with consumed credits) show them, or No consumption readings in this period.
Service, Unit, People with consumed credits, Consumed credits (latest reading), At limit / not entitled, Not evaluated, Amount unknown. A quantity in a unit other than Copilot credits is listed on its own (Other unit: {unit} or No unit reported) and never added to credits.
The metered view: use and spend by people who hold no Copilot licence, kept apart from the licence return so their activity is not counted as licence value. Rows: People in this view, Used Copilot, Billed Studio credits, Consumed credits (latest reading), Use as often as a licence needs, Recommended for a licence and Billed more than a licence. The use as often as a licence needs and billed more than a licence rows appear only when they can be worked out, and money notes appear when prices are set.
Both are marked Tenant-wide: they describe the whole tenant, whatever the filters say.
- Spending policies: the policies and limits the latest sweep read. Columns Policy, Applies to, Status, Billing, Period limit, Per-person limit, Services enabled. Applies to is Everyone, {count} groups, Selected groups or Other; Status is On, Off, Being set up or Set-up failed; Billing is Prepaid credits, Pay-as-you-go or Not specified. Without a sweep: No policy context has been collected yet.
- Tenant credit balance: shown only when balances exist: what the whole tenant has bought and used, by billing method, as the source reports it (Billing method, Purchased, Used, Remaining, Updated).
A fact list about the credit readings: the accounting period (Not confirmed by the source, Confirmed by the source or Confirmed for some readings only), partial readings, readings older than the latest sweep, accounts not matched to an imported user and the credits on them, the collector (Latest sweep complete, Latest sweep still running: {pending} people to go or Latest sweep in progress) and the share of the directory the latest sweep observed. Unmatched accounts are counted for the whole tenant only: Unmatched accounts are only counted for the whole tenant, because they cannot be placed in a filter.
The People tab needs See PII. Each person's Microsoft 365 Copilot licence, observed use and the active days their own cost needs to break even. People without a licence can still use Copilot Chat and pay-as-you-go agents. A signal says what the evidence supports, not how well someone does their job.
Filters: a search box (Name, department or job title), Microsoft 365 Copilot licence (Everyone, Licensed, Not licensed (Copilot Chat or agents only)), Signal, Flag, and Sort by (Investment or Gap to break-even). The list is paged ({shown} of {total} people) with Previous and Next.
Columns: Person, Copilot licence, Adoption band, Active days a month, Apps, Modelled cost (period), Days a month to break even, Consumed credits (latest reading), Studio credits and Signal. The licence cell says Has a Microsoft 365 Copilot licence, No Microsoft 365 Copilot licence or Licence not known: no adoption evidence was read.
A signal is one label per person, and says what the evidence supports. Money is modelled when the assumptions are complete.
| Signal | For | What the evidence supports |
|---|---|---|
| Supported | Licensed | At least one active day, and the person's modelled value in the base scenario covers their own cost |
| Plausible on upside | Licensed | Value covers cost only in the upside scenario |
| Below break-even | Licensed | At least one active day, but value falls short of cost even on the upside |
| No use | Licensed | No active day in the period |
| Too new to judge | Licensed | Would be No use or Below break-even, but the account is younger than the Copilot Adoption grace period (30 days by default) |
| Strong evidence, Developing, Light evidence | Licensed | At least one active day while money is not modelled, by adoption band: Strong evidence from Established upwards, Developing from Developing, otherwise Light evidence |
| Measured in another period | Licensed | Known only from Microsoft's usage report, for its own period: counted as a licence, not valued |
| Not analysed | Licensed | Beyond the adoption analysis's row limit: counted as a licence, not valued |
| Licence candidate | No licence | Uses Copilot on at least as many days a month as a licence needs to break even, or is recommended for a licence by the adoption analysis |
| Metered use | No licence | Has billed Studio credits or consumed credits |
| Observed, no licence | No licence | Anything else |
A person can carry several flags. Each action card above counts people with the same rule as the flag it names.
| Flag | What it means |
|---|---|
| At credit limit, Near credit limit | The person has used their whole credit limit, or is close to it. Never both: at wins |
| Not entitled, Partial reading, Other unit | The source's latest evaluation says the person is not entitled; the reading is only partial; or it is in a unit other than Copilot credits |
| High spend, thin evidence | Consumed credits at or above the 90th percentile of readings (worked out only when at least 5 people have consumed credits), analysed in this window, with thin evidence |
| Reclaim candidate | Licensed, analysed, no active day, not too new to judge, and the adoption analysis rates reclaiming as certain or probable |
| Idle, to review | Licensed, analysed, no active day, not too new, not a reclaim candidate and not excluded: a person should decide |
| Excluded from reclaim | A licensed person the adoption analysis marked as excluded |
| Below break-even (base) | Money modelled, analysed, at least one active day, and base-scenario value below the person's own cost |
| Uses enough for a licence | No licence, at least one active day, and active days a month at least those a licence needs to break even |
| At a limit, strong use | At or near a credit limit, analysed, with strong evidence |
| Studio billing above a licence | No licence, both prices set, and their billed Studio credits × Studio price ÷ months at least the licence price |
| Strong evidence | A licensed person in the Established band or better, or anyone with 8 or more active days a month |
| Thin evidence | A licensed person below the Developing band or with fewer than 2 active days a month; anyone else with fewer than 2 active days a month |
| Account disabled | The directory marks the account as disabled |
Selecting a person opens What supports {name}'s investment, with the caveat Modelled value applies your assumptions to this person's active days. It shows what the evidence could support, not how productive anyone is. A person outside the current period and filters answers This person is not in the report for the current period and filters.
- Summary: licence, active days, active weeks ({active} of {total}), modelled cost, modelled value (range), realised hours (base case) and days a month to break even ({need} needed · {actual} used).
- Evidence chips: No Copilot use in the period; Uses Copilot most weeks / some weeks / Rarely; Uses it across several apps; Works with agents; Uses Cowork; Use is growing / Use is falling; Prompt history available; Reached a credit limit; Billed Copilot Studio usage.
- Week by week and Where Copilot is used, from the audit evidence.
- Agents and Cowork, and Prompts and responses ({prompts} prompts, {responses} responses and What the prompts were about). Without the interaction-history import it says Interaction history is not imported, so prompts are not counted. The product stores prompt and response metadata, never their text.
- Consumed credits by service (latest reading), with remaining, limit and Not evaluated, and Consumed credits by sweep. A reason is shown where the source gave one: Allowed, Not entitled, Limit used up, Source could not evaluate, No policy applies or Other reason.
- Billed Copilot Studio usage by environment (Environment not reported where Microsoft did not say).
How the figures are worked out. Every modelled figure is observed activity multiplied by an assumption. Nothing on the tab is an invoice, a contract price or a measured saving, and nothing claims that Copilot caused a change. It has three cards: the formulas and rules, the assumptions, and the caveats.
| Figure | Formula |
|---|---|
| Modelled value | active days × minutes per active day ÷ 60 × realisation × hourly cost |
| Modelled cost | licence price × days the licence was held ÷ 30.44 (+ the holder's own billed Studio credits × Studio price) |
| Return | modelled value ÷ modelled cost, for the same licensed users and the same period |
| Break-even minutes | modelled cost ÷ (active days × realisation × hourly cost ÷ 60) |
| Active days a licence needs | licence price ÷ (minutes ÷ 60 × realisation × hourly cost) |
| A person's break-even days | (their licence cost + their billed Studio credits × Studio price) ÷ the value of one active day |
| Extra active days to break even | the monthly shortfall ÷ the value of one active day |
- Value is counted per active day. Sending more prompts on the same day earns nothing extra.
- The return compares the same people on both sides: licensed users whose Copilot use was measured in this period. Holders known only from Microsoft's usage report, or not analysed, count as licences but are not valued. People without a licence are reported separately.
- Preview consumed-credit readings are point-in-time readings with an unconfirmed period. They are shown beside the return and stress-tested, never added into it or across days.
- Billed Copilot Studio credits come from a daily ledger and are compared only with the previous period of equal length.
- Licence cost uses each holder's licence history where it exists; otherwise it assumes today's licence was held for the whole period, and says so.
- Correlation is not causation: high use is evidence that a licence is used, not proof of the value it creates.
- Studio credits and preview consumed-credit readings can describe the same consumption from two sources, so they are never added together.
Every assumption with its value and its source: Organisation default, Your what-if or Missing. It also says Saved by an administrator {when} (version {version}). and shows the administrator's note exactly as written, never translated. Without a Storage connection string it says Assumptions cannot be saved on this deployment: no Storage connection string is configured. See Copilot Investment Assumptions.
Caveats are grouped by area. Each area is headed with its level, and each caveat is tagged Lowers confidence, Worth knowing or For information. An area is Low when any of its caveats lowers confidence, Medium when any is worth knowing, and High otherwise: an information-only caveat never changes the level. The overall level leaves out the consumed-credit area. With nothing to report it says No caveats for this period.
In the table below, a caveat is worth knowing unless it is marked otherwise.
| Area | Caveats the page can show |
|---|---|
| Evidence of use | There is no Copilot evidence, so nothing can be valued. (lowers confidence) · Without the Copilot audit import, evidence comes from Microsoft's usage report alone. (lowers confidence if there is no usage report either) · {holders} licensed users' use is known only from Microsoft's usage report, for its own period: they count as licences but are left out of value and return. · Some of the adoption analysis failed, so its figures are incomplete. (lowers confidence) · {holders} licensed users were not analysed (row limit). The return covers analysed licences only. · A {days}-day period: monthly figures are extrapolated from a short sample. (for periods of 7 days or less) |
| Cost | Licence cost assumes today's licences were held all period: licence history is missing for some holders. · The latest Copilot Studio credit import reported an error. · The Copilot Studio ledger could not be read, so the cost behind the return covers licences only and the return may be overstated. (lowers confidence when a Studio price is set) |
| Assumptions | {missing} assumptions are missing, so money is only partly modelled. · The saved assumptions could not be read. · Your own what-if figures are applied. They are not saved and nobody else sees them. · Value is assumed time back on observed active days, valued at your hourly cost: whether it becomes savings depends on how the time is used. (information, whenever value is modelled) |
| Consumed credits | The source does not confirm which period a consumed-credit reading covers, so readings are kept out of the return. · The latest credit sweep observed {coverage} of the directory. (below 95 %) · The newest consumed-credit reading is {days} days older than the end of the period. (more than 3 days) · {share} of consumed-credit readings are partial. (more than 5 %) · {credits} credits sit on {objects} accounts not matched to an imported user. (worth knowing above 5 % of the total, otherwise information) · No readings of Copilot credits consumed are available for this period. · Copilot credits consumed could not be read just now: they are missing, not zero. |
| What is held back | When |
|---|---|
| The People tab, the person detail, the user filter, and grouping by manager or custom attribute | The reader lacks See PII. The server answers 403 rather than an emptied result, and the page hides what the server would refuse |
| The named rows inside an aggregate response | The reader lacks See PII. The summary is sent without its people list (a trimmed copy: cached results are shared between readers, so nothing is edited in place) |
| The People sheet of the Excel report | The reader lacks See PII |
| The assumptions' change history, which names who changed what | The reader is not an administrator: it is on the Administration page |
| Since Stable 1859 (PR #807): concentration curves (and the findings that quote them) for small populations, quadrants of one to four people, balance categories of one to four accounts, and further groups that would reveal a withheld one by subtraction | The reader lacks See PII |
| Since Stable 1859 (PR #818): the report's own figures that one to four people are behind: the Copilot Studio and credit-balance totals and their parts, the figures for people without a seat, adoption-band rows, and the amounts and days that actions and findings quote about one to four people. When one to four analysed seat holders were billed for Copilot Studio and a Studio price is set, the modelled cost, net, return and break-even are withheld too, because value minus net gives the cost back. Further figures that would reveal a withheld one by subtraction are withheld with it. The page shows a dash that says why, and the workbook gives the reason in the cell | The reader lacks See PII |
| Since Stable build 1860 (PR #866): credits held by one to four accounts that the user import didn't match to a person. They show as withheld, never as 0 | The reader lacks See PII (details) |
| Endpoint | Who may call it |
|---|---|
api/CopilotInvestment/availability, summary, trend, export/workbook
|
Any signed-in reader. A user filter or a manager grouping needs See PII, and the workbook leaves the People sheet out without it |
api/CopilotInvestment/people, person/{id}
|
See PII |
api/CopilotInvestmentSettings (read and save) |
Administration |
api/CopilotCostHealth |
Any signed-in reader |
A reader without See PII who sends a user filter, or a grouping labelled with managers, is refused with 403 and the portal's permission required message. It is never an emptied result, and never a 401, which would only send the reader round the sign-in loop. Administration and See PII are independent: an administrator without See PII sees the same aggregates as any other reader. See Portal Permissions.
Excel report downloads copilot-investment-{date}-{days}d.xlsx for the period, the filters and any what-if figures on screen, in the language the portal is set to. Sheets, in order: Executive summary, Value and break-even, Path and concentration, Adoption cohorts, Organisation, Credits and sources, Assumptions and method and — only with See PII — People. The Executive summary sheet states Per-person data: Included or Not included (needs the See PII permission), who the figures cover (Everyone in the tenant, Administrator's filter or Your filter) and the confidence level, and a figure with no currency set is labelled (no currency set). An export is never less redacted than the screen.
The link carries the period, the filters, the grouping and any what-if figures, so the workbook matches the screen it was opened from. On a large tenant the export waits up to about 150 seconds for the evidence. If it is not ready the download answers HTTP 503 with a retry hint and says The Copilot evidence behind this report is still being prepared, so the workbook is not ready yet. Open the Copilot investment page, wait for it to load, then use its Excel button. On the pull request's synthetic 200,000-person tenant the workbook with the People sheet was about 25 MB and took a few seconds to build. The pull request did not record a file size for the case without that sheet.
Other refusals are worded in the reader's language: The what-if figures in this link are not valid: {errors}, This workbook link is not valid. Open the Copilot investment page and use its Excel button again. and, for any other failure, The Copilot investment workbook could not be generated. The failure has been logged.
Each message below is the page's own wording.
| Message | What it means | What to do |
|---|---|---|
| Preparing the investment report… | The shared Copilot evidence is still being built | Wait: the page asks again by itself |
| The Copilot evidence behind this report is taking longer than expected to prepare. Try again in a few minutes. | It was not ready after 10 minutes | Try again; check the importer and SQL health |
| Money is not modelled yet: {count} assumptions are missing. The evidence of use below does not depend on them. | The assumptions are not saved, or are incomplete. The Value tab lists which ones (Missing assumptions: {fields}) | Administrators: Copilot Investment Assumptions. Anyone: try What-if |
| The saved assumptions could not be read, so money is not modelled. Evidence is still shown. | The assumptions store (the AnalyticsState table in the Storage account) could not be read |
Check the Storage connection string and the account's availability |
| The Copilot evidence behind this report is still being prepared, so the workbook is not ready yet. Open the Copilot investment page, wait for it to load, then use its Excel button. | The Excel link was opened before the evidence was ready | Open the page, wait for it to load, then use Excel report |
| Couldn't check which sources this report can use (HTTP {status}). | The availability check failed | Reload; check the web application log |
| Couldn't load the investment report (HTTP {status}). | The report itself failed | Try again; check SQL health |
| Couldn't load the consumed-credit readings (HTTP {status})., Couldn't load the people list (HTTP {status})., Couldn't load this person's evidence (HTTP {status}). | That one part failed; the rest of the page is unaffected | Try again |
| This person is not in the report for the current period and filters. | The person is outside the period, the filters or the reader's scope | Change the period or the filters |
| Copilot credits consumed could not be read just now: they are missing, not zero. | The readings query failed | Try again; check SQL health |
| The ledger could not be read just now: its figures are missing, not zero. | The Studio ledger query failed, so the cost behind the return may cover licences only and the return may be overstated | Try again; check SQL health |
| The database has not been upgraded for credit history yet. | The database does not have the credit-history tables | Upgrade the database to the build you are running |
| A permission required message | The request needs See PII or Administration | Ask an administrator for the role: Portal Permissions |
HTTP 404.15 (query string too long) when a filter is applied comes from IIS, not from the page. The website was deployed without its generated Web.config, which allows this API longer query strings. Redeploy the whole Website.zip: see Manual install: deploy the binaries.
The demo generator can fill every panel with synthetic data, without a real tenant:
Tests.FakeDataGen.exe demo --database ContosoDemo_Example
- The command creates a new LocalDB-only database (
(localdb)\MSSQLLocalDB), applies the schema, and refuses any other server or an unmarked or changed target. It never reads a configured production connection. An exact, completed rerun is a read-only no-op; use a new name after a failure. -
--areas allis the default, and it fills each panel. Thecopilot-creditsarea writes the preview credit-balance history (daily sweeps for up to 92 days, per-service balances that reset monthly, three policies, two tenant balances, and deliberate gaps). The demo's agent-cost data supplies the billed Copilot Studio ledger, per agent and per person, andcopilot-historywrites prompt and response metadata. The Studio ledger and the credit balances are separate sources, and the report never adds them together. Use--areasto generate only some areas, and note that appends to an existing database skip the credit history and the agent costs. - Since format
contoso-demo-v6the interaction history is persona-driven. A database generated in v5 or earlier has none of that: generate a new one under a new name. -
The demo has no assumptions. The report starts with no prices or productivity assumptions, so until an administrator sets them under Administration → Copilot & reporting → Copilot investment assumptions the page shows the evidence and withholds every money figure. Saving them needs the
Storageconnection string (for exampleUseDevelopmentStorage=truewith Azurite). Any reader can try figures with What-if, without saving, and Try illustrative example figures is the quickest way to see the page with money on it. - The run prints the
ImportJobSettingsandCopilotCostConnectionEnabledvalues the web application needs. The portal decides what it can measure from those settings, not from the rows in the database. Never connect a real Graph reader to a demo web application. - Credit rates, policies and pools are illustrative values, not Microsoft's prices or catalogue.
The generator's own documentation is the Tests.FakeDataGen README.
- Money is modelled, not measured. The page applies your assumptions to observed active days. It cannot show that Copilot caused a saving, and whether time given back becomes a saving depends on how the time is used.
- What-if figures are never saved. They apply in your browser tab and to a workbook downloaded from it, and nobody else sees them.
- Consumed credits are each person's latest reading only, with an unconfirmed accounting period. The page cannot turn successive readings into a daily bill, so they stay beside the return and are stress-tested, never added into it.
- Preview source. The consumed-credit readings come from a beta Microsoft Graph API whose contract may change (Copilot credit history (preview)).
- Per-user Studio figures are by environment, not by agent.
- People beyond the adoption analysis's row limit are not analysed. They count as licences and are left out of value, and the page says how many.
- The weekly trend covers the whole tenant and needs the Copilot audit import.
- Licence history. Where it is missing, the licence cost assumes today's licence was held all period, and says so. The demo does not generate licence history.
- Prompt detail is metadata. The interaction history stores no prompt text, so the page can count prompts and show what they were about, but never what was typed.
- Very large tenants. At 200,000 users an unscoped, long-window credit trend still reads about 2 GB of service rows (the result is cached afterwards). On the pull request's synthetic tenant the same 90-day trend scoped to 20,000 people took about a fifth of the page reads and about a quarter of the time, so a filter that narrows the people helps on a tenant that size. Those timings are from LocalDB on one machine; Azure SQL was not measured.
Return to Web Portal · Copilot spend · Copilot Investment Assumptions · Copilot credit history (preview)
- Copilot analytics overview
- Copilot Adoption user guide
- Copilot Adoption setup (admins)
- Work Trend Index
- Copilot investment
- Copilot spend
- Agent costs
- Prompt categories
- Copilot credit history (preview)
- Agent 365 package catalog
- The Copilot data in depth
- Prerequisites
- App registrations setup
- Install with the installer
- Verify the deployment
- Security & permissions model
- Private endpoints (optional)
- Certificate authentication (optional)
- Manual installation
- Activity & usage analytics (Power BI)
- SharePoint page tracking