Which backend to build on — Dataverse or a SharePoint List — is one of the earlier architectural decisions in any Power Platform solution, and it’s not really a matter of preference. Dataverse handles relational data, fine-grained security, and scale that SharePoint Lists were never designed for; SharePoint Lists are already included in your M365 plan and are genuinely the better fit for anything simple. The right answer depends on your data’s actual shape, not which one sounds more “enterprise.”
In this post: Licensing and prerequisites for Dataverse · Getting started with Dataverse · When to use Dataverse vs. SharePoint List · Best practices · The hybrid option · Migration path: outgrowing a SharePoint List · When would you actually use this? · Related reading
Licensing and prerequisites for Dataverse
| Scenario | Required license |
|---|---|
| Power Apps app users | Power Apps per-app or per-user license |
| Basic M365/Teams users | Limited to Dataverse for Teams only |
| External users (B2B/portals) | Azure AD B2B + Power Apps Portals license |
| Admins/developers | Power Platform admin or maker role |
SharePoint Lists come free with your M365 plan; Dataverse’s richer functionality comes with a real licensing cost attached. That’s not a minor line item — it’s often the deciding factor before the technical comparison even matters.
Getting started with Dataverse
- Create a Power Platform environment from the Power Platform Admin Center.
- Enable Dataverse within that environment.
- In Power Apps, create a new table (formerly “entity”), define columns, and add relationships, business rules, and calculated fields as needed.
- Set up security roles and table permissions to control CRUD access.
- Connect a Canvas App or Model-Driven App as the frontend.
- Optionally, add Power Automate flows for triggers, notifications, or approvals.
When to use Dataverse vs. SharePoint List
| Criteria | Dataverse | SharePoint List |
|---|---|---|
| Relationships | 1:N, N:N, lookups, calculated & rollup fields | Lookup columns only, no native relational model |
| Security | Row and column-level security | List-level and item-level permissions |
| Data modeling | Normalized structure, real data types, business rules | Flat structure, basic column types |
| Scalability | Built for larger, relational datasets | Best for light-to-medium complexity |
| Performance | Server-side processing, holds up at scale | Can slow noticeably past ~5,000 items without index tuning |
| UI | Native fit for Model-Driven Apps | Best via SharePoint pages or Power Apps Canvas |
| API access | Rich APIs, SDKs, OData | REST API, CSOM — not built for relational queries |
| Cost | Requires Power Apps licensing | Included in most M365 plans |
| Audit and logging | Built-in audit logs, rich metadata | Version history and manual tracking only |
A quick mapping to make this concrete: HR employee profile management and a CRM-style app with multiple related tables both belong on Dataverse. An intranet request form with an attachment, or a feedback form embedded in a SharePoint site, are exactly what SharePoint Lists were built for — adding Dataverse licensing overhead there buys you nothing the list didn’t already do. Field data collection needing offline support leans Dataverse, since its offline story is more mature than a SharePoint-backed Canvas app’s.
Best practices
For Dataverse: normalize into multiple related tables rather than one flat table; use custom security roles to scope access precisely; reach for Model-Driven Apps when the UI should be data-centric rather than custom-designed; use business rules, Power Automate, and plugins for logic rather than duplicating it client-side. Keep an eye on storage — the per-user accrual is still 250MB per Power Apps license, though Microsoft significantly raised the base tenant storage entitlements in December 2025, so actual available capacity is likely higher than older documentation suggests. Check current entitlements before assuming you’re storage-constrained.
For SharePoint: keep lists under roughly 5,000 items, or index the columns you filter/sort on if you can’t; build the UI in Power Apps Canvas rather than relying only on native list views; use lookup columns sparingly, since too many measurably hurts performance; and recognize when a use case (forms, file attachments, intranet data) is exactly what this was built for, rather than reaching for Dataverse by default.
The hybrid option
It doesn’t have to be all-or-nothing. A common pattern: core structured data (customer records, case data) lives in Dataverse, while document metadata and attachments stay in SharePoint, with Power Automate handling the integration between the two. This lets each piece of the solution sit on the backend it actually fits, instead of forcing everything onto one.
Migration path: outgrowing a SharePoint List
This is the question that comes up once a “simple” SharePoint List has quietly become the backbone of a real business process — can it move to Dataverse without a rebuild from scratch? Mostly yes, and Microsoft has made the mechanical part easier than it used to be.
- In Power Apps, go to Tables > Create with SharePoint list. The wizard (Copilot-assisted) reads the list’s columns and proposes a Dataverse table schema — names, data types, and layout — rather than starting from a blank table.
- Review the proposed schema before accepting it. Automatic type mapping isn’t always a perfect match — SharePoint choice columns, lookup columns, and calculated columns are the ones most likely to need manual correction rather than a straight pass-through.
- The wizard generates both the Dataverse table and a working Canvas App as a starting point — rows begin appearing while the rest of the data continues importing in the background. Treat the generated app as a scaffold, not a finished product.
- Rebuild security from scratch rather than expecting it to carry over. SharePoint’s item/list permission model and Dataverse’s security-role model aren’t equivalent, so this step is design work, not a migration checkbox.
- For recurring or large-scale imports instead of a one-time move, a Dataflow (Data > Dataflows > New dataflow, SharePoint list as the source) is the better tool than the table wizard.
What doesn’t move automatically: version history, any Power Automate flows built against the old list (they’ll need repointing to the new table), and file attachments, which need their own migration path since Dataverse handles file/image columns differently than SharePoint’s attachment model. Budget real time for testing before cutting the old list off — treat the wizard as the fast 80%, not the whole job.
The licensing cost is often the real deciding factor before the technical comparison even matters — SharePoint Lists are already in your M365 plan; Dataverse isn’t.
When would you actually use this?
- You’re building something with real relational structure — multiple related entities, row-level security, business rules — and licensing for Dataverse is on the table: Dataverse.
- You need a simple form, a lightweight intranet tool, or something with file attachments and don’t want to add licensing overhead: SharePoint List.
- Different parts of the same solution have genuinely different needs — structured core data plus document attachments: the hybrid pattern, not a forced single choice.
Related reading
- Power Apps Model-Driven Apps vs Canvas Apps — the app-type decision that pairs directly with this one, since Model-Driven Apps assume Dataverse.
- Choosing The Right Variable Type in PowerApps — once the data source is decided, this covers how to actually work with it inside the app.
That’s the comparison. Power Platform is flexible enough to mix and match per module — comment below if your use case splits the difference.
App Catalog Authentication Automation Backup Compliance Content Type CSS Flows Google Javascript Limitations List Metadata MFA Microsoft Node NodeJs O365 OneDrive Permissions PnP PnPJS Policy PowerApps Power Automate PowerAutomate PowerPlatform PowerShell React ReactJs Rest API Rest Endpoint Security Send an HTTP Request to SharePoint SharePoint SharePoint List SharePoint Modern SharePoint Online SPFX SPO Sync Tags Teams Termstore Versioning



Pingback: Power Apps Model-Driven Apps vs Canvas Apps: Which Is Better and When to Use Which? - Tips by Bits
Pingback: Choosing The Right Variable Type in PowerApps - Tips by Bits
Pingback: Common PowerApps Utility Functions: A Quick Overview with Use Cases - Tips by Bits