How to write/export data directly from Microsoft Fabric to a SharePoint Online List without Power Automate?

Sharma Nikhil (ext.) 0 Reputation points
2026-10-15T10:25:23.1966667+00:00

Hi everyone,

I am building an automated enterprise data pipeline in Microsoft Fabric (Medallion architecture) using scheduled pipelines and PySpark Notebooks.

My final stage requires pushing a clean, curated Gold Lakehouse table (ranging from 500 to 3,000+ rows) directly into an existing SharePoint Online List.

Currently, we are using a workaround: Dataflow Gen2 exports the data as a CSV file to a SharePoint document library, which then triggers a Power Automate cloud flow. The cloud flow parses the CSV and uses a loop to delete the old items and insert the new rows into the SharePoint list.

However, this low-code approach is highly inefficient, hits API throttling ceilings, takes a long time to run, and risks breaking when row counts increase.

When attempting to streamline this by setting the data destination inside Dataflow Gen2, we discovered that SharePoint Online List is completely unavailable as a "Data Destination" option (it only appears as an inbound data source).

My questions:

  1. Is there an out-of-the-box or native native Fabric feature (e.g., via Pipelines, Copy Activities, or shortcuts) that allows us to bulk-write or overwrite data tables directly into a SharePoint Online List?
  2. If a native connector for writing doesn't exist yet, what is the recommended, high-performance enterprise method to achieve this direct bulk sync entirely within the Fabric ecosystem? (e.g., executing Microsoft Graph API batch requests via a PySpark notebook, using an Azure Logic App, or another method?)

Any architecture advice, script blueprints, or best practices would be greatly appreciated.

Thank you!

Microsoft 365 and Office | SharePoint | Development
0 comments No comments

2 answers

