Project Management migration
Field-level mapping, validation, and rollback between Project.co and Asana. We move data and schema; workflows are rebuilt natively in Asana.
Project.co
Source
Asana
Destination
Compatibility
9 of 12
objects map 1:1 between Project.co and Asana.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Project.co to Asana is a structured migration constrained primarily by Project.co's lack of a public API — all data extraction happens through the in-app UI, which limits bulk export to CSV list views and per-file downloads for attachments. We choreograph sequential exports for Projects, Tasks, Discussions, Notes, and Time Entries, then re-upload files to Asana with the same folder structure. Asana's custom fields, subtasks, and recurring task rules accept the migrated data, but per-project role permissions in Project.co do not map directly to Asana's team-based membership model and require manual reconstruction by the customer's admin. Automations, forms, and reporting dashboards do not migrate; we deliver a written inventory of these for rebuild.
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 Project.co 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.
Project.co
Projects
Asana
Project
1:1Project.co Projects map directly to Asana Projects. We extract project name, description, status, created date, and custom field values per project, then create a corresponding Project in Asana. The Project co value from Project.co migrates to the Asana Project's Notes or a custom field. Active and archived status maps directly; completed status translates to an archived Asana Project.
Project.co
Tasks
Asana
Task
1:1Project.co Tasks map to Asana Tasks with title, description (notes), assignee, due date, and status preserved. Task status in Project.co maps to the corresponding Asana section within the destination Project or to the task's completion state. Subtasks in Project.co are not a distinct object — we preserve the parent-child relationship by creating Asana subtasks under the migrated parent task. Task custom field values migrate to matching Asana custom fields on the task.
Project.co
Discussions
Asana
Task Comments
1:manyProject.co Discussions are per-project threaded message feeds. We flatten each thread as a chronological list of comments with author, timestamp, and body text, then attach each comment as an Asana Task comment on the corresponding migrated task. File attachments referenced in discussion threads migrate as separate file attachments on the task. The thread structure is not preserved as a distinct object in Asana; the chronological comment sequence on the task provides the equivalent content.
Project.co
Notes
Asana
Project Notes or Task Notes
1:1Project.co Notes are standalone rich-text documents attached to projects. We create an Asana Project or Task note with the same title, content, and project association. Rich-text formatting is preserved where the destination supports it; Asana task notes accept HTML-formatted content. The customer specifies during scoping whether Notes map to Project-level notes or to notes on the primary task within the project.
Project.co
Files
Asana
Project Attachments or Task Attachments
1:1Project.co files stored in project-level folders are downloaded as binary content and re-uploaded to Asana with the same folder path maintained as the attachment target. We map file uploads to the corresponding migrated Project or Task. File metadata (uploader, upload date) is preserved in the upload attribution in Asana. Version history beyond the current file is not preserved as Asana attachments do not track revision history. The 100MB per-file limit in Asana applies; we flag any source files exceeding this threshold during scoping.
Project.co
Time Entries
Asana
Time Tracking Entries (Premium) or Custom Fields
1:1Project.co time entries (duration, date, billable flag, task association) map to Asana time tracking entries if the destination Asana organisation has a Premium tier subscription that includes time tracking. Duration and billable flag transfer; hourly rate data is absent in Project.co and is not migrated. If the destination Asana org is on a lower tier, time entries migrate as a custom field on the task (duration in minutes) and a boolean billable flag. The customer configures the hourly rate separately in Asana.
Project.co
Recurring Tasks
Asana
Recurring Tasks
1:1Project.co recurring tasks store a recurrence rule and next-run date. We create the task in Asana with the same title, description, assignee, and due date, then apply the recurrence pattern as an Asana native recurrence rule. The recurrence syntax differs between platforms; we convert Project.co's rule to the nearest Asana-supported recurrence pattern (daily, weekly, monthly, yearly) and flag any complex or non-standard recurrence patterns for manual verification during the sandbox migration.
Project.co
Custom Fields
Asana
Custom Fields
1:1Project.co custom field definitions (name, type, options) and values per Project and Task record migrate to Asana custom fields. We pre-create the custom field definitions in the destination Asana organisation before any data import, matching field names and types. Asana's single-select fields are capped at 500 options; we flag any Project.co fields exceeding this during scoping. Multi-select, number, date, and text types map directly. Note that removing a custom field value option in Asana does not remove existing values from tasks — this differs from Project.co's behaviour.
Project.co
Role Permissions
Asana
Team Membership
lossyProject.co uses granular per-user roles scoped to individual projects. Asana does not support project-level per-user role assignments; access is controlled through Team membership and project sharing settings. We extract all role assignments per user per project during discovery and surface them in a written permission matrix. The customer's admin reconstructs the access model by adding users to the appropriate Asana Teams and configuring project sharing. Client portal access requires separate setup in Asana (Guest user type or external collaboration).
Project.co
Clients (external users)
Asana
Guest Members
1:1Project.co clients access projects via a client portal link and are not counted as paid seats. We create Guest user accounts in Asana for each migrated client and map their project invitations to Asana project sharing permissions. Client email addresses and names migrate; client-specific custom fields transfer if the destination custom fields exist. Asana Guest accounts have limited permissions and cannot access all Asana features; we document these constraints in the scoping report.
Project.co
Assignees (internal team members)
Asana
Workspace Members
1:1Project.co team member accounts (team members scoped to the project) map to Asana workspace members. We match users by email address during import. Any assignee without a corresponding Asana account is held in a reconciliation queue; the customer provisions the account before the relevant task import phase. Seats consumed in Project.co may differ from Asana seats because the two platforms price differently; this is surfaced during scoping but is a commercial decision for the customer.
Project.co
File Folders
Asana
Project Sections
lossyProject.co file folders are a foldering layer within Projects used to organise file attachments. Asana does not have a native file folder concept. We map folder structure to Asana Sections within the Project, with a note in each Section description indicating the original folder name. File attachments attach to the relevant Section's primary task or to the Project directly. Large attachment libraries with deep folder hierarchies may require manual reorganisation in Asana post-migration.
| Project.co | Asana | Compatibility | |
|---|---|---|---|
| Projects | Project1:1 | Fully supported | |
| Tasks | Task1:1 | Fully supported | |
| Discussions | Task Comments1:many | Fully supported | |
| Notes | Project Notes or Task Notes1:1 | Fully supported | |
| Files | Project Attachments or Task Attachments1:1 | Mapping required | |
| Time Entries | Time Tracking Entries (Premium) or Custom Fields1:1 | Fully supported | |
| Recurring Tasks | Recurring Tasks1:1 | Mapping required | |
| Custom Fields | Custom Fields1:1 | Mapping required | |
| Role Permissions | Team Membershiplossy | Mapping required | |
| Clients (external users) | Guest Members1:1 | Mapping required | |
| Assignees (internal team members) | Workspace Members1:1 | Fully supported | |
| File Folders | Project Sectionslossy | 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.
Project.co gotchas
No documented public API constrains migration approach
Per-tier team member seat cap is a hard ceiling
Time tracking lacks hourly rate data
Custom domain and branding settings are not exportable
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
Scoping and export choreography plan
We audit the Project.co account across all projects, tasks, discussions, notes, files, time entries, and custom field definitions. Because Project.co has no API, we design the export choreography — CSV download sequence for list objects, file download batch sizes, and the ordering needed to satisfy parent-record dependencies. We flag seat cap status (are team member accounts at or near the current tier limit), large attachment volumes, and any Project.co custom fields exceeding Asana's 500-option limit. The output is a written migration scope with record counts, a file manifest, and an export sequence document for the customer to execute during the scoping call.
Destination schema preparation in Asana
We create the destination schema in Asana before any data import. This includes creating custom field definitions (matching Project.co field names and types), setting up Projects (as top-level containers), and configuring Section structure where Project.co file folders require a structural equivalent. We configure the Asana Organisation type (not Personal Projects workspace) during scoping. If the destination is a new Asana org, we set up the initial Team structure aligned with the customer's organisational units. We validate custom field limits and flag any fields that exceed Asana's 500-option single-select cap.
Data export from Project.co
The customer executes the export choreography we define during scoping, downloading CSV files for Projects, Tasks, Discussions, Notes, and Time Entries from the Project.co UI. We download file attachments in batches, maintaining the project-folder path as metadata. We extract user assignments (team member and client email addresses) and role assignments per project. Time entry exports include duration, date, and billable flag but not hourly rate; we document this gap in the scoping report. The customer shares the exported files via a secure transfer before migration begins.
Sandbox migration and validation
We run a full migration into a sandbox or non-production Asana environment using production-like data volume. This validates that all custom fields resolve, parent-child task relationships import correctly, file attachments re-upload successfully, and Asana's object ID reassignment is handled properly. The customer spot-checks 20-30 records against the Project.co source and validates the permission matrix document. Any mapping corrections, missing custom field definitions, or file re-upload failures are resolved in the sandbox before production migration. We do not migrate into the production Asana org until sandbox sign-off is received.
Production migration in dependency order
We run production migration in record-dependency order: Projects first (as top-level containers), then Tasks with parent-subtask relationships resolved, then Discussions as task comments, Notes as task or project notes, Time Entries as time tracking or custom fields, then file attachments re-uploaded to the corresponding Projects and Tasks. Custom field values apply per record during the relevant import phase. Each phase emits a row-count reconciliation report. File re-upload uses Asana's file attachment API with batch handling for large volumes. Role permission data is delivered as a written matrix; the customer's admin reconstructs the access model in Asana Teams and project sharing settings.
Cutover, delta sync, and rebuild handoff
We freeze Project.co writes during cutover, run a final delta migration of any records modified during the migration window, then hand off Asana as the system of record. We deliver the role permission matrix, the automation and reporting inventory (documenting Project.co automations, forms, and dashboards that require rebuild), and a post-migration checklist covering custom domain reapplication, Asana Guest account setup for clients, and recurring task rule verification. We support a five-business-day hypercare window for reconciliation issues. We do not rebuild Project.co automations or reporting dashboards as Asana automations or dashboards; those are documented separately for the customer's admin to rebuild.
Platform deep dives
Project.co
Source
Strengths
Weaknesses
Asana
Destination
Strengths
Weaknesses
Complexity grading
Standard Project Management migration. 2 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 Project.co and Asana.
Object compatibility
2 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
Project.co: Not applicable..
Data volume sensitivity
Project.co 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 Project.co to Asana migration scoping. Not seeing yours? Book a call.
Walk through your Project.co 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 Project.co
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.