SharePoint to Confluence Migration: The Complete Technical Guide
No native migration path exists from SharePoint to Confluence. This guide covers every real method — manual, API, third-party tools — plus data mapping, permissions, and QA.
There is no native migration path from SharePoint to Confluence. Atlassian does not offer a one-click import tool, a migration wizard, or any built-in connector that actually moves SharePoint data into Confluence storage. The Atlassian Community is direct about this: Confluence is not a replacement for SharePoint, since SharePoint is more of a file sharing app and Confluence is a wiki. Therefore, there's no direct migration path for it.
Confluence Cloud's built-in import paths cover Word documents, Google Docs, OneDrive, HTML, and CSV-to-database workflows — not SharePoint itself. (support.atlassian.com) Every method available requires custom API scripts, a third-party enterprise tool, or a managed migration service.
This guide covers the real methods for migrating SharePoint content to Confluence Cloud or Data Center, the hard platform constraints on both sides, and the data-mapping decisions that determine whether your migration preserves content or silently drops it.
| Method | Fidelity | .docx Conversion | Attachments | Link Rewriting | Best For |
|---|---|---|---|---|---|
| Manual Copy-Paste | Low | ❌ | Manual re-upload | ❌ | <50 pages, quick moves |
| UWC (Legacy) | Low | Partial | ❌ (links only) | ❌ | Historical reference only |
| API-Driven Scripts | Medium–High | ✅ (via Mammoth/Pandoc) | ✅ (separate upload) | Partial | Engineering teams with time |
| Enterprise Bridge | Medium–High | ✅ | ✅ | ✅ | On-prem SharePoint, enterprise |
| SharePoint Connector | N/A (not a migration) | ❌ | ❌ | ❌ | Temporary coexistence |
| ClonePartner Managed Migration | Highest | ✅ | ✅ | ✅ | Complex workspaces, zero downtime |
For a detailed breakdown of getting data out of SharePoint before starting any migration, see How to Export Data from SharePoint: Methods, Limits & Migration Prep.
Why SharePoint to Confluence Migration Is Harder Than It Looks
SharePoint and Confluence solve fundamentally different problems, and their data models are incompatible at the storage layer.
SharePoint is a document management and intranet platform. Content lives in multiple forms: .aspx modern pages composed of Web Part JSON structures (canvasLayout → horizontalSections → columns → webparts), document libraries containing .docx, .pdf, and .pptx files with versioned metadata columns, and lists backed by typed columns. The Microsoft Graph SharePoint API has a few key differences with the CSOM APIs. The site resource maps to SPWeb. The root site (SPWeb) in a site collection has a siteCollection facet, which contains information about the SPSite.
Confluence is a wiki-first knowledge base. The Confluence storage format stores the content of pages, page templates, blueprints, blog posts, and comments. This information is for advanced users who need to interpret or edit the underlying markup of a Confluence page. Every page body is XHTML-based XML stored in the body.storage.value field. The Confluence storage format is "XHTML-based." Technically, it's XML, since the storage format doesn't fully comply with the XHTML definition. For example, Confluence includes custom elements for macros and other features. The term "XHTML-based" highlights that much of the storage format is similar to HTML.
When you move from SharePoint to Confluence, you are not just moving files from one server to another. You are translating static documents and structured pages into dynamic wiki pages. If you dump SharePoint Word documents into Confluence as attachments, the content won't be natively editable or searchable, and it won't benefit from Confluence's page tree hierarchy or macro ecosystem.
The structural mismatch runs deep:
- SharePoint sites have no equivalent container in Confluence beyond Spaces
- Document libraries have no Confluence equivalent — files either become page attachments or must be converted to native wiki pages
- SharePoint lists must be rebuilt as Confluence tables, databases, or integrated via macros
- Modern page Web Parts have no macro equivalents in most cases
- SharePoint's permission inheritance model (site → library → item) doesn't map cleanly to Confluence's additive permission model (global → space → page restrictions)
The mismatch gets worse when SharePoint pages depend on non-text web parts, embedded Microsoft 365 components, or custom SPFx logic. Microsoft Graph can give you text web part HTML, but it does not convert SharePoint-specific web parts into Confluence macros or layouts. (learn.microsoft.com)
Understanding SharePoint's current architecture is critical before mapping to Confluence. See The Modern SharePoint Architecture 2026: Transitioning from Subsites to Hub Sites for context on how Hub Sites, associated sites, and subsites affect your migration plan.
The "Connector" Trap: Why Integration Isn't Migration
When you search for SharePoint-to-Confluence solutions, the most visible result is the SharePoint Connector for Confluence on the Atlassian Marketplace. This app connects Confluence with SharePoint & OneDrive, allowing teams to work across both platforms without switching tools.
This is not a migration tool. It embeds SharePoint document libraries and lists inside Confluence pages via macros. This can be useful if you want to surface SharePoint content in Confluence without rebuilding the structure or losing metadata and access controls. It also helps avoid duplication, since the files remain in SharePoint but are accessible from Confluence. If your goal is a full migration into Confluence storage, you'd still need a manual or custom migration approach.
The practical problems:
- You still pay for SharePoint. The data never leaves Microsoft's servers. You are maintaining two enterprise licenses.
- No native searchability. Confluence's global search cannot index the text inside embedded SharePoint documents.
- Vendor lock-in. If you cancel your SharePoint subscription or uninstall the connector app, every Confluence page relying on that macro breaks immediately.
A connector creates a permanent coupling between two platforms. If your goal is decommissioning SharePoint, a connector makes the problem worse, not better.
Use a connector if you need a transition period or a permanent hybrid model. Do not use it if the business goal is to shut down SharePoint storage, move files into native Confluence search and editing, rewrite links to Confluence pages, or stop maintaining two systems. In those cases, integration is only step zero. (community.atlassian.com)
Method 1: Manual Export and Import (The Slow Path)
For small migrations (under ~50 pages), manual migration is sometimes the pragmatic choice. Here's the honest workflow:
- Export content from SharePoint — Download
.docxfiles from document libraries. For modern pages, copy rendered content from the browser. - Import Word documents into Confluence — Confluence Cloud supports importing a single
.docxfile as a new page via the UI (Create → Import Word document). This converts basic formatting but strips SharePoint-specific metadata. - Download and re-upload attachments — Every image, PDF, and embedded file must be manually downloaded from SharePoint and uploaded to the corresponding Confluence page.
- Rebuild the page tree — Recreate the parent-child hierarchy in the target Confluence space.
- Fix broken links — All internal links pointing to SharePoint URLs must be manually updated to point to the new Confluence pages.
Confluence Word import limits
Confluence Cloud's Word import has specific constraints: a 5 MB single-file limit, 100 MB for attachments on a single import, and bulk import of up to 30 files / 50 MB total, with each file capped at 10 MB. Word shapes are replaced with placeholders, so complex formatted documents still need QA. (support.atlassian.com)
What breaks during manual migration
- Internal links: Every hyperlink between SharePoint pages points to the old SharePoint URL and must be rewritten
- Embedded images: Images stored in SharePoint's SiteAssets library won't travel with copy-paste
- Metadata: Created date, modified date, author attribution — all reset to "you, right now"
- Version history: Lost entirely
- Page hierarchy: Must be manually recreated in the Confluence page tree
HTML import as an alternative
Confluence Cloud has an HTML importer: upload a .zip containing a folder of .html files, with page media in folders named after each page. It preserves basic headings, links, tables, and images, but iframe is unsupported, code blocks fall back to plain text, and page-to-page links become ordinary hyperlinks rather than true Confluence links. (support.atlassian.com)
Manual migration is only viable for small, low-complexity content sets where you're comfortable losing metadata and version history. For anything over 50 pages, the time investment exceeds the cost of automation.
Method 2: The Legacy UWC Route (And Why You Should Avoid It)
The Universal Wiki Converter (UWC) appears in nearly every forum thread about SharePoint-to-Confluence migration. It's an open-source tool Atlassian once recommended.
The reality is harsh. It won't export the attachments but will point to the attachments on SharePoint. The UWC creates links back to SharePoint rather than physically moving files. Install Confluence 4.0 - 4.3.7. Let us call this ConfluenceTemp. Upgrade ConfluenceTemp 4.3.x to the target version (or latest if moving to cloud).
The workflow requires installing a legacy Confluence 4.x instance as an intermediate step, running the UWC against that, then upgrading the temporary instance or exporting spaces to XML and importing into your target Confluence. This is a fragile multi-hop process that most teams abandon mid-migration.
Our recommendation: Treat UWC as historical context. It is not a viable path for modern SharePoint Online → Confluence Cloud migrations.
Method 3: API-Based Migration (Converting .docx to XHTML)
For engineering teams with the capacity to write and maintain custom scripts, an API-driven migration offers the highest control. The pipeline has three stages: extract, transform, load.
Stage 1: Extract content from SharePoint
SharePoint content lives in multiple endpoint families. Your extraction script needs to handle each type separately.
For document libraries (.docx, .pdf, .pptx):
Use the SharePoint REST API or Microsoft Graph API to enumerate and download files:
# List files in a document library via SharePoint REST API
GET https://{site_url}/_api/web/GetFolderByServerRelativeUrl('Shared Documents')/Files
Authorization: Bearer {access_token}
Accept: application/json;odata=verboseYou can retrieve a folder inside a document library when you know its URL. For example, you can retrieve the root folder of your Shared Documents library by using the endpoint in the following example.
To download individual files:
# Download a file's binary content
GET https://{site_url}/_api/web/GetFileByServerRelativeUrl('/Shared Documents/doc.docx')/$value
Authorization: Bearer {access_token}For modern SharePoint pages (.aspx):
Use the Microsoft Graph Pages API with the canvasLayout expansion:
# List all site pages
GET https://graph.microsoft.com/v1.0/sites/{site-id}/pages/microsoft.graph.sitePage
# Get a SharePoint modern page with its canvas content
GET https://graph.microsoft.com/v1.0/sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage?$expand=canvasLayoutThis method supports the $select and $expand OData query parameters to help customize the response. For general information, see OData query parameters. You can use the $expand=canvasLayout query string parameter to include the content of an item when retrieving the metadata of an item.
The canvasLayout response returns a JSON structure of horizontalSections containing columns containing webparts, where each text web part has an innerHtml property. You'll need to parse these and stitch the HTML fragments together.
For SharePoint lists:
# Get list items
GET https://{site_url}/_api/web/lists/GetByTitle('Policies')/items
Authorization: Bearer {access_token}
# Get list item attachments
GET https://{site_url}/_api/web/lists('{list-id}')/items({item-id})/attachmentfilesThe Graph Pages API has known edge cases with complex Web Part structures. The Microsoft-Graph API seems to not work for more complicated Pages. Serialization issues are present and reported in the SDK. However, the API fails also within Postman. Test with your actual page content before committing to this path.
Stage 2: Transform content to Confluence storage format
Confluence pages require content in XHTML-based storage format. You cannot POST raw Markdown or standard HTML. For .docx files, the conversion pipeline is:
- Convert
.docx→ HTML using Mammoth or Pandoc - Clean and adapt the HTML to conform to Confluence storage format rules
- Extract embedded images and prepare them for separate attachment upload
Mammoth is designed to convert .docx documents, such as those created by Microsoft Word, Google Docs and LibreOffice, and convert them to HTML. Mammoth aims to produce simple and clean HTML by using semantic information in the document, and ignoring other details. For instance, Mammoth converts any paragraph with the style Heading 1 to h1 elements, rather than attempting to exactly copy the styling.
import mammoth
with open("document.docx", "rb") as docx_file:
result = mammoth.convert_to_html(docx_file)
html = result.value # The generated HTML
messages = result.messages # Warnings about unsupported elementsThe HTML output from Mammoth needs post-processing before it's valid Confluence storage format:
- Remove any
classorstyleattributes not recognized by Confluence - Convert
<img>tags with base64-encoded data to attachment references using<ac:image>macros - Wrap tables in Confluence-compatible markup
- Replace
<a href="sharepoint-url">links with updated Confluence page links
For SharePoint modern pages, the innerHtml from text web parts is closer to standard HTML, but still needs sanitization and conversion to Confluence storage format tags.
Use Sharepoint Cloud API to get data and then convert it into xHTML and create pages. Or you can download the documents from Sharepoint and use some converters to save them as HTML and then convert this HTML into Confluence Cloud format and create pages.
Stage 3: Load into Confluence via REST API
Create pages using the Confluence Cloud REST API v2:
POST https://your-domain.atlassian.net/wiki/api/v2/pages
Content-Type: application/json
Authorization: Basic {base64(email:api_token)}
{
"spaceId": "<target-space-id>",
"status": "current",
"title": "Migrated: Original Page Title",
"parentId": "<parent-page-id>",
"body": {
"representation": "storage",
"value": "<p>Your converted XHTML content here</p>"
}
}Upload attachments separately using the attachment API, then update <ac:image> references in the page body to point to the uploaded attachment filenames:
POST /wiki/rest/api/content/{page-id}/child/attachmentA note on timestamps and authorship: The Confluence v2 page-create schema does not document a createdAt field, even though page responses include createdAt and authorId. The blog post API does document createdAt, making it a better target for chronologically important SharePoint news posts where original publish-date preservation matters. For regular pages, store source author, date, and source URL in labels, a visible metadata table, or content properties as a workaround. (developer.atlassian.com)
API rate limits you'll hit
Enforcement of the new points-based API rate limits and tiered quota rate limits for Jira and Confluence Cloud apps will begin on March 2, 2026. This change is designed to ensure consistent performance and fair usage. Confluence Cloud uses a points-based model to measure API usage. Instead of simply counting requests, each API call consumes points based on the work it performs — such as the amount of data returned or the complexity of the operation.
On the SharePoint side, Microsoft Graph will return 429 Too Many Requests if you hit the tenant-level throttle. Both platforms require retry logic with exponential backoff.
Distribute requests over time: Spread your requests evenly throughout the hour, rather than sending large bursts at predictable intervals. Apply random jitter: Add a random delay to scheduled jobs to avoid many apps hitting the API at the same time. Coordinate across threads and nodes: Share rate limit status between threads or servers to prevent accidental quota exhaustion.
Engineering rerunnability from day one
For large migrations, build idempotency into the pipeline. SharePoint REST uses ETags for list items and documents — keep the SharePoint item ID plus ETag or last-modified value on the target side. This lets you skip unchanged items, avoid duplicates, and safely rerun delta syncs. Stamp every Confluence page with the SharePoint source ID and modified timestamp so you can detect what changed between runs without creating clones. (learn.microsoft.com)
Data Mapping: Translating SharePoint Architecture to Confluence
This is where most migrations fail silently. A sloppy mapping results in content that exists in Confluence but is unfindable.
Structural mapping
| SharePoint Concept | Confluence Equivalent | Notes |
|---|---|---|
| Site Collection | N/A (organizational boundary) | Map to a set of related Spaces |
| Hub Site | Space category or label group | No direct equivalent |
| Subsite | Confluence Space | One subsite = one space is the cleanest mapping |
| Modern Page (.aspx) | Confluence Page | Content requires Web Part → XHTML conversion |
| News Post | Blog Post | Use blog post API to preserve publish dates via createdAt |
| Document Library | Page attachments or converted pages | Decide per library: attach files or convert to native pages |
| List | Confluence table, database, or Jira integration | Static tables lose dynamic filtering; consider Jira if lists are task-based |
| Web Part | Confluence Macro | Very few 1:1 mappings exist |
| Managed Metadata / Term Store | Labels | Flat label taxonomy only; no hierarchical terms |
| Content Types | Page templates | Must be manually recreated |
| Folder hierarchy | Page tree | Only mirror shallow hierarchies; deep folder trees need redesign |
Coming from SharePoint 2016, it's tempting to copy libraries and folders 1:1, but Confluence works quite differently. Decide which SharePoint libraries/lists are still relevant and which can be archived instead of migrated. Next, redesign the structure. Map libraries/folders to Confluence spaces and page trees so that people can actually find things later, rather than mirroring a deep folder hierarchy.
Using CSV and Excel as staging formats
CSV and Excel are good staging formats, not full-fidelity migration formats. Use them for list data, metadata manifests, redirect maps, permission matrices, and content inventories. SharePoint can export list views to Excel or CSV, but CSV export is capped at 30,000 rows and is not available for document libraries. (support.microsoft.com)
On the Confluence side, databases can import CSV files, using the first row as field names and letting you match columns to existing fields. This makes CSV a solid target for SharePoint list data — but not for article bodies or rich page content. (support.atlassian.com)
Use CSV to drive the migration, not to pretend the migration is done. A CSV can tell your script which SharePoint URL becomes which Confluence page, which labels to apply, and which attachment set belongs to which page. It cannot reproduce a modern SharePoint page layout on its own.
A practical pattern: export list data to CSV, clean and normalize it in a staging table, import tabular data into a Confluence database, and use that database as the index for richer pages created separately via API. That gives you searchable structure without forcing every record into a flat spreadsheet model.
Permission mapping
SharePoint and Confluence handle permissions in fundamentally different ways.
SharePoint uses an inheritance-based model: permissions cascade from site collection → site → library → item. Breaking inheritance at any level creates unique permissions for that object. Groups follow the Owners/Members/Visitors pattern with granular permission levels.
Confluence uses an additive model: There are three levels of permissions in Confluence: global permissions, space permissions, and content restrictions. Confluence permissions are additive. This means that if someone is in two groups, and one group has permission to view a content item while the other does not, that person will still be able to view the content item because at least one of the groups they're in has permission to view it. Confluence's permissions model is set up so that content can only be further restricted from whatever the container is set at. A content item cannot have greater access than its container.
| SharePoint Permission | Confluence Equivalent |
|---|---|
| Site Owners | Space Admin |
| Site Members (Contribute) | Space permission: Add/Edit pages |
| Site Visitors (Read) | Space permission: View only |
| Item-level broken inheritance | Page restriction (view or edit) |
| Entra ID / Azure AD groups | Confluence groups (manual mapping required) |
| Sharing links | No equivalent — use page restrictions |
Mismapping permissions can expose sensitive HR or financial data to the entire company. Confluence also exposes that a restricted page exists — users see the link but hit an access-denied screen. That means truly sensitive content often migrates better into separate spaces than into one large space with page-level exceptions. (support.microsoft.com)
Map your Azure AD / Entra ID groups to Confluence groups before starting the migration. Confluence permissions are group-based at scale. Attempting to set per-user restrictions across hundreds of pages creates an unmaintainable permissions model.
For a deep dive into SharePoint's permission model and how to audit it before migration, see The Definitive Guide to SharePoint Permissions & Security (2026 Edition).
Web Part to Macro mapping
Most SharePoint Web Parts have no direct Confluence macro equivalent. Here are the realistic mappings:
| SharePoint Web Part | Confluence Equivalent | Fidelity |
|---|---|---|
| Text Web Part | Native page content (XHTML) | High |
| Image Web Part | <ac:image> macro |
High |
| File Viewer | Attachment + Office macro | Medium |
| Embed (iframe) | Iframe macro (if allowed) | Medium |
| Quick Links | Link list (manual) | Low |
| News / Highlighted Content | Blog posts + labels | Low (structural redesign) |
| List Web Part | Table or Jira macro | Low |
| Power BI embed | No equivalent | ❌ |
| Power Automate | No equivalent | ❌ |
Think in classes, not in one-to-one widgets: text web parts become native page body, list web parts become databases or tables, Office file embeds map to attachments plus Smart Links, and custom SharePoint web parts almost always need manual rebuild.
Handling Attachments, Images, and Broken Links
These are the three failure modes that turn a technically complete migration into a practically broken one.
Attachments
SharePoint stores files in document libraries with versioning, metadata columns, and co-authoring state. Confluence stores files as page-level attachments with version history but no custom metadata.
The default is 100 megabytes, expressed as 104857600 bytes. — this is Confluence Cloud's default maximum per-attachment size. Files larger than this limit must be split or stored externally.
The critical decision for each document library is attach vs. convert:
- Attach as-is: PDFs, large spreadsheets, and files people download — attach them to a Confluence page
- Convert to native pages: Word documents that people read inline — convert
.docx→ XHTML and create native Confluence pages for full searchability
Convert Word docs to Confluence pages where it helps search; keep large files as versioned attachments.
Legacy tools like UWC and integration connector apps both fail here in the same way. UWC explicitly creates links back to SharePoint rather than physically moving files. Connector apps keep files in SharePoint by design because they are integration products, not migration engines. If your goal is to leave SharePoint, every attachment needs to be physically uploaded into Confluence and re-referenced from the new page body.
Images
Images embedded in SharePoint pages (stored in SiteAssets or inline in page content) must be:
- Downloaded from SharePoint
- Uploaded as attachments to the target Confluence page
- Referenced in the page body using Confluence's
<ac:image>storage format:
<ac:image ac:alt="Diagram">
<ri:attachment ri:filename="architecture-diagram.png" />
</ac:image>Images embedded in .docx files can be extracted during the Mammoth conversion step — Mammoth outputs them as base64-encoded <img> tags by default, which you then decode, upload as attachments, and rewrite to <ac:image> references.
Word import via the Confluence UI supports a defined set of image types and replaces unsupported images with placeholder text. HTML import ignores unsupported media. In API migrations, treat inline images as first-class objects: download them, upload as attachments, then rewrite the reference in a second pass after the target page ID exists. (support.atlassian.com)
Internal link rewriting
This is the hardest part. Every internal link in your SharePoint content points to a SharePoint URL like:
https://contoso.sharepoint.com/sites/Engineering/SitePages/API-Guidelines.aspx
After migration, the equivalent Confluence URL will be something like:
https://contoso.atlassian.net/wiki/spaces/ENG/pages/12345678/API+Guidelines
You need a URL mapping table — a lookup that maps every old SharePoint URL to its new Confluence page ID. Build this table during the migration as each page is created, then run a post-migration script that scans every Confluence page body for old SharePoint URLs and replaces them.
Links to files within document libraries that are now attachments need a different rewrite pattern pointing to the Confluence attachment URL. SharePoint page APIs expose webUrl; Confluence page responses expose web UI links. Once that map exists, you can scan the imported body for old SharePoint links and replace them deterministically.
For teams looking at bidirectional syncing or moving data the other way, see Confluence to SharePoint Migration: Methods, Limits & Macro Mapping.
Method 4: Enterprise Bridge (CaseAgile)
Enterprise Bridge is the most commonly referenced third-party tool for SharePoint → Confluence migrations. Enterprise Bridge supports Confluence on premise servers and Confluence online, SharePoint 2010, 2013, 2016, 2019 and SharePoint Online. It transfers text, images, tables, wiki pages, documents, files, videos etc.
It offers automated conversion with metadata preservation and supports two-factor authentication. Links to other SharePoint pages and documents (Related Articles) remain intact when migrated to Confluence.
The trade-off: Enterprise Bridge is an on-premise enterprise tool designed for large, compliance-heavy environments. It requires infrastructure to run and is priced for enterprise budgets. For smaller or cloud-first teams, it can be overkill.
Method 5: Managed Migration with ClonePartner
For teams that need the migration done right without building and maintaining custom scripts, ClonePartner handles SharePoint → Confluence migrations end-to-end.
What this looks like in practice:
- API-to-API migration — content is physically moved into Confluence storage, not linked back to SharePoint
- Automated
.docx→ XHTML conversion — Word documents become native, searchable Confluence pages - True attachment migration — every file is downloaded from SharePoint and uploaded to the correct Confluence page via API
- Internal link rewriting — SharePoint URLs are programmatically replaced with Confluence page links
- Permission mapping — SharePoint site permissions are translated to Confluence space and page restrictions
- Zero downtime — your team keeps working in SharePoint during the migration; the cutover is coordinated
Establish secure API connections between your SharePoint and Confluence accounts. All communication is encrypted and credentials are stored using AES-256 encryption.
We separate the process into discovery, mapping approval, pilot migration, full load, delta sync, and QA — so the final cutover is boring on purpose. We've seen the edge cases that break DIY scripts: nested permission inheritance, orphaned pages, .docx files with embedded OLE objects, SharePoint pages with 20+ Web Parts. These are the failure modes we've already solved.
Post-Migration QA and Validation Checklist
A migration is only successful if the content is usable after the move. Run these checks before declaring the migration complete.
Content integrity
- Page count audit — Compare the number of migrated pages against your source inventory. Every page should be accounted for (migrated, archived, or intentionally excluded).
- Attachment count audit — Verify attachment counts per page match the source. Missing attachments are the most common silent failure.
- Sample rendering check — Open 10–15% of migrated pages in the Confluence editor. Look for broken formatting, missing images, and garbled tables.
- Search verification — Search for known terms that exist in migrated content. If Confluence search doesn't return expected results, page body content may not have been stored correctly.
Link integrity
- Internal link scan — Run a script or use a link checker to find any remaining
sharepoint.comURLs in Confluence page bodies. - Attachment link check — Verify that links to attached files resolve correctly.
- Cross-space link check — If you split one SharePoint site into multiple Confluence spaces, verify that cross-space links work.
Permissions
- Space permission audit — Verify that each Confluence space has the correct groups and permission levels assigned.
- Page restriction spot-check — For pages that had restricted access in SharePoint, confirm the restrictions carried over.
- Anonymous access check — Ensure no pages are accidentally exposed to anonymous users if your Confluence instance allows public access.
Metadata and hierarchy
- Page tree validation — Confirm the parent-child hierarchy in each Confluence space matches your intended structure.
- Label verification — Check that SharePoint metadata (tags, categories) migrated as Confluence labels.
- Author attribution — If author preservation matters for compliance, verify the
createdByfields.
Idempotency and delta checks
- Rerun the pilot set — Prove that rerunning the migration script doesn't create duplicates, cause label drift, or break restrictions.
- Delta rehearsal — Run a delta sync using only changed items. If it creates duplicates or drops restrictions, fix the pipeline before go-live.
- Confirm navigation and search with business owners — not just admins.
Run a pilot migration with one representative SharePoint subsite before migrating your entire environment. This catches conversion issues, permission mapping problems, and attachment failures at a scale where they're cheap to fix.
Performance Considerations for Large-Scale Migrations
For organizations with thousands of pages and hundreds of gigabytes of attachments, a few constraints become critical:
- Confluence Cloud API rate limits are points-based and shared across your tenant. Rate limiting controls how many API requests your app can make to Confluence Cloud within a given time period. This ensures platform stability, fair resource allocation, and a reliable experience for all users. Plan for migration windows that spread API calls across hours, not minutes. Note that Atlassian's new points-based rate limits started enforcement on March 2, 2026 for Forge, Connect, and OAuth apps, while API-token traffic remains on existing burst limits.
- SharePoint throttling applies to large-scale reads. Microsoft Graph will return
429 Too Many Requestsif you hit the tenant-level throttle. Implement retry logic with exponential backoff and honor theRetry-Afterheader. - Attachment upload time dominates large migrations. A library with 50GB of files will take significantly longer to upload than the page content itself. Parallelize attachment uploads where the API allows.
- Confluence Data Center has configurable rate limits per node. When automated integrations or scripts send requests to Confluence in huge bursts, it can affect Confluence's stability, leading to drops in performance or even downtime. With rate limiting, you can control how many external REST API requests that automations and users can make.
Choosing the Right Method for Your Migration
| Scenario | Recommended Method |
|---|---|
| <50 pages, no attachments, no urgency | Manual copy-paste |
| SharePoint lists → structured Confluence data | CSV staging + Confluence databases |
| Engineering team available, full control needed | API-driven scripts |
| On-prem SharePoint, enterprise compliance requirements | Enterprise Bridge |
| Complex workspace, tight timeline, zero downtime required | ClonePartner managed migration |
| Only need to view SharePoint files from Confluence (not migrate) | SharePoint Connector |
The honest answer for most teams: if you have more than 100 pages with attachments, custom scripts become a maintenance burden and manual migration is too slow. That's the window where a managed migration service pays for itself in time saved and errors avoided.
Frequently Asked Questions
- Is there a native tool to migrate from SharePoint to Confluence?
- No. Atlassian does not offer a native import tool, migration wizard, or one-click migration path from SharePoint to Confluence. Confluence Cloud's import options cover Word, Google Docs, HTML, and CSV — not SharePoint. You must use custom API scripts, third-party tools like Enterprise Bridge, or a managed migration service.
- Can I use the SharePoint Connector for Confluence to migrate data?
- No. The SharePoint Connector for Confluence is an integration tool that embeds SharePoint content inside Confluence pages via macros. It does not move data — files remain stored in SharePoint, meaning you still pay for Microsoft storage and lose native Confluence search indexing. If you decommission SharePoint, every page using the connector macro breaks.
- How do I convert SharePoint .docx files to Confluence pages?
- Download .docx files via the SharePoint REST API, convert them to HTML using a library like Python Mammoth or Pandoc, clean the output to conform to Confluence's XHTML-based storage format, then push the content to Confluence via the REST API. Images must be extracted, uploaded as attachments, and referenced using Confluence's ac:image macro.
- How do SharePoint permissions map to Confluence?
- SharePoint uses an inheritance-based model (site → library → item), while Confluence uses an additive model (global → space → page restrictions). Map Site Owners to Space Admins, Site Members to Add/Edit permissions, and Site Visitors to View-only. Item-level broken inheritance maps to Confluence page restrictions. Azure AD groups must be manually mapped to Confluence groups before migration.
- What happens to internal links during a SharePoint to Confluence migration?
- Internal links break by default. Every link pointing to a SharePoint URL must be rewritten to its new Confluence page URL. Build a URL mapping table during migration that maps old SharePoint URLs to new Confluence page IDs, then run a post-migration script to find and replace all stale links in page bodies.