SharePoint list to Microsoft Fabric Lakehouse and OneLake

Three ways to get a SharePoint list into Fabric: Microsoft's mirroring preview, SPSync's Parquet or Delta files on ADLS Gen2 behind a OneLake shortcut, or an Azure SQL copy.

Book a call

Talk through your use case, see further walkthroughs or demos, and set up a trial in your own environment.

Last updated

Status: Coming soon · product: SPSync for Warehouses & Lakes . We prioritise destinations by demand. Book a call to tell us you need it.

SPSync copies SharePoint lists one way, out of SharePoint, which stays the system of record, and it does not write to Microsoft Fabric yet. A native Fabric destination is on the roadmap. What ships today is Parquet and Delta Lake on Azure Data Lake Storage Gen2, which a Fabric Lakehouse reads through a OneLake shortcut. Microsoft now mirrors SharePoint lists into Fabric itself, so this page compares the three routes and says when each one fits.

Which route gets a SharePoint list into a Fabric Lakehouse?

Fabric mirroringSPSync to ADLS Gen2, plus a shortcutSPSync to Azure SQL, read by Fabric
StatusMicrosoft previewSPSync destinations that ship todaySPSync destination that ships today
Where the copy livesOneLakeYour storage accountYour Azure SQL database
Fabric capacityNeeded to set it up and query itNeeded only to query in FabricNeeded only to query in Fabric
Lookup and person columnsNot described on Learn{col}_id and {col}_value; people as {col}_user_id joined to sp_usersThe same as ADLS Gen2
Who else reads the copyTools that query the SQL analytics endpointSpark, DuckDB, Synapse serverless SQL, Power BIAny SQL Server client or application

Pick mirroring if your reports and agents already live in Fabric and a preview is acceptable. Pick an SPSync route if the copy has to serve readers outside Fabric, or you want to control the schema, the schedule and the storage account it sits in.

Fabric mirroring for SharePoint lists

Microsoft’s Mirroring SharePoint List in Microsoft Fabric continuously replicates a list into OneLake and gives the mirrored database an autogenerated, read-only SQL analytics endpoint. The same page says Microsoft does not charge for the compute that replicates the data, or for OneLake storage up to your capacity size; you pay for the capacity compute used when you query it. The mirroring overview lists SharePoint List as a preview source, and the set-up tutorial asks for a workspace on a Trial or Premium Fabric capacity.

The Learn pages do not say how lookup and person columns arrive, or what a deleted item looks like in the mirror. Mirror one list and check both before you build reports on it. The comparison of SPSync with Fabric’s own tools covers Dataflow Gen2 and Copy jobs as well. If your team has no Fabric capacity yet, the post on choosing between a mirror and a SQL replica sets out what running a capacity involves and what a replica in SQL Server or Postgres gives you.

SharePoint list to OneLake with SPSync today

Two shipped SPSync destinations write to an ADLS Gen2 container you own, and a OneLake shortcut points a Lakehouse at that container without copying the files.

  1. Replicate the lists with the Azure Data Lake Storage Gen2 destination. Each table gets a folder holding current.parquet, replaced every run, and one history file per run.
  2. In a Fabric Lakehouse, create a shortcut to the container in the Files folder.
  3. Read current.parquet from a notebook, or load it into a Lakehouse table with a notebook or pipeline on your own schedule.

Microsoft’s shortcut page explains the limit of that route: the Files folder does no table discovery, so Parquet there stays as files. A shortcut in the Tables folder whose target is in Delta format is recognised as a table. SPSync’s Delta Lake destination writes Delta tables to ADLS Gen2 through an abfss:// URL, merged on the SharePoint item ID each run, so a Tables shortcut to one of its table folders should appear in the Lakehouse as a table with no load step. We have not yet tested that pairing on a live Fabric workspace, so try it on one table before you depend on it.

Either way the shape is SPSync’s own. A lookup becomes {col}_id and {col}_value, a person column points at one shared sp_users table, and a multi-choice column gets a child table. Deleted items stay in the data with sp_deleted_at set, so filter on that column in reports. Managed metadata columns are skipped and reported on each run. The schema reference has the full column mapping.

A SQL replica in Azure SQL, read from Fabric

SPSync’s Azure SQL destination keeps each list as a table in Azure SQL Database and updates it from SharePoint’s delta query on every run. Power BI reads that database directly. To bring it into OneLake as well, Azure SQL Database is a source that Fabric mirroring supports, again with free replication compute. That page says databases in the Free, Basic or Standard DTU tiers with fewer than 100 DTUs are not supported. We have not run Fabric mirroring against SPSync’s tables, so read the table and column limitations against your schema first.

This route fits when an application or a SQL Server reporting estate needs the same copy. The database holds the data and Fabric becomes one of several readers.

Can a Fabric data agent read a SharePoint list?

