Project Management migration

Migrate from ProjeQtOr to Asana

Field-level mapping, validation, and rollback between ProjeQtOr and Asana. We move data and schema; workflows are rebuilt natively in Asana.

ProjeQtOr logo

ProjeQtOr

Source

Asana

Destination

Asana logo

Compatibility

42%

5 of 12

objects map 1:1 between ProjeQtOr and Asana.

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

ProjeQtOr and Asana occupy opposite ends of the project management spectrum: ProjeQtOr is a free, self-hosted PHP application with no API, deep functional scope across risks, expenses, and budgets, and a data model that stores custom fields as EAV rows across separate tables. Asana is a SaaS-first work management platform with a REST API, a global custom field model, and a focus on task-centric collaboration over financial tracking. The migration challenge is structural: we must extract directly from the MySQL or PostgreSQL database, resolve EAV custom fields into flattened columnar records, reconstruct resource allocations as task assignments, and handle document attachments as a parallel file transfer operation. We do not migrate ProjeQtOr Workflows, Risk Registers, or Expense Reports as native objects; we deliver a written inventory of these for the customer's admin to rebuild as Asana Sections, custom fields, or third-party integrations. The migration lands in four to eight weeks depending on portfolio size and document volume.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

ProjeQtOr logo

ProjeQtOr

What's pushing teams away

  • The web interface lacks the polish and UX consistency of modern SaaS PM tools—users report that navigating between modules and locating specific services feels unintuitive and dated.
  • Performance degrades noticeably with large portfolios—projects with hundreds of tasks and many concurrent users can experience slow load times and sluggish form submissions.
  • No native mobile app exists; teams requiring iOS or Android access must use a browser, which produces a suboptimal experience for field workers or traveling project managers.
  • Limited third-party integrations compared to platforms like Jira or Asana mean teams that rely on Slack notifications, Confluence documentation, or Salesforce CRM sync find ProjeQtOr falls short without custom development.
  • Self-hosted deployment demands internal IT resources for server maintenance, backups, PHP version updates, and database administration—ongoing operational overhead that managed SaaS tools eliminate.

Choosing

Asana logo

Asana

What's pulling them in

  • Organizations with distributed teams cite Asana's multiple project views (List, Board, Calendar, Timeline) as the primary reason for adoption, allowing each team member to work in their preferred interface without changing the underlying data.
  • The platform's 100+ native integrations with tools like Slack, Google Drive, Salesforce, and Microsoft Teams reduce context-switching and keep work synchronized across the stack.
  • Small teams and non-profits value the free plan's generous limits: unlimited projects and tasks for up to 15 team members with basic views, enabling teams to validate fit before committing to a paid tier.
  • Marketing and creative teams specifically praise Asana's visual project organization, reporting dashboards, and timeline views for managing cross-functional campaign workflows.
  • Project managers report that Asana's dependency management and workload views help surface bottlenecks before they derail deadlines.

Object mapping

How ProjeQtOr objects map to Asana

Each row shows how a ProjeQtOr 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.

ProjeQtOr

Project

maps to

Asana

Project

1:1
Fully supported

ProjeQtOr Projects map directly to Asana Projects. We extract project id, name, description, status, start date, end date, and customer association from the Project table and load into Asana Project via the Asana REST API or CSV importer. Project color and icon do not transfer; we configure these in Asana post-migration if needed. Multi-project portfolios in ProjeQtOr map to Asana Portfolios at the Business tier or to a top-level Project grouping at lower tiers.

ProjeQtOr

Task

maps to

Asana

Task

1:1
Fully supported

ProjeQtOr Tasks map to Asana Tasks with parent-child hierarchy preserved via the subtasks relationship. The WBS numbering sequence from ProjeQtOr migrates as a custom field for audit. Planned work hours and actual work logged map to Asana custom number fields since Asana natively tracks only start date, due date, and assignee. Task status (idle, in progress, completed, cancelled) maps to Asana completion state with a status custom field for granular tracking.

ProjeQtOr

Milestone

maps to

Asana

Milestone

1:1
Fully supported

ProjeQtOr Milestones map to Asana Milestones linked to the parent Project. We extract milestone name, target date, status, and project association from the Milestone table. Asana Milestones are a native subtype of Task; they appear as diamonds in Timeline and Calendar views. If the destination Asana workspace uses the Basic tier (which lacks Portfolios), milestones are the primary mechanism for phase tracking across projects.

ProjeQtOr

Resource

maps to

Asana

User (member on Project)

1:1
Fully supported

