If you work with SharePoint lists regularly, adding items one by one through the browser can quickly become painful. It is slow, repetitive, and very easy to make mistakes when you are dealing with a lot of data. Maybe you just got a new Excel file from your sales team, or you are migrating data from another system, and you need all those rows in a SharePoint list.
This is where PowerShell comes in handy. With a simple script, you can add hundreds or even thousands of items in a few seconds, and you can do it in a repeatable way. You run the script once in Dev, again in Test, and again in Production, without retyping anything. In this tutorial, I will show you how to add SharePoint Online list items using PnP PowerShell, step by step, with practical examples you can copy, tweak, and use right away.
Prerequisites for Adding Items to a SharePoint List using PnP PowerShell
Before you start writing commands, make sure you have a few things ready.
- A SharePoint Online site where you have at least Edit permission on the list.
- PnP PowerShell installed on your machine (latest version is recommended).
- The SharePoint list already created with the required columns.
If you have not installed PnP PowerShell yet, you can install it from the PowerShell Gallery using the official documentation as a reference.
Add SharePoint Online List Items Using PnP PowerShell
Let me show you how to add SharePoint Online list items using PnP PowerShell.
Step 1: Connect to SharePoint Online
First, you need to connect PowerShell to your SharePoint Online site using Connect-PnPOnline.
Here is a simple pattern that works well with modern authentication:
$siteUrl = "https://yourtenant.sharepoint.com/sites/YourSiteName"
Connect-PnPOnline -Url $siteUrl -Interactive -ClientId "<your-entra-app-client-id>"This will open a sign‑in window where you can log in with your Microsoft 365 account and approve the permissions configured for your Entra ID app.
If you prefer device login (for example, on a server without a browser), you can use:
Connect-PnPOnline -Url $siteUrl -DeviceLogin -ClientId "<your-entra-app-client-id>" -Tenant "<yourtenant.onmicrosoft.com>"Once this command is successful, you are ready to work with SharePoint lists using PnP PowerShell.
Step 2: Understand Add-PnPListItem basics
To add items to a SharePoint list, you use the Add-PnPListItem cmdlet.
The basic syntax looks like this:
Add-PnPListItem -List "List Name" -Values @{
"InternalColumnName1" = "Value1"
"InternalColumnName2" = "Value2"
}A few important points to remember while using the Add-PnPListItem cmdlet:
- Always use the SharePoint list internal column names, not the display names.
- The
-Listparameter accepts list Title, ID, or server-relative URL. - You can optionally pass a content type, folder, retention label, or a batch object when needed.
Step 3: Sample SharePoint list used in examples
In this tutorial, we will use a SharePoint list called Customer Orders with columns like:
- Customer_ID (Single line of text)
- Customer_Name (Single line of text)
- Product_Link (Hyperlink)
- Product_Description (Multiple lines of text)
- Product_Number (Number)
- Oder_Date (Date and Time)
- Total_Price (Currency)
- Payment_Method (Choice)
- Delivery_Location (Location)
- Delivery_Person (Person or Group)
- Order_Status (Yes/No)
- Product_Id (Lookup)
You can adapt the same scripts to your own SharePoint list by changing the list name and internal column names.
Now, let me show you a few examples of adding items to different types of columns in a SharePoint list.
Example 1: Add single line of text
Let us start with the simplest case – a single line of text column. Below is the script to add a single text column to a SharePoint list.
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS1"
"Customer_Name" = "John Smith"
}After you run this command, a new item will appear in your Customer Orders SharePoint list with Title and Customer_Name filled.
You can see the exact output in the screenshot below:

If you want to check whether an item has been added, open your SharePoint list and check it there. List items will be added, as shown in the screenshot below.

Example 2: Add multiple lines of text
For multiple lines of text, you still pass a string. You can include line breaks using the usual PowerShell string syntax.
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS3"
"Customer_Name" = "John"
"Product_Description" = "This moisturizer product protects your skin.
Also you get 20% discount on this product."
}I executed the above PowerShell script using VS Code, you can see in the screenshot below:

When you open the item in SharePoint, the text will show on separate lines in the multi‑line text column.

Example 3: Add hyperlink column value
To add a SharePoint list item value for the hyperlink column, you simply pass the URL as a string in the -Values hashtable.
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS2"
"Customer_Name" = "John"
"Product_Link" = "https://contoso.com/products/cream"
}SharePoint will store it as a hyperlink field, and you will see a clickable link in the list view.
Example 4: Add date and time column
For date and time fields, pass the value in a recognizable date/time format. A common and safe approach is to use a PowerShell DateTime object.
Follow the script below to add a list item value to a date and time column.
Pass the “MM/DD/YYYY” format to add the date item to the SharePoint List.
# Date only
$dateOnly = Get-Date "03/15/2026"
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS4"
"Oder_Date" = $dateOnly
}If you want to pass the date and time, follow the “MM/DD/YYYY HH: MM” format.
# Date and time
$dateTime = Get-Date "03/15/2026 14:16"
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS4B"
"Oder_Date" = $dateTime
}Execute any one of the above commands that suits your needs. After execution, the added list item details will be given in the TERMINAL.

