Service limits¶
SharePoint enforces the limits below. The library declares them in
office365.sharepoint.thresholds.Limits and binds them to the model with the
@limit decorator — warnings by default, never a silent truncation. The list
view threshold is the one most callers meet; see
Large lists and folders for the paging and indexing recipes.
Sources:
from office365.sharepoint.thresholds import Limits, limit, warn_if_exceeds
warn_if_exceeds(Limits.LIST_VIEW, item_count, context="list 'Orders'")
@limit(Limits.LIST_VIEW, arg="page_size") # declare + enforce on the model
def get_items(page_size=None): ...
| Limit | Value | Kind | Scope | Bound at | Notes |
|---|---|---|---|---|---|
| list view threshold | 5,000 items | threshold | list | Folder.get_files, List.get_items | page through the data or index the filtered/sorted column to exceed it |
| list view threshold (auditors/admins) | 20,000 items | threshold | list | — | |
| index add/remove threshold | 20,000 items | threshold | list | — | applies while adding or removing a column index |
| delete list/folder threshold | 100,000 items | threshold | list | — | |
| rename folder threshold | 100,000 items | threshold | folder | — | renaming a folder within the same library |
| list view lookup threshold | 8 joins | threshold | query | — | queries with more joins are blocked |
| max items per list/library | 30,000,000 items | supported | list | — | |
| max indexed columns | 20 columns | supported | list | — | SharePoint Online allows roughly 20 indexed columns |
| single line of text column length | 255 chars | threshold | column | — | indexed text columns are limited to 255 characters |
| list row size | 8,000 bytes | boundary | list item | — | 300 bytes are reserved; ~7,700 are usable |
| file upload | 250 GB | boundary | file | FileCollection.upload_content | SharePoint Server 2016/2019 caps at 10 GB (15 GB in Subscription Edition) |
| file attached to a list item | 250 MB | boundary | list item | — | |
| ZIP download | 20 GB | boundary | download | — | the autogenerated ZIP when downloading multiple files |
| simple upload (Files/add) | 4 MB | threshold | file | — | larger files use a resumable upload session |
| upload session chunk | 4 MB | supported | file | — | default chunk size for resumable uploads |
| decoded file path length | 400 chars | boundary | file | — | the folder path plus file name after decoding |
| long OneDrive URL | 400 chars | boundary | url | — | the decoded full file URL; OneDrive/SharePoint sync fails beyond it |
| file name length | 128 chars | threshold | file | — | the FileLeafRef name; the migration path scanner flags longer names |
| Excel workbook opened in the browser | 10 MB | threshold | file | — | larger Excel files prompt to open in the Excel client instead of the browser |
| items per bulk/batch operation | 100 items | boundary | batch | ClientContext.execute_batch, Entity.execute_batch | the OData batch size the client uses |
| batch request size | 1 MB | supported | batch | — | conservative client cap for a SharePoint OData batch |
| managed metadata terms | 1,000,000 terms | supported | tenant | — | global and site-level terms combined |
| managed metadata term labels | 2,000,000 labels | supported | tenant | — | |
| managed metadata term properties | 1,000,000 properties | supported | tenant | — | |
| global term sets | 1,000 term sets | supported | tenant | — | |
| global term groups | 1,000 term groups | supported | tenant | — | |
| terms per managed metadata column (default) | 50 terms | supported | column | — | more than this is allowed but downstream experiences aren't guaranteed |
| permission inheritance break/reinherit | 100,000 items | threshold | list | — | above this many items you can't break or reinherit permissions on the list/folder |
| unique security scopes | 50,000 scopes | threshold | list | — | the recommended general limit is 5,000 |
| recommended unique security scopes | 5,000 scopes | supported | list | — | |
| ACL propagation child objects | 500 objects | threshold | list | — | propagation fails beyond this many uniquely scoped children |
| SharePoint groups per site | 10,000 groups | supported | site | — | |
| users per SharePoint group | 5,000 users | supported | group | — | |
| compliance policies per tenant | 10,000 policies | supported | tenant | — | eDiscovery/retention holds count toward this, shared with DLP and sensitivity labels |
| major versions | 50,000 versions | supported | file | — | SharePoint Server 2019 allows 400,000 |
| minor versions | 511 versions | boundary | file | — | |
| lists and libraries per site collection | 2,000 lists | supported | site | — | |
| subsites per site | 2,000 sites | threshold | site | — | |
| max storage per site collection | 25 TB | boundary | site | — | |
| overall site metadata | 1000 GB | supported | site | — | metadata rarely reaches this size |
| move/copy total file size | 100 GB | threshold | transfer | — | across sites and containers |
| move/copy file count | 30,000 files | threshold | transfer | — | |
| cross-geo copy/move file size | 15 GB | threshold | file | — | |
| OneNote file in move/copy | 2 GB | threshold | file | — | |
| large file for migration (SMAT) | 15 GB | supported | file | — | SMAT flags files over this as slow/hard to migrate; SPO upload allows 250 GB (SP2019 10-15 GB) |
| files in a synced library | 300,000 files | supported | library | — | OneDrive sync performance limit |
Migration assessment¶
The pre-migration assessment (MigrationAssessor / MigrationTenantAssessor)
reports several of these limits as SPMT scan-assessment risk codes:
| SPMT risk code | Limit | Scanner |
|---|---|---|
LIST_VIEW_EXCEED_LIMIT |
list view threshold | LargeListScanner |
ITEM_COUNT_EXCEED_INDEX_LIMIT |
index add/remove threshold | LargeListScanner |
ITEM_COUNT_EXCEED_LIMIT |
max items per list/library | LargeListScanner |
LIST_VIEW_LOOKUP_EXCEED_LIMIT |
list view lookup threshold | LookupColumnScanner |
UNIQUE_PERMISSION_EXCEED_LIMIT |
unique security scopes | PermissionScanner |
Each AssessmentIssue carries the risk_code, and report.by_risk_code groups
the issues by code. The LongOneDriveUrls detail report (LongOneDriveUrlsScanner)
additionally flags files whose full URL crosses LONG_ONEDRIVE_URL; ThicketFolder
(THICKET_FOLDER_UNSUPPORTED) and UnsupportedSiteTemplates cover the remaining
blockers.