Sort by: Most helpful
  1. Aetherin 3,005 Reputation points Independent Advisor
    2026-10-15T11:09:50.3333333+00:00

    Hi @Sharma Nikhil (ext.),

    Thank you for providing such a detailed description of your scenario.

    I noticed that your question was posted under Microsoft 365 and Office | SharePoint | Development. However, based on the details you provided, the scenario is primarily related to Microsoft Fabric Data Factory architecture, including Dataflow Gen2, pipelines, notebooks, and Fabric's available data destinations, rather than SharePoint Online List development itself.

    Therefore, contributors in this SharePoint community, including myself, may not have the specialized Fabric expertise needed to provide the most accurate guidance for this scenario.

    To help you get the most accurate and relevant guidance, I recommend posting your question in the Microsoft Fabric Community. You may select Data Factory > Pipelines or Data Factory > Dataflow, depending on which part of the implementation you want to focus on.

    User's image User's image

    That community is better placed to advise on Fabric-native integration options, architecture design, Microsoft Graph batching, authentication, throttling, and notebook implementation. They’ll likely be able to provide more targeted troubleshooting steps and practical suggestions based on real-world scenarios.

    I apologize for pointing you to a different community, but my goal is to connect you with the appropriate experts as quickly as possible and help you avoid unnecessary delays. The Microsoft Fabric Community will be in a much better position to assist with this scenario efficiently.

    Thank you so much for your understanding and patience!

    Was this answer helpful?

    0 comments No comments

  2. AI answer

    2026-10-15T10:26:19.6433333+00:00

    Microsoft Fabric currently supports the SharePoint Online List connector only as a source, so implement the write in a scheduled Fabric notebook by calling Microsoft Graph with app-only authentication, JSON batches, and incremental upserts rather than deleting and re-creating the entire list.^1^

    Native Fabric options

    There is no documented SharePoint Online List destination for:

    • Dataflow Gen2
    • Pipeline Copy activity
    • Copy job

    The connector matrix marks each of these as source/-, meaning source-only.^1^

    SharePoint Online File (Preview) is a different connector. It can write files into a document library, but it cannot populate list items.^2^ Shortcuts likewise do not provide a transactional SharePoint-list sink.

    Use this Fabric pipeline:

    1. Build the Gold Delta table.
    2. Run a notebook that reads only the columns required by SharePoint.
    3. Compare rows by a stable business key stored in a dedicated SharePoint column.
    4. Classify records as:
      • Create
      • Update
      • Delete, only if destination rows must exactly mirror the Gold table
      • Unchanged
    5. Submit creates, updates, and deletes through Microsoft Graph JSON batching.
    6. Persist the run status, failed keys, Graph item IDs, and optionally eTags in a Fabric control table.
    7. Retry only failed operations.

    Graph exposes stable v1.0 operations for creating, updating, and deleting list items.^3^^4^^5^

    Typical request paths are:

    POST   /sites/{site-id}/lists/{list-id}/items
    PATCH  /sites/{site-id}/lists/{list-id}/items/{item-id}/fields
    DELETE /sites/{site-id}/lists/{list-id}/items/{item-id}
    

    For updates and deletes, retain the SharePoint item ID. Use if-match with the stored eTag when concurrent edits must not be overwritten; an eTag mismatch returns 412 Precondition Failed.^4^

    Authentication and permissions

    For unattended execution, register a Microsoft Entra application and use application authentication.

    Prefer resource-scoped access:

    1. Grant the application Sites.Selected.
    2. Grant admin consent.
    3. Explicitly assign the application write access to the target SharePoint site.

    Sites.Selected alone does not grant access to any site; a separate site-level assignment is required.^6^

    Store credentials in Azure Key Vault, not in notebook source. Fabric’s notebookutils.credentials.getSecret retrieves Key Vault secrets at runtime, and long-running jobs must refresh expiring tokens.^7^

    Batch-write blueprint

    Graph JSON batches accept at most 20 individual requests. A batch HTTP response can be 200 while individual operations failed, so inspect every inner response.^8^

    This abbreviated notebook helper assumes token has already been acquired securely:

    import requests
    
    def send_create_batch(token, site_id, list_id, rows):
        requests_body = [{
            "id": str(i),
            "method": "POST",
            "url": f"/sites/{site_id}/lists/{list_id}/items",
            "headers": {"Content-Type": "application/json"},
            "body": {"fields": row}
        } for i, row in enumerate(rows, 1)]
    
        response = requests.post(
            "https://graph.microsoft.com/v1.0/$batch",
            headers={"Authorization": f"Bearer {token}",
                     "Content-Type": "application/json"},
            json={"requests": requests_body},
            timeout=120
        )
        response.raise_for_status()
        return response.json()["responses"]
    

    Call it with chunks of no more than 20 rows. Use equivalent PATCH and DELETE entries for updates and removals. Map using SharePoint internal column names, and normalize Spark timestamps, decimals, nulls, lookup values, and person fields before constructing fields.

    Performance and reliability

    Batching reduces network round trips; it does not bypass SharePoint throttling. Each inner request is evaluated separately. For inner responses with 429, retry only those requests after the supplied Retry-After interval; batched requests are not automatically retried by Graph SDK retry handlers.^9^

    Also handle SharePoint 503 responses, reduce concurrency, avoid traffic spikes, and honor both Retry-After and RateLimit headers.^10^

    For 500–3,000 rows:

    • Avoid full delete/reload unless list item IDs and history are intentionally disposable.
    • Hash the writable Gold columns and update only changed rows.
    • Limit concurrent batches rather than launching Spark executors that write independently.
    • Make retries idempotent by querying or recording the business key before retrying creates.
    • Write failures to a Delta control table and fail the pipeline only after bounded retries.
    • Schedule large replacement runs outside peak usage periods where possible.

    An Azure Logic App is reasonable when centralized connector management is required, but it is not necessary here. A Fabric notebook keeps transformation, orchestration, audit state, and Graph synchronization in the existing Fabric pipeline while eliminating the CSV and Power Automate stages.


    References

    1. SharePoint Online List connector overview
    2. Configure SharePoint Online File in a copy activity (Preview)
    3. Create a new item in a list
    4. Update listItem
    5. Delete an item from a list
    6. Understanding Resource Specific Consent for Microsoft Graph and SharePoint Online
    7. NotebookUtils credentials utilities for Fabric
    8. Combine multiple HTTP requests using JSON batching
    9. Microsoft Graph throttling guidance
    10. Avoid getting throttled or blocked in SharePoint Online
    AI-generated content may be incorrect. Read our transparency notes for more information.

    Was this answer helpful?

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.