Many guides still say the fastest way to move a SharePoint list to Dataverse is the “Create with SharePoint list” wizard. It’s quick when it works, but in my tests it failed twice. A Power Query dataflow is the method that actually delivered.
My dataflow copied 623 SharePoint items into a new Dataverse table in 1 minute 31 seconds, with zero failed rows. You also get full control over which columns come across and how they’re typed.
In this tutorial, we’ll copy a sharepoint list to dataverse four ways: a dataflow, the preview wizard, Power Automate and an Excel/CSV import. Then we’ll cover tricky column types, a method picker and the checks to run afterward.
The Sample List We’ll Use
Every example uses one SharePoint list called Service Requests on my /sites/SPGuides site. It has 623 items, so it’s big enough to show real behavior. Dataverse is the Power Platform’s database; what Microsoft Dataverse is explains the basics.
| Column | Sample value | Dataverse type after my copy |
|---|---|---|
| Title | Badge access #1010 | Text (primary name column) |
| Status | In Progress | Text |
| Priority | Normal | Text |
| Requester | Adele Vance | Text |
| DueDate | 01/15/2026 | Date and time |
Why move it at all? Dataverse gives you real relationships, row-level security roles and business rules, and lists start to struggle near the 5,000-item list view threshold. My Dataverse vs SharePoint list comparison covers that decision in depth.
Before you start, check three things. You need an environment with a Dataverse database, the Environment Maker security role, and a Power Apps license that includes Dataverse. Microsoft notes that the Developer Plan can’t create dataflows or use Excel import.
Method 1: Copy the List With a Dataflow (Recommended)
Use this for any list over a few hundred items, or when you want to pick columns and refresh later. A dataflow runs Power Query online and loads the result into Dataverse.
Go to make.powerapps.com, pick your environment, and select Dataflows in the left pane. Select + New dataflow, type a name like Service Requests from SharePoint, and select Create.

Leave Analytical entities only unchecked. That keeps it a standard dataflow, which loads real Dataverse tables. On the Choose data source page, select the SharePoint Online list tile.

Enter the site URL, like https://yourcompany.sharepoint.com/sites/SPGuides. Use the root site address with no list or folder path. I kept Implementation 2.0 and reused my organizational account connection.

Select Next. The navigator lists every list on the site. Search for Service Requests, check it, and select Transform data.

The list came in with 28 columns, most of them system columns. I shift-clicked Title through DueDate, right-clicked a header, and chose Remove other columns.

