Skip to content

Governance Suite · Deploy pillar

Stop hand-clicking SharePoint governance

The manual rollout work after a migration (sites, navigation, branded themes, content types, term sets), run from structured input you can re-use.

May 7, 2026 · Updated November 6, 2026 · 6 min read

Every SharePoint tenant rollout has the same long tail. Migration finishes in a weekend. Then someone has to:

None of that is hard. All of it is tedious: clicking through SharePoint Admin Center, or writing PowerShell that breaks the moment Microsoft ships a permission change. Bulk Provisioning handles it in five tabs (Create Sites, Navigation, Theme, Content Types, and Term Store), each driven by CSV or JSON input, in one workspace, with re-runs that update instead of duplicating where SharePoint allows it.

The problem with the manual path

Try this experiment. Open SharePoint Admin Center. Time how long it takes to:

  1. Add six top-nav links with parent-child nesting on a single site
  2. Create a tenant theme from a Fluent UI palette (30 color keys), deploy it, then apply it to four sites
  3. Create three content types under a custom group, each inheriting from the right parent (Document, Item, or Site Page, not just "the default")
  4. Build a term store taxonomy with 5 sets and 25 terms with descriptions

None of these steps is difficult, but each one is a sequence of admin-center pages, and the mistakes are easy to make: a theme that does not apply because of a missing role, a content type that ends up with the wrong parent. Then you do it again on the next tenant. Then again.

What CSV-driven provisioning looks like

Each section in Bulk Provisioning takes a CSV (or JSON for hierarchical input). The format is documented inline and there's a Download sample button that gives you a working starting CSV with realistic enterprise content you can adapt.

Create Sites

One row per site: a name, a URL slug, the template (team or communication), whether to add Microsoft Teams to a team site, and an optional description:

name,urlSlug,siteTemplate,enableTeams,description
Marketing,marketing,communication,false,Marketing collateral and campaigns
Sales Ops,sales-ops,team,true,
HR Resources,hr,communication,false,

The tool validates every row before it creates anything and reports the outcome per site.

Navigation

Flat CSV with a parent-child reference via stable string IDs:

tempId,title,url,parentTempId
resources,Resources,,
res-supporting,Supporting People,,resources
forms,Forms and Tools,,
forms-hr,HR Forms,/sites/intranet/Forms/HR,forms

Top-level rows have an empty parentTempId. Children reference the parent's tempId, not the SharePoint-assigned node ID, which doesn't exist yet. Cross-site URLs (anything under /sites/ or /teams/ different from the target site) are auto-flagged so SharePoint doesn't reject them with "no such file or folder".

Theme

Paste a 30-key Fluent UI palette JSON, name the theme, list the sites to apply it to, and click Deploy. The tool writes the theme to the tenant catalog (thememanager/UpdateTenantTheme), then walks the sites applying it. If a theme with the same name already exists, it falls back to update, so palette tuning during onboarding doesn't hit duplicate errors.

Content types: with the Hub deploy path

One CSV row per content type:

name,description,group,parentId,columnNames
MigrationFox-Document,"Branded document content type",MigrationFox,0x0101,
MigrationFox-Item,Default item content type,MigrationFox,0x01,
MigrationFox-SitePage,Branded modern page,MigrationFox,0x0101009D1CB255DA76424F860D91F20E6C4118,

parentId picks the inheritance chain: 0x0101 for Document, 0x01 for Item, the long hex for Site Page. Common parents are listed in the helper text so you don't have to look them up.

For tenant-wide rollouts, tick the Deploy to tenant Content Type Hub toggle. The tool auto-fills the URL with https://<tenant>.sharepoint.com/sites/contentTypeHub (the special site collection every M365 tenant has by default). Your CTs land in the Hub. Then in SharePoint, open each CT and click Manage publishing → Publish to fan it out to every site in the tenant. Re-publish to roll out changes.

Term Store: global or site-local

The Term Store tab has a scope toggle: Global (tenant-wide) or Site-level. Global writes go to Microsoft Graph's tenant-wide term store; site-level writes go to the per-site store. CSV format:

groupName,setName,termName,description
MigrationFox,Document Types,Contract,Signed legal agreements with customers and vendors
MigrationFox,Document Types,Statement of Work,Engagement-specific scope and deliverables
MigrationFox,Departments,Engineering,Product engineering and platform reliability
MigrationFox,Categories,Confidential,Sensitive customer and financial records

Existing groups and sets get reused (idempotent); terms always create. For clean re-runs, delete the term set in SharePoint first.

Permissions, honestly

Bulk Provisioning calls real SharePoint admin endpoints. That means the signed-in user needs the right SharePoint role, not just an OAuth scope. The error messages it surfaces are tied to the actual cause:

The error text in the tool tells you which of these failed and how to fix it. No "consult your administrator" black box.

Idempotent re-runs are the unlock

The reason CSV-driven provisioning beats clicking through Admin Center isn't speed for the first run. The first run is comparable. The unlock is the second run. Tweaked the color palette? Re-upload the same CSV; the theme updates. Found a missing content type? Add a row, re-upload; it appends. Need to deploy the same governance package to a second tenant? Same CSV, different credential.

Most manual SharePoint provisioning ends up living in someone's PowerShell script that breaks every six months when Microsoft changes a permission. Bulk Provisioning carries the right endpoint changes forward for you. The thememanager path replaces the legacy composed-look API. The contenttypes Graph endpoint replaces the old SP REST collection POST that silently mis-parented every CT under Item. The term store global scope routes to the right Graph version (beta vs v1.0) depending on whether you want tenant-wide or site-local.

Where it fits in the lifecycle

Bulk Provisioning is the Deploy pillar of the MigrationFox Governance Suite. The full lifecycle:

An audit on its own ends with a PDF. The plan and deploy pillars are what turn a one-off audit into a full governance engagement. CSV input is what makes the deploy pillar repeatable across tenants instead of a one-off PowerShell tax.

Where it is included

Bulk Provisioning comes with the Tenant Suite (all six report packs plus every governance tool, with a commercial redistribution license) or Consultant Pro, for consultants who work across many client tenants. A single report pack does not include it. Current prices are on the pricing page.

Ready to skip the manual rollout step? Open Bulk Provisioning →

← All posts Read the full docs →