ProjeQtOr Resources represent team members with calendar availability, cost rates, and skill profiles. We map Resources to Asana Users by email match, provisioning Asana Workspace members as we go. ProjeQtOr resource skill profiles and capacity settings do not have a direct Asana equivalent; we preserve them in custom fields on the User record (skill tags as a multi-select custom field, capacity notes in a text field). ProjeQtOr's resource pool concept (a shared inventory of available people) does not exist in Asana; resource availability is managed through the Workload view at Business tier.

ProjeQtOr

Allocation

maps to

Asana

Task assignee

1:many
Fully supported

ProjeQtOr Resource Allocations bind a Resource to a Task with start date, end date, and daily assignment percentage. Each allocation creates an Asana Task assignment. If a task has multiple resource allocations, we create one Asana assignee per allocation and record the original allocation percentage in a custom field assignment_percent__c. Allocations without a corresponding ProjeQtOr Resource become unassigned Asana Tasks flagged for manual assignment during cutover.

ProjeQtOr

Expense

maps to

Asana

Custom field on Task or Project

many:1
Fully supported

ProjeQtOr Expenses (travel, software licenses, contractor costs) with category, amount, date, VAT, and project association do not have a native Asana equivalent. We aggregate expenses by project and write them to Asana as a custom monetary field expense_total__c on the Project record, with individual expense line items preserved in a linked Google Sheet or CSV attachment on the Project for financial reference. Customers needing native expense management in Asana integrate a third-party tool post-migration.

ProjeQtOr

Risk

maps to

Asana

Task with custom fields (or tag)

lossy
Fully supported

ProjeQtOr Risks include probability, impact, mitigation plan, and owner. We map these to Asana Tasks with a risk_flag__c custom field set to true, probability mapped to a custom picklist (very low, low, medium, high, very high), impact to a severity custom field, and mitigation plan as the task description. We tag the task with a Risk label. This is a configuration decision the customer makes during scoping; alternatives include storing risks in a dedicated project with sections per risk category or using a third-party risk management integration.

ProjeQtOr

Issue

maps to

Asana

Task with tag

1:1
Fully supported

ProjeQtOr Issues (bugs, incidents, change requests) map to Asana Tasks with the issue type (bug, incident, change request) preserved as a custom picklist field and tagged accordingly. Priority from ProjeQtOr maps to Asana priority (high, medium, low). Issue status (open, in progress, resolved, closed) maps to task completion state with a status custom field for granular tracking.

ProjeQtOr

Document

maps to

Asana

Attachment on Task or Project

lossy
Fully supported

ProjeQtOr Document records reference files stored on the application server filesystem. We identify all document records, locate the corresponding files in the ProjeQtOr file storage directory, and upload them to Asana as Project or Task attachments via the Asana Attachments API. The original folder hierarchy is preserved as a prefix in the attachment name for traceability. Files exceeding Asana's 100 MB per-attachment limit are handled via Google Drive or Dropbox link custom fields.

ProjeQtOr

Bill / Budget

maps to

Asana

Custom monetary field

many:1
Fully supported

ProjeQtOr Budgets track planned versus actual spending per project with line items and variance. We extract budget line items and actual expense totals and map them to Asana Project custom fields: budget_planned__c, budget_actual__c, and budget_variance__c. Detailed budget line items (category breakdown) are preserved as a linked CSV attachment on the Project. Asana has no native budget object; if the customer requires granular budget tracking, they use a third-party integration or a linked spreadsheet.

ProjeQtOr

Custom Field (EAV)

maps to

Asana

Custom Field (global)

lossy
Fully supported

ProjeQtOr stores custom fields as EAV rows in a separate attribute table, not as direct columns. We write migration queries that enumerate custom field definitions per object type, flatten the EAV rows into columnar records, and create matching global Custom Fields in the Asana workspace before data migration begins. The customer chooses whether each custom field applies project-wide or workspace-wide. Custom fields with no natural Asana equivalent are flagged for decision: drop, merge into a notes field, or create a new custom field.

ProjeQtOr

Workflow Status

maps to

Asana

Automation Rule or Section

lossy
Fully supported

ProjeQtOr custom status workflows per object type have no direct Asana equivalent. We read the workflow definition table and document every status value and transition rule per object. The customer decides whether to rebuild status-based routing as Asana Automation Rules (Advanced tier) or as named Sections within a Project. We deliver a written workflow inventory document listing each ProjeQtOr status workflow, its trigger, its stages, and the recommended Asana implementation approach.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

ProjeQtOr logo

ProjeQtOr gotchas

High

No API means migrations rely on database exports or UI exports

Medium

PHP and database version dependencies constrain self-hosted upgrades

Medium

Custom fields stored as EAV rows require careful mapping

Medium

File attachments and documents are server-filesystem references

Asana logo

Asana gotchas

High

Automation rules have no export representation

High

API rate limits cap bulk migration throughput

Medium

Portfolios are view-only objects that do not hold data

Medium

