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

# Connect Paylocity payroll and post journal entries

> Connect Paylocity to DualEntry, map companies and pay statement items to GL accounts, and post each employee's pay statement as a journal entry.

Connect [Paylocity](https://www.paylocity.com/) to DualEntry so payroll posts to your ledger without rekeying. The connection runs through DualEntry's payroll-data provider, which handles authentication with Paylocity on your behalf. Data flows one way: Paylocity to DualEntry.

Paylocity runs on DualEntry's standard payroll path rather than a Paylocity-specific one. That has one consequence worth knowing before you set expectations internally: payroll posts as one journal entry per employee pay statement, not as a single consolidated entry per pay run. See [How payroll runs become journal entries](#how-payroll-runs-become-journal-entries) for what that means in your ledger.

## Prerequisites

Confirm the following before connecting Paylocity:

* Admin access to both your DualEntry and Paylocity accounts.
* Your [chart of accounts](../../core-financials/general-ledger/chart-of-accounts) includes the GL accounts you intend to use for payroll expense, tax expense, employee and employer benefit accounts, and a payroll clearing or accrued-payroll account.
* A vendor record in DualEntry to use as the payroll vendor, typically named for Paylocity itself.
* The DualEntry companies that Paylocity data should post to already exist.
* A debit account decided for every earnings, tax, deduction, and contribution item you expect Paylocity to send. A pay statement item with no debit account blocks the pay statements that reference it.

No classification setup is required in advance. If you want payroll split by department, DualEntry syncs Paylocity departments and you map them to classification lines after the first sync.

## How to connect

DualEntry connects through a hosted Connect widget, so you do not generate API keys or paste Paylocity credentials into DualEntry.

1. In DualEntry, navigate to **Configuration → Company → Integrations**.
2. Choose Paylocity, then choose **Connect**. DualEntry opens the Connect widget in a new window.
3. Sign in with your Paylocity administrator credentials and approve the data scopes requested on DualEntry's behalf.
4. After approval, the provider redirects back to DualEntry and the integration shows as **Connected**.

The first sync pulls only metadata: companies, the payroll vendor, pay statement items, and departments. Pay statements post once the required mappings are complete, so you can finish mapping before anything reaches the ledger.

That ordering is worth preserving. Mapping before the first pay statement arrives means you never have to unpick an entry that posted to the wrong account.

If the connection later shows a reauth or permissions status, the Paylocity authorization needs renewing. Reconnect from the same screen rather than creating a second connection.

## Map your Paylocity data

After connecting, DualEntry pulls Paylocity metadata and shows what needs mapping. Pay statements do not post until the required mappings are filled in.

There are three pieces of work:

* **Companies and the payroll vendor.** Map each Paylocity company to the DualEntry company its payroll should post to, and map the payroll vendor that gets stamped on every payroll journal entry line. A pay statement whose employee belongs to an unmapped company is skipped rather than posted.
* **Pay statement items.** Map every earnings, tax, employee deduction, and employer contribution item to a debit account. Paylocity requires only the debit side; DualEntry balances the entry against your default offset account. Set a credit account on an item where you want a specific account on the other side.
* **Departments.** Optionally map Paylocity departments to classification lines if you want payroll journal entry lines carrying a department.

Departments resolve through the mapping you set, not by name matching, so you can unmap a department and its payroll lines stop carrying that classification. Employee work locations are not mapped for Paylocity; department is the classification available on this connector.

## How payroll runs become journal entries

Paylocity posts one journal entry per employee pay statement. A pay run covering 40 employees produces 40 journal entries, each dated on the payment's transaction date, in the company mapped to that employee, with lines for that employee's earnings, taxes, deductions, and employer contributions.

This is the practical difference between Paylocity and connectors like [UKG Ready](./ukg-ready), [Paychex Flex](./paychex), or [Gusto](./gusto), which roll a whole pay run into a single consolidated entry. Paylocity's entries carry per-employee detail directly in the ledger rather than keeping it on underlying records behind a summary entry.

Two things follow from that, and both are worth deciding before your first pay run:

* **Ledger volume scales with headcount.** Budget for entry counts that track your employee count on every pay date, and expect payroll to be the largest contributor to journal entry volume in a given period.
* **Per-employee compensation lands in the GL.** Each entry's amounts belong to one named employee, so payroll detail is readable wherever journal entries are.

Each entry's memo carries the note from the source pay statement, and each line carries the payroll vendor you mapped. Amounts convert from Paylocity's currency into the company's base currency using the exchange rate on the payment date.

<Warning>
  Per-employee entries expose individual compensation to every user who can read the general ledger. If your controls assume payroll detail stays outside the GL, tighten [roles and permissions](../../platform-configuration/user-roles-and-permissions) before connecting Paylocity rather than after the first pay run posts.
</Warning>

## How often Paylocity syncs

DualEntry syncs Paylocity every 24 hours by default, picking up payments and pay statements finalized since the last run. You can change that cadence to anything between 30 minutes and 30 days, or pause scheduled syncing entirely, from the integration's sync schedule settings. The cadence applies to every payroll connector on the same provider, not to Paylocity alone.

You can also run a sync on demand from the integration screen when you need a pay run in the ledger before the next scheduled pass, which is the usual need during close. Repeated failures back the schedule off progressively rather than retrying on the same cadence, so an integration that has been failing may wait longer than its configured interval before its next attempt.

Every sync refreshes metadata as well as payroll, so new companies, pay statement items, and departments created in Paylocity arrive unmapped in DualEntry on the next run. That is why an integration that has been posting cleanly for months can suddenly report unmapped items: payroll added a code, not that anything broke. For the retry, resync, and archive actions available on any record, see [Managing syncs](../managing-syncs).

## Troubleshoot sync errors

Sync errors surface on the Paylocity integration screen, against the record that failed.

| Symptom                                          | Likely cause                                                                                       | Resolution                                                                                            |
| ------------------------------------------------ | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| Sync reports companies are not mapped            | One or more Paylocity companies have no DualEntry company mapped.                                  | Map every company on the integration's mapping screen, then resync.                                   |
| Sync reports pay statement items are not mapped  | A new earnings, tax, deduction, or contribution item arrived from Paylocity with no debit account. | Map the new item to a debit account, then resync. New item types appear whenever payroll adds a code. |
| Pay statements sync but no journal entry appears | The employee's company is unmapped, so the pay statement was skipped.                              | Map that company and resync. The skipped statements post on the next run.                             |
| A journal entry posts without a department       | The department is unmapped, or the employee has no department in Paylocity.                        | Map the department to a classification line, or set the employee's department in Paylocity.           |
| Connection shows a reauth status                 | The Paylocity authorization expired or was revoked.                                                | Reconnect from the integration screen. Do not create a second connection.                             |

## Related reading

* [Managing syncs](../managing-syncs) - retry, resync, and archive behavior shared by every integration
* [Gusto](./gusto) - a payroll connector that consolidates each pay run into one entry per company, for comparison
* [Journal entries](../../core-financials/general-ledger/journal-entries) - reviewing what payroll posts to your ledger
* [Integrations](../index) - the full connector catalog
