Project Management migration
Field-level mapping, validation, and rollback between Z-Stream and Asana. We move data and schema; workflows are rebuilt natively in Asana.
Z-Stream
Source
Asana
Destination
Compatibility
7 of 12
objects map 1:1 between Z-Stream and Asana.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Migrating from Z-Stream to Asana is constrained by the absence of a documented Z-Stream public API — every record must be extracted through a manual UI export, reformatted, and loaded into Asana via its REST API or CSV importer. We scope the full export surface during discovery, flag any custom fields or Kanban column configurations that cannot be captured in CSV, and sequence the load so parent records (Projects, Workspaces) are created before child records (Tasks, Subtasks). Z-Stream Milestones map to Asana Milestones where the destination workspace supports them; otherwise we set the milestone date as a task due date and add a milestone_flag custom field. Time entries, budget amounts, and risk register rows map to Asana custom fields or the Timesheets add-on depending on the destination plan. Workflows, client portal permissions, and risk management modules do not migrate; we deliver a written inventory of these for the customer to rebuild in Asana Rules or a third-party integration.
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 Z-Stream 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.
Z-Stream
Projects
Asana
Project
1:1Z-Stream Projects map 1:1 to Asana Projects. We carry Project name, description, start date, end date, status, and owner. The owner resolves to an Asana User by email match. If the Z-Stream project has no direct Asana team equivalent, we create a default team and assign the project to it during migration. Project color labels and custom sort orders are preserved as custom project fields.
Z-Stream
Tasks
Asana
Task
1:1Z-Stream Tasks map to Asana Tasks with title, description, assignee (resolved by email to Asana User), due date, priority, and status preserved. Task status from Z-Stream (e.g., Open, In Progress, Closed) maps to Asana completion status (marked complete = true/false) or a custom status field if Z-Stream uses non-binary statuses. We set the Asana start date if Z-Stream carries one; otherwise it remains null.
Z-Stream
Subtasks
Asana
Subtask
1:1Z-Stream Subtasks attach to parent Tasks by ID. We preserve the parent-child relationship by seeding all parent tasks first, then creating subtasks with their parent task_gid resolved. Subtasks carry the same field set as tasks (title, assignee, due date, status). Asana subtasks are a native subtype, not a separate object, so no lookup resolution is required beyond the parent task_gid.
Z-Stream
Milestones
Asana
Milestone
1:1Z-Stream Milestones are standalone objects tied to Projects. Asana Milestones are a subtype of Task available on Advanced and Enterprise plans. We map Z-Stream Milestones to Asana Milestones with the name, due date, and parent project preserved. If the destination Asana workspace is on Starter, we create tasks with a milestone_flag custom field set to true and a due date set to the Z-Stream milestone date, and note the plan dependency in the migration scope.
Z-Stream
Users
Asana
User
1:1Z-Stream Users map by email address and display name to Asana workspace members. Role and permission levels from Z-Stream carry as a custom field role_source__c. Inactive or archived Z-Stream users are imported as inactive Asana members. We reconcile owner references across all objects after the User mapping is complete, flagging any Z-Stream owner without a matching Asana user in the scoping report.
Z-Stream
Gantt Chart Data
Asana
Timeline view (Dependencies)
lossyZ-Stream Gantt layout is defined by task start dates, end dates, and dependencies between tasks. We extract this as structured data during export and reconstruct it in Asana Timeline view by creating dependency links (Finish-to-Start) between tasks using the Asana dependencies API. We flag any circular dependency chains detected in the source export and document them in the migration report for the customer to resolve in Asana before go-live.
Z-Stream
Kanban Boards
Asana
Sections
lossyZ-Stream Kanban columns correspond to custom status values or stage labels on Tasks. We preserve column order and any column-specific color labels as a custom field zstream_board_column__c on each task. If the customer uses Z-Stream's board view in production, we recommend creating Asana Sections per column and assigning tasks during migration. Column color labels map to a text custom field since Asana does not natively support column colors on Sections.
Z-Stream
Time Entries
Asana
Timesheet Entry or Custom Fields
lossyZ-Stream Time Entries are tied to Tasks and Users with hours, date, and optional notes. Asana has no native time entry object on Starter or Advanced; it requires the Timesheets add-on (Advanced and Enterprise). We map time entries to custom fields (time_entry_hours__c, time_entry_date__c, time_entry_notes__c) on the Task for Starter and Advanced migrations, or to the native Timesheets add-on if the destination workspace has it enabled. Hours are stored as decimal numbers; dates are preserved as the original entry timestamp.
Z-Stream
Attachments
Asana
Attachment
1:1Z-Stream attachments stored as file references are downloaded and re-uploaded to Asana via the Attachments API. Asana enforces a 100 MB per-file attachment limit. Files exceeding 100 MB are flagged during scoping and carried as URL references in a custom field attachment_url__c rather than migrated as binary attachments. Large attachment sets are chunked by project to avoid API timeout during the upload phase.
Z-Stream
Custom Fields
Asana
Custom Field
lossyZ-Stream custom fields on Projects and Tasks are discovered during scoping, and the full field schema (name, type, options) is extracted. We map each to a typed Asana Custom Field using the closest matching type: Z-Stream text to Asana text, numbers to number, dates to date, and multi-option values to multi-select or single-select picklist. If a Z-Stream custom field type has no direct Asana equivalent, we store it as a text custom field and document the mapping decision.
Z-Stream
Comments
Asana
Stories
1:1Z-Stream comments attach to Tasks with an author, timestamp, and body. Asana stores conversation history as Stories on tasks. We map Z-Stream comments to Asana Stories preserving the author (resolved to Asana User by email), timestamp, and text body. If the author has no matching Asana user, the comment posts under the migration service account and is noted in the reconciliation report.
Z-Stream
Budget and Risk Registers
Asana
Custom Fields or Goals
lossyZ-Stream budget amounts and risk entries are stored as structured fields within Projects or as separate list objects. Asana has no native risk register object. We flatten budget amounts into numeric custom fields (budget_amount__c, risk_score__c, risk_description__c) on the Project. For organizations using Asana Goals, we offer a mapping to Goals with the budget as a metric and risk items as subgoals, though this requires the Advanced or Enterprise plan. We flag the approach choice during scoping.
| Z-Stream | Asana | Compatibility | |
|---|---|---|---|
| Projects | Project1:1 | Fully supported | |
| Tasks | Task1:1 | Fully supported | |
| Subtasks | Subtask1:1 | Fully supported | |
| Milestones | Milestone1:1 | Mapping required | |
| Users | User1:1 | Fully supported | |
| Gantt Chart Data | Timeline view (Dependencies)lossy | Mapping required | |
| Kanban Boards | Sectionslossy | Mapping required | |
| Time Entries | Timesheet Entry or Custom Fieldslossy | Mapping required | |
| Attachments | Attachment1:1 | Mapping required | |
| Custom Fields | Custom Fieldlossy | Mapping required | |
| Comments | Stories1:1 | Mapping required | |
| Budget and Risk Registers | Custom Fields or Goalslossy | Mapping required |
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.
Z-Stream gotchas
No public API means migrations are export-file-only
No free trial or free plan confirmed
Unverified pricing tier details across sources
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
Export scoping and discovery
We work with the customer's Z-Stream admin to scope exactly which data types are present: Projects, Tasks, Subtasks, Milestones, Users, Time Entries, Attachments, Custom Fields, Gantt dependency exports, Kanban board data, and any budget or risk register objects. We confirm which data types Z-Stream can export from the UI, in what format (CSV, XLSX, JSON), and whether the export covers all fields or only a subset. This discovery phase produces a written Export Surface Inventory that lists every object, field, and any known export gaps before a single record moves.
Schema design for Asana workspace
We design the Asana destination schema based on the export surface inventory. This includes creating Asana Projects (or Teams if the customer uses the team-based structure), defining Custom Fields with correct types and option sets, configuring Milestone availability (plan-dependent), and setting up any Section structures to replicate Z-Stream Kanban columns. If the Asana workspace is on Starter and the customer has time entries or milestones, we flag the plan dependency and recommend upgrade or custom field alternatives. The schema design is reviewed and approved by the customer before any data is loaded.
Export coordination and data extraction
The customer performs the Z-Stream export under our written instruction guide, which specifies the export settings needed to capture all required fields. We review each export file for completeness, flag any truncation or encoding issues, and transform the raw export into a schema-matched CSV or JSON payload for the Asana importer. For Gantt dependency exports, we extract the dependency pairs and reconstruct them as structured data for the Asana dependencies API call sequence.
User reconciliation and task seeding
We extract every distinct Z-Stream user from the export and match by email to Asana workspace members. Any Z-Stream owner without a matching Asana user goes to a reconciliation queue for the customer to provision. We seed Asana Projects first (parent records), then seed Tasks without assignees, then resolve assignees and update task records with OwnerId and assignee_gid. Subtasks are created after all parent tasks exist to satisfy the parent reference. Milestones are created after their parent project is confirmed.
Data load with dependency and attachment processing
We load records into Asana in dependency order using the Asana REST API for standard record creation and the Bulk API for large sets (over 1,000 records). We handle rate limiting with exponential backoff and chunking. After all tasks and subtasks are loaded, we process Gantt dependencies by calling the Asana dependencies endpoint for each dependency pair. Attachments are uploaded in project-sized batches with size validation against the 100 MB limit. Comments are loaded as Stories after the parent task is confirmed in Asana.
Cutover, validation, and automation inventory handoff
We freeze Z-Stream access during cutover, run a final delta pass for any records modified during the migration window, then enable Asana as the system of record. We deliver a reconciliation report comparing Z-Stream record counts against Asana record counts for each object type and a random-sample spot-check of twenty records. We provide a written inventory of Z-Stream workflow automation triggers and actions, client portal configurations, and budget or risk module usage for the customer to rebuild in Asana Rules or assess for third-party integration. We support a one-week hypercare window for post-go-live reconciliation issues.
Platform deep dives
Z-Stream
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 Z-Stream 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
Z-Stream: Not publicly documented.
Data volume sensitivity
Z-Stream 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 Z-Stream to Asana migration scoping. Not seeing yours? Book a call.
Walk through your Z-Stream 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 Z-Stream
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.