Project Management migration
Field-level mapping, validation, and rollback between web2Project and Asana. We move data and schema; workflows are rebuilt natively in Asana.
web2Project
Source
Asana
Destination
Compatibility
12 of 15
objects map 1:1 between web2Project and Asana.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from web2Project to Asana is a platform-class migration: web2Project is a self-hosted PHP/MySQL system with no production REST API, while Asana is a cloud-native SaaS tool with a well-documented REST API. We extract directly from the web2Project MySQL database, preserving the project hierarchy, task dependencies, Gantt chart dates, user assignments, and custom field values. The key complexity on the source side is web2Project's v2.4 custom field rebuild, which changed the schema for all custom field storage; we detect the source version during database inspection and adjust field mapping logic accordingly. On the destination side, Asana's file attachment limit of 100MB and its Start Date requirement on the Premium plan require pre-migration configuration decisions. Forum threads migrate as task comments, and project-specific forums are inventoried as Asana Conversations or externalized links. We do not migrate web2Project workflows or community-added modules as code; we deliver a written map of any active workflows for the customer's admin to rebuild in Asana's Rules engine.
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 web2Project 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.
web2Project
Project
Asana
Project
1:1web2Project Projects map to Asana Projects. The source project name, description, start_date, end_date, priority, and color code all migrate. The web2Project project owner maps to an Asana Project member with Admin access. We preserve the project status (Active, On Hold, Completed) by mapping it to an Asana project field. Note that Asana does not have a native Project-level budget field; any web2Project budget values migrate as read-only custom fields in Asana.
web2Project
Task
Asana
Task
1:1web2Project Tasks map to Asana Tasks. The task name, description (migrated as rich text), start_date, due_date, priority, and percent_complete all transfer. The web2Project task owner (assigned user) maps to the Asana Task assignee. Subtasks in web2Project with a parent_task_id map to Asana Subtasks nested under the parent Task. Asana's Start Date field requires Premium or above—if the destination plan is Starter or lower, we migrate start dates as a custom field instead.
web2Project
Task Dependency
Asana
Task Dependency
1:1web2Project supports Finish-to-Start, Start-to-Start, Finish-to-Finish, and Start-to-Finish dependency types. Asana natively supports only Finish-to-Start and Start-to-Start. We migrate Finish-to-Finish and Start-to-Finish as Finish-to-Start with an adjusted offset calculated from the task duration difference, and flag these in the mapping notes. Cycles are detected and broken at the earliest dependency in the chain.
web2Project
User
Asana
User
1:1web2Project User records (username, email, role, active/inactive status) map to Asana User accounts. We match by email address. The web2Project role (Project Manager, Developer, Viewer) maps to Asana Project membership levels (Admin, Member, Guest) based on a role-mapping table defined during scoping. Inactive web2Project users migrate as Asana Guests with no project assignments, preserving the historical record without consuming a seat license.
web2Project
Company
Asana
Team (Workspace-level organization)
many:1web2Project Companies are organizational entities distinct from Departments. Asana's equivalent organizational unit is the Team (inside a Workspace). We map web2Project Companies to Asana Teams, merging any Companies with duplicate names during import. If a web2Project Company has associated Departments, those map to Asana Sections within Projects or to Tags for cross-project grouping. The Company name becomes the Team name; Company contact information becomes a Team description or a dedicated Contacts integration if the customer uses Asana with a CRM.
web2Project
Department
Asana
Section or Tag
lossyweb2Project Departments are sub-organizational units within Companies. Asana has no native Department object. We map Departments to Asana Sections within Projects (for project-scoped grouping) or to Tags (for cross-project tagging). The customer chooses during scoping. If the department hierarchy matters for reporting, we recommend Tags with a naming convention that preserves the hierarchy (e.g., Engineering > Backend, Engineering > Frontend).
web2Project
Custom Field (post-v2.4)
Asana
Custom Field
1:1web2Project v2.4+ custom fields use SOLID OOP storage with standard store and delete methods. We map text fields to Asana Text, number fields to Asana Number, date fields to Asana Date, dropdown lists to Asana Enum (single-select), and checkbox fields to Asana Enum (multi-select with checkbox UI). Custom field labels and option values transfer directly. Note that Asana custom fields require Starter tier or above—we confirm the destination plan during scoping and flag if a custom field reduction is needed for Starter plans.
web2Project
Custom Field (pre-v2.4)
Asana
Custom Field
1:1web2Project pre-v2.4 custom fields used a different storage schema with the optionlist system reimplemented in v2.4. We detect the source version during database inspection and adjust field mapping logic. Pre-v2.4 optionlist values require a join across the old options table; we execute this at extraction time to produce a flattened dataset compatible with Asana's custom field enum values. Truncation risks are flagged before import.
web2Project
Gantt Chart Data
Asana
Timeline (Start Date + Due Date + Dependencies)
1:1web2Project Gantt chart data consists of task start dates, end dates, durations, and dependencies. We migrate these as Asana Timeline view data—the underlying task dates and dependency relationships drive the Asana Timeline rendering. The Gantt chart visual rendering itself does not migrate (it is a display artifact), but the data that populates it transfers 1:1. Timeline view requires Asana Premium; if the destination plan is lower, we migrate dates as custom fields and note that Timeline rebuild is a post-migration configuration step.
web2Project
Calendar Event
Asana
Task with date fields or Calendar view entries
1:1web2Project calendar events with start time, end time, and location map to Asana Tasks with start_date, due_date, and a location custom field. iCalendar export data (VEVENT components) is parsed and transformed during extraction. Recurring events in web2Project map to Asana recurring tasks if the recurrence pattern is simple (daily, weekly); complex recurrence rules are flattened into individual task instances with a recurrence metadata tag.
web2Project
Forum Thread
Asana
Task Comments or Conversation Thread
1:1web2Project project forums contain thread metadata (author, timestamp, subject) and post content. Forum categories map to Asana Conversations at the Project level, and individual threads map to Conversation threads with posts preserved in chronological order. If the project forums are extensive (hundreds of threads), we may externalize them as linked Google Docs or Confluence pages with a link in the Asana Project description, per the customer's preference.
web2Project
File Attachment Reference
Asana
Attachment (with externalization for large files)
lossyweb2Project file attachments at the project and task level store file references and metadata. We migrate the file name, URL (if hosted externally), upload date, and uploader. For files under 100MB, we upload directly to Asana as native attachments. For files exceeding 100MB, we upload to Google Drive or SharePoint and link from Asana; the file reference migrates but the binary does not. We inventory all large files during discovery and confirm the externalization strategy with the customer.
web2Project
Budget Field
Asana
Custom Number Field (read-only)
1:1web2Project budget fields exist in the schema but are explicitly documented as for documentation purposes only—they are not used for calculation or reporting. We migrate budget field values as Asana custom number fields with a note that they are informational. Any actual budget tracking logic (alerts, roll-ups, variance reports) must be re-implemented in Asana as a separate configuration or through an Asana-integrated budget tool.
web2Project
User Activity Log
Asana
Not migrated (audit trail inventory delivered)
1:1web2Project v2.4+ activity logs are timezone-aware; pre-v2.4 logs store timestamps in server local time with no explicit timezone metadata. We extract activity log records as a reference dataset during migration but do not load them into Asana's native audit trail (Asana's audit log is an admin-visible feature separate from task history). Instead, we deliver a CSV inventory of activity log records grouped by user and date range, which the customer's admin can consult post-migration if historical activity review is required.
web2Project
Community Module Extension
Asana
Inventory and recommendations
1:1web2Project's modular PHP architecture allows community-added modules that extend the standard schema. During database inspection we identify any non-core tables. These tables are inventoried in the migration scope document with recommendations: if a community module has an Asana equivalent (e.g., a time-tracking module maps to an Asana time-tracking integration), we include it in the scope; if no equivalent exists, we note it for the customer to address post-migration.
| web2Project | Asana | Compatibility | |
|---|---|---|---|
| Project | Project1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Task Dependency | Task Dependency1:1 | Fully supported | |
| User | User1:1 | Fully supported | |
| Company | Team (Workspace-level organization)many:1 | Fully supported | |
| Department | Section or Taglossy | Fully supported | |
| Custom Field (post-v2.4) | Custom Field1:1 | Fully supported | |
| Custom Field (pre-v2.4) | Custom Field1:1 | Fully supported | |
| Gantt Chart Data | Timeline (Start Date + Due Date + Dependencies)1:1 | Fully supported | |
| Calendar Event | Task with date fields or Calendar view entries1:1 | Fully supported | |
| Forum Thread | Task Comments or Conversation Thread1:1 | Fully supported | |
| File Attachment Reference | Attachment (with externalization for large files)lossy | Fully supported | |
| Budget Field | Custom Number Field (read-only)1:1 | Fully supported | |
| User Activity Log | Not migrated (audit trail inventory delivered)1:1 | Fully supported | |
| Community Module Extension | Inventory and recommendations1: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.
web2Project gotchas
No production API means direct database access is required for migration
Budget fields are documentation-only with no financial logic
Custom field format changed significantly in v2.4
Project Importer module has limited import scope
Timezone handling in user logs was rebuilt in v2.4
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 database inspection
We connect to the web2Project MySQL database (read-only credentials provided by the customer) and perform a schema inventory. We identify the web2Project version (pre-v2.4 or v2.4+), enumerate all core tables (projects, tasks, users, departments, companies, custom_field_values, dependencies, forums, files, activity_log) and any community-added module tables. We count records, identify null rates on key fields, and flag any data quality issues (orphaned tasks, circular dependencies, inactive users with active assignments). The discovery output is a written scope document with a web2Project version confirmation, a record count per object, and any data quality flags requiring customer action before migration begins.
Asana plan confirmation and custom field planning
We confirm the destination Asana plan (Free, Starter, Premium, Business, Enterprise) during scoping because several migration decisions depend on it. Custom fields require Starter or above. Timeline view and Start Date on tasks require Premium or above. We present the web2Project custom field inventory against the Asana plan's capabilities and recommend any plan upgrades or custom field reductions needed. We also confirm the file externalization strategy (Google Drive vs SharePoint) for any web2Project files exceeding 100MB.
Schema mapping and sandbox migration
We design the object mapping (Projects to Projects, Tasks to Tasks, Dependencies to Dependencies, Companies to Teams or Tags, Departments to Sections or Tags, Custom Fields to Custom Fields) and deploy it into an Asana Sandbox project to validate the mapping. The customer reviews a sample of migrated records and confirms the mapping decisions. Key decisions made here include the FF/SF dependency offset formula, the department-to-tag or department-to-section strategy, and how to handle web2Project budget fields. Corrections happen in sandbox, not in production.
User provisioning and owner reconciliation
We extract all web2Project users and match by email against the destination Asana organization's user list. Users present in web2Project but not in Asana go to a reconciliation queue. The customer's admin provisions any missing Asana users (active or inactive depending on whether the original web2Project user is still active) before record migration begins. Role mapping (web2Project role to Asana Project membership level) is confirmed with the customer at this stage.
Production migration in dependency order
We run production migration in record-dependency order: Teams (from Companies), Projects (with Team membership set), Users (already provisioned, validated), Tasks (with parent task IDs resolved for subtask nesting), Dependencies (with dependency type conversion applied), Custom Field values (post-extraction transform applied), File attachments (under 100MB to Asana, over 100MB to external storage with links), Forum threads (as Asana Conversations or externalized), Budget fields (as read-only custom fields), and Activity Log (as reference CSV). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and workflow inventory handoff
We freeze web2Project writes during cutover, run a final delta migration of any records modified during the migration window, then enable Asana as the system of record. We perform a 25-record spot-check against the web2Project source for each major object type. We deliver the web2Project workflow and community module inventory to the customer's admin team with recommendations for Asana Rules rebuilds if automations existed. We support a one-week hypercare window for reconciliation issues. We do not rebuild web2Project workflows as Asana Rules inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
web2Project
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 web2Project 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
web2Project: Not applicable — self-hosted; constrained by the customer's Apache/MySQL/PHP stack..
Data volume sensitivity
web2Project 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 web2Project to Asana migration scoping. Not seeing yours? Book a call.
Walk through your web2Project 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 web2Project
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.