If you enable the time setting when creating the column but do not pass the time when executing the PowerShell command, the time will be provided randomly, as shown in the figure below.

Using Get-Date avoids regional format issues and ensures SharePoint gets a proper date value.
Check out SharePoint List View Customization Using JSON Formatting
Example 5: Add currency column value
Currency columns can be handled like number fields in SharePoint list. You pass a numeric value or a numeric string.
Pass the currency value in a string format to add the SharePoint list item for the currency column. To do this, follow the PowerShell command below.
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS5"
"Total_Price" = 400
}SharePoint will format it according to the currency settings of the column. After I executed the code, you can see the output in the screenshot below:

You can observe that the list item will be added to your SharePoint list.

Example 6: Add choice column value
For a single‑select choice column in a SharePoint list, pass one value that matches one of the configured choices
Follow the PowerShell commands below to add choices to the SharePoint list choice column.
To add a single choice, follow the “choice1” format, as in the example below.
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS6"
"Payment_Method" = "Gpay"
}To add multiple choices to a SharePoint choice column, follow the “choice1, choice2,….” format, as in the example below.
# Multiple choices – array form (recommended)
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS6B"
"Payment_Method" = @("Gpay", "Card")
}Using an array is usually clearer and easier to maintain in your SharePoint PowerShell scripts. After execution, you will see the output of the PowerShell script on the terminal.

The list item will be added to a choice column in your SharePoint list, as shown in the screenshot below.

Check out Create SharePoint lists from JSON Using Power Automate
Example 7: Add location column value
Location columns store a complex object: display name, address, and coordinates. You build a hashtable, convert it to JSON, and pass it as the value.
Follow the PowerShell script below to add a list item for the location column in SharePoint. Replace all your details of the location with mine.
$Address = @{
"Street" = "Westmang"
"City" = "Bergkamen"
"State" = "Nordrhein-Westfalen"
"CountryOrRegion" = "Germany"
"PostalCode" = "59192"
}
$Coordinates = @{
"Longitude" = [double]"7.6405439376831055"
"Latitude" = [double]"51.646881103515625"
}
$displayName = $Address["Street"] + ", " + $Address["PostalCode"] + ", " + $Address["City"]
$LocationObject = @{
"DisplayName" = $displayName
"Address" = $Address
"Coordinates" = $Coordinates
}
$locationJson = $LocationObject | ConvertTo-Json
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS7"
"Delivery_Location" = $locationJson
}When you view the item, the location column will show the friendly address and can be used in SharePoint map views or location filters.

You can view the added location in your SharePoint list column, as shown in the screenshot below.

Read SharePoint List Title Column
Example 8: Add person or group column value
For person or group fields, you normally pass user email addresses. PnP PowerShell will resolve them to user objects.
Suppose you want to add a list item for the person or group column to your SharePoint list. Follow the below PowerShell commands.
To add one person to the column, pass the user’s email address in string format. Follow the example below to do this.
# Single person
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS8"
"Delivery_Person" = "[email protected]"
}If you want to add multiple users, pass the users’ mail address in the format of @(“User1@<tenant>.onmicrosoft.com”, “User1@<tenant>.onmicrosoft.com”).
# Multiple people
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS8B"
"Delivery_Person" = @(
"[email protected]",
"[email protected]"
)
}Make sure the users already exist in the SharePoint site (for example, they have visited the site or been added to a group), otherwise you may get resolution errors.

You can view the added list items for the person or group column on your SharePoint list page, as shown in the figure below.

Check out Get SharePoint List Items using REST API
Example 9: Add Yes/No column value
Yes/No columns are stored as Boolean values in a SharePoint list. Use $true for Yes and $false for No.
Follow this PowerShell command to add the list item for the Yes/No column. Pass the $false for No and $true for Yes.
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS9"
"Order_Status" = $false
}In the SharePoint list view, this will show as the configured yes/no display (checkbox or text).

You can view the items added on your SharePoint list page, as shown below.