It reads tables, so the list has to reach a table first. Microsoft’s data agent page names lakehouses, warehouses, Power BI semantic models, KQL databases, mirrored databases and ontologies as sources, up to five per agent. For a Lakehouse, the agent uses the tables you select and does not read standalone files unless they are loaded or exposed as tables. Its answers are capped at 25 rows and 25 columns, so it summarises data and does not hand back a whole list.

That gives a Lakehouse-first rule for SharePoint data. A mirrored list, SPSync Delta tables behind a Tables shortcut, SPSync Parquet loaded into a Lakehouse table, or a mirrored Azure SQL copy can each be selected as a source, though the Delta shortcut is the pairing we have not yet tested on a live workspace. Parquet left behind a Files shortcut cannot. Because SPSync turns lookups into key and value columns, the SQL the agent writes can join one list to another on the key.

What a native Fabric destination would decide

The engine would not change. Delta sync, soft deletes, schema evolution and the column mapping above belong to SPSync’s engine, so a Fabric destination inherits them. The open questions are Fabric’s own: whether the target is a Lakehouse table, a Warehouse table or a choice of both, how rows are written to OneLake, and how SPSync signs in to a workspace. None of that has been decided, and this page will not describe it until it is built.

Register interest in a Fabric destination

Tell us what you would sync: Lakehouse or Warehouse, how many lists, roughly how many rows, and how current the data needs to be. Get in touch with that and we will tell you where Fabric sits on the roadmap, and let you know when it ships. When it does, it will appear in the desktop app, SPSync in your Azure and the command-line tool together, as every destination does.

Frequently asked questions

Does SPSync write to Microsoft Fabric today?

Not to a Lakehouse or Warehouse directly. A native Fabric destination is on the roadmap. Today SPSync writes Parquet or Delta tables to an ADLS Gen2 container, and a OneLake shortcut lets a Lakehouse read them where they sit.

Is Fabric mirroring for SharePoint lists a preview?

Yes. On 22 October 2026 Microsoft's mirroring overview lists SharePoint List as a preview source. Check the page again before you put a production report on it.

Can a Fabric data agent read SharePoint list data that SPSync writes?

Only once it is in tables. A data agent reads the Lakehouse tables you select and does not read standalone files, so Parquet behind a Files shortcut has to be loaded into a table first. Delta tables behind a Tables shortcut, a mirrored database or a warehouse are all sources it can use.

Would a native Fabric destination write to a Lakehouse or a Warehouse?

That has not been decided. It is the first question the work will answer, and what you tell us about your workspace feeds into it.

Talk to us about Microsoft Fabric Lakehouse and OneLake

SPSync is licensed per installation and per target family, with Standard Support included. Tell us which targets you need and how many machines, and we will size it with you. See how licensing works.

Script it

Everything you can click, you can script. The CLI, YAML config and automation below reproduce this scenario exactly. See the CLI reference.

# This destination has no --destination-kind in the command line today.
# In the meantime, run this from a shipped destination (Postgres or SQL Server)
# and repoint --connection-string-env at your database.
# YAML for this destination's kind ships with its --destination-kind support.

Cron (this destination nightly):

# every night at 02:00
0 2 * * * cd /opt/spsync && SPSYNC_DB_CONNECTION="$(cat /etc/spsync/db.env)" uv run spsync run replication.yaml >> /var/log/spsync/run.log 2>&1

GitHub Actions:

# .github/workflows/spsync-run.yml
name: SPSync
on:
  schedule:
    - cron: "0 2 * * *"
  workflow_dispatch: {}
jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v3
      - run: uv sync
      - run: uv run spsync run replication.yaml
        env:
          SPSYNC_DB_CONNECTION: ${{ secrets.SPSYNC_DB_CONNECTION }}
          SPSYNC_LICENCE_KEY: ${{ secrets.SPSYNC_LICENCE_KEY }}

Azure DevOps:

# azure-pipelines.yml
schedules:
  - cron: "0 2 * * *"
    branches: { include: [main] }
    always: true
steps:
  - script: uv sync
  - script: uv run spsync run replication.yaml
    env:
      SPSYNC_DB_CONNECTION: $(SPSYNC_DB_CONNECTION)
      SPSYNC_LICENCE_KEY: $(SPSYNC_LICENCE_KEY)

Windows (PowerShell + Task Scheduler):

# Windows Task Scheduler action (see /docs/cli/automation/)
$env:SPSYNC_DB_CONNECTION = (Get-Content C:\spsync\db.env)
uv run spsync run C:\spsync\replication.yaml
schtasks /Create /SC DAILY /ST 02:00 /TN "SPSync" /TR "powershell -File C:\spsync\run.ps1"

macOS (launchd):

# ~/Library/LaunchAgents/io.spsync.run.plist, then: launchctl load ~/Library/LaunchAgents/io.spsync.run.plist

Secrets (licence key, connection strings) come from the environment, so never write them into the YAML. See scheduling and secrets.

Book a call

Tell us about your lists and where they need to go: we will talk through your use case, show further walkthroughs or demos, and set up a trial in your own environment.