Project Management migration
Field-level mapping, validation, and rollback between BrightWork and Asana. We move data and schema; workflows are rebuilt natively in Asana.
BrightWork
Source
Asana
Destination
Compatibility
10 of 12
objects map 1:1 between BrightWork and Asana.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from BrightWork to Asana is a two-stage extraction problem. BrightWork publishes no REST API, so all source data runs through SharePoint list export against each Project Area subsite. We extract Projects, Programs, Tasks, RAID Log entries, Custom Fields (implemented as SharePoint list columns), and Attachments, then transform them into Asana's REST API schema. The mapping challenge is BrightWork's per-project custom field model, where columns are defined per Project Area rather than globally—Asana Custom Fields are global but scoped to Projects. We resolve this by exporting each Project Area's column schema, building a unified field map across all projects, and creating Asana Custom Fields with the correct type (text, number, date, enum) before data import. RAID Log entries (Risks, Assumptions, Issues, Dependencies) map to Asana Tasks in dedicated Sections per log type, preserving the structured severity, owner, and status fields. Portfolio Status Reports become Asana Portfolios with a summary task or custom field set. We do not migrate SharePoint workflows, BrightWork automations, or reporting templates as code; we deliver a written inventory for the customer's admin to rebuild in Asana's Rules and Forms.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a BrightWork object lands in Asana, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
BrightWork
Project
Asana
Project
1:1BrightWork Projects map 1:1 to Asana Projects. We extract the project name, description, start date, end date, assigned Project Manager (as Project Members), and project status, and write them to Asana Projects via the POST /projects endpoint. Project Area subsites are not independently created in Asana; their content becomes part of the parent Project. Program membership (Projects belonging to a Program) maps to Asana Portfolios with the project added as a member.
BrightWork
Program
Asana
Portfolio
1:1BrightWork Programs map to Asana Portfolios. We extract the Program name, description, and child project list, then create Asana Portfolio records with all member Projects added via the /portfolios/{portfolio_gid}/addProject endpoint. Portfolio-level Status Reports from BrightWork do not have a direct Asana equivalent; we create a summary task within one of the child Projects or add a custom text field capturing the last report date and status summary.
BrightWork
Task
Asana
Task
1:1BrightWork Tasks map directly to Asana Tasks. We preserve name, start date, due date, percent complete, priority (mapped to Asana Custom Field of enum type), assigned owner (mapped to Asana assignee via User lookup by email), and predecessor links. Parent-child task hierarchy maps to Asana subitems (available on Asana Business) or section nesting. Predecessor relationships map to Asana dependencies using the /tasks/{task_gid}/addDependencies endpoint.
BrightWork
Custom Field (SharePoint Column)
Asana
Custom Field
lossyBrightWork custom fields are SharePoint list columns defined per Project Area, meaning the same column name can have different data types across projects. We export every Project Area's column schema, build a unified field map, and create Asana Custom Fields with the most permissive compatible type (text if any project uses text, enum if all projects use a common choice set, number if all projects use numeric). Type conflicts (same name, different types across projects) are surfaced for customer resolution before import. Asana Custom Fields are created at the workspace level and then added to relevant Projects.
BrightWork
RAID Log: Risk
Asana
Task (Section: Risks)
1:1BrightWork Risks map to Asana Tasks in a dedicated 'Risks' Section within the parent Project. We extract the Risk title, description, severity (mapped to an enum Custom Field with values Low/Medium/High/Critical), owner (assignee), status (Open/Closed/Accepted), and creation date. The RAID risk-specific fields (probability, impact, mitigation plan) migrate to Asana custom fields or task descriptions depending on the number of fields.
BrightWork
RAID Log: Issue
Asana
Task (Section: Issues)
1:1BrightWork Issues map to Asana Tasks in a dedicated 'Issues' Section. Issue fields (title, description, priority, owner, status, raised date, resolution date) map to Asana Task fields and custom fields. Open Issues migrate as open Tasks; resolved Issues migrate with a completion date and resolution notes in the task description.
BrightWork
RAID Log: Assumption
Asana
Task (Section: Assumptions)
1:1BrightWork Assumptions map to Asana Tasks in a dedicated 'Assumptions' Section. Assumption-specific fields (assumption text, owner, validation date, validation status) migrate to Asana Task fields and custom fields. Unvalidated assumptions migrate as open tasks with a due date matching the validation target date.
BrightWork
RAID Log: Dependency
Asana
Task Dependency
lossyBrightWork Dependencies (D in RAID) map to Asana Task dependencies. We extract the source task, target task, and dependency type (finish-to-start by default), then create Asana dependency links via the /tasks/{task_gid}/addDependencies endpoint. Note: Asana's dependency handling has known issues with date propagation on complex dependency chains (red arrow behavior); we document this limitation and recommend customer testing of the dependency chain in the Asana destination post-migration.
BrightWork
Attachment
Asana
Attachment
1:1BrightWork attachments live in SharePoint document libraries within each Project Area. We extract the binary files, map them to the corresponding Asana Project or Task via the /attachments endpoint, and preserve the original filename. Large file sets (>500 files per project) are chunked and uploaded with rate-limit handling. Folder structure is preserved in the attachment name prefix for traceability.
BrightWork
Time Entry
Asana
Custom Field + Task
1:1BrightWork time entries logged against Tasks map to an Asana Custom Field of number type (Hours Logged) on the Task, plus a completion note capturing the date and user. Asana does not have a native time-tracking object, so the time entry data is stored as a custom field value rather than a separate record. If the customer requires granular time tracking, we recommend pairing with a time-tracking integration (Harvest, Toggl) post-migration.
BrightWork
Document Library
Asana
Attachment Set
1:1SharePoint document libraries within a BrightWork Project Area are exported as file sets and uploaded to the corresponding Asana Project as attachments. We preserve the document library folder hierarchy in the attachment naming convention (e.g., /ProjectCharter/2024-Budget.xlsx) so the document organization is visible in Asana's attachment list.
BrightWork
Portfolio Status Report
Asana
Custom Field Set
1:1BrightWork aggregates project status into portfolio-level Status Reports. We extract the report date, overall status (green/amber/red), key achievements, risks summary, and next steps, and write them as a custom field set on the Asana Portfolio (using Portfolio Custom Fields if available) or as a summary Task pinned to the Portfolio dashboard. The report attachment (PDF or SharePoint page) migrates as a Portfolio attachment.
| BrightWork | Asana | Compatibility | |
|---|---|---|---|
| Project | Project1:1 | Fully supported | |
| Program | Portfolio1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Custom Field (SharePoint Column) | Custom Fieldlossy | Fully supported | |
| RAID Log: Risk | Task (Section: Risks)1:1 | Fully supported | |
| RAID Log: Issue | Task (Section: Issues)1:1 | Fully supported | |
| RAID Log: Assumption | Task (Section: Assumptions)1:1 | Fully supported | |
| RAID Log: Dependency | Task Dependencylossy | Fully supported | |
| Attachment | Attachment1:1 | Fully supported | |
| Time Entry | Custom Field + Task1:1 | Fully supported | |
| Document Library | Attachment Set1:1 | Fully supported | |
| Portfolio Status Report | Custom Field Set1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
BrightWork gotchas
No public REST API for programmatic data access
SharePoint versioning can break list export formats
Custom fields are SharePoint list columns, not a defined schema
Asana gotchas
Automation rules have no export representation
API rate limits cap bulk migration throughput
Portfolios are view-only objects that do not hold data
Custom field enum options cannot be updated via API
Subtasks do not appear in project views by default
Pair-specific challenges
Migration approach
SharePoint access scoping and authentication setup
We audit the BrightWork SharePoint environment during discovery: list all Project Area subsites, confirm SharePoint version (2019 on-premise vs. Online/Microsoft 365), document the authentication method (OAuth for M365, NTLM/Kerberos for on-premise), and validate read access to all Project Area lists and document libraries. Any subsites without read access are flagged for the customer's SharePoint admin to grant before extraction begins. This step also inventories the total record count (Projects, Tasks, RAID entries, attachments) for migration sizing.
Column schema extraction and custom field mapping design
We export the column definition for every SharePoint list across all Project Areas, capturing column name, data type (text, number, date, choice, person, lookup), and whether it is required. We build a unified schema map identifying duplicate column names across projects, type conflicts, and columns with no Asana equivalent. The customer reviews type conflicts and approves the resolution (rename, standardize, or accept as text). We then design the Asana Custom Field creation plan: field name, type, and enumeration values for each Custom Field, plus the list of Projects each field applies to.
Asana workspace provisioning and custom field creation
We authenticate to the Asana destination workspace using OAuth 2.0 with a service account that has Project Admin rights. We create all Custom Fields via the POST /custom_fields endpoint (workspace-level), then add each Custom Field to the relevant Projects via the PUT /projects/{project_gid}/addCustomFieldSetting endpoint. Enumeration options for choice fields are bulk-created in the same step. We verify that all Custom Fields appear in the correct Projects before proceeding to data import.
SharePoint list export and data transformation
We run authenticated SharePoint list exports for all Project, Task, RAID, and Custom Field value lists. Exports run per Project Area subsite and produce XML or JSON depending on SharePoint version. We transform the output into Asana API request format (task name, start date, due date, notes, assignee email, custom field values, parent task gid, section assignment). RAID entries are tagged with a Section name (Risks, Issues, Assumptions, Dependencies) that we create in each Project before task import. Predecessor links are resolved to Asana dependency format using task gid mapping built during the transform step.
Attachment extraction and bulk upload
We export all file attachments from SharePoint document libraries linked to BrightWork Projects and Tasks. Files are organized by parent Project and, where applicable, by parent Task. We upload attachments to Asana via POST /attachments using multipart form encoding, with the parent_task or parent_project gid set correctly. Attachments larger than 100 MB use Asana's chunked upload process. Folder structure is encoded in the attachment name prefix for traceability.
Portfolio assembly and Status Report handoff
We create Asana Portfolios for each BrightWork Program, adding all child Projects as members via the /portfolios/{portfolio_gid}/addProject endpoint. We extract the last Portfolio Status Report content from BrightWork and create a summary Task in one of the child Projects (or a dedicated Portfolio Summary project) with the status content in the task description and a custom field capturing the report date and overall status (Green/Amber/Red). We deliver this as part of the migration handoff and flag that future status reporting requires manual update in Asana or a reporting integration.
Cutover, validation, and template rebuild inventory
We freeze SharePoint writes during cutover, run a final delta export of any records modified during the migration window, then mark BrightWork as read-only or decommission. We validate record counts in Asana (Projects, Tasks, RAID entries, attachments) against the source extraction logs and spot-check 20-30 records per object type for field-level accuracy. We deliver the Template and Automation Inventory document listing every BrightWork project template, SharePoint workflow, and RAID log structure that requires rebuild in Asana, with recommended Asana equivalents (Sections, Custom Fields, Rules, Forms). We support a three-day hypercare window for reconciliation issues.
Platform deep dives
BrightWork
Source
Strengths
Weaknesses
Asana
Destination
Strengths
Weaknesses
Complexity grading
Standard Project Management migration. 3 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across BrightWork and Asana.
Object compatibility
3 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
BrightWork: Not publicly documented.
Data volume sensitivity
BrightWork doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during BrightWork to Asana migration scoping. Not seeing yours? Book a call.
Walk through your BrightWork to Asana migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave BrightWork
Other ways to arrive at Asana
Same-Project Management migrations
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.