How to Create/Provision Site Collection Programmatically using Client Side Object Model (CSOM) PNP in SharePoint Office 365

Sathish Nadarajan
SharePoint MVP
Published On :   13 Aug 2016
Visit Count
Today :  3    Total :   6322
Plan, Migrate, Secure, Report
SharePoint & Office 365 Tool. Simple & Easy to Use. 15-Day Trial!

SharePoint Office 365 Tool
Simple & Powerful Tool for Migration, Security & Reporting. Free Trial

In this article, let us see how to create the Site Collections Programmatically. In many scenarios, we may need to provision Site Collection using Client Side Object Model. Hence, a Handy script will be really helpful and reduce our time.

The Code below is straight forward and does not require any explanation I guess.

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using Microsoft.SharePoint.Client;
 using System.Security;
 using Microsoft.Online.SharePoint.TenantAdministration;
 namespace Console.Office365
     class Program
         static void Main(string[] args)
         public static void CreateSiteCollection()
             string TenantURL = "https://******";
             string Title = "AASathish1";
             string Url = "https://********";
             string UserName = "Sathish@*******";
             string Password = "******";
             //Open the Tenant Administration Context with the Tenant Admin Url
             using (ClientContext tenantContext = new ClientContext(TenantURL))
                 //Authenticate with a Tenant Administrator
                 SecureString passWord = new SecureString();
                 foreach (char c in Password.ToCharArray()) passWord.AppendChar(c);
                 tenantContext.Credentials = new SharePointOnlineCredentials(UserName, passWord);
                 var tenant = new Tenant(tenantContext);
                 //Properties of the New SiteCollection
                 var siteCreationProperties = new SiteCreationProperties();
                 //New SiteCollection Url
                 siteCreationProperties.Url = Url;
                 //Title of the Root Site
                 siteCreationProperties.Title = Title;
                 //Email of Owner
                 siteCreationProperties.Owner = UserName;
                 //Template of the Root Site. Using Team Site for now.
                 siteCreationProperties.Template = "COMMUNITY#0";
                 //Storage Limit in MB
                 siteCreationProperties.StorageMaximumLevel = 100;
                 //UserCode Resource Points Allowed
                 siteCreationProperties.UserCodeMaximumLevel = 200;
                 //Create the SiteCollection
                 SpoOperation spo = tenant.CreateSite(siteCreationProperties);
                 //We will need the IsComplete property to check if the provisioning of the Site Collection is complete.
                 tenantContext.Load(spo, i => i.IsComplete);
                 //Check if provisioning of the SiteCollection is complete.
                 while (!spo.IsComplete)
                     //Wait for 30 seconds and then try again
                 System.Console.WriteLine("SiteCollection Created.");

Happy Coding,

Sathish Nadarajan.

SharePoint Usage Reports
Usage reports, collaboration and audit for SharePoint.

Migratiin Tools for SharePoint