Reconciling Payroll and Posting to Your GL

Tie each payroll run out to your books, post it to your general ledger, and allocate costs by client or job.

Once payroll runs, someone has to account for it. Your finance team needs to know that what Everee paid matches what you expected, post the cost to the general ledger, and, for staffing and services firms, bill clients for the labor they used.

Everee gives you three views of the same payments. Each answers a different question, so most integrations use two of them together.

You want to...UseIt's organized by
Post payroll to your general ledgerThe payroll journalFunding, as balanced debits and credits with your GL codes
Bill clients, or report cost by job or projectThe cost segments in the Payroll Cost APICost center, with wages, taxes, and other costs fully loaded
Check individual payments against your own recordsThe Payment Data APIPayment, one per worker per pay period, with every line itemized

They come from the same payments but aren't meant to match one for one. The journal groups by funding date, the segments by earning or pay date, and the payment data by pay date. Use the journal for the books and the segments for analysis.


Before you start

Two pieces of setup decide how useful this data is:

  1. Cost centers on your wages. The segments, and the allocation in the journal and payment data, only follow the cost centers you send with shifts and payable items. Decide what you need to report by, such as client, job, or department, and create those cost centers before you send wages. See Setting up your organization.
  2. GL code mappings. Your accounting system needs account codes on each journal line. Create the mappings once, up front.

Everything below only includes payments that have been paid. Wait until a pay date has finished processing before you retrieve it. Retrieve in one pass: a payment that's paid while you're paging through may be missed in that pass.


1. Map your GL codes

A GL code mapping tells Everee which of your accounts a kind of journal line belongs to. It works at three levels of detail, and each line takes the most specific mapping that fits.

Send your mappings to Create or update GL mappings:

[
  { "category": "GrossPay", "glCode": "6000" },
  { "category": "GrossPay", "transactionType": "FIELD_HOURS", "glCode": "6010" },
  { "category": "EmployerTaxes", "glCode": "6200" },
  { "category": "Withholdings", "glCode": "2100" },
  { "category": "Liabilities", "glCode": "2110" },
  { "category": "PayrollFunding", "glCode": "1000" }
]
  • Sending your whole set of mappings on every sync is safe. Existing ones are updated and nothing is duplicated.
  • To find the types and details to map, retrieve a journal and look at its lines, or list suggested transaction types.
  • If different approval groups or work locations need different codes, scope your mappings by one of them.
  • You can also set them up in the Everee admin portal. Both work on the same mappings.

A mapping change applies to every journal you retrieve afterward, including past ones.

See the Guide to GL code mappings.


2. Post each funding to your GL

A funding is the transfer of money that covers one or more payments. Each funding's journal balances on its own, so you post one funding as one journal entry.

The loop is simple:

every day, or when payment.paid arrives:
  1. List fundings since your last run             GET /integration/v1/payroll-costs/journal/fundings
  2. For each funding you haven't posted yet:
       a. Skip it unless its status is FUNDED
       b. Retrieve its journal                     GET /integration/v1/payroll-costs/journal/fundings/{fundingId}
       c. Post it as one journal entry
       d. Store the fundingId so you never post it twice
GET https://api.everee.com/integration/v1/payroll-costs/journal/fundings?start-date=2026-10-01&end-date=2026-10-31

Points to get right:

  • Wait for FUNDED. By default the list returns SUBMITTED and FUNDED fundings. A submitted funding can still fail, so if you'd rather not post until the money has arrived, post only FUNDED ones.
  • Treat fundingId as opaque, and store every one you've posted.
  • The date range filters on funding date, not pay date.
  • Every journal balances. totalDebits equals totalCredits. If yours don't after posting, a line was dropped.
  • Don't skip lines with no GL code. A null glCode means no mapping applies. Post those to a suspense account and alert someone to add a mapping. Skipping a line unbalances the entry.
  • Handle values you don't recognize. New line categories and funding statuses may be added.
  • Mapping changes are retroactive. If you change a mapping after posting a funding, retrieve the journal again if you want the new codes.

You can choose how much detail to post. By default the journal splits lines by work location, approval group, and all three cost centers, as the Payroll Journal report does. Pass group-by to split by fewer fields and get a shorter journal that balances the same way:

GET https://api.everee.com/integration/v1/payroll-costs/journal/fundings/123456?group-by=work-location-state&group-by=cost-center-1

See the Guide to the payroll journal for the line categories, how a funding balances, and how companies that file and remit their own taxes appear.


3. Bill clients and report by cost center

The cost segments split your total payroll cost by the cost centers on your wages. Employer taxes, benefit costs, and Workers' Comp premiums are allocated across cost centers in proportion to wages, so each segment is a fully loaded cost.

GET https://api.everee.com/integration/v1/payroll-costs/segments/by-period?min-earning-date=2026-10-05&max-earning-date=2026-10-11
GET https://api.everee.com/integration/v1/payroll-costs/segments/by-cost-centers?cost-center-type-key=clientId&cost-center-value=290&cost-center-value=291
  • Retrieve once per pay period, after payroll is finalized, on the same schedule you invoice or report on.
  • You get one segment for each unique combination of cost centers on the wages, plus one unallocated segment for costs that couldn't be allocated. Include it, or your totals won't tie out.
  • If a cost center value you pass doesn't exist, the request fails with a 400. Set ignore-unknown-cost-center-values to true to skip those values instead.

4. Check individual payments

When a total doesn't match, or you need to answer "what exactly was paid to this worker?", retrieve the payments themselves:

GET https://api.everee.com/integration/v1/payment-data?pay-date=2026-10-16

Each payment itemizes taxable wages by pay code and cost center, non-taxable pay, employer taxes, employer additional costs, employee withholdings, deductions, and net payouts. Page through with the nextCursor until hasNextPage is false. A pay period can be paid on several pay dates, so you can retrieve one by pay-period-start-date and pay-period-end-date instead.

The totals on a payment always equal the sum of their lines, so you can rely on that in your own checks. The payment's id is the same ID used in the Worker Payment History API and in payment.paid webhook events.

See the Guide to the Payment Data API.


5. Trigger it all from webhooks

You don't need a schedule. These events tell you when to look:

EventWhat to do
payment.paidA payment was paid. When your pay date is complete, retrieve its payment data and check for new fundings
payment.deposit-returnedA deposit was returned, so a worker hasn't received money yet. See Returned deposits and retries
report.completedA report you requested is ready to download

For a one-off reconciliation, or for something your finance team wants as a spreadsheet, the Reports API runs Everee's standard reports, such as Payments by Pay Date and Funding, and gives you an Excel file to download.


Putting it together

A common month-end routine for a staffing platform:

  1. Each pay date, after payment.paid, list fundings and post the new FUNDED ones to the GL.
  2. Each pay period, pull the cost segments and turn each client's segment into an invoice line.
  3. Compare each client's cost to what you billed. If there's a gap, open the payment data for that pay date and find the payments behind it.
  4. After changing a GL mapping, re-retrieve the journals for the affected fundings.

Common mistakes

  • Skipping the unallocated segment. Totals then fall short of what was paid.
  • Posting a funding twice. Store every fundingId.
  • Posting before the funding is FUNDED. A submitted funding can still fail.
  • Dropping lines with a null GL code. The journal no longer balances.
  • Expecting the journal and segments to match. They're organized differently. Compare like with like.
  • Retrieving mid-run. Payments that finish while you're paging may be missed.

Next steps


Did this page help you?