Custom field enum options cannot be updated via API

Low

Subtasks do not appear in project views by default

Pair-specific challenges

  • ProjeQtOr has no API; migration uses direct database extraction

    ProjeQtOr exposes no REST, GraphQL, or bulk data endpoint. All migration work requires direct read access to the MySQL or PostgreSQL database or CSV/XML export from the application UI. Direct database access requires read credentials with sufficient privileges to run SELECT queries across all tables without locking production data. We request a replica database connection or a read-only SQL dump for migration scoping, map PHP application field names to underlying database column names using schema documentation generated during discovery, and handle PHP and database version constraints (older instances may run PHP 7.x with MySQL 5.7; newer versions require PHP 8.x and MySQL 8 or PostgreSQL 13+). Skipping this constraint analysis can produce a failed export if the source server's PHP version is incompatible with the database dump tool.

  • EAV custom fields in ProjeQtOr require explicit flattening

    ProjeQtOr extends standard objects with a flexible attribute-value model stored in separate tables. A simple column-list export will omit all custom field values unless the export query explicitly joins the custom field association tables for each object type. We write migration queries that enumerate custom field definitions per object, flatten EAV rows into columnar records, and create matching global Custom Fields in Asana before data migration begins. If the number of unique custom fields exceeds 30, the Asana workspace may require the Business tier for sufficient custom field quota. We flag this during discovery.

  • Document attachments are filesystem references, not embedded files

    ProjeQtOr stores document attachments as files on the application server filesystem with references in the database. Migrating only the records produces broken attachment links. We identify all document records, locate the corresponding files in the ProjeQtOr file storage directory, and run a parallel file transfer to Asana as Project or Task attachments via the Attachments API. Files exceeding Asana's 100 MB per-attachment limit are handled via Google Drive or Dropbox link custom fields. If the source server is decommissioned before file transfer completes, attachments are permanently lost.

  • Asana API rate limits constrain bulk load throughput

    Asana enforces 1,500 calls per minute for paid accounts (Basic and above). ProjeQtOr migrations with large task volumes (50,000+ records) require batch chunking, exponential backoff on 429 responses, and careful sequencing to avoid hitting limits mid-migration. We implement a queue-based load strategy that tracks remaining API budget per minute and pauses requests when approaching the limit. A September 2024 community report suggested limits had increased to 7,500 calls per minute for some accounts, but Asana's official Product Manager confirmed the limit remains 1,500 calls per minute for paid plans; we use the conservative figure.

  • Resource allocations require manual reconstruction in Asana

    ProjeQtOr's resource allocation model (Resources with capacity, cost rates, skill profiles, and assignment percentages over date ranges) has no direct Asana equivalent. Asana assigns users directly to tasks without a standalone resource pool or capacity management. We map Resources to Asana Users and allocations to task assignments with a custom assignment percentage field, but Asana's Workload view (Business tier) must be configured manually post-migration to display capacity across the team. Customers relying on ProjeQtOr's capacity planning features need to rebuild this view in Asana or adopt a resource management integration.

Migration approach

Six steps for a successful ProjeQtOr to Asana data migration

  1. Discovery and database readiness assessment

    We audit the source ProjeQtOr instance for PHP version, database type (MySQL or PostgreSQL), database size, table counts, and EAV custom field inventory. We confirm read-only database credentials are available or arrange a SQL dump from the application UI. We enumerate all Projects, Tasks, Milestones, Resources, Allocations, Expenses, Risks, Issues, and Documents in scope and produce a record-count estimate. We confirm the destination Asana workspace is provisioned and identify which tier (Basic, Premium, Business, Enterprise) the customer has selected based on custom field quota, Automation Rules needs, and Portfolio requirements.

  2. Schema design and Asana custom field creation

    We design the Asana workspace schema before any data loads. This includes creating all global Custom Fields in Asana mapped from the ProjeQtOr EAV custom field definitions (with type mapping: text to text, number to number, date to date, picklist to enum). We configure Project structure, default Sections per project, and Milestone settings. We create a written migration field map that documents every ProjeQtOr column, its ProjeQtOr data type, the corresponding Asana field, and any transformation logic. The schema is validated in the Asana workspace before data extraction begins.

  3. Direct database extraction and EAV flattening

    We run targeted SQL queries against the ProjeQtOr database to extract all objects in dependency order: Projects first, then Tasks with parent-child hierarchy, then Milestones, Resources, Allocations, Expenses, Risks, Issues, and Documents. For EAV custom fields, we write join queries that cross-reference the attribute definition table, the value table, and the parent object table to produce flattened records with one column per custom field. We extract document file paths and validate that the files exist in the ProjeQtOr file storage directory. We produce a staging dataset in CSV format for transformation and load.

  4. Data transformation and reconciliation

    We transform the extracted dataset into Asana-compatible format. This includes mapping ProjeQtOr status values to Asana completion state, resolving Resource email addresses to Asana User GIDs, splitting multi-allocation tasks into multiple assignee records with assignment percentage custom fields, aggregating Expenses and Budgets to Project-level custom fields, and constructing Risk and Issue tasks with appropriate tags and custom fields. We run a reconciliation check comparing source record counts to the transformed dataset row counts to catch any dropped records before the Asana load begins.

  5. Asana load with API rate-limit handling

    We load data into Asana using the REST API with a queue-based chunking strategy. Projects load first, then Tasks (with subtask hierarchy reconstructed via parent gid references), then Milestones, then Resources mapped to Workspace members, then Task assignments, then custom field values. Each batch is capped below the 1,500 calls per minute limit with exponential backoff on 429 responses. We load document attachments in parallel using the Attachments API, matching file paths to the ProjeQtOr file storage directory. We emit a row-count reconciliation report after each batch confirming records loaded against records expected.

  6. Cutover, validation, and Workflow inventory handoff

    We freeze writes to ProjeQtOr during cutover, run a final delta migration of any records modified during the migration window, then enable Asana as the system of record. We deliver a post-migration validation report comparing source and destination record counts per object type, spot-checking 25-50 records for data accuracy. We deliver the written Workflow and Risk Register inventory document listing every ProjeQtOr status workflow, its trigger and stages, and the recommended Asana Automation Rule or Section approach. We support a one-week hypercare window for reconciliation issues. We do not rebuild ProjeQtOr Workflows as Asana Automation Rules or rebuild Risk Registers as standalone objects; these are documented for the customer's admin to configure post-migration.

