Cowork Plans puts plan visibility, requests, pauses and approvals in one simple app - so business users choose the plan that fits the way they work, managers approve in a click, and administrators keep everything aligned with organisational policy.
🎁 Free to use and share - worldwide
Why it exists
Without a front door, people don’t know which plan they’re on, requests arrive over email and chat, approvals get lost, and admins reconcile groups and spending policies by hand. Cowork Plans replaces all of that with one transparent, governed experience.
Everyone sees their current assignment, their monthly credit allowance and how the available plans compare - at a glance.
Pick the plan that matches the work, add a business justification, choose permanent or temporary, and submit.
Requests route to the right manager automatically. The current plan stays active until the request is approved.
Departments only see the plans they’re entitled to, and every change lands back in the right group and spending policy.
How it works
The user is recognised automatically - their department, role and current plan are shown on entry.
Plan cards show the monthly allowance and what each tier is best for, so the choice is obvious.
A confirmation dialog captures the justification, duration and end date before anything is sent.
On approval, group membership and the matching spending policy are updated - no manual admin work.
Product tour
Plans are presented as clear cards - allowance, who each tier suits, and what it unlocks. The current plan is badged, and a status panel confirms it’s active.
A confirmation dialog summarises the plan, its user limit and the approving manager, then captures a business justification and whether the change is permanent or temporary - with an end date.
Going on holiday or extended leave? Users can pause their subscription to a chosen date instead of consuming credits they won’t use. Pausing can be enabled or disabled centrally.
Administrators choose exactly which plans each department can see and request - from the CEO Office to Front Line teams - so entitlements follow organisational policy instead of individual negotiation.
A single settings screen controls the pause group, app administrators, the vacation phrases the app recognises, whether pausing is enabled, and whether manager approval is required.
Under the hood
No custom infrastructure to run. The app sits on the platform you already govern - Microsoft Entra groups for membership, SharePoint lists for configuration and request history, and Copilot Cowork spending policies for the limits themselves.
The payoff
People stop asking “which plan am I on?” - and admins get a written record of every request, justification and approval.
Group membership and spending policy changes follow the approval instead of a manual checklist.
Entitlements per department, manager approval for upgrades, and pausing during leave keep consumption intentional.
Ten steps to stand up the SharePoint data layer, Entra security groups, Cowork spending policies, the Power Platform solution and the site permissions that let everyone submit requests. Allow around 90 minutes end to end.
Current version: CoworkPlan_1_0_0_9.zip
SharePoint Administrator (or site-creation rights), Site Owner on the new site (to set permissions), Entra ID Groups Administrator (to create security groups), Copilot/Cowork admin rights (to create spending policies), and System Administrator on the target Power Platform environment. Complete the steps in order - later steps depend on IDs produced by earlier ones.
Download first: the solution package (Step 8) and the five CSV files (Step 2). Both are in the same /solution folder of the repository.
Title optional on two listshttps://<tenant>.sharepoint.com and select Create site.| Field | Value |
|---|---|
| Site name | Cowork Plan Management |
| Site address | /sites/CoworkPlanManagement |
| Site owner | The account performing this deployment (the “deployment account”) |
| Language | English |
Record this now: Site URL = https://<tenant>.sharepoint.com/sites/CoworkPlanManagement. Every later step and the Power Platform connection reference it.
They live in the same solution folder as the package you downloaded. Right-click each link and choose Save link as…, keeping the file name exactly as it is:
Each CSV was exported from SharePoint and carries its own column schema in the first line, so SharePoint recreates the correct column types automatically. Do not open, re-save or edit the CSV files in Excel - that strips the schema line and every column imports as plain text.
| # | CSV file | List name to use | Rows | Purpose |
|---|---|---|---|---|
| 1 | Departments.csv | Departments | 0 (structure only) | Department list with an approver per department |
| 2 | Cowork Plans.csv | Cowork Plans | 4 plans | Plan catalogue: name, description, credit limit, power level, security group ID |
| 3 | Department plans.csv | Department plans | 0 (structure only) | Mapping table: which plans each department may request |
| 4 | Cowork Plan Requests.csv | Cowork Plan Requests | 0 (structure only) | Transaction list - every user request, approval and expiry |
| 5 | Cowork Plan App Settings.csv | Cowork Plan App Settings | 6 settings | Global switches: approvals, pause group, admin e-mails, vacation phrases |
If a list imported with the wrong columns, delete it (Settings → List settings → Delete this list), then re-import from the original untouched CSV.
Title optional on the Department plans and Cowork Plan Requests listsNeither list uses the built-in Title column - Department plans only stores the DepartmentID/PlanID pair, and Cowork Plan Requests records the requester in its own columns. Title is mandatory by default, which makes the Power Automate “create item” action fail. Turn the requirement off on both lists:
Both lists must be changed. If Title is left mandatory on Cowork Plan Requests, every plan request fails at the point the flow writes the row - and the failure surfaces only when a user submits a request, not during deployment.
One security group is required per plan, plus a fifth group for the pause capability - five groups in total, all of them required. The Power Automate flows add and remove users from these groups, and every Cowork spending policy is targeted at one of them.
The pause group is where users are moved when their consumption is temporarily suspended (for example while they are on vacation or leave). It carries its own spending policy with the minimum credit allowance, so a paused user keeps access but consumes almost nothing until the flow moves them back to their normal plan group.
https://entra.microsoft.com → Groups → All groups → New group.| Field | Value |
|---|---|
| Group type | Security |
| Group name | See table 4.2 |
| Membership type | Assigned (must not be dynamic - the flow manages membership) |
| Entra roles can be assigned | No |
| Owners | The account performing this deployment |
| Members | Leave empty |
Why the owner matters: add the deploying account as group Owner on all five groups. A group owner can add and remove members through the Office 365 Groups / Entra connector without any tenant-level admin consent, so the Power Automate flows run under that identity with no extra permissions or application registration.
| Group name | Used for |
|---|---|
| Cowork - Getting Started | Plan 1 - 3,000 credits / month per user |
| Cowork - Business | Plan 2 - 10,000 credits / month per user |
| Cowork - Business Plus | Plan 3 - 50,000 credits / month per user |
| Cowork - Business Catalyst | Plan 4 - no credit limit |
| Cowork - Paused | Required. Group 5 - users temporarily paused (vacation/leave). Gets the pause spending policy with the minimum credit allowance. Its object ID must be entered as the Value of the Pause Group item in Cowork Plan App Settings (Step 6.1). |
…/GroupDetailsMenuBlade/~/Overview/groupId/ab36b72a-3f84-4eb4-a217-542b04d0ce63./groupId/ - that 36-character GUID is the Security Group ID. (The same value appears on the group’s Overview page as Object Id; either source is fine.)| Plan | Group name | Security Group ID (paste yours here) |
|---|---|---|
| Getting Started | Cowork - Getting Started | |
| Business | Cowork - Business | |
| Business Plus | Cowork - Business Plus | |
| Business Catalyst | Cowork - Business Catalyst | |
| Pause (no plan) | Cowork - Paused |
The imported Cowork Plans list already carries the GUIDs from the source tenant. They are not valid in your tenant and must be replaced with the IDs you collected in Step 5.
| ID | Title | Power level | Replace Security Group ID with |
|---|---|---|---|
| 1 | Getting Started | 1 | ID of Cowork - Getting Started |
| 2 | Business | 2 | ID of Cowork - Business |
| 3 | Business Plus | 3 | ID of Cowork - Business Plus |
| 4 | Business Catalyst | 4 | ID of Cowork - Business Catalyst |
Open Cowork Plan App Settings and set the tenant-specific values. Every item is edited the same way: select the row, choose Edit, and replace the text in the Value column. The two mandatory tenant-specific entries are Pause Group and Admins M365 Email - the application will not work correctly until both are set.
| Title | Set Value to |
|---|---|
| Pause Group (required) | The object ID of your Cowork - Paused security group, copied from the URL in Step 5. Paste the GUID only, with no spaces, quotation marks or the group name. |
| Admins M365 Email (required) | The e-mail addresses of the primary application administrators - the people who own the app after deployment and receive its administrative notifications. Separate multiple addresses with a semicolon and no spaces, e.g. first.admin@contoso.com;second.admin@contoso.com. Replace the sample addresses that arrived with the import; do not leave them in place. |
| Manager approval | true to require manager approval for upgrades, otherwise false |
| Downgrade approval | true to require approval for downgrades, otherwise false |
| Pause Enabled | true to enable automatic pausing on vacation, otherwise false |
| Vacation phrases | Comma-separated keywords detected in out-of-office messages (adjust for your region/languages) |
Enter true/false in lower case exactly as shown - the flows compare the text literally.
Each plan’s credit allowance is enforced by a spending policy scoped to that plan’s security group. Create one policy per plan, in ascending order of generosity, plus a fifth pause policy for the pause group - five policies in total.
| Policy name | Assign to security group | Monthly limit per user | Services in scope |
|---|---|---|---|
| Cowork – Getting Started | Cowork - Getting Started | 3,000 credits | Copilot Cowork, Work IQ API |
| Cowork – Business | Cowork - Business | 10,000 credits | Copilot Cowork, Work IQ API |
| Cowork – Business Plus | Cowork - Business Plus | 50,000 credits | Copilot Cowork, Work IQ API |
| Cowork – Business Catalyst | Cowork - Business Catalyst | No limit | Copilot Cowork, Work IQ API |
| Cowork – Paused | Cowork - Paused | The lowest allowance your portal permits - set the smallest selectable credit amount so paused users consume next to nothing | Copilot Cowork, Work IQ API |
How pausing works: when a user is paused, the flow removes them from their plan group (retaining it in PreviousSecurityGroupID) and adds them to Cowork - Paused, so the minimum-credit pause policy applies. When the pause ends, the flow reverses the move and the original plan policy takes effect again. Pausing is only active when Pause Enabled is true and Pause Group holds a valid group ID.
A user must belong to exactly one plan group at a time. The flow removes the previous group (kept in PreviousSecurityGroupID) before adding the new one - do not add users to these groups manually.
https://admin.powerplatform.microsoft.com) → Environments.Download the ready-made package - no source environment needed:
Current version: CoworkPlan_1_0_0_9.zip · view on GitHub
Some browsers flag .zip downloads - choose Keep. Do not unzip the file; Power Platform imports the .zip as-is.
Exporting from your own environment instead? Open make.powerapps.com → Solutions → select the solution → Export solution → Publish all customisations → Next → choose Managed for production (Unmanaged only if you intend to keep customising) → Export.
make.powerapps.com, switch to the target environment (top-right environment picker).CoworkPlan_1_0_0_9.zip, then Next.| Variable | Value |
|---|---|
| SharePoint site URL | https://<tenant>.sharepoint.com/sites/CoworkPlanManagement |
| Cowork Plans list | Cowork Plans |
| Cowork Plan Requests list | Cowork Plan Requests |
| Departments list | Departments |
| Department plans list | Department plans |
| App settings list | Cowork Plan App Settings |
Users write directly to the Cowork Plan Requests list when they submit a plan request, so they need more than read access on that one list - but nothing more anywhere else on the site. The pattern below grants exactly that: Visitor (read-only) across the site, plus a purpose-built permission level on the requests list alone.
| Who | Site-level access | On the Cowork Plan Requests list |
|---|---|---|
| Everyone except external users | Visitors (read) | The custom Submit request level from 9.2 |
| App administrators | Members (edit) at minimum | Inherited from their site membership |
| External users | No access | No access |
Do not grant Edit to everyone as a shortcut. Site-wide Edit would let any user rewrite the plan catalogue, department entitlements and app settings, and delete other people's requests.
Visitors cannot create list items, and Contribute would let users delete their own rows - which would break the request history the flows rely on. Copy Edit and remove the two capabilities you do not want:
Submit request (add a short description, e.g. “Add and edit own requests; cannot delete”).
Permission changes can take a few minutes to propagate. If a pilot user hits an error when submitting, wait, then have them re-open the app before investigating further.
Title is no longer mandatory on Department plans - or on Cowork Plan Requests.Smoke test: submit a plan request as a pilot user → the approval reaches the manager → approve → a new row lands in Cowork Plan Requests with the correct SecurityGroupID → the user appears in the matching Entra group within a few minutes → the spending policy applies to that user.
Rollback: if the smoke test fails, turn the flows Off, correct the configuration (usually a list name, an environment variable, or a mismatched group ID), turn the flows back On and re-run the test. No data is lost - all state lives in the SharePoint lists.
Follow the steps in order · further sections to be added.