Deltek Ajera Cloud Integrated Data
Field mapping reference for Deltek Ajera Cloud
What this page covers: A complete reference mapping every Deltek Ajera Cloud field to its Mosaic equivalent. Use this guide when configuring your integration, verifying synced data, or troubleshooting discrepancies.
| Integration type | Cloud (Ajera REST API + ODBC) |
| ODBC required? | Yes — for Time Entries, Work Categories, Rate Groups, and Rates |
| Setup complexity | Moderate |
| Configurable fields | Limited — fee source, time entry hours/rate source, status mappings |
| Prerequisite | Ajera Cloud Integration Setup |
How Data Flows
Ajera Cloud (REST API + ODBC) → Mosaic Sync Engine (field mapping) → Mosaic (12 synced data types)
The Cloud integration uses the Ajera REST API to query most data (employees, clients, projects, phases, roles, work plans, rate group metadata) and an Ajera ODBC connection to access tables that are not exposed by the API (time entries, activities, and rate table details).
Data flows one way only — Ajera → Mosaic. Time entries and other records are read-only from Mosaic's perspective.
ODBC Required
Time Entries, Work Categories, Rate Groups, and Rates all require an Ajera ODBC connection. Without ODBC credentials configured, those four data types will not sync. See Deltek Ajera Cloud ODBC for setup instructions.
Integrated Data Types
The integration syncs 12 data categories from Ajera Cloud into Mosaic:
| Data Type | Source | Description |
|---|---|---|
| Members | API | Employee records (name, email, status) |
| Member Roles | API | Member-to-role assignments based on Ajera Employee Type |
| Clients | API | Client records (name, description) |
| Projects | API | Project records (description, fee, dates, billing type, status, project manager) |
| Phases | API | Phase breakdowns under projects (recursive nesting, flattened to single-parent in Mosaic) |
| Time Entries | ODBC | Posted labor transactions with hours, rates, billability, and approval status |
| Work Categories | ODBC | Activity records used for time entry categorization (Labor activities only) |
| Roles | API | Active employee types from Ajera |
| Rate Groups | API + ODBC | Active rate tables (billing type enriched via ODBC) |
| Rates | ODBC | Role-based labor bill rates from rate table detail rows |
| Work Plans | API | Resource planning assignments (planned hours per employee, project, and phase) |
| Budget Estimates | API | Budgeted hours per employee per phase (latest resource per phase) |
This list may expand as new features are added.
Not Synced
| Data Type | Description |
|---|---|
| Member Cost Rates | Employee cost rates are not synced from Ajera |
| Member Project Bill Rates | Employee-specific (per-project) rate assignments are not synced |
| Member Project Roles | Per-project role overrides are not synced |
| Standard Bill Rates (cost) | Cost rates from rate tables are not synced (only role-based bill rates are) |
| Activity-based bill rates | Rate table rows keyed by activity rather than employee type are not synced |
| Employee-specific bill rates | Rate table rows keyed by individual employee are not synced |
| Project Type, Department, Region, Office | Available in Ajera but not surfaced as Mosaic fields |
Reading the Field Mapping Tables
Symbol legend for technical tables
The Technical Reference tabs below use a shorthand notation for API and ODBC sources. Read this legend before reviewing the mappings.
| Symbol | Meaning | Example |
|---|---|---|
. | API or table field reference | Project.Description = the Description field on the Project resource |
> | Fallback priority — use the first available value | ActualStartDate > EstimatedStartDate = use Actual; if null, use Estimated |
• | Values combined into one composite value | tDate • tEmployee = combined into a composite identifier |
or | Configurable — an integration setting selects which | tBilledRate or tEarnedRate = your configuration chooses one |
Members
| What Syncs to Mosaic | Where It Comes From in Ajera |
|---|---|
| Employee ID | The unique Ajera employee identifier |
| First Name | The employee's first name |
| Middle Name | The employee's middle name |
| Last Name | The employee's last name |
| The employee's email address | |
| Is Archived | Derived from the employee status — Inactive = archived |
| Created Date | When the employee record was last modified (used as the create timestamp) |
Members are fetched from the Ajera Cloud
ListEmployeesendpoint.
| Mosaic Field | Source |
|---|---|
| Employee ID | Employee.EmployeeKey |
| First Name | Employee.FirstName |
| Middle Name | Employee.MiddleName |
| Last Name | Employee.LastName |
Employee.Email | |
| Is Archived | Employee.Status — Inactive = archived |
| Created Date | Employee.LastModifiedDate |
Source: Ajera Cloud
ListEmployees→GetEmployees(paged 80). The DTO is filtered to keep only the fields above plusEmployeeTypeKeyfor Member Roles.
Deltek Documentation
Member Roles
| What Syncs to Mosaic | Where It Comes From in Ajera |
|---|---|
| Member Role ID | A composite of the employee identifier and their employee type |
| Employee | The employee this role assignment belongs to |
| Role | The Ajera Employee Type assigned to the employee |
Member Roles are derived from the Employee record's
EmployeeTypeKey. If the Roles API method is denied for your tenant, member roles will not sync.
| Mosaic Field | Source |
|---|---|
| Member Role ID | Employee.EmployeeKey • Employee.EmployeeTypeKey |
| Employee | Employee.EmployeeKey |
| Role | Employee.EmployeeTypeKey |
Deltek Documentation
Clients
| What Syncs to Mosaic | Where It Comes From in Ajera |
|---|---|
| Client ID | The unique Ajera client identifier |
| Client Title | The client description |
| Description | The client's website |
| Created Date | When the client record was last modified |
| Is Archived | Always false |
Clients are fetched from the Ajera Cloud
ListClientsendpoint.
| Mosaic Field | Source |
|---|---|
| Client ID | Client.ClientKey |
| Client Title | Client.Description |
| Description | Client.Website |
| Created Date | Client.LastModifiedDate |
| Is Archived | Always false |
Source: Ajera Cloud
ListClients→GetClients. Project → Client linkage is derived from the project'sInvoiceGroups[0].Client.ClientKey.
Deltek Documentation
Projects
| What Syncs to Mosaic | Where It Comes From in Ajera |
|---|---|
| Project ID | The unique Ajera project key |
| Project Title | The project description |
| Project Number | The project ID/number |
| Client | The client linked to the project via the project's first invoice group |
| Company Name | The project's company description |
| Project Manager | The employee assigned as project manager |
| Fee | The labor contract amount, optionally plus the consultant contract amount (configurable — see Fee Source) |
| Billing Type | Set to Role when the project's rate table is unambiguously role-based; otherwise null. Activity-based, Employee-based, and mixed rate tables are not surfaced as Mosaic rate groups |
| Rate Group | The rate table assigned to the project (when billing type is Role) |
| Is Billable | Derived from the project billing type — see Billable Status |
| Status | The project status, mapped to Mosaic's status values (configurable) |
| Is Archived | Derived from the project status — Closed statuses = archived |
| Start Date | The actual start date, falling back to the estimated start date |
| End Date | The actual completion date, falling back to the estimated completion date |
| Modified Date | When the project record was last modified |
Project status mappings (configurable)
Mosaic maps the project's
Statusvalue to a Mosaic status using a default table, with configurable overrides for the three "ambiguous" Ajera statuses:holdStatusMappingForProject,workHoldStatusMappingForProject, andclosedStatusMappingForProject. Equivalent phase-side overrides exist (holdStatusMappingForPhase,workHoldStatusMappingForPhase,closedStatusMappingForPhase). Contact your Customer Success Manager to adjust these mappings.
| Mosaic Field | Source |
|---|---|
| Project ID | Project.ProjectKey |
| Project Title | Project.Description |
| Project Number | Project.ID |
| Client | Project.InvoiceGroups[0].Client.ClientKey |
| Company Name | Project.CompanyDescription |
| Project Manager | Project.ProjectManager.EmployeeKey |
| Fee | Project.LaborContractAmount (+ Project.ConsultantContractAmount per Fee Source) |
| Billing Type | Role when every AxRateTableDetail row for Project.RateTableKey has billing type = Role (enriched via ODBC); otherwise null (mixed billing types or non-role rate tables resolve to null) |
| Rate Group | Project.RateTableKey (when billing type is Role) |
| Is Billable | Derived from Project.BillingType — see Billable Status |
| Status | Project.Status (configurable mapping) |
| Is Archived | Project.Status starts with Closed |
| Start Date | Project.ActualStartDate > Project.EstimatedStartDate |
| End Date | Project.ActualCompletionDate > Project.EstimatedCompletionDate |
| Modified Date | Project.LastModifiedDate |
Source: Ajera Cloud
ListProjects→GetProjects(paged 30). If ODBC is not configured, Billing Type and Rate Group will not be populated, but the project will still sync.
Deltek Documentation
Phases
| What Syncs to Mosaic | Where It Comes From in Ajera |
|---|---|
| Phase ID | The unique Ajera phase key |
| Phase Title | The phase description |
| Phase Number | The phase ID/number |
| Parent | The parent project, or the parent phase if this phase is nested under another phase |
| Project | The top-level parent project |
| Client | The client linked to the phase's project |
| Company Name | The parent project's company description (inherited from the project, not the phase itself) |
| Fee | The labor contract amount, optionally plus the consultant contract amount (same configuration as projects) |
| Estimated Hours | The budgeted hours for the phase |
| Billing Type | Set to Role when the phase's rate table is unambiguously role-based; otherwise null |
| Rate Group | The rate table assigned to the phase (when billing type is Role) |
| Is Billable | Derived from the phase billing type |
| Status | The phase status, mapped to Mosaic's status values (configurable) |
| Is Archived | Derived from the phase status — Closed statuses = archived |
| Start Date | The actual start date, falling back to the estimated start date |
| End Date | The actual completion date, falling back to the estimated completion date |
| Modified Date | When the phase record was last modified |
| Order | The phase's display order within its project |
Nested Phases
Ajera Cloud nests phases recursively (
Phases.Phases). Mosaic flattens this hierarchy to a single-parent chain — each phase records its immediate parent (project or another phase). Sub-phases of sub-phases are fully supported.
Phase Dates
Mosaic only syncs a phase's dates when the phase has both a start date and an end date. Ajera auto-fills the actual start date as soon as time or cost is charged to a phase, so a phase can easily have a start date and no completion date — such a phase still syncs into Mosaic, just with both dates left blank. Add the missing date in Ajera if you want the phase's dates to sync.
| Mosaic Field | Source |
|---|---|
| Phase ID | Phase.PhaseKey |
| Phase Title | Phase.Description |
| Phase Number | Phase.ID |
| Parent | Parent phase's PhaseKey (if nested) or Project.ProjectKey (top-level) |
| Project | Project.ProjectKey |
| Client | Project.InvoiceGroups[0].Client.ClientKey |
| Company Name | Project.CompanyDescription (inherited from the parent project) |
| Fee | Phase.LaborContractAmount (+ Phase.ConsultantContractAmount per Fee Source setting) |
| Estimated Hours | Phase.HoursCostBudget |
| Billing Type | Role when every AxRateTableDetail row for Phase.RateTableKey has billing type = Role (enriched via ODBC); otherwise null |
| Rate Group | Phase.RateTableKey (when billing type is Role) |
| Is Billable | Derived from Phase.BillingType |
| Status | Phase.Status (configurable mapping) |
| Is Archived | Phase.Status starts with Closed |
| Start Date | Phase.ActualStartDate > Phase.EstimatedStartDate |
| End Date | Phase.ActualCompletionDate > Phase.EstimatedCompletionDate |
| Modified Date | Phase.LastModifiedDate |
| Order | Phase.Order (1-based index within the flattened phase list) |
Phases are nested inside
Project.InvoiceGroups[].Phases[].Phases[]in the API response. Mosaic walks this tree, injects the parent project / parent phase references, and emits a flat list.
Deltek Documentation
Fee Source
Both projects and phases use the same configurable fee source.
| Fee Source Option | What It Includes |
|---|---|
| Labor Contract Amount | Labor contract amount only (default) |
| Labor Contract Amount + Consultant Contract Amount | Labor contract amount plus the consultant contract amount |
| Fee Source Setting | Ajera Field(s) |
|---|---|
LaborContractAmount | LaborContractAmount |
LaborContractAmountAndConsultantContractAmount | LaborContractAmount + ConsultantContractAmount |
Configured via the
projectFeeSourceintegration setting.
Billable Status
The Mosaic Is Billable flag for projects and phases is derived from the Ajera billing type:
Ajera BillingType | Mosaic Is Billable |
|---|---|
| TimeAndExpense, FixedFee, PercentComplete, UnitPrice, PercentofConstructionCost, Adjustment | Billable |
| Nonbillable, Marketing, Overhead | Not Billable |
Time Entries
Requires Ajera ODBC. Time Entries can only sync with an Ajera ODBC connection configured. Without ODBC credentials, time entry sync is disabled.
| What Syncs to Mosaic | Where It Comes From in Ajera |
|---|---|
| Time Entry ID | The unique Ajera transaction key |
| Date | The transaction date of the time entry |
| Employee | The employee who logged the time |
| Project | The project the time was logged against |
| Phase | The phase the time was logged against (if applicable, otherwise null) |
| Work Category | The activity associated with the time entry |
| Hours | The hours logged — defaults to entered hours, configurable to use billed hours |
| Description | The time entry notes |
| Hourly Rate | The billed rate by default, configurable to use the earned (spent) rate |
| Billable | Derived from the entry status — Billable status = true; defaults to true if no status is set |
| Status | Derived from rejection/submission/approval flags on the linked timesheet (configurable) |
| Is Archived | Derived from tIsCurrent — entries marked as not current are archived |
| Is Deleted | Derived from tIsDeleted |
Time Entry Filters
Mosaic syncs labor transactions only —
tActivityType = 1. Worksheet entries (tType = 2) and posted entries (tType = 0) are both included. Records must be current (tIsCurrent = TRUE) and have a non-null employee, activity, and project.
Approval Status Mapping
Time entry status is derived from these timesheet fields and the
timeEntryApprovalTypesetting:
tTimeRejectedBy(rejection)tsSubmittedBy(submission)tsSupervisorApprovedBy(supervisor approval)tsAccountingApprovedBy(accounting approval)Approval modes: ApprovedBySupervisor, ApprovedByAccounting, or ApprovedBySupervisorOrAccounting.
| Mosaic Field | Source (via ODBC) |
|---|---|
| Time Entry ID | AxTransaction.tKey |
| Date | AxTransaction.tDate |
| Employee | AxTransaction.tEmployee |
| Project | AxProject.prjProject (joined via tProject → prjKey) |
| Phase | AxProject.prjKey when prjKey != prjProject, otherwise null |
| Work Category | AxTransaction.tActivity |
| Hours | AxTransaction.tUnits or AxTransaction.tBilledUnits (configurable) |
| Description | AxTransaction.tNotes |
| Hourly Rate | AxTransaction.tBilledRate or AxTransaction.tEarnedRate (configurable) |
| Billable | AxTransaction.tStatus = 0 (Billable); defaults true when null |
| Status | Derived from AxTransaction.tTimeRejectedBy, AxTimesheet.tsSubmittedBy, AxTimesheet.tsSupervisorApprovedBy, AxTimesheet.tsAccountingApprovedBy |
| Is Archived | !AxTransaction.tIsCurrent |
| Is Deleted | AxTransaction.tIsDeleted |
Filters:
tActivityType = 1,tType IN (0, 2),tIsCurrent = TRUE,tEmployee/tActivity/tProject IS NOT NULL.
Configurable settings
timeEntryHoursSource—Hours(usestUnits) orBilledHours(usestBilledUnits)timeEntryRateSource—BilledRate(usestBilledRate) orSpentRate(usestEarnedRate)timeEntryApprovalType—ApprovedBySupervisor,ApprovedByAccounting, orApprovedBySupervisorOrAccounting
Deltek Documentation
Work Categories
Requires Ajera ODBC. Work Categories can only sync with an Ajera ODBC connection configured.
| What Syncs to Mosaic | Where It Comes From in Ajera |
|---|---|
| Activity ID | The unique Ajera activity key |
| Activity Code | The activity key (used as the display code) |
| Activity Title | The activity description |
| Is Billable | Not derived — synced as null |
Only Labor-type activities (
actType = 1) sync. Other activity types (Expense, Consultant, etc.) are excluded.
| Mosaic Field | Source (via ODBC) |
|---|---|
| Activity ID | AxActivity.actKey |
| Activity Code | AxActivity.actKey |
| Activity Title | AxActivity.actDescription |
| Is Billable | Always null |
Filter:
AxActivity.actType = 1(Labor activities only).
Deltek Documentation
Roles
| What Syncs to Mosaic | Where It Comes From in Ajera |
|---|---|
| Role ID | The unique Ajera Employee Type key |
| Role Name | The Employee Type description |
Source: Ajera Cloud
ListEmployeeTypesfiltered toFilterByStatus = ['Active'].
| Mosaic Field | Source |
|---|---|
| Role ID | EmployeeType.EmployeeTypeKey |
| Role Name | EmployeeType.Description |
Deltek Documentation
Rate Groups
Requires Ajera ODBC. Without ODBC credentials configured, Rate Groups will not sync (since rate metadata cannot be enriched).
| What Syncs to Mosaic | Where It Comes From in Ajera |
|---|---|
| Rate Group ID | The unique Ajera rate table key |
| Rate Group Name | The rate table description |
| Active Entity Type | Always Role — Mosaic only surfaces role-based rate tables |
Source: Ajera Cloud
ListRateTablesfiltered toFilterByStatus = ['Active']. The billing type is enriched via ODBC fromAxRateTableDetailrows.
| Mosaic Field | Source |
|---|---|
| Rate Group ID | RateTable.RateTableKey |
| Rate Group Name | RateTable.Description |
| Active Entity Type | Always Role |
Deltek Documentation
Rates
Requires Ajera ODBC. Rates are queried from the Ajera database via ODBC.
| What Syncs to Mosaic | Where It Comes From in Ajera |
|---|---|
| Rate ID | A composite of the rate table, role, and rate detail row identifiers |
| Rate Group | The rate table this rate belongs to |
| Role | The Employee Type the rate applies to |
| Rate Amount | The bill rate from the rate table detail row |
| Description | The rate table name combined with the role name and the start date |
| Start / End Dates | The effective date range for the rate |
| Is Cost Rate | Always false — only bill rates are synced |
Only role-based bill rates sync. Rate table rows keyed by individual employee or by activity are not surfaced. Cost rates (
rtlCost) are not synced.
| Mosaic Field | Source (via ODBC) |
|---|---|
| Rate ID | AxRateTableDetail.rtdRateTable • AxRateTableDetail.rtlEmployeeType • AxRateTableDetail.rtlKey |
| Rate Group | AxRateTableDetail.rtdRateTable (links to AxRateTable.rtKey) |
| Role | AxRateTableDetail.rtlEmployeeType (links to AxEmployeeType.etKey) |
| Rate Amount | AxRateTableDetail.rtlRate |
| Description | AxRateTable.rtDescription • AxEmployeeType.etDescription • AxRateTableDate.rtdStartDate |
| Start / End Dates | AxRateTableDate.rtdStartDate, AxRateTableDate.rtdEndDate |
| Is Cost Rate | Always false |
Filter:
rtlEmployee IS NULL AND rtlActivity IS NULL AND rtlActivityType = 1(Labor, role-based bill rate rows only).
Deltek Documentation
Work Plans
| What Syncs to Mosaic | Where It Comes From in Ajera |
|---|---|
| Workplan ID | The unique resource assignment identifier |
| Project | The project the work plan is assigned to |
| Phase | The phase the work plan is assigned to (sub-phase preferred over phase) |
| Employee | The specific employee assigned (if present) |
| Hours (Planned Time) | The planned hours for the assignment |
| Description | The work plan description |
| Bill Rate | The fee rate on the resource assignment |
| Cost Rate | The cost rate on the resource assignment |
| Start Date | The resource start date, falling back through phase and project dates |
Source: Ajera Cloud
GetProjectsWithResources. Mosaic walksInvoiceGroups[].Phases[].Phases[].Resources[]to extract assignments.
| Mosaic Field | Source |
|---|---|
| Workplan ID | Resource.ResourceKey |
| Project | Project.ProjectKey |
| Phase | Resource.SubPhaseKey > Resource.PhaseKey |
| Employee | Resource.Employee.EmployeeKey |
| Hours (Planned Time) | Resource.Units |
| Description | Resource.Description |
| Bill Rate | Resource.FeeRate |
| Cost Rate | Resource.CostRate |
| Start Date | Resource start date > sub-phase actual/estimated start > phase actual/estimated start > project actual/estimated start |
Deltek Documentation
Budget Estimates
| What Syncs to Mosaic | Where It Comes From in Ajera |
|---|---|
| Project | The project the budget estimate is assigned to |
| Phase | The phase the budget estimate is assigned to |
| Employee | The employee the budget estimate is assigned to |
| Hours | The budgeted hours |
| Is Archived | Derived from the resource status — Inactive = archived |
Budget Estimates are deduplicated to the latest resource per (Project, Phase, Employee) combination. Source: same
GetProjectsWithResourcesAPI call as Work Plans.
| Mosaic Field | Source |
|---|---|
| Project | Resource.ProjectKey |
| Phase | Resource.SubPhaseKey > Resource.PhaseKey |
| Employee | Resource.Employee.EmployeeKey |
| Hours | Resource.Units |
| Is Archived | Resource.Status === 'Inactive' |
Deltek Documentation
Troubleshooting & FAQ
Why do Time Entries, Work Categories, Rate Groups, and Rates require Ajera ODBC?
The Ajera Cloud REST API does not expose those tables directly. An ODBC connection to your Ajera database is required to retrieve them. See Deltek Ajera Cloud ODBC for setup, or Ajera Cloud ODBC Troubleshooting if you're seeing connection issues.
Why aren't my employee-specific or activity-specific rates syncing?
Only role-based bill rates are currently synced. Rate table rows keyed by individual employee (rtlEmployee IS NOT NULL) or by activity (rtlActivity IS NOT NULL) are not surfaced. Cost rates (rtlCost) are also not synced.
Are work plans available in the Cloud integration?
Yes — Work Plans and Budget Estimates are Cloud-only features and are not available in the On-Premise integration.
Can I rename field labels in Mosaic to match my Ajera custom labels?
No. Custom field name changes in Mosaic to match Ajera labeling is not supported as a standard integration feature.
I need a data source or field that isn't listed here.
Any integration not listed in this documentation is considered a customization and is charged at an hourly rate. For more information, see Integration Requests.
Deltek Documentation Links
A consolidated reference of Deltek Ajera documentation:
| Topic | Link |
|---|---|
| Ajera Online Help | Ajera Help |
| Deltek Help & Learning | Deltek Help |
Related Documentation
Updated 23 days ago
