Compare items
Source against destination
The report you run after a migration, when somebody asks whether everything actually arrived. It compares a source site against a destination site, in the same tenant or across two different ones, and exports the differences. Shallow answers whether anything is missing; deep also compares field values on the items that did arrive.
What it tells you
- Whether every list and library on the source exists on the destination, paired by title. A list that exists only on the destination is not reported.
- Item counts on both sides, and what is missing or extra, per list.
- In a deep comparison, which matched items have field values that differ, and which fields they are.
- A per-list status, so a hundred-list migration is one sheet you can sort rather than a hundred checks.
How it runs
- Sign in to both ends. Source and destination sign in independently, because they are frequently different tenants with different accounts.
- Pick the two sites. One source, one destination.
- Choose shallow or deep. Shallow compares item counts, and reads and matches the items only for a list whose counts differ. Deep matches every item and also compares field values, which is thorough and much slower.
- Save the workbook. Overview first, then a tab per list where something differs.
How it works
Both sites' lists are read, leaving out hidden lists and system catalogues; Site Pages is kept. Source lists are paired with destination lists by title, ignoring case. A source list with no partner is reported as wholly missing, with each of its items named. Lists that exist only on the destination are not reported. Lists are compared one at a time.
In a shallow compare each list's item count is compared first. When the counts agree the list is marked Match without its items being read. When they differ, both sides' items are read and paired. Items are paired by their path inside the list, ignoring case, so a file is matched by where it sits rather than by its item number, which a migration does not keep. Items in an ordinary list have no folder path of their own, so in practice they pair by item number.
A deep compare always reads and pairs every item, then compares values on the items found on both sides. For a library every visible, editable column is compared; for an ordinary list only Title is compared unless you choose to compare list fields. Hidden, read-only and system columns, such as the created and modified dates, the author and the identifiers, are never compared. People are compared by email address, dates in UTC, managed metadata by term, and lookups by the item they point to.
Each list's status is the first of these that applies: Missing items, Value drift, Count mismatch, Match. A list that cannot be read is marked with the error, its partial results are dropped, and the compare continues. The workbook goes into History when the run ends, and saving it is offered afterwards.
What you get
An Excel workbook, named like ShareMaster-shallow-compare-20260901-142207.xlsx, kept in Report History whether or not you save it. Status on the Overview sheet is the quick read. Anything other than Match gets its own tab with the detail.
Overview sheet
One row per list, both sides.
| Column | Example |
|---|---|
| List / library | Shared Documents |
| Source items | 8,441 |
| Dest items | 8,439 |
| Missing on dest | 2 |
| Extra on dest | 0 |
| Items with value drift | 0 |
| Status | Missing items |
| URL | https://contoso.sharepoint.com/sites/projects/Shared Documents |
Shared Documents sheet
A tab per list that differs: what is missing, what is extra, and which fields drifted.
What you need
- Read access on both sites. Two separate sign-ins, which the page asks for up front rather than halfway through.
What it will not do
- Library items are matched by their path in the library, so a migration that renumbered items does not show false differences. List items are matched by ID in practice, because their paths are built from it.
- A shallow compare reads no items when a list's counts agree, so a list with one item missing and one extra reads as Match. Use deep when that matters.
- A deep comparison reads every field of every matched item on both sides. It is the slowest report here by some distance.
- It compares, it does not fix. Re-running the migration for the gaps is a separate decision.