> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt # Linking BambooHR as a source Canonical URL: https://posthog.com/docs/data-pipelines/sources/bamboohr > **Cloud region:** This page uses US Cloud hosts. For an EU Cloud project, use `https://eu.posthog.com` instead of `https://us.posthog.com` or `https://app.posthog.com` (app host for links). ## On this page - [Adding a data source](#adding-a-data-source) - [Available tables](#available-tables) - [Sync limitations](#sync-limitations) - [Configuration](#configuration) - [Supported tables](#supported-tables) **Beta release** This source is currently in **beta**. It works end to end, but you may still hit rough edges. [Let us know](https://us.posthog.com/#panel=support%3Asupport%3Adata_warehouse%3A%3Atrue) if you do. ![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_9608fcca70) ![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_dark_a92b0e022d) Let AI connect your sources for you Skip the manual setup — run this in your project and the wizard auto-detects your databases and APIs and connects them to PostHog. `npx @posthog/wizard warehouse` ![PostHog Wizard hedgehog](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png) ![](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png)Let AI connect your sources for you The BambooHR connector syncs your HR data – employees, time off requests and types, and account metadata – into PostHog. ## Adding a data source 1. Go to the [sources tab](https://app.posthog.com/data-management/sources) of the data pipeline section in PostHog. 2. Click **\+ New source** and then click **Link** next to BambooHR. 3. Next, you need your company subdomain and an API key from BambooHR. Your **company subdomain** is the first part of your BambooHR URL (for example `yourcompany` in `yourcompany.bamboohr.com`). To generate an **API key**, go to **Account Settings → API Keys** (this requires admin permissions) and make sure the key has access to the data you want to sync. 4. Back in PostHog, enter the credentials in the `Company subdomain` and `API key` fields and click **Next**. 5. Select the tables you want to sync, set the sync method and frequency, then click **Import**. Once the syncs are complete, you can start using BambooHR data in PostHog. ## Available tables | Table | Description | Sync method | | --- | --- | --- | | `employees` | Employee directory | Full refresh | | `time_off_requests` | Time off requests | Full refresh | | `time_off_types` | Time off type definitions | Full refresh | | `meta_fields` | Field definitions in your account | Full refresh | | `meta_lists` | List field options | Full refresh | | `meta_users` | Users with account access | Full refresh | **Incremental** tables sync only new or updated records on each run. **Full refresh** tables reload all data on each sync. ## Sync limitations All BambooHR tables are full refresh only – the BambooHR API does not expose a verified "modified since" filter that returns complete records, so each sync reloads all data. ## Configuration | Option | Type | Required | | --- | --- | --- | | `Company subdomain` | text | Yes | | `API key` | password | Yes | ## Supported tables | Table | Description | Sync method | Incremental field | Primary key | | --- | --- | --- | --- | --- | | `employees` | An employee in the company directory. | Full refresh | — | — | | `employee_job_info` | A dated row from an employee's job information history table. A row records the job title, department, division, location and reporting line an employee held from a given effective date. The columns depend on how the company has configured the table. | Incremental, Full refresh | lastChanged | — | | `employee_compensation` | A dated row from an employee's compensation history table. A row records the pay rate, pay type, pay schedule and overtime status an employee held from a given effective date. The columns depend on how the company has configured the table. | Incremental, Full refresh | lastChanged | — | | `employee_employment_status` | A dated row from an employee's employment status history table. A row records the employment status and status change an employee held from a given effective date, including terminations. The columns depend on how the company has configured the table. | Incremental, Full refresh | lastChanged | — | | `time_off_requests` | A time-off request submitted by an employee. | Full refresh | — | — | | `time_off_types` | A category of time off configured for the company (e.g. vacation, sick). | Full refresh | — | — | | `time_off_policies` | A time-off policy configured for the company, governing how a time-off type accrues. | Full refresh | — | — | | `employee_time_off_policies` | The assignment of a time-off policy to an employee. | Full refresh | — | — | | `employee_time_off_balances` | An employee's current time-off balance for one time-off type, as of the day the table was synced. | Full refresh | — | — | | `timesheet_entries` | A single tracked block of time worked by an employee, either clocked or entered as hours. | Full refresh | — | — | | `meta_fields` | A field definition available in the company's BambooHR account. | Full refresh | — | — | | `meta_lists` | A list field and its available option values configured in BambooHR. | Full refresh | — | — | | `meta_users` | A user account with access to the company's BambooHR. | Full refresh | — | — | | `whos_out` | An employee time-off entry or company holiday on the Who's Out calendar for a date range. | Full refresh | — | — | | `locations` | A work location configured for the company, used to place employees and job openings. | Full refresh | — | — | | `job_openings` | A job opening in applicant tracking, with its applicant counts. | Full refresh | — | — | | `applications` | An application submitted to a job opening, with the applicant and current stage. | Full refresh | — | — | | `application_details` | The full detail of a single application, including when its status last changed. | Full refresh | — | — | | `applicant_statuses` | A status an application can be placed in, resolving the status IDs on applications. | Full refresh | — | — | | `ats_locations` | A company location that can be attached to a job opening in applicant tracking. | Full refresh | — | — | | `employee_goals` | A performance goal assigned to an employee, with its progress and milestones. | Full refresh | — | — | | `employee_goal_comments` | A comment left on an employee's performance goal. BambooHR answers with at most 50 comments per goal and offers no way to page past them, so a goal discussed more than that holds only the 50 the API returns. | Full refresh | — | — | | `timesheets` | An employee's timesheet for one pay period, with its hour totals and approval state. | Full refresh | — | — | | `hour_entries` | A block of hours an employee entered against a date on a timesheet. | Full refresh | — | — | | `clock_entries` | A clock-in and clock-out pair recorded by an employee on a timesheet. | Full refresh | — | — | | `time_tracking_employees` | An employee's time tracking enrollment, with the configuration they track time under. | Full refresh | — | — | | `time_tracking_configurations` | A time tracking configuration: how a group of employees logs time, who approves it and the overtime rules. | Full refresh | — | — | | `time_tracking_kiosks` | A shared device employees clock in and out on. | Full refresh | — | — | | `time_tracking_time_clocks` | A BambooHR hardware time clock and its connection status. | Full refresh | — | — | | `holidays` | An active company holiday, with the employees it applies to and its pay treatment. | Full refresh | — | — | | `custom_fields` | An active custom field or custom table defined for the company's employee records. | Full refresh | — | — | | `archived_custom_fields` | An archived custom field or custom table that employee records can still refer to. | Full refresh | — | — | | `custom_field_list_values` | A dropdown option of a list-type custom field, with the number of employees who use it. | Full refresh | — | — |