> ## Documentation Index
> Fetch the complete documentation index at: https://developers.techwolf.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> API-based connector that extracts HR data directly from Workday using the Workday Query Language (WQL).

# Workday Data Source Connector

The Workday Data Source Connector is an API-based integration that extracts HR data directly from your Workday tenant using the [Workday Query Language (WQL)](https://doc.workday.com/admin-guide/en-us/workday-query-language-wql/lan1691513074498.html) REST API. Unlike the [file-based Workday integration](/integrations/datasource-integrations/workday-datasource/overview), which relies on Enterprise Interface Builder (EIB) exports, the connector pulls data from Workday automatically on a scheduled basis — no file exports or transfer infrastructure required.

## Key benefits

* **Fully automated** — TechWolf manages the connector end-to-end. No need to build, schedule, or monitor EIB exports.
* **Broad data coverage** — Extracts up to 14 distinct data types from Workday, from basic worker information to learning enrollments, performance reviews, and goals.
* **Permission validation** — The connector validates your Workday security configuration at setup time and reports exactly which permissions are missing, if any.

## How it works

1. You configure an Integration System User (ISU) in Workday with the necessary security permissions and register an API client.
2. You share the OAuth credentials with TechWolf.
3. TechWolf configures and operates the connector.
4. The connector authenticates with Workday, executes WQL queries against the configured data types, and loads the results into the SkillEngine API.

<Info>
  The connector connects directly to the Workday REST API. No data passes through intermediate files or storage — it flows from Workday to the SkillEngine API.
</Info>

## Available data types

The connector supports up to 14 data types. Each accordion below shows the field mapping from Workday to TechWolf, the exact WQL query (or SOAP operation, for Feedback) issued by the connector, and any filter logic applied.

Each data type requires specific Workday security domain permissions, detailed on the [Installation](/integrations/datasource-integrations/connectors/workday/installation) page.

<AccordionGroup>
  <Accordion title="Workers" icon="users">
    Basic Employee information: Employee ID, current Job Profile, Supervisory Organisation, and active status.

    **Source:** Workday WQL — `allWorkers`. **Permission domains:** Worker Data: Current Staffing Information; Worker Data: Current Job Profile Information; Worker Data: Public Reporting Items.

    | TechWolf Field                        | Primary Business Object | Business Object          | WQL Output Field | Required | Notes                                                                                                                                            |
    | ------------------------------------- | ----------------------- | ------------------------ | ---------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
    | `employee_external_id` (external\_id) | Worker                  | Worker                   | `employeeID`     | Required | Employee's Workday ID. External ID of the entity.                                                                                                |
    | `assigned_position`                   | Worker                  | Job Profile              | `ID`             | Required | Job Profile ID of the Employee's current position. Called `assigned_position_id` in TechWolf; relates to Job Profiles in Workday, not Positions. |
    | `organisational_unit_id`              | Worker                  | Supervisory Organization | `orgUnitId`      | Required | Supervisory Organisation reference ID.                                                                                                           |
    | `active`                              | Worker                  | Worker                   | `activeStatus`   |          | Whether the Employee is currently active.                                                                                                        |

    WQL query:

    ```sql theme={null}
    SELECT employeeID, jobProfile{ID}, supervisoryOrganization{referenceID1},
           activeStatus, workdayID
    FROM allWorkers
    ```
  </Accordion>

  <Accordion title="Organisational Units" icon="sitemap">
    Supervisory Organisation hierarchy: name, reference ID, parent Organisation, and active status.

    **Source:** Workday WQL — `supervisoryOrganizations`. **Permission domain:** Manage: Supervisory Organization.

    | TechWolf Field                          | Primary Business Object  | Business Object          | WQL Output Field           | Required | Notes                                   |
    | --------------------------------------- | ------------------------ | ------------------------ | -------------------------- | -------- | --------------------------------------- |
    | `organisational_unit_name`              | Supervisory Organization | Supervisory Organization | `name`                     | Required |                                         |
    | `organisational_unit_id` (external\_id) | Supervisory Organization | Supervisory Organization | `referenceID1`             | Required | External ID of the organisational unit. |
    | `organisational_unit_active`            | Supervisory Organization | Supervisory Organization | `inactive`                 | Required | Whether the Organisation is inactive.   |
    | `parent_organisational_unit_name`       | Supervisory Organization | Superior Organization    | `superiorOrganizationName` |          |                                         |
    | `parent_organisational_unit_id`         | Supervisory Organization | Superior Organization    | `superiorOrganizationCode` | Required |                                         |

    WQL query:

    ```sql theme={null}
    SELECT name, referenceID1, superiorOrganizationName, superiorOrganizationCode,
           inactive, workdayID
    FROM supervisoryOrganizations
    ```
  </Accordion>

  <Accordion title="Learning" icon="book-open">
    Employee learning enrolments. Only completed enrolments of type Blended Course, Digital Course, or Lesson are emitted to TechWolf.

    **Source:** Workday WQL — `allWorkers` (with `learningEnrollments` subselection). **Permission domains:** Worker Data: Current Staffing Information; Person Data: Learning.

    | TechWolf Field          | Primary Business Object | Business Object     | WQL Output Field      | Required | Notes                                                     |
    | ----------------------- | ----------------------- | ------------------- | --------------------- | -------- | --------------------------------------------------------- |
    | `employee_id`           | Learning Enrollment     | Worker              | `employeeID`          | Required |                                                           |
    | `course_id`             | Learning Enrollment     | Enrolled Content    | `courseID`            | Required | Workday ID extracted from the enrolled content reference. |
    | `timestamp`             | Learning Enrollment     | Learning Enrollment | `completionDate`      | Required | If empty, defaults to current date.                       |
    | `completion_status`     | Learning Enrollment     | Learning Enrollment | `completionStatus`    |          | Used by the connector filter (see below).                 |
    | `learning_content_type` | Learning Enrollment     | Learning Enrollment | `learningContentType` |          | e.g. Blended Course, Digital Course, Lesson.              |

    WQL query:

    ```sql theme={null}
    SELECT employeeID,
           learningEnrollments{enrolledContent, learningContentTitle,
                               completionDate, completionStatus,
                               learningContentType},
           workdayID
    FROM allWorkers
    ```

    Filter logic (applied by the connector after the WQL response):

    * `completionStatus` equals `Completed`
    * `learningContentType` is one of `Blended Course`, `Digital Course`, or `Lesson`
  </Accordion>

  <Accordion title="Internal History" icon="clock-rotate-left">
    Employee internal staffing history. Hire, position-change, and termination events are pulled and consolidated by the connector into job periods with a start and end date per role. Consecutive events with the same Job Code and Position are merged; `endDate` is empty when the Employee is still in the role.

    **Source:** Workday WQL — `allWorkers` (with `staffingHistory_All` subselection). **Permission domains:** Worker Data: Current Staffing Information; Worker Data: Historical Staffing Information. **BP Security Policies (View All):** Hire, Change Job, Termination, Contract Contingent Worker, Transfer Contingent Worker Inbound, End Contingent Worker Contract.

    | TechWolf Field                        | Primary Business Object | Business Object     | WQL Output Field | Required | Notes                                                               |
    | ------------------------------------- | ----------------------- | ------------------- | ---------------- | -------- | ------------------------------------------------------------------- |
    | `employee_id` (employee.external\_id) | Worker                  | Worker              | `employeeID`     | Required |                                                                     |
    | `job_id`                              | Worker                  | Job Profile History | `jobCode`        | Required | Job code of the position during this period.                        |
    | `start_date` (& timestamp)            | Worker                  | Job Profile History | `startDate`      | Required | Start of the job period.                                            |
    | `end_date`                            | Worker                  | Job Profile History | `endDate`        | Required | End of the job period. Empty if the Employee is still in this role. |
    | `position`                            | Worker                  | Job Profile History | `position`       |          | Position identifier.                                                |

    WQL query:

    ```sql theme={null}
    SELECT employeeID,
           staffingHistory_All{jobCode, effectiveDate, position,
                               isHireTransaction,
                               isPositionChangeTransaction,
                               isTerminationTransaction},
           workdayID
    FROM allWorkers
    WHERE ON staffingHistory_All
          isHireTransaction = true
       OR isPositionChangeTransaction = true
       OR isTerminationTransaction = true
    ```
  </Accordion>

  <Accordion title="External History" icon="building">
    Previous (pre-current-employer) work history captured in the Worker profile.

    **Source:** Workday WQL — `allWorkers` (with `jobHistory_SkillsAndExperience` subselection). **Permission domains:** Worker Data: Current Staffing Information; Person Data: Job History.

    | TechWolf Field    | Primary Business Object | Business Object                     | WQL Output Field                  | Required | Notes |
    | ----------------- | ----------------------- | ----------------------------------- | --------------------------------- | -------- | ----- |
    | `employee_id`     | Worker                  | Worker                              | `employeeID`                      | Required |       |
    | `job_title`       | Worker                  | Job History - Skills and Experience | `jobTitle`                        | Required |       |
    | `job_description` | Worker                  | Job History - Skills and Experience | `responsibilitiesAndAchievements` | Required |       |
    | `company`         | Worker                  | Job History - Skills and Experience | `company`                         |          |       |
    | `start_date`      | Worker                  | Job History - Skills and Experience | `startDate`                       | Required |       |
    | `end_date`        | Worker                  | Job History - Skills and Experience | `endDate`                         | Required |       |

    WQL query:

    ```sql theme={null}
    SELECT employeeID,
           jobHistory_SkillsAndExperience{jobTitle, company, startDate, endDate,
                                           responsibilitiesAndAchievements},
           workdayID
    FROM allWorkers
    ```
  </Accordion>

  <Accordion title="Certificates" icon="certificate">
    Employee certifications with issue and expiration dates.

    **Source:** Workday WQL — `allWorkers` (with `certifications` subselection). **Permission domains:** Worker Data: Current Staffing Information; Person Data: Certifications.

    | TechWolf Field                        | Primary Business Object | Business Object | WQL Output Field    | Required | Notes                                          |
    | ------------------------------------- | ----------------------- | --------------- | ------------------- | -------- | ---------------------------------------------- |
    | `employee_id` (employee.external\_id) | Worker                  | Worker          | `employeeID`        | Required |                                                |
    | `certification_name`                  | Worker                  | Certifications  | `certificationName` | Required | Certifications in Workday have no description. |
    | `timestamp`                           | Worker                  | Certifications  | `issuedDate`        | Required |                                                |
    | `expiration_date`                     | Worker                  | Certifications  | `expirationDate`    |          |                                                |

    WQL query:

    ```sql theme={null}
    SELECT employeeID,
           certifications{certificationName, issuedDate, expirationDate},
           workdayID
    FROM allWorkers
    ```
  </Accordion>

  <Accordion title="Education" icon="graduation-cap">
    Employee education history.

    **Source:** Workday WQL — `allWorkers` (with `education` subselection). **Permission domains:** Worker Data: Current Staffing Information; Person Data: Education.

    | TechWolf Field                        | Primary Business Object | Business Object | WQL Output Field    | Required | Notes |
    | ------------------------------------- | ----------------------- | --------------- | ------------------- | -------- | ----- |
    | `employee_id` (employee.external\_id) | Worker                  | Worker          | `employeeID`        | Required |       |
    | `degree_name`                         | Worker                  | Education       | `degree`            | Required |       |
    | `field_of_study`                      | Worker                  | Education       | `fieldOfStudy`      | Required |       |
    | `start_date`                          | Worker                  | Education       | `firstYearAttended` | Required |       |
    | `end_date` (& timestamp)              | Worker                  | Education       | `lastYearAttended`  | Required |       |
    | `school`                              | Worker                  | Education       | `schoolName`        |          |       |

    WQL query:

    ```sql theme={null}
    SELECT employeeID,
           education{degree, schoolName, fieldOfStudy,
                     firstYearAttended, lastYearAttended},
           workdayID
    FROM allWorkers
    ```
  </Accordion>

  <Accordion title="Goals" icon="bullseye">
    Employee goals with name, description, completion date, and status.

    **Source:** Workday WQL — `allWorkers` (with `goals` subselection). **Permission domains:** Worker Data: Current Staffing Information; Worker Data: Employee Goals.

    | TechWolf Field                        | Primary Business Object | Business Object | WQL Output Field  | Required | Notes                                                                                                                                      |
    | ------------------------------------- | ----------------------- | --------------- | ----------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
    | `employee_id` (employee.external\_id) | Worker                  | Worker          | `employeeID`      | Required |                                                                                                                                            |
    | `name`                                | Worker                  | Goals           | `goalName`        | Required |                                                                                                                                            |
    | `description`                         | Worker                  | Goals           | `goalDescription` | Required |                                                                                                                                            |
    | `status`                              | Worker                  | Goals           | `status`          | Required | Only send relevant entries (e.g. `Completed`, `On Track`) — agree with TechWolf during onboarding so the appropriate filter is configured. |
    | `timestamp`                           | Worker                  | Goals           | `completedOn`     | Required |                                                                                                                                            |

    WQL query:

    ```sql theme={null}
    SELECT employeeID,
           goals{goalName, goalDescription, completedOn, status},
           workdayID
    FROM allWorkers
    ```
  </Accordion>

  <Accordion title="Performance Reviews" icon="chart-line">
    Performance review data: review name, manager and employee comments, type, and review period end date.

    **Source:** Workday WQL — `allWorkers` (with `reviews_AllStatuses` subselection). Requires the `Performance Enablement` API client scope. **Permission domains:** Worker Data: Current Staffing Information; Worker Data: Employee Reviews. **BP Security Policies (View All):** Complete Manager Evaluation for Performance Review, Complete Self Evaluation for Performance Review.

    | TechWolf Field | Primary Business Object | Business Object    | WQL Output Field | Required | Notes                                                                   |
    | -------------- | ----------------------- | ------------------ | ---------------- | -------- | ----------------------------------------------------------------------- |
    | `employee_id`  | Worker                  | Worker             | `employeeID`     | Required |                                                                         |
    | `title`        | Worker                  | Performance Review | `title`          | Required | Performance Review name.                                                |
    | `description`  | Worker                  | Performance Review | `description`    | Required | Manager overall comment, or feedback responses (depending on template). |
    | `status`       | Worker                  | Performance Review | `status`         |          | Only send relevant entries (e.g. `Completed`, `On Track`).              |
    | `type`         | Worker                  | Performance Review | `type`           |          |                                                                         |
    | `timestamp`    | Worker                  | Performance Review | `timestamp`      |          | Review period end date.                                                 |

    WQL query:

    ```sql theme={null}
    SELECT employeeID,
           reviews_AllStatuses{templateName, content_FeedbackResponses,
                                overallComment_Manager, overallComment_Employee,
                                evaluations_AllStatuses, reviewType,
                                eventCompleted, reviewPeriod_EndDate},
           workdayID
    FROM allWorkers
    ```
  </Accordion>

  <Accordion title="Feedback" icon="comments">
    Employee feedback: anytime feedback, self-requested feedback, and feedback requested by others.

    **Source:** Workday SOAP — `Get_Workers` (Human Resources service) with `Include_Feedback_Received` response group. Requires the `Performance Enablement` API client scope. **Permission domains (must be `View`, not `Get`):** Worker Data: Anytime Feedback; Worker Data: Role Requested Feedback; Worker Data: Self Requested Feedback; Worker Data: Confidential Feedback; Worker Data: Private Feedback.

    | TechWolf Field                        | Primary Business Object | Business Object | WQL Output Field | Required | Notes                                                                          |
    | ------------------------------------- | ----------------------- | --------------- | ---------------- | -------- | ------------------------------------------------------------------------------ |
    | `employee_id` (employee.external\_id) | Worker                  | Worker          | `employeeID`     | Required |                                                                                |
    | `timestamp`                           | Worker                  | Feedback        | `timestamp`      | Required | Date the feedback was given.                                                   |
    | `source`                              | Worker                  | Feedback        | `source`         | Required | Feedback type — e.g. Anytime Feedback, Requested by Self, Requested by Others. |
    | `description`                         | Worker                  | Feedback        | `description`    | Required | Combined feedback question + comment (HTML stripped).                          |

    <Info>
      Feedback is the only data type that uses SOAP rather than WQL. This is why Feedback requires `View` permissions (not `Get`) on the relevant Feedback domains, and why it is not visible via WQL even when WQL permission is granted. See the [Installation](/integrations/datasource-integrations/connectors/workday/installation) page for the full permission set.
    </Info>
  </Accordion>

  <Accordion title="Jobs" icon="briefcase">
    Job Profile catalog: descriptions, Job Family information, and active status.

    **Source:** Workday WQL — `allJobProfiles`. **Permission domain:** Job Information.

    | TechWolf Field          | Primary Business Object | Business Object  | WQL Output Field           | Required | Notes                                                                                                   |
    | ----------------------- | ----------------------- | ---------------- | -------------------------- | -------- | ------------------------------------------------------------------------------------------------------- |
    | `job_id` (external\_id) | Job Profile             | Job Profile      | `ID`                       | Required | External ID of the entity. Workday ID of the Job Profile.                                               |
    | `job_name`              | Job Profile             | Job Profile      | `jobProfileName`           | Required |                                                                                                         |
    | `job_description`       | Job Profile             | Job Profile      | `jobProfileSummary`        | Required |                                                                                                         |
    | `job_description`       | Job Profile             | Job Profile      | `jobDescription`           | Required |                                                                                                         |
    | `job_description`       | Job Profile             | Job Profile      | `additionalJobDescription` |          | Optional additional Job description text.                                                               |
    | `active`                | Job Profile             | Job Profile      | `inactive`                 | Required | Job assumed active if no value given.                                                                   |
    | `job_family_id`         | Job Profile             | Job Family       | `jobFamilyID`              | Required | Reference ID of the Job Family. A Job can be part of multiple families in Workday, but not in TechWolf. |
    | `job_family_name`       | Job Profile             | Job Family       | `jobFamilyName`            |          | Name of the linked Job Family.                                                                          |
    | `job_family_group_name` | Job Profile             | Job Family Group | `jobFamilyGroupName`       |          |                                                                                                         |

    WQL query:

    ```sql theme={null}
    SELECT ID, jobProfileName, jobDescription, jobProfileSummary,
           additionalJobDescription,
           jobFamily{referenceID1, jobFamilyName},
           jobFamilyGroup{jobFamilyName},
           inactive, workdayID
    FROM allJobProfiles
    ```
  </Accordion>

  <Accordion title="Job Families" icon="layer-group">
    Job Family catalog, used when the Job Architecture is in scope.

    **Source:** Workday WQL — `allJobFamilies`. **Permission domain:** Job Information.

    | TechWolf Field                 | Primary Business Object | Business Object  | WQL Output Field        | Required | Notes                                                                        |
    | ------------------------------ | ----------------------- | ---------------- | ----------------------- | -------- | ---------------------------------------------------------------------------- |
    | `job_family_id` (external\_id) | Job Family              | Job Family       | `referenceID1`          | Required | External ID of the entity.                                                   |
    | `job_family_name`              | Job Family              | Job Family       | `jobFamilyName`         | Required |                                                                              |
    | `job_family_summary`           | Job Family              | Job Family       | `jobFamilySummary`      | Required |                                                                              |
    | `active`                       | Job Family              | Job Family       | `inactive`              | Required | Job Family assumed active if no value given.                                 |
    | `job_family_group_name`        | Job Family              | Job Family Group | `jobFamilyGroupName`    | Required | A Job Family can be part of multiple groups in Workday, but not in TechWolf. |
    | `job_family_group_summary`     | Job Family              | Job Family Group | `jobFamilyGroupSummary` | Required |                                                                              |

    WQL query:

    ```sql theme={null}
    SELECT referenceID1, jobFamilyName, jobFamilySummary, inactive,
           jobFamilyGroup{jobFamilyName, jobFamilySummary},
           workdayID
    FROM allJobFamilies
    ```
  </Accordion>

  <Accordion title="Vacancies" icon="magnifying-glass">
    Job Requisition data: posting title, descriptions, status, and linked Job Profiles. One output record is emitted per (Job Requisition, Job Profile) pair when multiple Job Profiles are linked to a Requisition.

    **Source:** Workday WQL — `allJobRequisitions`. **Permission domain:** Job Requisition Data.

    | TechWolf Field                  | Primary Business Object | Business Object | WQL Output Field           | Required | Notes                                                |
    | ------------------------------- | ----------------------- | --------------- | -------------------------- | -------- | ---------------------------------------------------- |
    | `requisition_id` (external\_id) | Job Requisition         | Job Requisition | `referenceID1`             | Required | External ID of the vacancy.                          |
    | `job_id`                        | Job Requisition         | Job Profile     | `jobProfileID`             | Required | Job linked to the vacancy; used for skill inference. |
    | `job_title`                     | Job Requisition         | Job Requisition | `jobPostingTitle`          | Required |                                                      |
    | `job_description`               | Job Requisition         | Job Requisition | `jobDescription`           | Required |                                                      |
    | `job_description`               | Job Requisition         | Job Requisition | `jobDescriptionSummary`    | Required |                                                      |
    | `job_description`               | Job Requisition         | Job Requisition | `additionalJobDescription` | Required |                                                      |
    | `active`                        | Job Requisition         | Job Requisition | `jobRequisitionStatus`     | Required | Vacancy assumed active if no value given.            |

    WQL query:

    ```sql theme={null}
    SELECT referenceID1, jobPostingTitle, jobDescriptionSummary, jobDescription,
           additionalJobDescription,
           jobRequisitionStatus{referenceID1},
           allJobProfiles{ID},
           workdayID
    FROM allJobRequisitions
    ```
  </Accordion>

  <Accordion title="Courses" icon="book">
    Learning content catalog: course titles, types, descriptions, and durations.

    **Source:** Workday WQL — `learningContent`. **Permission domains:** Set Up: Learning Catalog; Manage: Learning Content.

    | TechWolf Field             | Primary Business Object | Business Object  | WQL Output Field      | Required | Notes                     |
    | -------------------------- | ----------------------- | ---------------- | --------------------- | -------- | ------------------------- |
    | `course_id` (external\_id) | Learning Content        | Learning Content | `courseID`            | Required | Workday ID of the course. |
    | `title`                    | Learning Content        | Learning Content | `title`               | Required |                           |
    | `description`              | Learning Content        | Learning Content | `description`         | Required |                           |
    | `learning_content_type`    | Learning Content        | Learning Content | `learningContentType` |          |                           |
    | `active`                   | Learning Content        | Learning Content | `activeStatus`        |          |                           |
    | `duration_in_minutes`      | Learning Content        | Learning Content | `durationInMinutes`   |          |                           |

    WQL query:

    ```sql theme={null}
    SELECT title, learningContentType, description, activeStatus,
           durationInMinutes, workdayID
    FROM learningContent
    ```
  </Accordion>
</AccordionGroup>

<Info>
  Not all data types need to be enabled. Work with TechWolf to select the data types that are relevant for your use case. Security permissions only need to be granted for the data types you choose to enable.
</Info>

## Next steps

<Card title="Installation" icon="wrench" href="/integrations/datasource-integrations/connectors/workday/installation">
  Step-by-step guide to configure your Workday tenant and share credentials with TechWolf.
</Card>