Here’s the step Power Query wrote for that click:
Table.SelectColumns(#"Navigation 1", {"Title", "Status", "Priority", "Requester", "DueDate"})

Select Next. On the destination page, choose Load to new table. The default name, Service Requests, clashed with an existing table, so I renamed it SharePoint Service Request.

In Column mapping, set Unique primary name column to Title. The other columns become new Dataverse columns with your publisher prefix.

Select Next, pick Refresh manually for a one-time copy, and select Publish. The first refresh starts on its own.

To see how it went, open the dataflow’s … menu and select Show refresh history.

Mine ran On demand on 10/22/2026 at 7:51:25 AM, took 00:01:31, and Succeeded.

Open the run’s details to count rows: 623 created, 0 updated, 0 failed.

Finally, open the new table under Tables. All 623 requests are there, with Title, Status and Priority filled in.

How does this work?
The dataflow reads the list through the SharePoint Online list connector, keeps only the five columns in that SelectColumns step, and creates one Dataverse row per item.
Status, Priority and Requester landed as Text columns, and DueDate as Date and time. Title became the primary name column, which is a display field, not a unique key.
So here’s the catch: with no key, every new refresh adds the 623 rows again. Set an alternate key before you schedule refreshes. My full Dataverse dataflow walkthrough covers keys, schedules and incremental refresh.
Method 2: Use “Create with SharePoint List” (Preview)
This wizard tries to build the table, columns and data in one go. When Copilot is on, it also suggests column descriptions and data types. In make.powerapps.com, select Tables, then the Create with SharePoint list (PREVIEW) tile.

The Import a Sharepoint list (preview) dialog opens. Pick a recent site or paste a site URL, choose the list, and select Import. I chose SPGuides and Service Requests.

That opens a data workspace with the SharePoint site linked to a table card. In my environment the card showed a red Couldn’t import badge, with no error text. Retrying gave the same result.

How does this work?
I wondered whether the name clashed with my existing Service Request table. So I tried a 12-item list called TrainingCourses, with no matching table. It failed the same way on 10/22/2026.
Microsoft says the generated metadata “might not be 100% accurate”, so review every column before you create the table. Outside the US and Switzerland, the Copilot part also needs data movement across regions turned on.
It’s still worth one try for a small, simple list, because it’s the fastest path when it works. If you see Couldn’t import, go straight to the dataflow.
Method 3: Copy Items With Power Automate
Use a flow when you need attachments, custom logic per item, or an ongoing sync. Create the Dataverse table first; my guide to create a table in Microsoft Dataverse walks through it.
- Start an instant cloud flow and add the SharePoint Get items action. Turn on Pagination in its settings for big lists.
- Add Apply to each over the item values.
- Inside it, add the Dataverse Add a new row action and map each column. My post on adding Dataverse rows with Power Automate shows lookups and choices.
- For files, add Get attachments, then Get attachment content, then Dataverse Upload a file or an image into a File column.
How does this work?
Each loop turn creates one row, so 623 items means 623 API calls. That’s slower than a dataflow, but you control every value. A File column holds the attachments; see creating a Dataverse file column.
The Dataverse connector is Premium, so the flow owner needs a Premium license. Swap Add a new row for Upsert a row if the flow might run twice.
Method 4: Import a CSV or Excel Export
Use this for a one-time load into a table that already exists. In SharePoint, open the list and select Export > Export to CSV.
In Power Apps, open your table, select Import, then Import data from Excel. Upload the file, wait for Mapping was successful, and select Import.

How does this work?
The importer matches file headers to table columns. Microsoft lists Timezone, multiselect Choices, Image and File as unsupported, plus system fields like Created On. For a fresh table from a file, see creating a Dataverse table from Excel or CSV.
Need it repeatable? A flow can read a CSV and write rows; my CSV import flow for Dataverse does exactly that.
How SharePoint Column Types Land in Dataverse
Simple columns move cleanly. The trouble starts with columns that point at other things. Here’s what to plan for:
| SharePoint column | What to do in Dataverse |
|---|---|
| Single line of text, Number, Date | Map straight across (my DueDate became Date and time) |
| Multiple lines of text | Dataflows strip line breaks; replace them with <br> in Power Query |
| Choice | For a real Choice column, create it in the table first, then load to the existing table |
| Lookup | Add a key on the related table, or the lookup won’t show in the mapping |
| Person or Group | Store the email as text, or map to a lookup with a key |
| Multi-select Choice | Not supported by Excel import; dataflows can’t mix it with single choices |
| Attachments | Not a column; copy them with Power Automate into a File column |
If a column shows Record or List in Power Query, select the expand icon in its header and pick the field you want. Lookups and choices then behave in apps as covered in adding data to a Dataverse table from Power Apps.
Pro Tip: Keep the list’s default view under 12 lookup columns. The SharePoint Online list 2.0 connector fails when a query needs more than 12 lookup joins.
Which Method Should You Use?
| Situation | Best method | Why |
|---|---|---|
| Most lists, any size | Dataflow | Tested: 623 rows in 00:01:31, 0 failed |
| Small, simple list, quick start | Create with SharePoint list | One wizard, but it’s preview and failed for me |
| Attachments or per-item logic | Power Automate | Handles files and conditions |
| One-time load into an existing table | Excel/CSV import | No flow or dataflow to maintain |
Want to keep SharePoint as the source? A SharePoint virtual table shows list data in Dataverse without copying it, and supports create, read, update and delete. It needs a Power Apps or Dynamics 365 license.
More app patterns are in our Power Apps tutorials.
Things to Keep in Mind
- No key means duplicates. Fix: set an alternate key before a second dataflow refresh.
- The preview wizard can fail with Couldn’t import. Fix: switch to a dataflow instead of retrying.
- Status and Status Reason can’t be mapped by dataflows. Fix: set them after the load with a flow.
- Apps still point at SharePoint. Fix: add the new table in Power Apps and swap the data source.
- Counts can drift. Fix: compare the list item count with the Dataverse row count before you retire the list.
Moving a whole app with its tables later? Package it in a Dataverse solution so it travels between environments cleanly.
Once the data is in Dataverse, these guides help you work with it:
Frequently Asked Questions
Can I convert a SharePoint list to a Dataverse table automatically?
Yes. The Create with SharePoint list (preview) tile on the Tables page tries to do it in one step. It failed with Couldn’t import in my 10/22/2026 tests, so I use a dataflow, which copied 623 items with zero failures.
What is the best way to migrate a SharePoint list to Dataverse?
For most lists, a standard dataflow. It lets you choose columns, map types and refresh later. See Create and use dataflows on Microsoft Learn.
How long does a dataflow take to copy a SharePoint list?
My 623-item Service Requests list with five columns took 1 minute 31 seconds on the first refresh. Bigger lists and more columns take longer.
Will a dataflow create duplicate rows when it refreshes?
Yes, if you don’t set a key. Without a key, each refresh creates new rows. With an alternate key, the dataflow updates matching rows and adds only new ones.
Can I move SharePoint list attachments to Dataverse?
Not with a dataflow or Excel import. Use Power Automate: Get attachments, Get attachment content, then the Dataverse Upload a file or an image action into a File column.

Hey! I’m Bijay Kumar, founder of SPGuides.com and a Microsoft Business Applications MVP (Power Automate, Power Apps). I launched this site in 2020 because I truly enjoy working with SharePoint, Power Platform, and SharePoint Framework (SPFx), and wanted to share that passion through step-by-step tutorials, guides, and training videos. My mission is to help you learn these technologies so you can utilize SharePoint, enhance productivity, and potentially build business solutions along the way.
how to migrate the created by display name and person field from SharePoint to dataverse.