Live training: next batches coming soon. Join the waitlist:Waitlists open:Developer Training →Developer →Copilot Studio Training →Copilot Studio →

SharePoint List to Dataverse: Create a Dataverse Table From a SharePoint List (4 Ways)

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.

ColumnSample valueDataverse type after my copy
TitleBadge access #1010Text (primary name column)
StatusIn ProgressText
PriorityNormalText
RequesterAdele VanceText
DueDate01/15/2026Date 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.

New dataflow dialog with the name Service Requests from SharePoint and the Create button

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.

Power Query Choose data source page with the SharePoint Online list tile selected

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.

SharePoint Online list connection settings with the site URL and organizational account connection

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

Power Query navigator with the Service Requests list checked and a preview of its columns

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.

Power Query editor right-click menu with Remove other columns highlighted

Here’s the step Power Query wrote for that click:

Table.SelectColumns(#"Navigation 1", {"Title", "Status", "Priority", "Requester", "DueDate"})
Applied step formula Table.SelectColumns keeping five Service Requests columns

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.

Dataflow load settings with Load to new table and the table name SharePoint Service Request

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

Dataflow column mapping with Title chosen as the unique primary name column

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

Dataflow refresh settings with Refresh manually and the frequency-based refresh options

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

Dataflows list row menu with Show refresh history highlighted

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

Dataflow refresh history showing a Succeeded refresh that took 1 minute 31 seconds

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

Refresh details showing 623 rows created, 0 rows updated and 0 failed rows

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

New Dataverse table SharePoint Service Request showing the copied Title, Status and Priority data

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.

Power Apps Tables page with the Create with SharePoint list preview tile highlighted

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.

Import a SharePoint list preview dialog with the SPGuides site and Service Requests list selected

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.

Data workspace with the Service Requests table card showing a Couldn't import error

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.

  1. Start an instant cloud flow and add the SharePoint Get items action. Turn on Pagination in its settings for big lists.
  2. Add Apply to each over the item values.
  3. 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.
  4. 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.

Dataverse table Import menu with Import data with Dataflows and Import data from Excel options

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 columnWhat to do in Dataverse
Single line of text, Number, DateMap straight across (my DueDate became Date and time)
Multiple lines of textDataflows strip line breaks; replace them with <br> in Power Query
ChoiceFor a real Choice column, create it in the table first, then load to the existing table
LookupAdd a key on the related table, or the lookup won’t show in the mapping
Person or GroupStore the email as text, or map to a lookup with a key
Multi-select ChoiceNot supported by Excel import; dataflows can’t mix it with single choices
AttachmentsNot 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?

SituationBest methodWhy
Most lists, any sizeDataflowTested: 623 rows in 00:01:31, 0 failed
Small, simple list, quick startCreate with SharePoint listOne wizard, but it’s preview and failed for me
Attachments or per-item logicPower AutomateHandles files and conditions
One-time load into an existing tableExcel/CSV importNo 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.

1 thought on “SharePoint List to Dataverse: Create a Dataverse Table From a SharePoint List (4 Ways)”

Leave a Comment