Example 10: Add lookup column value
For lookup columns in SharePoint list, you need to pass the ID of the source item, not its title.
This PowerShell example script adds the SharePoint list item for the lookup column. First, you should get the connected SharePoint list items using the Get-PnPListItem command. Then, you can add the list item using the Add-PnPListItem command.
# Get the lookup source item from the Product Details list
$product = Get-PnPListItem -List "Product Details" |
Where-Object { $_.FieldValues.Title -eq "PD3" }
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS10"
"Product_Id" = $product.Id
}SharePoint will display the lookup’s display field (like Title), but under the hood it stores the numeric ID.

The SharePoint list item will be added to the lookup column on your SharePoint list page, as shown below.

Check out Calculate Average Value in SharePoint List
Example 11: Add number column value
Number columns just expect numeric values in a SharePoint list number column.
To add the Number of data items to the SharePoint list, follow the below PowerShell command. Pass the value in Number format.
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS11"
"Product_Number" = 12345
}You can also perform calculations later using calculated columns or Power BI based on this numeric field in your SharePoint list.

The added list item is on the SharePoint list page, as shown in the screenshot below.

Example 12: Add multiple SharePoint List items in a batch
If you need to add many items, use batching. This is faster and reduces the number of calls to SharePoint.
To add multiple list items in a batched manner, use the “Batch” parameter within the for loop. Follow the PowerShell command to add batched SharePoint list items to your list.
$batch = New-PnPBatch
for($i = 0; $i -lt 10; $i++) {
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "SharePoint $i"
} -Batch $batch
}
Invoke-PnPBatch -Batch $batchHere you create a batch, queue multiple Add-PnPListItem calls, and then send everything to the SharePoint server in one go using Invoke-PnPBatch.

The list items are added to your SharePoint list, as shown in the figure below.

Read Update SharePoint List Items from Excel using Power Automate
Add SharePoint List Items using PnP PowerShell [For All Data Types]
You can also combine all the above and add a single item that fills many different column types in one go.
Follow the PowerShell example script below to add all the data types of values to one SharePoint list item.
# Location object (same pattern as before)
$Address = @{
"Street" = "Westmang"
"City" = "Bergkamen"
"State" = "Nordrhein-Westfalen"
"CountryOrRegion" = "Germany"
"PostalCode" = "59192"
}
$Coordinates = @{
"Longitude" = [double]"7.6405439376831055"
"Latitude" = [double]"51.646881103515625"
}
$displayName = $Address["Street"] + ", " + $Address["PostalCode"] + ", " + $Address["City"]
$LocationObject = @{
"DisplayName" = $displayName
"Address" = $Address
"Coordinates" = $Coordinates
}
$locationJson = $LocationObject | ConvertTo-Json
# Lookup source
$product = Get-PnPListItem -List "Product Details" |
Where-Object { $_.FieldValues.Title -eq "PD3" }
# Date
$orderDate = Get-Date "04/15/2024"
Add-PnPListItem -List "Customer Orders" -Values @{
"Title" = "CTS15"
"Customer_Name" = "Miller"
"Product_Link" = "https://contoso.com/products/cream"
"Product_Description" = "This moisturizer product protects your skin.
Also you get 20% discount on this product."
"Oder_Date" = $orderDate
"Total_Price" = 500
"Payment_Method" = "Gpay"
"Delivery_Location" = $locationJson
"Order_Status" = $false
"Product_Id" = $product.Id
"Delivery_Person" = "[email protected]"
}This approach is very handy when you are migrating or importing data from another system or from a CSV file into a SharePoint list.

All the data values are added at a time to the SharePoint list, as shown in the screenshot below.

This is how we can add the SharePoint list item using PowerShell.
Conclusion
In this tutorial, we saw different ways to add the SharePoint Online list items using PnP PowerShell for almost every common column type. Once you understand the pattern of using Add-PnPListItem with the right internal column names, you can easily extend these scripts for your own SharePoint lists and real‑world scenarios.
Start by testing with a few items, then move to batching when you are comfortable, and you will save a lot of time compared to adding items manually through the SharePoint UI.
Also, you may like:
- Delete a SharePoint Online Site Using PowerShell
- Get SharePoint Site Storage Size Using PowerShell
- Get the SharePoint Site Owner Using PowerShell
- Enable Item-level Permissions in a SharePoint Document Library Using PowerShell

After working for more than 18 years in Microsoft technologies like SharePoint, Microsoft 365, and Power Platform (Power Apps, Power Automate, and Power BI), I thought will share my SharePoint expertise knowledge with the world. Our audiences are from the United States, Canada, the United Kingdom, Australia, New Zealand, etc. For my expertise knowledge and SharePoint tutorials, Microsoft has been awarded a Microsoft SharePoint MVP (12 times). I have also worked in companies like HP, TCS, KPIT, etc.