Project Management migration
Field-level mapping, validation, and rollback between Teamwork.com and Asana. We move data and schema; workflows are rebuilt natively in Asana.
Teamwork.com
Source
Asana
Destination
Compatibility
9 of 14
objects map 1:1 between Teamwork.com and Asana.
Complexity
BStandard
Timeline
2-3 weeks
Overview
Moving from Teamwork.com to Asana is a structural migration driven by two recurring themes: teams that downsized and found Teamwork.com's per-user pricing unjustifiable without the PSA billing layer, and teams that outgrew the performance overhead of Teamwork.com's hierarchical data model. The migration requires restructuring Task Lists as Asana Sections, converting Milestones to Asana's Milestone feature or tagged tasks depending on the destination plan, and resolving the absence of native time tracking in Asana. Time Entries from Teamwork.com carry billable flags, hourly rates, and duration data that have no direct Asana equivalent — we map them to custom fields or a companion lookup table and advise on Timely or Harvest integration. Teamwork.com Automations, Project Templates, and Client Portal access do not migrate; we deliver a written inventory of every active automation for the customer's admin to rebuild in Asana Rules.
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 Teamwork.com 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.
Teamwork.com
Project
Asana
Project
1:1Teamwork.com Projects map 1:1 to Asana Projects. Project status (Active, On Hold, Completed) maps to Asana's project archived state (false = active, true = archived) with color-coding preserved where supported. Start date and end date transfer to Asana's Project Start Date and Project Due Date fields. Project-level custom fields map to Asana project custom fields on a field-by-field basis; see Custom Fields row for scope merging notes.
Teamwork.com
Task List
Asana
Section
lossyTeamwork.com Task Lists are section headers within a Project that carry ordering and optional start/due dates. They have no direct Asana equivalent — Asana uses Sections as the grouping construct within Projects. We map each Teamwork.com Task List to an Asana Section within its parent Project, preserving list-level ordering and start/due date as a Section description note. List-level Milestones (milestones attached to a Task List rather than a standalone date) are flagged during scoping and converted to individual milestone tasks within the Section.
Teamwork.com
Task
Asana
Task
1:1Teamwork.com Tasks map to Asana Tasks with full metadata: assignees, due dates, priority, estimated time, and description. The task hierarchy (parent task ID, child subtask IDs) is preserved as Asana's parent task reference and subtasks field. Priority values (low, normal, high, urgent) in Teamwork.com map to Asana's Custom Fields priority enum if available or to a custom numeric sort field. Task List association is resolved to the target Section during migration.
Teamwork.com
Subtask
Asana
Task (as subtask field)
1:1Teamwork.com Subtasks are distinct API objects carrying their own assignees, due dates, and completion state. In Asana, subtasks are a field on a parent Task rather than a separate object. We flatten the Subtask hierarchy by creating each Subtask as a Task in its own right, then linking it to the parent Task via Asana's subtasks field. Individual Subtask assignees and dates are preserved. Note that Asana's parent task completion does not cascade to subtasks, matching Teamwork.com behavior; we do not implement auto-complete propagation.
Teamwork.com
Milestone
Asana
Milestone (or tagged Task)
lossyTeamwork.com Milestones are date-driven project markers, optionally linked to specific tasks. Asana Milestones are available on Starter and above plans as a distinct feature. We map milestones to Asana Milestones within the parent Project where the Asana plan supports it, preserving milestone name and target date. Milestones with no date or with list-level attachment are converted to tasks with a Milestone tag. Linked task associations are preserved as task dependency notes. Teams on Asana Enterprise can use Goals as milestone grouping structures, which we note as a post-migration option.
Teamwork.com
Time Entry
Asana
Custom Fields or Lookup Table
1:1Teamwork.com Time Entries carry billable/non-billable flags, hourly rates, and logged durations linked to tasks or projects. Asana has no native time tracking. We map Time Entries to a custom fields group on the related Asana task (total logged hours, billable flag, hourly rate) or deliver them as a separate Time Entries table in a written inventory with task ID lookup keys. Customers who need ongoing time tracking are advised to integrate Timely or Harvest post-migration, both of which have native Asana integrations. Time Entry data is fully extracted from Teamwork.com regardless of destination strategy.
Teamwork.com
Custom Field
Asana
Custom Field
lossyTeamwork.com Custom Fields exist at project-level and site-wide (task and project) scopes. Asana Custom Fields are project-level only with no site-wide equivalent. We retrieve both scopes via Teamwork.com V2 API, merge them by name, and map to Asana project-level custom fields. Dropdown-type custom fields carry an options array that we preserve as Asana enum options. If the same field name exists as both a project-level and site-wide field in Teamwork.com, we flag the conflict and map to separate Asana fields with a naming convention. Teamwork.com Custom Field data only exists if the source account is on a Premium-tier plan or above.
Teamwork.com
Tag
Asana
Tag
1:1Tags in Teamwork.com are simple string labels applied across Projects and Tasks. Asana Tags are workspace-level labels that can be applied to any task. We map tags 1:1 by name, preserving the full tag set across the workspace. Tags used for cross-cutting categorization migrate as-is; tags used for billing classification (Teamwork.com) are flagged and mapped to the Time Entry strategy.
Teamwork.com
Comment
Asana
Stories (task comments)
1:1Teamwork.com Comments attach to Tasks with author attribution, formatted text, and timestamps. Asana Stories serve the same purpose on Tasks. We extract full comment text and author name, creating an Asana Story entry for each comment in chronological order. @mentions in Teamwork.com are preserved as text and noted for manual recreation in Asana Conversations or as @mentions if the mentioned user is an Asana workspace member. Replies within comment threads preserve nesting via the parent Story reference.
Teamwork.com
Team
Asana
Team
1:1Teamwork.com Teams are grouping constructs holding multiple Users, with project-level permission assignments. Asana Teams are workspace-level groupings of people used to organise projects and control access. We map each Teamwork.com Team to an Asana Team, preserving the team name and populating it with matched Asana workspace members. Project-level role assignments (Team = Admin, Member, Guest on a specific project) require post-migration recreation in Asana because Asana permissions are Team-scoped, not project-plus-team scoped.
Teamwork.com
User
Asana
User
1:1Teamwork.com Users carry name, email, role, hourly cost rate, and working hours. We map Users to Asana workspace members by email as the dedupe key. The Teamwork.com hourly cost rate transfers to a custom field on the Asana user profile or, if not supported, to a Staff Cost Rates lookup document. Any Teamwork.com User without a matching Asana workspace member goes to a reconciliation queue for the customer's admin to provision.
Teamwork.com
Client
Asana
Custom Field or Lookup Table
lossyTeamwork.com Clients are top-level entities owning multiple Projects, carrying contact info, billing rates, and a client portal user account. Asana has no native client object. We map Client records to a custom field on the related Project (Client Name, Client Contact, Client Billing Rate) and deliver a written Client-to-Project lookup table for reference. Customer Portal access from Teamwork.com (Enterprise feature) requires rebuild via Asana's Enterprise Customer Portal offering, which we document in the automation inventory.
Teamwork.com
Attachment
Asana
Attachment (URL reference)
1:1Teamwork.com Attachments link files to Tasks, Projects, or Posts with name, type, size, and uploader metadata. Asana Attachments are linked resources (Google Drive links, Dropbox links, uploaded files) attached to Tasks. We extract attachment URLs and metadata, writing them as URL attachments in Asana where the attachment type is a direct link, or noting upload-file attachments as a separate blob migration step depending on the customer's Asana storage allowance.
Teamwork.com
Invoice
Asana
Lookup Table (not migrated)
lossyTeamwork.com Invoices carry client associations, line items, tax configurations, and payment status. Asana has no native invoice object. We extract invoice header and line item data into a written Invoice Inventory document keyed by client and project, preserving invoice number, date, amount, and payment status. The customer recreates invoices in their accounting tool of record (QuickBooks, Xero, FreshBooks) post-migration.
| Teamwork.com | Asana | Compatibility | |
|---|---|---|---|
| Project | Project1:1 | Fully supported | |
| Task List | Sectionlossy | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Subtask | Task (as subtask field)1:1 | Fully supported | |
| Milestone | Milestone (or tagged Task)lossy | Fully supported | |
| Time Entry | Custom Fields or Lookup Table1:1 | Fully supported | |
| Custom Field | Custom Fieldlossy | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| Comment | Stories (task comments)1:1 | Fully supported | |
| Team | Team1:1 | Fully supported | |
| User | User1:1 | Fully supported | |
| Client | Custom Field or Lookup Tablelossy | Fully supported | |
| Attachment | Attachment (URL reference)1:1 | Fully supported | |
| Invoice | Lookup Table (not migrated)lossy | 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.
Teamwork.com gotchas
Custom Fields are locked behind the Premium subscription tier
API returns different field sets depending on endpoint version
Project-level and site-wide custom fields are distinct schema entities
Completing parent tasks does not cascade to subtasks
Rate limits are per-user-seat multiplier, not fixed
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
Discovery and workspace audit
We audit the Teamwork.com workspace across subscription tier (Free, Deliver, Grow, Scale), project count, Task List structure per project, task hierarchy depth (including Subtask nesting levels), active Milestone count, Time Entry volume, Custom Field definitions (both project-level and site-wide), active Automations, Tags, and Client records. We also map Team membership and project-level team assignments. The discovery output is a written migration scope document listing every object type, estimated record counts per type, and a Custom Field map noting which definitions require Premium-tier access on the source.
Schema design and section strategy
We design the Asana destination schema. This includes provisioning Teams mapped from Teamwork.com Teams, Projects with start/due dates, and a Section strategy per project derived from the Teamwork.com Task List hierarchy. We pre-create any project-level Custom Fields in Asana with types matched to Teamwork.com field definitions (text, number, enum, date). Milestone conversion strategy is agreed upon during this step: use Asana native Milestones or tagged milestone tasks. Time Entry mapping strategy is confirmed: custom fields on tasks, a companion lookup document, or external tool integration plan.
Sandbox migration and reconciliation
We run a full migration into an Asana sandbox workspace using production-like data volume. The customer's project managers reconcile record counts per project (Tasks in, Subtasks in, Milestones in, Sections in), spot-check 20-30 random tasks against the Teamwork.com source, and verify Section ordering matches the original Task List order. The Sandbox sign-off is required before production migration begins. Any Section naming conflicts or Milestone conversion issues are resolved here.
User and Team provisioning
We extract every distinct Teamwork.com User and match by email against the Asana workspace membership list. Team memberships are mapped to Asana Team rosters. Any Teamwork.com User without a matching Asana workspace member is placed in a reconciliation queue. The customer's Asana admin provisions missing workspace members (active or inactive based on whether the Teamwork.com user is still active) before the production migration phase begins.
Production migration in dependency order
We run production migration in record-dependency order: Teams first, then Projects (with dates and status), then Sections (from Task Lists), then Tasks (with parent-subtask hierarchy resolved), then Subtasks, then Milestones (with conversion strategy applied), then Tags, then Comments, then Custom Fields (merged from both scopes and written to project-level fields), then Time Entries (mapped per agreed strategy), then Client associations (as project custom fields), then Attachments (as URL references). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze writes to Teamwork.com during the cutover window, run a final delta migration of any records modified during the window, then enable Asana as the system of record. We deliver the Automation Inventory document and Board Reorganisation checklist to the customer's admin team. We support a one-week hypercare window where we resolve any task-to-section mapping issues or missing Milestone conversions raised by the project management team. We do not rebuild Teamwork.com Automations as Asana Rules inside the migration scope; that work is a separate engagement or an internal admin task.
Platform deep dives
Teamwork.com
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 Teamwork.com 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
Teamwork.com: Rate limits scale with user seat count; base quota units per hour multiplied by number of seats on the account.
Data volume sensitivity
Teamwork.com exposes a bulk API — large-volume migrations stream efficiently.
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 Teamwork.com to Asana migration scoping. Not seeing yours? Book a call.
Walk through your Teamwork.com 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 Teamwork.com
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.