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

# Tenant Screening

> Use payroll data, banking reports, and uploaded documents for tenant screening.

Applicants can share payroll data, connect bank accounts, or upload documents for tenant screening. Choose the products that provide the information your screening process requires.

## Choose products

<CardGroup cols={3}>
  <Card title="Payroll" icon="money-check-dollar" href="#payroll">
    Retrieve identities, paystubs, and source documents from accounts applicants connect.
  </Card>

  <Card title="Banking" icon="building-columns" href="#banking">
    Use Banking Verifications for income and asset reports.
  </Card>

  <Card title="Document uploads" icon="file-lines" href="#document-uploads">
    Receive uploaded files and retrieve OCR and authenticity results when enabled.
  </Card>
</CardGroup>

You can offer these products individually or together. Document uploads can be an initial option as well as a fallback when an applicant cannot connect an account.

## Payroll

Use the Data APIs when your screening process needs employer, employment status, pay, or income history fields from [Identities](/api-reference/identities) and [Paystubs](/api-reference/paystubs). Add [Payroll Documents](/api-reference/payroll-documents) when you also need source files.

Before implementing, determine which fields and how much paystub history you need, whether source documents are required, and what to offer when the required data is unavailable.

### Connect payroll accounts

1. Reuse the applicant's existing [user ID](/overview/data-structure/users), or [create a user](/api-reference/users/create-a-user) and store the returned ID with the applicant record in your system.
2. Create a [user token](/api-reference/user-tokens/create-a-user-token) and launch [Link](/link/initialization/overview) so the applicant can find their employer or payroll provider.
3. Let the applicant connect additional accounts when income from more than one job is needed.
4. Store each connected account ID and track its status independently.

Use [Link callbacks](/link/reference/callbacks) to update the applicant experience. For example, the [`onAccountConnected` callback](/link/reference/callbacks#onaccountconnected) can advance the applicant to the next screen after a successful connection. Use webhooks to determine when payroll data is ready.

### Retrieve payroll data

Subscribe to the webhooks that match the data you need:

| Webhook                                                                          | Use                                                                                                                                  |
| -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| [`identities.added`](/api-reference/identities-webhooks/added)                   | Retrieve employment information when an identity is first available. Continue handling identity updates as fields are populated.     |
| [`paystubs.partially_synced`](/api-reference/paystubs-webhooks/partially-synced) | Retrieve paystubs for the requested history window. Use the account ID and `available_from` / `available_to` dates from the webhook. |
| [`paystubs.fully_synced`](/api-reference/paystubs-webhooks/fully-synced)         | Retrieve all available paystubs for an account, including when retrieval completed without a partial-sync event.                     |
| [`users.fully_synced`](/api-reference/users-webhooks/fully-synced)               | Initial data retrieval has finished for all newly connected payroll accounts attached to the user.                                   |

<Note>
  Do not wait only for the `paystubs.partially_synced` webhook. Also handle full synchronization and set a timeout for requests that do not return the data you need. See [Retrieving paystubs](/overview/data-delivery#retrieving-paystubs) for the complete flow.
</Note>

Follow pagination and retain resource IDs so later updates modify the corresponding records in your system. A completed sync means all available records were retrieved; check that those records meet your screening requirements.

### Match employments

An account can contain paystubs from more than one job. Use the `employment` field to match identities, paystubs, and payroll documents before applying an identity's employment status or pay details to those records.

Retrieve all records and match them afterward when you need to retain unmatched paystubs. Use the `employment` filter when you only need records for one employment. See [Employments](/overview/data-structure/employments) for both approaches.

## Banking

Use [Banking Verifications](/verifications/verification-types/banking) when applicants will share banking information for an income or asset report.

1. If the applicant already has a user from payroll or document collection, reuse that user ID. Otherwise, create a user. Update any missing [required banking details](/verifications/quickstart#create-a-user) before ordering the verification.
2. Order a verification with the required report type, such as `voi` for income or `voai` for assets and income.
3. Create a banking session and launch the returned link using the [banking SDK](/verifications/verification-types/banking#embedded-banking). Hosted banking invitations must be enabled by Argyle before use.
4. Wait for the `verifications.updated` webhook. When the verification reaches `completed` or `completed_with_errors`, retrieve its report PDF or JSON.

Banking uses verification status for report readiness. Payroll synchronization events do not indicate that a banking report is ready.

## Document uploads

Document uploads can be an initial option or a fallback when an applicant cannot connect a payroll account.

* **Document uploads only:** Create a [document-upload-only Flow](/workflows/document-processing#document-upload-only). Select the document categories and required quantities in Console, save the Flow, and use its Flow ID when launching Link for the existing user.
* **Document uploads as a fallback:** In a payroll Flow, enable document uploads under **Search and connect → Fallback experiences** for applicants who cannot find their employer or payroll provider, or who provide incorrect credentials. See [User uploads within Link](/workflows/document-processing#user-uploads-within-link) for the setup instructions.

If your application handles the fallback itself, the [`onCantFindItemClicked` callback](/link/reference/callbacks#oncantfinditemclicked) can launch a separate document-upload-only Flow. If you already collect files outside Link, [upload them through the API](/api-reference/user-uploads/upload-a-document).

Retrieve uploaded files through [User Uploads](/api-reference/user-uploads). When OCR is enabled, listen for [OCR completion and failure webhooks](/integrations/ocr/ocrolus#ocr-webhooks), then retrieve the results from `metadata.ocr_documents[]`. Authenticity results have their own webhook. See [OCR and Authenticity](/integrations/ocr/ocrolus) for supported documents, fields, and processing errors.

<Note>
  Doc VOI is designed for mortgage income calculations. For tenant-screening document collection, OCR, and authenticity, use Document Uploads and the User Uploads API.
</Note>

## Common issues

* **Unmatched paystubs:** A `null` employment does not mean the paystub is unusable. Keep it available for separate processing, without applying another employment's status to it.
* **Missing partial-sync event:** The event may not be sent when no relevant paystubs are available or retrieval completes in one pull. Handle full synchronization and your application's timeout.
* **Connection errors:** Subscribe to the [`accounts.updated`](/api-reference/accounts-webhooks/updated) webhook with `config.include_resource = true` and inspect the account's connection status and errors. Offer another connection attempt or a document upload when appropriate.

When an applicant returns, reuse their existing user ID. Follow [Reconnect an Account](/workflows/reconnecting-accounts) when credentials or MFA are required, or let them return to the document Flow to provide additional files.
