Import Projects: Preparing Your Import File
Learn how to structure your project import file and understand each field before uploading to PSOhub
Published: 1 June 2026
Audience
- Admin
Objective
This article describes every field in the PSOhub project import template. Use it to prepare your Excel file correctly before uploading, and to understand how each field is validated on import.
Prerequisites
You must have Admin access in PSOhub.
You should have downloaded the PSOhub Import Projects template file.
Download the Template
Before you can prepare your import file, you need the official PSOhub template. The template contains the correct column structure that PSOhub expects on import — using any other file format or column order will cause the import to fail.
👉 Download the PSOhub project import template
⚠️ Important: Always use the template downloaded from PSOhub. Do not rename, remove, or reorder any columns. If you need a fresh copy, download the template again rather than modifying an existing file.
Prepare Your File
Before uploading your file, set up the import template correctly.
The project import template is structured differently from the contacts and companies templates. Because a single project can have multiple contract lines and multiple team members, one project may span several rows.
One row per contract line or team member — not per project. If a project has two contract lines and three team members, you will need enough rows to cover all combinations. Repeat all project-level columns across each row.
Keep the following rules in mind as you fill in your file:
-
Multiple contract lines: For each contract line, repeat all project-level columns (everything before ContractLineCountID). Assign a unique number to each row in the ContractLineCountID column.
-
Multiple team members: Team members can be entered on any row within the same project. If you have more team members than contract lines, add extra rows and repeat all project-level data for each.
-
Contacts: If a project has multiple contacts and you have repeated project rows for contract lines, the same contact should carry the same ContactCountID number across all repeated rows.
-
Boolean fields: The InternalProject and ExpenseFixedFee columns must always contain
trueorfalse, even on rows that have nothing to do with an expense. This is a template requirement.
Understanding the Import Fields
The table below describes every column in the PSOhub project import template, including the expected format, accepted values, and any validation rules that apply on import.
| Field | Description | Type / Value | Notes |
|---|---|---|---|
| ProjectName | The name of the project. | Text | Required. |
| CurrencyCode | The currency used for the project. | ISO 4217 code — e.g. EUR, USD, GBP | Required. Must match a currency configured in your PSOhub organization. |
| ProjectDate | The start date of the project. | Date | Required. Use a consistent date format throughout your file. |
| ProjectStage | The current stage of the project. | Text — e.g. Active, On Hold, Completed | Required. Must match a project stage configured in PSOhub. |
| InternalProject | Indicates whether this is an internal project (not billable to a customer). | true or false (lowercase) | Required on every row, including rows that relate only to contract lines or team members. |
| ProjectManagerEmail | The email address of the project manager. | Valid email format | Required. Must match the email address of an existing PSOhub user. |
| CustomerName | The name of the customer company. | Text | Required. Must match an existing company record in PSOhub exactly. |
| ContactCountID | A unique identifier for each contact associated with the project. | Integer (1, 2, 3…) | Required if the project has contacts. If the same contact appears across multiple rows (due to repeated contract line data), use the same number for that contact on every row. |
| ContactName | The full name of the project contact. | Text | Optional. |
| ContactEmail | The email address of the project contact. | Valid email format | Optional. Used to link to an existing PSOhub contact record. |
| ContractTemplate | The name of the contract template to apply to this contract line. | Text | Required for each contract line. Must match an existing contract template in PSOhub exactly. |
| ContractLineCountID | A unique identifier for each contract line within the project. | Integer (1, 2, 3…) | Required for each row containing contract line data. Must be unique within the project. |
| ContractLineName | The name of the contract line. | Text | Required for each contract line. |
| ExpenseFixedFee | Indicates whether expenses on this contract line are billed as a fixed fee. | true or false (lowercase) | Required on every row. |
| Amount | The contract line amount. | Number | Required for contract lines. Enter the value without currency symbols. |
| Budget | The budgeted hours for the project or contract line. | Number | Optional. |
| BudgetCost | The budgeted cost for the project or contract line. | Number | Optional. |
| ProjectMemberID | A unique identifier for each team member on the project. | Integer (1, 2, 3…) | Required for each row containing a team member. Must be unique within the project. |
| UserEmail | The email address of the team member. | Valid email format | Required for team member rows. Must match the email address of an existing PSOhub user with the relevant role assigned. |
| Role | The role assigned to this team member on the project. | Text | Required for team member rows. Must match a role already assigned to the user in PSOhub. |
| Rate | The billing rate for this team member on this project. | Number | Optional. Enter the value without currency symbols. |
| Tags | Tags to apply to the project. | Text | Optional. Separate multiple tags with a comma. |
| BusinessUnit | The business unit the project belongs to. | Text | Optional. Must match an existing business unit in PSOhub. |
| ProjectType | The type of project. | Text | Optional. Must match an existing project type in PSOhub. |
| DealAmount | The deal amount associated with the project. | Number | Optional. |
| InvoiceContact | The email address of the contact to receive invoices for this project. | Valid email format | Optional. |
| Reference | An external reference code or identifier for the project. | Text | Optional. |
| Description | A description of the project. | Text | Optional. |
| DealID | The ID of the deal in your connected CRM, if applicable. | Text or number | Optional. Used to link the imported project to a CRM deal. |
| HubSpotServiceProject | Indicates whether this is a HubSpot Service project. | true or false (lowercase) | Required. Set to true only for HubSpot Service projects. |
| HSCompanyID | The HubSpot company ID, found in the company record URL in HubSpot. | Number | Required if HubSpotServiceProject is true. Otherwise leave blank or enter 0. |
FAQs and Troubleshooting
My project has three contract lines and two team members. How many rows do I need?
You need enough rows to cover all contract lines and all team members. In this case, three rows covers the contract lines. If you have more team members than contract lines, add extra rows — so three contract lines and two team members requires three rows, with team member data entered on two of them.
A contract line was not imported. What should I check?
Confirm that the ContractLineCountID is unique for that line within the project, and that the ContractTemplate value matches an existing contract template in PSOhub exactly.
The import failed after I uploaded my file. What should I check?
Confirm that the column headers in your file match the original template exactly. Adding, removing, or renaming columns will cause the import to fail. Re-download the template and copy your data into a fresh copy if needed.
Can I update an existing project using the import?
The import can update the Project Manager field on an existing project. Select Update existing projects at the confirmation step. It cannot update other project fields — for other changes, edit the project directly in PSOhub.