Project Management migration
Field-level mapping, validation, and rollback between Forecast and Asana. We move data and schema; workflows are rebuilt natively in Asana.
Forecast
Source
Asana
Destination
Compatibility
10 of 14
objects map 1:1 between Forecast and Asana.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Forecast to Asana is primarily a schedule and task-structure migration with one significant gap: Forecast's financial layer (Time Registrations, Rate Cards, resource allocations) has no direct Asana equivalent. Forecast organizes work as Projects containing Phases containing Tasks, with Milestones tied to Projects and Time Registrations linked to Tasks. Asana uses Teams containing Projects with Sections and Tasks, with Milestones implemented as pinned deadlines or task markers rather than standalone objects. We preserve the Project-Phase-Task nesting by mapping Phases to Asana Sections, flag Rate Cards as requiring a post-migration integration (Harvest, Toggl, or Asana's built-in time tracking on Advanced plans), and document resource allocation percentages as custom fields or workload view configuration entries. Custom Fields, which Forecast applies to any entity, require type-mapped migration to Asana local or global custom fields. Automations, templates, and resource management workflows do not migrate; we deliver a written inventory for the customer's admin to rebuild in Asana Rules or Workload.
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 Forecast 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.
Forecast
Project
Asana
Project
1:1Forecast Projects map directly to Asana Projects. We export the project name, status, start date, end date, description, and any custom properties, then land them as Asana Projects. The Asana Team membership is set during migration based on the customer's org structure mapping provided during scoping. Completed projects in Forecast map to completed projects in Asana with the completed_at timestamp preserved.
Forecast
Phase
Asana
Section
1:1Forecast Phases are mid-level groupings within a Project that chunk large work streams into named segments. We map Phases to Asana Sections within the corresponding Project, preserving the phase name, sequence order, and any phase-level custom field values. If a Forecast project has no Phases, we create a default Section to hold all migrated Tasks.
Forecast
Task
Asana
Task
1:1Forecast Tasks map 1:1 to Asana Tasks. We transfer task name, description (as rich text), status (mapped to Asana completion), assignee (resolved via email to Asana User), due date, and start date. Subtasks in Forecast map to subtasks in Asana, preserving the parent-child relationship. The Task ID from Forecast is stored in a custom field fc_original_id__c for audit and cross-reference.
Forecast
Milestone
Asana
Task (pinned deadline)
lossyForecast Milestones are standalone objects with a name, target date, and parent project reference. Asana does not have a native Milestone object; we implement milestones as Asana Tasks with the milestone flag set (or as pinned deadline tasks if the destination is on Starter tier without the milestone feature). We preserve the milestone name, target date, and project association. The milestone status (achieved, missed, upcoming) is stored as a custom field on the migrated task.
Forecast
Custom Field (Project-level)
Asana
Custom Field (local, project-scoped)
lossyForecast custom fields applied at the Project level migrate to Asana local custom fields scoped to the corresponding project. Text fields map to Asana text custom fields, numeric fields to number fields, and choice fields to enum custom fields with option lists recreated. If the customer requests global availability, we create Asana organization-level custom fields and apply them to the migrated projects post-import.
Forecast
Custom Field (Phase-level)
Asana
Custom Field (local, project-scoped)
lossyForecast custom fields applied at the Phase level map to Asana local custom fields on the project containing the corresponding Section. Phase-level custom field values are stored as Section metadata in a custom field section_custom__c on each task belonging to that phase, since Asana Sections do not support custom fields natively.
Forecast
Custom Field (Task-level)
Asana
Custom Field (local or global)
lossyForecast task-level custom fields map directly to Asana task custom fields. We identify every distinct custom field name and type across all Forecast tasks during scoping, then pre-create the corresponding Asana custom fields (local or global based on customer preference) before migration begins. Choice options are reproduced verbatim; numeric precision is preserved.
Forecast
Custom Field (Time Registration-level)
Asana
Custom Field (local, on time integration)
1:1Forecast custom fields attached to Time Registrations cannot map to Asana task custom fields because Asana tasks do not store time entry metadata natively. We export the time registration custom field values alongside the Time Registration itself and store them in a custom field fc_time_registration_meta__c on the linked task as JSON-serialized metadata, or flag them for the customer's admin to review in a post-migration reconciliation report.
Forecast
Time Registration
Asana
Time Tracking (Advanced) or Custom Fields
1:1Forecast Time Registrations carry hours, date, billable flag, and optionally a rate, linked to a Task. Asana has no native billing rate model. On Asana Advanced plans ($24.99/user/month), native time tracking stores hours and dates per task but not billing rates. We migrate hours and dates as Asana time entries where available, and store the billable flag and rate as custom fields on the task (fc_billable__c, fc_hourly_rate__c). The customer assigns a time-tracking integration (Harvest, Toggl) if ongoing billing-grade time capture is required.
Forecast
Rate Card
Asana
Custom Fields (global)
1:1Forecast Rate Cards define hourly billing rates per role or person. Asana has no rate card concept. We export the rate card structure (role name, rate amount, effective dates) and create Asana organization-level number custom fields for each role (e.g., fc_rate_senior_pm__c, fc_rate_junior_dev__c). Rate values are static metadata for reference; they do not auto-apply to time entries in Asana. We note in the handoff document that the customer should configure their chosen time-tracking integration to reference these rates if billing automation is needed.
Forecast
Resource Assignment
Asana
Custom Fields or Workload view configuration
1:1Forecast assigns team members to tasks with an allocation percentage or hours. Asana Workload view (Advanced plan) shows capacity but does not store per-task allocation percentages as records. We extract assignment percentages and store them as custom number fields on each migrated task (fc_allocation_pct__c). We also produce a CSV inventory of all resource assignments for the customer's admin to configure in the Asana Workload view post-migration. Assignments where the Forecast user has no Asana User counterpart go to a reconciliation queue.
Forecast
User / Team Member
Asana
User
1:1Forecast Users referenced on any record (assignee, time registration owner, resource assignment owner) are matched to Asana Users by email address. We extract every distinct user reference across all objects and produce a User mapping table. Any Forecast user without a matching Asana User goes to a reconciliation queue for the customer's admin to provision before record import resumes. User names, email addresses, and active/inactive status are preserved.
Forecast
Project Status
Asana
Task (status update)
1:1Forecast's Project Health or status update feature (green/amber/red indicators) has no direct Asana equivalent. We capture the last known status value and project-level notes and store them in a custom text field fc_project_status__c on the Asana Project description or as a pinned task note for the customer's PM to reference.
Forecast
Attachment (on Task)
Asana
Attachment (on Task)
1:1Forecast task attachments migrate to Asana task attachments via the Asana API. We flag any attachment exceeding 100 MB as a gotcha item, since Asana's API does not accept attachments over that size. The customer's admin receives a list of oversized attachments with URLs to re-upload manually post-migration.
| Forecast | Asana | Compatibility | |
|---|---|---|---|
| Project | Project1:1 | Fully supported | |
| Phase | Section1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Milestone | Task (pinned deadline)lossy | Fully supported | |
| Custom Field (Project-level) | Custom Field (local, project-scoped)lossy | Fully supported | |
| Custom Field (Phase-level) | Custom Field (local, project-scoped)lossy | Fully supported | |
| Custom Field (Task-level) | Custom Field (local or global)lossy | Fully supported | |
| Custom Field (Time Registration-level) | Custom Field (local, on time integration)1:1 | Fully supported | |
| Time Registration | Time Tracking (Advanced) or Custom Fields1:1 | Fully supported | |
| Rate Card | Custom Fields (global)1:1 | Fully supported | |
| Resource Assignment | Custom Fields or Workload view configuration1:1 | Fully supported | |
| User / Team Member | User1:1 | Fully supported | |
| Project Status | Task (status update)1:1 | Fully supported | |
| Attachment (on Task) | Attachment (on Task)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.
Forecast gotchas
No public pricing or self-serve trial
CSV-only data export covers a subset of objects
No documented public API for bulk operations
Custom Fields require field-level mapping at destination
Multi-user concurrent editing is limited
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 data inventory
We audit the source Forecast account across project count, phase depth, task volume, milestone count, custom field inventory (per entity type), time registration volume, rate card structure, and resource assignment records. We extract the complete object list and flag any objects not covered by Forecast's CSV export. We also identify the Asana destination workspace, existing Teams structure, and plan tier to confirm which features (time tracking, workload view, milestones) are available post-migration. The discovery output is a written migration scope document with an object inventory, a custom field mapping table, and a rate card and time tracking gap analysis.
Schema preparation in Asana
We pre-create all required Asana custom fields (local and global), project sections corresponding to Forecast Phases, and any custom field structures needed to receive Rate Card data and resource allocation percentages. If the destination is on Starter tier, we confirm milestone support limitations and plan accordingly. We set up Asana Teams to match the customer's org structure, mapping Forecast's team members to Asana Users by email match. Custom fields are created in Asana before any data import begins to satisfy the field reference requirements on task insert.
User reconciliation
We extract every distinct Forecast user referenced on any record (assignee, time registration owner, resource assignment owner, rate card owner) and match by email against the Asana destination workspace's User table. Users without a matching Asana User go to a reconciliation queue. The customer's admin provisions any missing Asana Users before migration resumes. This step is a prerequisite for Task import because Asana requires a valid assignee UserId on every task insert.
Schedule migration (Projects, Phases, Tasks, Milestones)
We run the schedule migration in dependency order: Projects first (as Asana Projects), then Phases as Asana Sections within each project, then Tasks as Asana Tasks with assignees resolved and custom fields populated, then Milestones as deadline-pinned tasks or milestone-flagged tasks depending on plan tier. Each phase emits a row-count reconciliation report before the next phase begins. Completed task status, due dates, start dates, and description text are preserved at each level.
Financial data migration (Time Registrations and Rate Cards)
We migrate Time Registrations as Asana time entries (on Advanced plans) or as custom field data on the linked tasks (hours, date, billable flag, rate) on Starter and Business plans. Rate Cards are exported and stored as organization-level custom number fields. Resource allocation percentages are stored as custom number fields on each task (fc_allocation_pct__c). We produce a CSV inventory of all resource assignments for the customer to configure in Asana's Workload view. This phase is complete when all time and rate data is present in Asana in some form; ongoing integration configuration is documented for the customer's admin.
Cutover, validation, and automation handoff
We freeze Forecast writes during the cutover window, run a delta migration of any records modified during the migration run, then hand off Asana as the system of record. We validate record counts, spot-check 25-50 tasks for field accuracy, and confirm milestone and time data are present. We deliver the automation and workflow inventory document listing every Forecast automation requiring rebuild in Asana Rules. We do not rebuild Forecast automations as Asana Rules inside the migration scope; that is a separate engagement or an internal admin task. We offer a one-week hypercare window for reconciliation issues.
Platform deep dives
Forecast
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 Forecast 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
Forecast: Not publicly documented.
Data volume sensitivity
Forecast 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 Forecast to Asana migration scoping. Not seeing yours? Book a call.
Walk through your Forecast 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 Forecast
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.