Project Management migration
Field-level mapping, validation, and rollback between Redmine 3.3 and Microsoft Project. We move data and schema; workflows are rebuilt natively in Microsoft Project.
Redmine 3.3
Source
Microsoft Project
Destination
Compatibility
8 of 11
objects map 1:1 between Redmine 3.3 and Microsoft Project.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Redmine 3.3 and Microsoft Project solve project management through opposing data models. Redmine is issue-centric: every work item is a flat database record with a parent_issue_id reference for hierarchy, a tracker type, and time logged per issue. Microsoft Project is schedule-centric: every work item is a task with Duration, Work, Start, Finish, resource assignments, and predecessor dependencies driving an auto-calculated schedule. We bridge this structural gap by reconstructing the Redmine issue tree into a WBS-compatible task outline, mapping Redmine versions to Project milestones, and converting time entries to task actuals so earned-value analysis remains valid post-migration. The REST API in Redmine 3.3 is read-oriented for most objects, so we read from the database directly or sequence CSV exports in chunks rather than relying on any write-capable import endpoint. Custom field list values store internal IDs in Redmine's database; we resolve those to display labels before writing to Project. Workflows, automations, and wiki content do not migrate as code; we deliver a written inventory of these objects for the customer's admin to rebuild in Project Online or Power Automate.
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 Redmine 3.3 object lands in Microsoft Project, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Redmine 3.3
Project
Microsoft Project
Project file (.mpp) or Project Online project
1:1Each Redmine project becomes a single Microsoft Project file (for Project Desktop) or a Project Online project site. We extract the project identifier, name, description, public/private flag, and creation date from the projects table. Subprojects nest under parent projects in the Redmine project_hierarchy; we preserve this as a folder or enterprise pool structure in Project Online, or as a phase outline in a single Project Desktop file. Module enablement flags (wiki, forums, repository) have no direct Project equivalent and are flagged in the scope document for admin reference.
Redmine 3.3
Issue
Microsoft Project
Task
1:1Redmine issues map to Microsoft Project tasks. The Redmine issue tree (parent_issue_id chain) is flattened into a WBS-compatible outline: we traverse the issue hierarchy breadth-first, assign each issue a WBS code prefix matching its project, and set Outline Number and Outline Level on the Project Task. Redmine status (New, In Progress, Resolved, Closed, Feedback) maps to a custom Task field or Status indicator since Project tasks have no status enum; we create a custom field redmine_status__c carrying the original value. Tracker (Bug, Feature, Support) maps to a custom text or flag field on the task. Start date and due date from Redmine become the task Start and Finish fields, with scheduling mode set to Auto or Manual depending on whether the customer relies on dependency-driven scheduling.
Redmine 3.3
Issue: done_ratio
Microsoft Project
Task: % Complete
1:1Redmine's done_ratio field (0-100 integer) maps directly to Microsoft Project's % Complete field. We preserve the value at migration time; Project Online and Project Desktop recalculate physical % complete based on actual work if the task is resource-assigned. Closed issues (done_ratio = 100) migrate with % Complete = 100 and Status = Complete.
Redmine 3.3
Issue Relations
Microsoft Project
Task Dependencies
1:1Redmine issue relations (blocks, blocked by, relates to, duplicates, followed by, precedes) map to Microsoft Project task dependencies (Finish-to-Start, Start-to-Start, Finish-to-Finish, Start-to-Finish). The relation_type field determines the dependency type: blocks and precedes map to Finish-to-Start (the most common); blocked by maps to Finish-to-Start in reverse direction. Redmine stores relation IDs as integers referencing the issues table; we resolve each integer to the corresponding migrated Task UID at migration time. Orphaned relations (target issue deleted or not migrated) are logged in a reconciliation report.
Redmine 3.3
Version
Microsoft Project
Milestone
1:1Redmine versions (milestones or release targets) within a project map to Microsoft Project milestone tasks. The version name becomes the milestone task name, effective_date maps to the milestone Finish date, and the status (open, locked, closed) maps to a custom field redmine_version_status__c. Versions with a null effective_date are flagged for the customer to supply a target date before migration. A milestone task has zero duration and is positioned at the version effective date in the project timeline.
Redmine 3.3
Time Entry
Microsoft Project
Task Actual Work
1:manyRedmine time entries (hours, activity, spent_on, comments) map to Microsoft Project task actuals. For each task representing a Redmine issue, we aggregate all time entries for that issue into a Total Actual Work value (sum of hours). If the task has a resource assignment, we distribute the hours as actual work on the assignment. If no resource is assigned, the hours appear as task-level actual work with the entry-level detail preserved in a custom notes field on the task (activity name + comments). The Redmine spent_on date maps to the actual work date. We create a custom field total_hours__c carrying the aggregate for reporting.
Redmine 3.3
User
Microsoft Project
Resource
1:1Redmine users (firstname, lastname, email, admin flag) map to Microsoft Project resources. We create a resource for each user who appears as an assignee on any migrated issue. Email becomes the resource Initials or Windows Account field for Project Online integration with Microsoft 365. Redmine role assignments per project do not map to Project resource role fields natively; we create a custom field redmine_roles__c listing the original role names per project for audit. Resource calendars (working time) use the Project Standard calendar unless the customer provides a calendar export.
Redmine 3.3
Tracker
Microsoft Project
Custom Task Field
lossyRedmine trackers (Bug, Feature, Support, Custom) are distinct issue types with independent workflows and custom field scopes. In Microsoft Project we create a custom enterprise or local task text field (e.g., Task Text1 labeled Tracker) and populate it with the tracker name for each migrated task. Tracker-specific workflows (status transition rules) have no Microsoft Project equivalent and are documented in the automation inventory as a rebuild item for Power Automate.
Redmine 3.3
Custom Field (list type)
Microsoft Project
Custom Task Field (lookup or text)
lossyRedmine list-format custom fields store a numeric ID in the issue record, while the human-readable label lives in a separate possible_values table. We query the custom_field_definitions before processing any issue export, build an ID-to-label lookup table, and substitute display values when writing to Microsoft Project custom fields. If the custom field uses a finite set of valid values, we replicate the picklist in Project's custom field definition so the values appear as a dropdown. Multi-value list custom fields in Redmine map to a semicolon-delimited text string in the Project custom field.
Redmine 3.3
Attachment
Microsoft Project
Hyperlink on Task
1:1Redmine stores uploaded files on the server filesystem under the files/ directory. We extract attachment metadata (filename, content_type, created_on, author_id) from the attachments table, download each file, and upload it to a designated SharePoint document library or Teams channel linked to the destination project. We then write a hyperlink on the corresponding Microsoft Project task pointing to the SharePoint or Teams file URL. Files with no reachable source path are logged in the attachment reconciliation report with the original Redmine URL.
Redmine 3.3
Document
Microsoft Project
Document references as hyperlinks
1:1Redmine project documents (title, description, category) have no direct Microsoft Project equivalent. We create a custom field documents__c on the project summary task containing a semicolon-delimited list of document titles and the SharePoint URLs where the customer stores them post-migration. Document content does not migrate; the customer either moves the files manually or creates a SharePoint library for the project and links it.
| Redmine 3.3 | Microsoft Project | Compatibility | |
|---|---|---|---|
| Project | Project file (.mpp) or Project Online project1:1 | Fully supported | |
| Issue | Task1:1 | Fully supported | |
| Issue: done_ratio | Task: % Complete1:1 | Fully supported | |
| Issue Relations | Task Dependencies1:1 | Mapping required | |
| Version | Milestone1:1 | Fully supported | |
| Time Entry | Task Actual Work1:many | Fully supported | |
| User | Resource1:1 | Fully supported | |
| Tracker | Custom Task Fieldlossy | Fully supported | |
| Custom Field (list type) | Custom Task Field (lookup or text)lossy | Fully supported | |
| Attachment | Hyperlink on Task1:1 | Fully supported | |
| Document | Document references as hyperlinks1: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.
Redmine 3.3 gotchas
Database migrations are required between major Redmine versions
CSV export has no native import counterpart
Custom field list values store internal IDs, not display labels
Plugin-specific data is not accessible via the REST API
Attachment files live on the server filesystem, not the database
Microsoft Project gotchas
Project for the web is being retired and merged into Microsoft Planner
Planner-tier portfolio features are incomplete despite Plan 5 labeling
Web app constraint controls are weaker than the Windows desktop client
Project requires a separate license not bundled with standard Microsoft 365
Project Online API is edition-gated and inconsistently documented
Pair-specific challenges
Migration approach
Discovery and inventory
We inventory the Redmine 3.3 source across every project: project count, issue count per project, hierarchy depth (max parent_issue_id nesting level), tracker types per project, version count and effective dates, custom field definitions and their types (string, list, date, int, bool), time entry volume, unique user count (assignees and loggers), attachment count and total file size on disk, and any plugin tables detected in the database schema. We also confirm the Microsoft Project version (Project Desktop 2021 or 2024, or Project Plan 3/5 for Project Online) and whether the destination is a single .mpp file per project or a shared Project Online environment with multiple projects in one tenant. The discovery output is a written scope document with record counts, a custom field mapping matrix, and the WBS reconstruction plan.
Custom field lookup table build
Before processing any issue export, we query the Redmine custom_field_definitions table and build an ID-to-label lookup for every list-format custom field. This table is the prerequisite for writing correct display values to Microsoft Project. We also extract the custom field types (date, int, string, bool, list, user, version) and map each to the equivalent Microsoft Project custom field type (Date, Number, Text, Flag, Lookup). The lookup table is validated against a sample of issue records before the full export runs.
Staging migration and hierarchy validation
We run a full migration into a staging Project file (or Project Online sandbox site) using production data volume. The customer validates the WBS outline structure (does the summary task nesting match the original Redmine subproject-issue tree?), milestone positioning (are Redmine versions at the correct dates?), and time entry totals (does the sum of hours per task match the Redmine time log?). Any mapping corrections — WBS depth limits, milestone date defaults, custom field type mismatches — are applied before the production migration begins. This step also surfaces any circular parent_id references in the Redmine issue tree.
Attachment and file rehousing
We extract attachment metadata from the Redmine attachments table, verify each file is accessible on the source server, download the file batch, and upload each file to a SharePoint document library or Microsoft Teams channel designated by the customer. We generate a mapping table of Redmine attachment URLs to the new SharePoint/Teams URLs. This table is applied during the task write phase to populate the hyperlink field on each task. Files exceeding 250 MB or with inaccessible source paths are logged separately for manual handling.
Production migration in record order
We run production migration in dependency order: Project file creation (or Project Online site provisioning), versions (milestones with effective dates), resources (from unique Redmine users), tasks (issues with parent-child hierarchy as WBS outline), task dependencies (from Redmine issue relations with resolved target UIDs), time entry rollup (as task actuals), custom field population (with resolved list values), and attachment hyperlinks (with the SharePoint/Teams URL table). Each phase emits a row-count reconciliation report before the next phase begins. For Project Online, we use the Project Web App REST API with rate-limit handling and exponential backoff.
Cutover, validation, and automation inventory handoff
We freeze Redmine write access during cutover and run a final delta migration of any issues or time entries modified during the migration window. The customer validates the final Project file against a Redmine issue query export. We deliver the automation inventory document listing every Redmine tracker workflow, status transition rule, and any plugin-based automation requiring rebuild in Power Automate (for Project Online) or manually reconfigured in Project Desktop. We do not rebuild Redmine automations as Power Automate flows inside the migration scope. We support a one-week hypercare window for reconciliation issues raised by the project management team.
Platform deep dives
Redmine 3.3
Source
Strengths
Weaknesses
Microsoft Project
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 Redmine 3.3 and Microsoft Project.
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
Redmine 3.3: Not publicly documented — no published rate limit for self-hosted instances.
Data volume sensitivity
Redmine 3.3 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 Redmine 3.3 to Microsoft Project migration scoping. Not seeing yours? Book a call.
Walk through your Redmine 3.3 to Microsoft Project migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Redmine 3.3
Other ways to arrive at Microsoft Project
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.