Linking Factorial as a source

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.

Learn more
PostHog Wizard hedgehog

Alpha release

This source is currently in alpha. The interface and available tables may change.

The Factorial connector syncs your HR, time-off, attendance, payroll, and recruiting data into PostHog, so you can analyze it alongside your product data.

Prerequisites

You need a Factorial account with access to create an API key that has read access to your company's data.

Adding a data source

  1. In PostHog, go to the Sources tab of the data pipeline section.
  2. Click + New source and click Link next to this source.
  3. Enter your credentials (see Configuration below) and click Next.
  4. Select the tables you want to sync, choose a sync method and frequency, then click Import.

Once the syncs are complete, you can start querying this data in PostHog.

When linking Factorial, you'll need:

  • API key – create an API key in your Factorial account under Settings > API keys (or Integrations > Public API). The key grants read access to your company's data across every supported table.

Sync modes

Each table can be synced in one of several modes, depending on what the source supports:

  • Webhook (when available) – the source pushes changes to PostHog in real time. Fastest freshness, lowest ongoing cost, and the only mode that reliably captures updates and deletes.
  • Incremental – only new or updated rows are synced on each run, using a cursor field (such as an updated_at timestamp). Cheaper than a full refresh, but deletes aren't captured.
  • Append only – new rows are appended using a cursor field; existing rows are never updated. Ideal for immutable, append-only tables like event logs.
  • Full refresh – the whole table is reloaded on every sync. Use it when a table has no reliable cursor or when you need deletions reflected.

See sync methods for a full explanation of how each mode works and how to choose between them.

This source is full refresh only.

Configuration

OptionTypeRequired
API keypasswordYes

Supported tables

TableDescriptionSync methodIncremental fieldPrimary key
employees

People employed at the company, with their personal and employment details.

Full refresh——
terminations

Termination events for employees who left the company, with the leaving date and reason.

Full refresh——
teams

Teams used to group employees within the company.

Full refresh——
team_memberships

Join records mapping employees to the teams they belong to.

Full refresh——
locations

Workplaces/locations the company operates from, including their time zones.

Full refresh——
legal_entities

Legal entities (companies) configured in the account.

Full refresh——
contract_versions

Versions of an employee's contract; the latest holds the current job title, salary, and working hours.

Full refresh——
compensations

Salary and compensation lines attached to a contract version, one row per pay concept.

Full refresh——
leaves

Individual time-off / absence records for employees.

Full refresh——
leave_types

Types of time off / absence configured for the company (e.g. holiday, sick leave).

Full refresh——
allowances

Time-off allowance counters (the buckets of days/hours employees can take).

Full refresh——
allowance_stats

Time-off counters per employee and allowance: how much is accrued, used, carried over and still available at the reference date.

Full refresh——
attendance_shifts

Attendance shifts: clock-in/clock-out records for employees.

Full refresh——
worked_times

Worked time aggregated per employee and day, including tracked, pending and multiplied minutes.

Full refresh——
expenses

Employee expenses submitted for reimbursement.

Full refresh——
cost_centers

Cost centers used to allocate employee, expense and project costs within the company.

Full refresh——
payroll_supplements

Payroll supplements (one-off additions or deductions applied to payroll).

Full refresh——
flexible_time_records

Flexible time records logged against projects (project time tracking).

Full refresh——
time_records

Time booked against projects, linking an attendance shift to the project worker and subproject it was spent on.

Full refresh——
projects

Projects used for time tracking.

Full refresh——
candidates

Candidates in the applicant tracking system (ATS).

Full refresh——
job_postings

Job postings published in the applicant tracking system (ATS).

Full refresh——
applications

Applications linking candidates to job postings in the ATS.

Full refresh——
application_phases

Phases of the hiring pipeline for a job posting, that applications move through.

Full refresh——
hiring_stages

Standard hiring stages the application phases of every job posting map onto.

Full refresh——
candidate_sources

Sources candidates come from, used for source-of-hire reporting.

Full refresh——

Troubleshooting

  • If you see an invalid or revoked key error, create a new key in your Factorial account settings, then reconnect.
  • If access is denied, check the key's permissions, then reconnect.

If your sync is failing or data looks wrong, see the Data warehouse troubleshooting guide. If that doesn't help, contact support – we're happy to help.

Still have questions?

Was this page useful?