Project Management migration
Field-level mapping, validation, and rollback between Float and Asana. We move data and schema; workflows are rebuilt natively in Asana.
Float
Source
Asana
Destination
Compatibility
8 of 14
objects map 1:1 between Float and Asana.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Float to Asana is a structural migration that maps a resource-scheduling data model onto a broader work management platform. Float organizes work around People, Projects, Tasks, and Clients with a calendar-first schedule view; Asana organizes around Projects, Tasks, and Members with Timeline, Board, List, and Calendar views. The key differences are that Float has native resource scheduling with capacity heatmaps, per-person cost and bill rates, and a Placeholder concept for unconfirmed hires that has no Asana equivalent. We handle the Department-to-Team mapping, preserve assigned hours as Timeline start and due dates, and flag Placeholder records for the admin to recreate manually as inactive members with a custom indicator field. We do not migrate Float's capacity heatmap data, schedule-based utilization views, or cost-rate and bill-rate fields as native Asana constructs — these require manual configuration or a third-party resource management add-on post-migration.
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 Float 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.
Float
People
Asana
Member
1:1Float People records map to Asana Members. We preserve name, email, department assignment, and role. Float's cost_rate and bill_rate fields have no native Asana equivalent and migrate as custom fields cost_rate__c and bill_rate__c on the Member or as project-level custom fields depending on where the customer wants the data visible. Any People record flagged as a Float Placeholder is held in a reconciliation queue; we create a custom multi-select picklist placeholder_type__c with values confirmed and unconfirmed, set the Asana Member to inactive, and document the queue for the admin to resolve manually before go-live.
Float
Department
Asana
Team
1:1Float Departments map directly to Asana Teams. The mapping is one-to-one using the department name as the Team name. All People assigned to a Department inherit the Team membership in Asana, which enables the Workload view to filter by team during capacity analysis. If the customer uses multi-department reporting, we also create a custom field original_department__c on each Member to preserve the source data if Team names change post-migration.
Float
Role
Asana
Custom field (multi-select picklist on Member)
lossyFloat Roles (Developer, Designer, Strategist, etc.) have no native equivalent in Asana. We create a multi-select picklist custom field called role__c on the Asana Member object. Role assignments migrate as selected option values. If the customer's Float account uses Roles as scheduling constraints (e.g., only Developers can be assigned to Development tasks), we document the constraint logic in a Roles and Permissions matrix so the admin can recreate it using Asana's custom fields or a third-party resource management integration.
Float
Client
Asana
Custom field on Project
lossyAsana has no native Client object. We create a single-select picklist custom field client_name__c on the Asana Project. Each Float Client maps to an option value in that picklist. If the customer has more than 50 Clients, we recommend using a text field instead to avoid picklist value limits, or grouping by Client into Asana Portfolios where the Portfolio name matches the Client. The mapping choice is made during scoping based on the Client count and the customer's reporting structure.
Float
Project
Asana
Project
1:1Float Projects map to Asana Projects. We preserve the project name, status (active, archived), start date, and end date. The Float project status maps to an Asana project membership and visibility setting. Archived projects migrate as archived Asana projects where the destination plan supports archiving (Starter and above). Client association is preserved via the client_name__c custom field described above.
Float
Placeholder
Asana
Inactive Member with custom field flag
1:1Float Placeholders represent unconfirmed hires or future team members and are constrained by plan tier (1 on Starter, 5 on Pro, unlimited on Enterprise). Asana has no placeholder equivalent. We migrate Placeholder records as inactive Asana Members with a custom field placeholder_type__c set to unconfirmed. The inactive status prevents them from appearing in assignee dropdowns by default. The admin reviews the reconciliation list post-migration and either converts confirmed placeholders to active members or excludes them from the final migration. We flag this queue explicitly in the migration scope document before data movement begins.
Float
Task
Asana
Task
1:1Float Tasks map to Asana Tasks. We preserve task name, description (notes), start date, end date, and assignee. Float's assigned hours migrate as a custom field estimated_hours__c on the Asana Task. Float's planned hours vs actuals (available on Pro and above) map to estimated_hours__c and actual_hours__c custom fields respectively. Float task notes migrate to Asana task descriptions. Section and subtask hierarchy in Float migrates to Asana sections and subtasks respectively.
Float
Schedule
Asana
Timeline view on Project
1:1Float's schedule exports contain People allocated to Tasks with date ranges and scheduled hours. We map start_date and end_date from the schedule export to the Asana Task start date and due date, which renders the allocation in the Timeline view. Float CSV schedule exports are constrained by date-range selection; we handle multi-range stitching by chunking large schedules into weekly or bi-weekly exports, deduplicating on task_id and date, and reassembling before load. The scheduled hours from the schedule export populate the estimated_hours__c custom field.
Float
Time Entry
Asana
Custom field on Task or reference sheet
lossyFloat Time Entries record actual hours logged against Tasks. Asana has no native time tracking object. We migrate time entry data as a custom field actual_hours__c on the relevant Asana Task, populated from the Float time entry hours and date. For customers with high time-entry volume (over 10,000 records), we offer a separate time entry reference sheet as an alternative to bulk custom field population, since Asana custom field writes at scale against the API have lower throughput than standard record imports. The customer chooses the strategy during scoping.
Float
Time Off
Asana
Reference documentation or calendar integration
1:1Float Time Off records block capacity for specific People on specific dates and affect utilization calculations. Asana has no native time-off object. We export Time Off records as a structured CSV with person, start date, end date, and type (vacation, sick, personal). The customer can use this to configure a calendar integration (Google Calendar or Outlook) or an HRIS sync (Rippling, BambooHR) post-migration. We do not import Time Off as Asana tasks since that would distort project planning data.
Float
Custom Field (People)
Asana
Custom field on Member
lossyFloat supports custom fields on People (text, number, date, multi-select). We discover the full custom field schema via the Float custom-fields API endpoint before extraction and map each field type to the equivalent Asana custom field format. Multi-select picklists in Float map to multi-select picklists in Asana. Number fields map to number fields. Text fields map to text fields. We deploy the Asana custom fields to the Member object via the API before member import begins.
Float
Custom Field (Project)
Asana
Custom field on Project
lossyFloat supports custom fields on Projects with the same type set as People custom fields. We discover the full project custom field schema during the pre-migration discovery phase, create equivalent fields on the Asana Project object, and map values during project import. Project custom field values that reference People (e.g., Project Manager as a person custom field) require a lookup resolution step to convert the Float person ID to the Asana Member GID before insert.
Float
Section
Asana
Section
1:1Float task groupings within a Project (called Sections in Float's UI) map directly to Asana Sections within a Project. Section order is preserved by the sequence field. Tasks within each Section migrate with their section membership intact.
Float
Tag
Asana
Tag or Topic
lossyFloat Tags on Tasks map to Asana Tags. Tags used for content classification can alternatively map to Asana Topics with TopicAssignment records. The customer chooses the tag strategy during scoping. If Tags are used for categorization across multiple object types (Projects and Tasks), we recommend Tags as the simpler mapping.
| Float | Asana | Compatibility | |
|---|---|---|---|
| People | Member1:1 | Fully supported | |
| Department | Team1:1 | Fully supported | |
| Role | Custom field (multi-select picklist on Member)lossy | Fully supported | |
| Client | Custom field on Projectlossy | Fully supported | |
| Project | Project1:1 | Fully supported | |
| Placeholder | Inactive Member with custom field flag1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Schedule | Timeline view on Project1:1 | Fully supported | |
| Time Entry | Custom field on Task or reference sheetlossy | Fully supported | |
| Time Off | Reference documentation or calendar integration1:1 | Fully supported | |
| Custom Field (People) | Custom field on Memberlossy | Fully supported | |
| Custom Field (Project) | Custom field on Projectlossy | Fully supported | |
| Section | Section1:1 | Fully supported | |
| Tag | Tag or Topiclossy | 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.
Float gotchas
Placeholder limits by tier block full import
Active-user billing model affects migration scoping
Schedule CSV export truncates at date-range boundaries
Custom fields require pre-migration schema discovery
Time entry history spans billing periods
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 scoping
We audit the source Float account across plan tier, People count, Placeholder count, Department count, Role count, Client count, Project count, Task count, and time entry volume. We use the Float custom-fields API endpoint to enumerate all active custom fields on People and Projects before extraction. We identify the Client count to decide the client_name__c field strategy (picklist vs text). We count multi-assignee Tasks to flag the one-assignee constraint. We review the Float schedule export to assess date-range chunking requirements. The discovery output is a written migration scope including record counts, custom field schemas, and a decision matrix for Placeholders, time entries, and Clients.
Schema design in Asana
We design the Asana destination schema in a temporary workspace before production migration. This includes creating Teams (one per Float Department), creating custom fields on Member (role__c, cost_rate__c, bill_rate__c, placeholder_type__c, original_department__c), creating custom fields on Project (client_name__c as picklist or text depending on Client count), and creating custom fields on Task (estimated_hours__c, actual_hours__c). We set up the Asana Timeline view on Projects to receive start and due dates from the Float schedule export. All schema elements are deployed via the Asana API before any records are imported.
Test migration in temporary workspace
We run a test migration into a temporary Asana workspace using production data volume. The customer reconciles record counts (Members in, Teams in, Projects in, Tasks in), spot-checks 25-50 records against the Float source, and reviews custom field values. We specifically validate Placeholder flagging, multi-assignee task splitting, and time-entry placement strategy. The customer signs off the test migration before production migration begins. Any mapping corrections are made during this phase.
Member provisioning and inactive user setup
We extract all Float People including Placeholders and match by email against the Asana destination organization's Member list. Any Float People without a matching Asana Member go to a provisioning queue. We create all confirmed People as active Asana Members, and Placeholders as inactive Members with placeholder_type__c set to unconfirmed. The admin reviews the inactive Member queue and resolves each record (activate, delete, or keep inactive) before go-live.
Production migration in dependency order
We run production migration in record-dependency order: Teams first (independent), then Projects with client_name__c populated, then Members with department, role, and rate custom fields, then Tasks with start dates, due dates, and estimated hours from the Float schedule export. Schedule data is assembled by chunking the Float schedule export into weekly slices, deduplicating on task ID, and loading into Asana Timeline via the API. Time entries are loaded as actual_hours__c custom fields on Tasks (or as a reference sheet if volume exceeds 10,000). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and handoff
We freeze Float 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 deliver the Workflow and automation inventory document (documenting Float's schedule-based alerts and capacity notifications that have no Asana equivalent) and the Placeholder reconciliation queue. We support a one-week hypercare window where we resolve any record-level issues raised by the team. We do not configure Asana Workload view filters, capacity formulas, or reporting dashboards as part of the migration scope; these are post-migration admin tasks or a separate engagement.
Platform deep dives
Float
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 Float 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
Float: Not publicly documented.
Data volume sensitivity
Float 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 Float to Asana migration scoping. Not seeing yours? Book a call.
Walk through your Float 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 Float
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.