Project Management migration
Field-level mapping, validation, and rollback between AGILITY and Asana. We move data and schema; workflows are rebuilt natively in Asana.
AGILITY
Source
Asana
Destination
Compatibility
7 of 12
objects map 1:1 between AGILITY and Asana.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from digital.ai Agility to Asana is an ALM-to-project-management transition, not a lateral tool swap. Agility's layered object model — Projects containing Sprints/Iterations containing Stories, Defects, and Tasks, with Test Sets and Test Cases tracked on a parallel schema — has no direct Asana equivalent. We flatten that hierarchy into Asana's Project, Section, Task, and Subtask structure, preserve the iteration calendar as a custom start/end date pair on Tasks, and use a custom field set to carry Agility severity, story points, and defect status into Asana. Custom fields are resolved using Agility's System Name (not display label) as the mapping key. We flag the edition-gated API access gap during scoping: Starter and Pro tier Agility customers cannot use the REST API or Data Mart and must use a file-based export path, which limits field and attachment coverage. Workflows, automations, Test Set schedules, and Test Case step structures do not migrate as code; we deliver a written inventory for the customer to rebuild in Asana Rules or a third-party automation layer.
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 AGILITY 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.
AGILITY
Project
Asana
Project
1:1Agility Projects are the top-level container with a stable OID, Owner, Team, and description. They map directly to an Asana Project. We preserve the project description and map the Owner to an Asana team member with Project Editor permission. Projects with multiple Teams on the source side are noted as requiring multiple Asana Project shares post-migration.
AGILITY
Iteration/Sprint
Asana
Custom Date Fields + Section or Timeline
lossyAgility Iterations are first-class OID-bearing objects with start_date, end_date, status (Active/Closed/Planning), and velocity metrics. Asana has no native sprint object. We model iterations as a custom start_date__c and end_date__c pair on Tasks, and group tasks by iteration using a custom iteration_name__c text field. For teams using Asana Timeline (Gantt) view, we create a Timeline group per iteration. Velocity and cadence settings do not map; we note them in the handoff inventory for manual tracking in Asana Dashboards.
AGILITY
Story
Asana
Task
1:1Agility Stories are primary work items with a title, description (rich text), status, story_points, owner, parent iteration, and a full set of custom fields. We map Stories to Asana Tasks with the name, notes (rich text), assignee (single assignee; multiple assignee cases handled via a reconciliation step), and custom fields. Story points migrate to a custom number field story_points__c. Custom field mapping uses the System Name as the Asana custom field API name, not the display label.
AGILITY
Defect
Asana
Task
1:1Agility Defects share the primary work item schema with Stories but include severity, detected_in_iteration, and resolution fields. We map Defects to Asana Tasks with severity stored in a custom dropdown field defect_severity__c (Critical, High, Medium, Low) and resolution stored as a custom text field defect_resolution__c. The detected_in_iteration relationship maps to the same iteration_name__c custom field used for Stories.
AGILITY
Task (child of Story or Defect)
Asana
Subtask
1:1Agility Tasks are child work items belonging to Stories or Defects. They carry assignee, estimated_hours, and status. We map them to Asana Subtasks under the parent Task record. Parent-child linkage is resolved during import using Asana's parent_task_gid field, which we populate by matching the Agility parent OID to the migrated Asana task gid via the cross-reference table generated during the import pass.
AGILITY
Test Set
Asana
Task (with custom Test Set metadata)
lossyAgility Test Sets aggregate Test Cases and carry environment, test type, and status fields. Asana has no native test set object. We model each Test Set as an Asana Task with custom fields test_set_environment__c, test_set_type__c, and test_set_status__c, and attach Test Cases as Subtasks of that Task. Test Set member ordering from Agility is preserved in Subtask position order. Edition-gated schema on Starter/Pro Agility may limit available Test Set fields; we map only the intersection available in the source edition.
AGILITY
Test Case
Asana
Subtask of Test Set Task
lossyAgility Test Cases carry step-level instructions, expected results, and custom fields in the Fact.Test Data Mart. We export the full step structure as Asana Subtasks under the parent Test Set Task, with each step as a separate Subtask containing the expected result in the notes field. If the destination Asana workspace has a third-party test management integration (e.g., TestRail, Qase), we map Test Cases to that tool instead and store a link reference in a custom field test_case_reference__c on the Task.
AGILITY
Issue
Asana
Task
1:1Agility Issues are tracked in Fact.Issue with a schema distinct from primary work items, including issue_type, priority, and a separate custom field set. They have no parent-child relationship with Stories or Defects. We map Issues to Asana Tasks with issue_type stored in a custom dropdown field issue_type__c and priority mapped to Asana's built-in Task priority field (High, Medium, Low, or None).
AGILITY
Custom Fields
Asana
Custom Fields
lossyAgility custom fields exist on most asset types and support checkbox, date, text, number, and drop-down types. The Data Mart column name derives from the System Name (internal identifier), not the user-facing display label. We extract both during discovery, generate a dual-key mapping table, and create Asana custom fields using the System Name as the API name. A custom field named 'Customer Priority' with System Name 'Custom_CustomerPriority' in Agility creates an Asana custom field with API name custom_c_customer_priority__c and display label 'Customer Priority'. Drop-down values migrate as option sets in Asana's custom field enum.
AGILITY
Attachments
Asana
Attachments
lossyAgility stores binary attachments with a separate OID registry from the work item JSON payload, requiring a two-pass migration. We export attachments first, upload them to Asana via the attachments endpoint, capture the returned Asana gid, then re-associate them with the corresponding Tasks using a cross-reference table. This prevents orphaned attachment references. Maximum file size follows Asana's 100 MB per attachment limit; files exceeding this are flagged for manual chunking or alternative storage.
AGILITY
Comments
Asana
Stories, Tasks
1:1Agility Comments are child objects of work items with author, timestamp, and body (rich text). We migrate comments as Asana Stories on the Task record, preserving the author display name and the original timestamp. Comment attachments (if any) are handled in the attachment pass. Rich text formatting in Agility comments maps to Asana's HTML story format.
AGILITY
Member/User
Asana
Member (via Asana workspace)
1:1Agility user records include display name, email, role, and team membership. Active Directory integration in Agility can source users externally. We detect whether the destination Asana workspace uses local user management or SSO (Google, SAML). For SSO-configured Asana workspaces, we match users by email domain and flag any Agility users without matching Asana accounts for the customer's admin to provision before record import. Role mapping (Agility roles to Asana permissions) is noted in the handoff document for manual configuration.
| AGILITY | Asana | Compatibility | |
|---|---|---|---|
| Project | Project1:1 | Fully supported | |
| Iteration/Sprint | Custom Date Fields + Section or Timelinelossy | Fully supported | |
| Story | Task1:1 | Fully supported | |
| Defect | Task1:1 | Fully supported | |
| Task (child of Story or Defect) | Subtask1:1 | Fully supported | |
| Test Set | Task (with custom Test Set metadata)lossy | Fully supported | |
| Test Case | Subtask of Test Set Tasklossy | Fully supported | |
| Issue | Task1:1 | Fully supported | |
| Custom Fields | Custom Fieldslossy | Mapping required | |
| Attachments | Attachmentslossy | Mapping required | |
| Comments | Stories, Tasks1:1 | Fully supported | |
| Member/User | Member (via Asana workspace)1: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.
AGILITY gotchas
Edition-gated API access blocks migration extraction
Custom field System Name vs. display label mismatch
Rate limits are undocumented for direct consumption
Test Set and Test Case schemas vary by Agility edition
Attachment OID registry requires a separate migration pass
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 edition verification
We audit the source Agility org across edition (Starter/Pro/Enterprise), API availability, object inventory (Projects, Iterations, Stories, Defects, Tasks, Test Sets, Test Cases, Issues), custom field inventory (with System Names and display labels extracted from both the UI and Data Mart), attachment count, and member roster. If the Agility edition is Starter or Pro and the REST API is unavailable, we pivot to a file-based extraction plan using Agility's built-in export UI and document which fields and objects will have reduced coverage. The discovery output is a written migration scope with object counts, custom field mapping table, and edition-based export path decision.
Schema design and custom field pre-creation
We design the destination Asana workspace schema before any data import. This includes creating Asana Projects (one per Agility Project), custom fields on each Project or Task (using the System Name as API name, display label as field name, and the correct type — text, number, date, or enum), and a custom iteration_name__c field for grouping Tasks by Sprint/Iteration. If Test Cases are being mapped, we configure a test_case_reference__c text field on the parent Task. Custom fields are created via the Asana API before the import pass begins to ensure field IDs are available for mapping during insert.
Attachment first-pass export and upload
We extract the full attachment OID list from Agility (REST API for Enterprise, file export for Starter/Pro), download binaries to local storage, and upload them to Asana via the attachments endpoint in batches of 50 files with exponential backoff on 429 responses. We capture the returned Asana gid for each uploaded file in a cross-reference table keyed by Agility attachment OID. This pass runs before the work item import pass so that attachment associations can be resolved during insert.
Work item import in dependency order
We import records in Agility's dependency order: Projects (parent container), Iterations (date-range metadata stored as custom fields), Stories and Defects (primary work items), Tasks (child work items with parent Task gid resolved), Issues, Comments (as Asana Stories on parent Task), and Test Sets with their Test Case Subtasks. For each record we resolve the Agility owner email to an Asana user gid (with unresolved owners held in a reconciliation queue), map custom fields using the System Name-to-API-name table, and associate attachments from the cross-reference table. The iteration relationship is preserved via the iteration_name__c custom field.
Sandbox or pilot validation
For migrations exceeding 2,000 records or involving Test Cases and attachments, we run a pilot migration into a designated Asana workspace or project before the full production cutover. The customer's project manager reviews 25-50 randomly sampled records for field completeness, parent-child linkage accuracy, attachment presence, and iteration grouping. Any mapping corrections are documented and applied to the production migration script before cutover. Pilot validation is required for all Enterprise-tier Agility migrations and strongly recommended for Pro-tier.
Production cutover and handoff inventory
We freeze Agility writes during cutover, run a final delta pass for any records modified during the migration window, then mark the Asana workspace as the system of record. We deliver a written handoff inventory covering: (1) active Workflows, automations, and iteration schedules that require rebuilding in Asana Rules or a third-party tool, (2) Test Case step execution history that requires manual entry or third-party test management tool setup, (3) any Agility custom fields that could not be mapped due to data type incompatibility, and (4) a list of unresolved Agility users requiring Asana account provisioning. We support a five-business-day hypercare window for reconciliation issues. Workflow rebuild, automation rebuild, and test management tool integration are outside standard migration scope.
Platform deep dives
AGILITY
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 AGILITY 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
AGILITY: Rate limiting is documented but specific quota values are not publicly disclosed; limits vary by Agility edition and org tier.
Data volume sensitivity
AGILITY 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 AGILITY to Asana migration scoping. Not seeing yours? Book a call.
Walk through your AGILITY 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 AGILITY
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.