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

# Reconcile Record Counts

> Explain a gap between Bindbee's record count and the customer's.

A customer says they have 4,200 employees and you're seeing 4,417. The two numbers are counting different populations, so establish what each one counts before investigating a fault.

<Info>
  **Before you start**

  * You have the customer's figure and know which report produced it. An HR dashboard, a payroll report, and a headcount report disagree with each other too.
</Info>

## Steps

<Steps>
  <Step title="Get an unfiltered count from Bindbee">
    Page the model with no filters and count - see [Pagination](/api-reference/basics/pagination).

    Confirm the walk completed. A loop that stopped on a short page instead of an absent cursor undercounts.

    **Result:** A trustworthy baseline.
  </Step>

  <Step title="Break the count down by status">
    Count each of `ACTIVE`, `PENDING`, `INACTIVE`, `ACTIVE_EXTERNAL`, `INACTIVE_EXTERNAL`, `LEAVE`, `DECEASED`, `RETIRED`, and `-`. This one breakdown resolves most gaps, because customers quote active permanent employees and an unfiltered API count includes everyone.

    | Difference                              | Check                                                                                         |
    | --------------------------------------- | --------------------------------------------------------------------------------------------- |
    | Contingent workers and contractors      | `ACTIVE_EXTERNAL` and `INACTIVE_EXTERNAL`                                                     |
    | Terminated employees retained           | `INACTIVE`, `RETIRED`, `DECEASED`                                                             |
    | Employees on leave                      | `LEAVE`, counted by some HR reports and omitted by others                                     |
    | Pending starters                        | `PENDING`, future-dated hires the customer may count later                                    |
    | Records with no upstream status         | `-`, which any specific status filter excludes                                                |
    | Multiple companies or legal entities    | Break down by `company_id`                                                                    |
    | One person, several employments         | Count employees and employments separately                                                    |
    | Test or system accounts                 | Present in the source system. Filter them out on a stable attribute                           |
    | Records with almost no fields populated | Partially provisioned upstream, or a sync that loaded the employee but not the related models |

    **Result:** The gap accounted for.
  </Step>

  <Step title="Confirm the customer's definition">
    Ask what their number counts, and which report produced it. Their HRIS dashboard, payroll register, and benefits eligibility report each give a different figure for the same workforce.

    **Result:** A like-for-like comparison.
  </Step>

  <Step title="Only then treat it as a data problem">
    A gap that survives every check above becomes a missing-records investigation - see [Missing records](/guides/troubleshooting/missing-records).

    **Result:** An investigation grounded in evidence.
  </Step>
</Steps>

## Reconciling benefits counts

Benefits gaps are usually structural.

An **employer benefit** is a plan. A **benefit** is one employee's enrollment, so counting benefits to find how many plans exist gives an enrollment count instead.

A **dependent** becomes a covered life only through a **dependent benefit**. Counting dependents as covered lives overstates the population, which is why an eligibility file comes out too long.

See [Reading benefits](/guides/data-models/benefits).

## Frequently Asked Questions

<AccordionGroup>
  <Accordion title="The gap changes between runs">
    You're counting mid-sync. Gate the count on the sync-completed event - see [Syncing](/guides/reading-writing/syncing).
  </Accordion>

  <Accordion title="Bindbee returns more than the source system's own API">
    Check for terminated or historical records the customer's report filters out and the API returns. Confirm you're comparing the same population too.
  </Accordion>

  <Accordion title="Bindbee returns fewer, consistently">
    Suspect permission or scope first. A withheld population looks identical to a lost one - see [Origin-system errors](/guides/troubleshooting/errors#origin-system-errors).
  </Accordion>

  <Accordion title="You need to show a customer the reconciliation">
    Give them the per-status breakdown in place of a total. It turns "your integration is missing people" into a conversation about which populations to include.
  </Accordion>
</AccordionGroup>

## Related

* [Missing records](/guides/troubleshooting/missing-records) - when the gap is a real absence
* [Filtering](/guides/reading-writing/reading-data/filters) - the filters that change a count
* [Reading benefits](/guides/data-models/benefits) - why plans and enrollments count differently