Platform deep dives

Context on both ends of the pair

ProjeQtOr logo

ProjeQtOr

Source

Strengths

  • Completely free and open source under AGPLv3+ with no artificial user, project, or feature caps.
  • Wide functional scope covering tasks, resources, risks, expenses, documents, budgets, and bug tracking in a single application.
  • Supports MySQL and PostgreSQL, giving teams flexibility in their database infrastructure and hosting environment.
  • Active community and documented MS-Project import/export via a dedicated plugin for organizations migrating from or to other PM platforms.
  • Multi-platform deployment on Windows, Linux, macOS and web-based access from any modern browser.

Weaknesses

  • No documented REST, GraphQL, or bulk API—migrations require direct database queries or XML/CSV export from the application UI, which is error-prone for large datasets.
  • Self-hosted model places all server maintenance, backups, and security hardening on the customer's IT team.
  • No native mobile applications; mobile access depends entirely on the responsive web interface which users describe as functional but not polished.
  • Limited integration ecosystem compared to commercial alternatives—no native Zapier, Microsoft Teams, or Google Workspace connectors.
  • User interface complexity and dated visual design create a steeper onboarding curve than modern SaaS project management tools.
Asana logo

Asana

Destination

Strengths

  • Unlimited projects and tasks on the free plan for teams up to 15 members.
  • 100+ native integrations including Salesforce, Slack, Google Drive, and Microsoft Teams.
  • Four distinct project views (List, Board, Calendar, Timeline) in a single interface.
  • Dependency management with start/end dates and predecessor links for critical path tracking.
  • Portfolio dashboards for executives to track cross-project status and workload.

Weaknesses

  • Per-seat pricing scales expensively: Advanced tier costs nearly double Starter for a 50-seat team.
  • API does not expose all UI-accessible data; some fields require screen-scraping for full fidelity.
  • Automation rule limits on lower tiers are restrictive, causing power users to upgrade or leave.
  • No native document/wiki capability forces teams to use external tools for knowledge management.
  • Rate limits (150 req/min on free, 1,500 req/min on paid) constrain bulk migration throughput.

Complexity grading

How hard is this migration?

Standard Project Management migration. 2 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across ProjeQtOr and Asana.

  • Object compatibility

    B

    2 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    ProjeQtOr: Not applicable—no API exposed.

  • Data volume sensitivity

    B

    ProjeQtOr doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your ProjeQtOr to Asana migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about ProjeQtOr to Asana data migrations

Answers to the questions buyers ask most during ProjeQtOr to Asana migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your ProjeQtOr to Asana migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between four and six weeks for portfolios of up to 20 projects and 5,000 tasks with no heavy document assets. Migrations with large portfolios (50+ projects), complex resource allocation chains, more than 30 EAV custom field definitions, or bulk document transfer (500+ attachments) move to eight to twelve weeks because of direct database extraction overhead, EAV flattening logic, and parallel file transfer coordination.

Adjacent paths

Related migrations to explore

Ready when you are

Move from ProjeQtOr.
Land in Asana, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day