Loading...
Help Center / Getting Started / Payroll Connect App Overview

Payroll Connect App Overview

Payroll Connect App Overview

Bridge MangoApps to your existing payroll provider β€” ADP, Workday, Gusto, BambooHR, Paychex, MangoPay, or a custom API. Sync employees, submit approved timesheets, import paychecks, and track compensation changes without double entry.


What is Payroll Connect?

Payroll Connect is the integration app that connects MangoApps Workforce to an external payroll system. It is the bridge β€” not the engine. Time flows out to your payroll provider, paychecks and compensation data flow back in, and employees see their pay stubs inside MangoApps instead of logging into a separate portal.

Payroll Connect vs. Payroll Processing β€” Payroll Connect (this app) integrates with an external provider such as ADP, Gusto, or Workday. Payroll Processing (a separate app, in-house engine, early preview) runs payroll directly inside MangoApps β€” calculating deductions, taxes, and issuing payments. Choose Payroll Connect if you already have a payroll system and want to eliminate double entry. Choose Payroll Processing when you want MangoApps to run payroll for you. The two are designed to work together as complementary options β€” never at the same time for the same employees.

Core value proposition:

  • Eliminate double entry β€” Timesheets approved in MangoApps land in your payroll system automatically
  • Pay transparency β€” Employees see gross pay, net pay, deductions, taxes, and YTD totals inside MangoApps
  • Single source of truth β€” Compensation changes flow through an approval workflow and write back to the payroll provider
  • Integration health at a glance β€” Per-connection success rate, overdue-sync detection, and sync log drill-downs
  • Multi-provider β€” Run ADP for one business unit and Gusto for another on the same instance

How It Works

Provider Connection Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                       PAYROLL CONNECT SETUP                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”‚
β”‚  β”‚  CHOOSE    │──▢│  ENTER     │──▢│   TEST     │──▢│  ACTIVATE  β”‚          β”‚
β”‚  β”‚ PROVIDER   β”‚   β”‚CREDENTIALS β”‚   β”‚ CONNECTION β”‚   β”‚ CONNECTION β”‚          β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜          β”‚
β”‚   ADP / Workday    api_key, OAuth,       β”‚                β”‚                 β”‚
β”‚   Gusto / Bamboo   base_url, etc.        β–Ό                β–Ό                 β”‚
β”‚   Paychex /        (encrypted)     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚
β”‚   MangoPay /                       β”‚  SUCCESS  β”‚   β”‚   MAP     β”‚            β”‚
β”‚   Custom                           β”‚   FAIL β†’  β”‚   β”‚ EMPLOYEES β”‚            β”‚
β”‚                                    β”‚   error   β”‚   β”‚ (auto or  β”‚            β”‚
β”‚                                    β”‚   logged  β”‚   β”‚  manual)  β”‚            β”‚
β”‚                                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜            β”‚
β”‚                                                          β”‚                  β”‚
β”‚                                                          β–Ό                  β”‚
β”‚                                                   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”             β”‚
β”‚                                                   β”‚   FIELD   β”‚             β”‚
β”‚                                                   β”‚ MAPPINGS  β”‚             β”‚
β”‚                                                   β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜             β”‚
β”‚                                                         β”‚                   β”‚
β”‚                                                         β–Ό                   β”‚
β”‚                                                   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”             β”‚
β”‚                                                   β”‚   SYNC    β”‚             β”‚
β”‚                                                   β”‚  SCHEDULE β”‚             β”‚
β”‚                                                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
β”‚                                                   Hourly / Daily / Weekly   β”‚
β”‚                                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Two-Way Data Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         DATA FLOW                                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                            β”‚
β”‚                  MANGOAPPS WORKFORCE                                       β”‚
β”‚      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                       β”‚
β”‚      β”‚  Users  β”‚  Timesheets  β”‚  Comp Changes  β”‚   β”‚                       β”‚
β”‚      β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚
β”‚             β”‚          β”‚              β”‚                                    β”‚
β”‚             β”‚          β”‚              β”‚                                    β”‚
β”‚         OUTBOUND   OUTBOUND       OUTBOUND                                 β”‚
β”‚             β”‚          β”‚              β”‚                                    β”‚
β”‚             β–Ό          β–Ό              β–Ό                                    β”‚
β”‚      ╔══════════════════════════════════════════════════╗                  β”‚
β”‚      β•‘         PAYROLL CONNECT CONNECTOR                β•‘                  β”‚
β”‚      β•‘   (Adp / Workday / Gusto / BambooHr /            β•‘                  β”‚
β”‚      β•‘    Paychex / Mangopay / Custom / Partner)        β•‘                  β”‚
β”‚      β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•                  β”‚
β”‚             β–²          β–²              β–²                                    β”‚
β”‚             β”‚          β”‚              β”‚                                    β”‚
β”‚          INBOUND    INBOUND       INBOUND                                  β”‚
β”‚             β”‚          β”‚              β”‚                                    β”‚
β”‚      β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                       β”‚
β”‚      β”‚ Employee β”‚   Paychecks   β”‚ Import Requests  β”‚                       β”‚
β”‚      β”‚ Mappings β”‚  (pay stubs)  β”‚ (new hires from  β”‚                       β”‚
β”‚      β”‚          β”‚               β”‚  provider)       β”‚                       β”‚
β”‚      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚
β”‚                                                                            β”‚
β”‚                  EXTERNAL PAYROLL PROVIDER                                 β”‚
β”‚                                                                            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Sync Lifecycle

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                          SYNC LIFECYCLE                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                      β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚   β”‚ STARTED │────▢│ RUNNING │────▢│ COMPLETED  │────▢│  HEALTH   β”‚   β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚  7-DAY %  β”‚   β”‚
β”‚      sync_log       records            β”‚             β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚      created        processed          β”‚                             β”‚
β”‚                     per batch          β”‚                             β”‚
β”‚                                        β”œβ”€β”€β–Ά  FAILED                  β”‚
β”‚                                        β”‚    error_details JSON       β”‚
β”‚                                        β”‚    + connection.status=errorβ”‚
β”‚                                        β”‚                             β”‚
β”‚                                        └──▢  RETRY (up to 3x)        β”‚
β”‚                                             via retry_on in          β”‚
β”‚                                             PayrollConnectSyncJob    β”‚
β”‚                                                                      β”‚
β”‚   Sync types: employees, timesheets, paychecks, compensation,        β”‚
β”‚               full_sync                                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Integration Ecosystem

                            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                            β”‚    PAYROLL      β”‚
                            β”‚    CONNECT      β”‚
                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                     β”‚
       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β”‚            β”‚                β”‚               β”‚            β”‚
       β–Ό            β–Ό                β–Ό               β–Ό            β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚TIMESHEETSβ”‚ β”‚COMP HIST.β”‚    β”‚ BENEFITS β”‚   β”‚ PAYROLL  β”‚  β”‚  ASK AI  β”‚
 β”‚          β”‚ β”‚          β”‚    β”‚  MGMT    β”‚   β”‚ AGENT    β”‚  β”‚ (sidebar)β”‚
 β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜
      β”‚            β”‚               β”‚              β”‚             β”‚
      β–Ό            β–Ό               β–Ό              β–Ό             β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ Approved β”‚ β”‚  Audit   β”‚   β”‚ Per-pay- β”‚   β”‚8 read-   β”‚  β”‚Employees β”‚
 β”‚timesheetsβ”‚ β”‚records   β”‚   β”‚period    β”‚   β”‚only toolsβ”‚  β”‚ask "what β”‚
 β”‚β†’ providerβ”‚ β”‚on each   β”‚   β”‚deductionsβ”‚   β”‚for pay   β”‚  β”‚is my YTD"β”‚
 β”‚          β”‚ β”‚applied   β”‚   β”‚merged    β”‚   β”‚stub view β”‚  β”‚in naturalβ”‚
 β”‚          β”‚ β”‚change    β”‚   β”‚into stub β”‚   β”‚          β”‚  β”‚language  β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key Features

Provider Connections

Seven built-in providers plus a custom API connector, with encrypted credentials and a connection lifecycle.

Feature Description
Built-in Connectors ADP Workforce Now, Workday HCM, Gusto, BambooHR, Paychex, MangoPay, plus a configurable Custom connector
Integration Types builtin (in-house connector) and partner (white-label connector)
Multiple Connections Run several providers simultaneously per business
Encrypted Credentials connection_config JSON is encrypted at the model level (encrypts :connection_config)
Connection Statuses setup β†’ active β†’ inactive / error, tracked with last_error_message
One-Click Test β€œTest Connection” button validates credentials before going live; works for both existing connections and new-connection forms
Preview Data Sample-data preview shows how a provider record will look after field mapping is applied

Use case: An admin opens Payroll Connect, picks β€œADP Workforce Now” from the provider dropdown, pastes the API base URL and OAuth client ID/secret, clicks Test Connection, and β€” once the green check appears β€” activates the connection. The entire setup takes five minutes.


Employee & Field Mapping

Match MangoApps users to provider employee records, field by field.

Feature Description
Auto-Map on Connect Connection’s default sync_settings['auto_map_employees'] is true; first sync attempts to auto-match
Manual Mapping Unmapped employees list (up to 50 at a time) with a β€œMap” action that binds a user to an external employee ID
External Identifiers Both external_employee_id (primary) and external_employee_code (secondary) stored per mapping
Field-Level Mapping employee_mapping_config['field_mappings'] stores per-connection mappings for 9 core fields (email, first_name, last_name, employee_id, department, position, hire_date, hourly_rate, salary)
Per-Mapping Sync Status active, inactive, or error with last_sync_error text stored when things break
Mapping Stats Total employees, mapped employees, unmapped employees shown on the Employee Mappings page

Import Requests (new-hire approval queue):

When the provider reports an employee that doesn’t exist in MangoApps, Payroll Connect creates a PayrollConnectImportRequest in pending_review status. An admin reviews the external employee data, then Approves (creates a new MangoApps user and an employee mapping in one transaction) or Rejects (with a required rejection_reason). Email-domain whitelist, default role, and required fields are all configurable on the Import Settings page per connection.


Timesheet Submission

Route approved timesheets from MangoApps into your payroll provider.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   TIMESHEET SUBMISSION FLOW                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                       β”‚
β”‚  Timesheets app    Payroll Connect      External Provider             β”‚
β”‚  ────────────      ───────────────      ─────────────────             β”‚
β”‚                                                                       β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                        β”‚
β”‚   β”‚ APPROVED β”‚                                                        β”‚
β”‚   β”‚timesheet β”‚                                                        β”‚
β”‚   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜                                                        β”‚
β”‚        β”‚                                                              β”‚
β”‚        β–Ό                                                              β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                    β”‚
β”‚   β”‚  QUEUE   │────▢│  PENDING    β”‚                                    β”‚
β”‚   β”‚  (auto)  β”‚     β”‚ submission  β”‚                                    β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜                                    β”‚
β”‚                           β”‚                                           β”‚
β”‚                           β–Ό                                           β”‚
β”‚                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”‚
β”‚                    β”‚ SUBMITTED   │──────▢│ external   β”‚               β”‚
β”‚                    β”‚ (sent to    β”‚       β”‚ submission β”‚               β”‚
β”‚                    β”‚  provider)  β”‚       β”‚ id logged  β”‚               β”‚
β”‚                    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β”‚
β”‚                           β”‚                                           β”‚
β”‚              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                              β”‚
β”‚              β–Ό            β–Ό            β–Ό                              β”‚
β”‚       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                         β”‚
β”‚       β”‚ PROCESSED β”‚ β”‚  FAILED  β”‚ β”‚CANCELLED β”‚                         β”‚
β”‚       β”‚ (provider β”‚ β”‚ (retry   β”‚ β”‚ (manual) β”‚                         β”‚
β”‚       β”‚confirmed) β”‚ β”‚  up to 3)β”‚ β”‚          β”‚                         β”‚
β”‚       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                         β”‚
β”‚                                                                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Feature Description
Five submission statuses pending, submitted, processed, failed, cancelled
Auto-Submit auto_submit_timesheets config option submits approved timesheets immediately
Submission Schedule Configured in schema: immediate, daily_batch, weekly, or manual
Retry on Failure Sync job wraps StandardError with exponential backoff up to 3 attempts
Manual Retry retry_submission! returns a failed submission to pending for reprocessing
Payload Fields total_hours, regular_hours, overtime_hours, total_pay, plus submission_data JSON with the raw payload
External Reference external_submission_id captured from provider response for round-trip tracking
Overdue Detection Submissions submitted-but-not-processed for > 24 h are flagged as overdue

Use case: Friday 6 PM: Timesheets app auto-approves the week’s attestations. Payroll Connect’s daily_batch job picks up 142 approved timesheets, POSTs each to ADP’s payroll endpoint, and records the ADP submission ID. By Monday, 138 are processed; 4 are failed with a β€œmissing department code” error that the admin fixes and retries in one click.


Paycheck Retrieval & Visibility

Imported paychecks live inside MangoApps with full breakdowns and YTD totals.

Feature Description
Auto-Retrieve auto_retrieve_paychecks schema option pulls paychecks automatically
Retrieval Schedule daily, weekly, biweekly, or monthly (admin-configurable)
Date-Range Retrieval Ad-hoc retrieval with a start/end date window
Bulk Retrieve Across Connections Admin action retrieves paychecks from every active connection in parallel
Pay Period Types weekly, biweekly, semi_monthly, monthly
Gross / Net / Hours gross_pay, net_pay, regular_hours, overtime_hours, total_hours, plus effective hourly rate and overtime premium calculations
Tax Breakdown Federal income, state income, Social Security, Medicare β€” plus raw taxes_detail JSON for provider-specific items
Deduction Breakdown Health insurance, 401(k), plus normalized breakdown from deductions_detail JSON
Earnings Breakdown Line items from earnings_detail JSON
Year-to-Date Totals Per-paycheck YTD gross, net, taxes, and deductions (calculated from current-year paychecks for the same employee)
PDF Pay Stubs pdf_file Active Storage attachment on each paycheck
Status Tracking active, voided, corrected
Benefits Integration When the Benefits Management app is enabled, per-pay-period benefits deductions are merged into the paycheck detail view via BenefitsIntegrationService.payroll_deductions
Admin Paycheck List Filterable by employee, connection, status, and date range; per-business stats (total paychecks, total gross/net, YTD count, last retrieval)
By-Employee Summary Per-employee paycheck count, lifetime gross/net, YTD gross/net, and last paycheck date
Paycheck Details Modal Drill-in view with earnings/deductions/taxes JSON, pay-period metadata, employee profile, and YTD totals
Employee Self-Service Pay Stub Separate employee-facing view at /employee/paychecks so staff see their own pay stubs without needing admin access
Mobile API GET /api/v1/paychecks (scoped to the current user) with recent and show endpoints β€” powers the mobile app

Use case: An employee opens MangoApps on their phone Thursday evening, taps β€œPay Stubs,” and sees last Friday’s paycheck: $3,842 gross, $2,971 net, 40 regular + 4.5 overtime hours, and a full breakdown β€” without ever logging into ADP’s separate portal.


Compensation Change Management

Track, approve, and apply salary changes β€” with a full audit trail.

Feature Description
Six Change Types salary_increase, salary_decrease, bonus, promotion, demotion, adjustment
Approval Workflow pending β†’ approved / rejected; approver must be different from the creator
Dual Approval Threshold Configurable dollar amount (default $5,000) for changes that require two approvals
Change Amount & Percentage Calculated automatically from current + new salary; stored as change_amount and change_percentage
Future-Dated Changes Changes with effective_date > today stay in pending_schedule; ApplyScheduledCompensationChangesJob applies them on the effective date
Auto-Apply to UserBusiness When applied, updates annual_salary and recalculates hourly_rate (annual / 2080) for hourly employees
CompensationHistory Audit Record Every applied change creates a CompensationHistory row with previous/new salary, previous/new hourly rate, change reason, and a reference to the originating change
Link to Performance Review Optional performance_review association so merit-based changes trace back to the review cycle
Scheduled Application Status pending_schedule, applied, failed, skipped β€” with application_error text on failure
Rejection with Reason Rejected changes require a reason, stored in notes with the rejection prefix

Salary Management tools (admin):

  • Index β€” single-pass overview with totals for validated salaries, discrepancies, and employees with no payroll data
  • Bulk Salary Review β€” paginated validation across the full active headcount, with BulkSalaryValidationService flagging mismatches between stored salary and payroll-derived salary
  • Employee Salary Detail β€” deep dive per employee: SalaryAnalysisService analysis, last 12 paychecks, last 10 compensation history records, and a suggested salary from payroll data
  • Update Salary β€” SalaryUpdateService applies changes with manual_admin_update as the data source
  • Export Salary Report β€” CSV export (filtered or full) via SalaryReportExportService

Sync Health & Monitoring

Feature Description
Health Percentage Per connection: successful syncs / total syncs over the last 7 days
Health Status Bucketing excellent (90–100), good (75–89), fair (50–74), poor (< 50)
Overdue Sync Detection Hourly > 2 h, daily > 26 h, weekly > 8 d
Sync Log per Operation sync_type (employees / timesheets / paychecks / compensation / full_sync), status (started / completed / failed), started_at, completed_at, records_processed, records_successful, records_failed, summary, and error_details JSON
Dashboard Health Metrics Overall health %, connections count, healthy connections, overdue syncs, error connections
Recent Activity Last 10 sync logs with connection, type, status, and timing
Pending Queues Pending timesheet submissions (5) and pending compensation changes (5) surfaced on the dashboard
Quick Actions Test connection, sync employees, retrieve paychecks β€” one click, per connection
Background Sync Job PayrollConnectSyncJob runs on the payroll_sync queue with retry_on StandardError (quadratic backoff, 3 attempts)
JSON Health API GET /apps/payroll_connect/health_check and /sync_status return dashboard-ready JSON for status pages and monitors

Admin Configuration

Settings are grouped by category on the admin UI (driven by configuration_schema in the marketplace app migration).

Category Keys
Connection payroll_provider, api_base_url, api_key, client_id, client_secret
Mapping employee_identifier (email / employee_id / custom_field)
Timesheets auto_submit_timesheets, timesheet_submission_schedule
Paychecks auto_retrieve_paychecks, paycheck_retrieval_schedule
Merit enable_merit_processing, merit_approval_required, merit_budget_enforcement
Security enable_audit_logging, require_dual_approval, dual_approval_threshold
Notifications notify_on_sync_errors, notify_on_merit_processing, notification_email
Retention paycheck_retention_months (12–84), sync_log_retention_days (30–365)

Per-connection settings additionally live in the PayrollConnectSetting table (auto-seeded on connection create with sync_frequency, timeout_seconds, enable_notifications, batch_size). Settings are PaperTrail-audited on update and destroy.

Module-level toggles (stored on the BusinessMarketplaceApp.configuration): core modules (payroll_platform_management, timesheet_data_processing, paycheck_data_retrieval, security_compliance, admin_interface) plus per-provider toggles (adp_integration, workday_integration, gusto_integration, …). Disabling a provider module hides it from the β€œAdd Connection” dropdown.


Approval Workflows

Configurable rules per workflow type: compensation_change, timesheet_approval, paycheck_review, employee_onboarding, custom. Each workflow has an approval_rules JSON payload, optional notification channels, and an enabled toggle with sort order. Workflows are matched to a context type at runtime via applies_to?.


Payroll AI Agent

Eight read-only tools exposed in the Ask AI sidebar via Agents::PayrollAgent. The agent only returns the current user’s own payroll data β€” never other employees’.

Tool Purpose
get_my_pay_stubs List recent pay stubs (default limit 10)
get_pay_stub_details Full breakdown β€” gross, net, federal, state, SS, Medicare, deductions, hours, overtime
get_my_deductions Current deductions merged from latest paycheck + Benefits Management
get_tax_documents W-2, 1099, etc. for a tax year
get_payment_history Payment list (limit 26) with totals for a year
get_pay_schedule Frequency and next 5 upcoming pay dates
get_ytd_pay_summary YTD gross, net, taxes, deductions, and stub count
compare_pay_stubs Compare two pay stubs (by ID or the latest two) with a delta summary

The agent is enabled when Timesheets is enabled and the business has not set hide_pay_amounts on its pay-period settings. β€œCompare my last two pay stubs” has a fast-path response that skips the LLM round-trip.


Security & Multi-Tenancy

Safeguard Implementation
Business tenant scoping Every model includes BusinessTenantScoped; payroll_connect_connections, paychecks, timesheet submissions, and compensation changes all scope through current_business
Cross-tenant protection on AJAX Dashboard quick_actions resolves the connection ID through current_business.payroll_connect_connections.find_by(...) β€” a tenant-scoped lookup
Admin gating PayrollConnectFeatureAccess concern checks current_user.admin_or_above? or the app-specific payroll_app_admin? role for every admin controller
Encrypted credentials PayrollConnectConnection.connection_config is encrypted via Rails’ encrypts
Audit trail PaperTrail on PayrollConnectSetting; CompensationHistory rows on every applied compensation change
Attachment purge on connection delete before_destroy :purge_paycheck_attachments removes PDF pay stub blobs so no orphaned sensitive files remain
Scoped API access Mobile paycheck API uses require_scope('read:payroll')

How Payroll Connect compares

Payroll Connect sits in the embedded integration category β€” it ships as part of the MangoApps platform, pre-wired to seven providers, not as a third-party unified API you pay per-employee for. The closest analogues are middleware vendors like Finch and Merge, plus the native integrations built into all-in-one HR/payroll suites.

Capability Payroll Connect Finch (unified API) Merge (unified API) Native HR/payroll suite
Purpose Embedded integration inside a workforce platform Developer middleware to build provider-agnostic apps Developer middleware across 8 categories (HR is one) Run payroll and HR in a single product
Provider breadth 6 built-in + custom + partner connector 250+ integrations across HRIS + payroll 250+ integrations in HRIS + payroll 1 (their own)
Deployment Ship as part of MangoApps, no extra vendor contract Separate SaaS contract, per-connection pricing Separate SaaS contract, per-connection pricing Bundled with the suite
Timesheet β†’ payroll direction Built-in submission queue with statuses and retries API primitives; you build the queue API primitives; you build the queue Native, same system
Employee pay stub UI Built-in admin + employee views Data only β€” you build the UI Data only β€” you build the UI Native
Compensation change workflow Approval workflow + scheduled application + audit trail Data only Data only Native
Who it’s for MangoApps customers who already picked a payroll system SaaS builders shipping a payroll feature SaaS builders shipping HR/payroll/etc. Companies restarting their HR stack

When Payroll Connect wins: You already run ADP, Gusto, Workday, or Paychex and you want your workforce platform to talk to it without re-keying data or buying a second middleware subscription. The app is part of your MangoApps license.

When a unified API wins instead: You are building a product that needs to talk to 100+ payroll systems across many customers. In that case, Finch or Merge is the right abstraction β€” and Payroll Connect’s custom/partner connector can itself be pointed at one of those APIs.

Sources:


Limits & Specifications

Item Value
Built-in providers ADP Workforce Now, Workday HCM, Gusto, BambooHR, Paychex, MangoPay, plus Custom
Sync frequencies Hourly, daily, weekly (admin-configurable)
API timeout default 300 seconds (configurable per connection)
Sync batch size 50 records (configurable per connection)
Retry attempts on failure 3 (exponential backoff in PayrollConnectSyncJob)
Paycheck retention 12–84 months (default 24)
Sync log retention 30–365 days (default 90)
Dual-approval threshold Default $5,000 (configurable)
License tier Premium (must be granted per business)
Pricing Included with MangoApps Workforce premium

User Roles & Permissions

Role Capabilities
Employee View own pay stubs (web + mobile + Ask AI), download PDF
Manager Same as Employee (no admin surface in Payroll Connect today)
Payroll App Admin Full Payroll Connect admin surface β€” connections, mappings, submissions, paychecks, salary management, sync logs
Business Admin+ All Payroll App Admin capabilities plus app enablement and license granting

Getting Started

For Administrators

  1. Navigate to Apps β†’ Payroll Connect (app must be license-granted and enabled)
  2. Add Connection β†’ choose your provider (ADP / Workday / Gusto / BambooHR / Paychex / MangoPay / Custom)
  3. Enter API credentials (stored encrypted) and click Test Connection
  4. Activate the connection
  5. Sync Employees β€” auto-mapping matches existing MangoApps users; review Import Requests for provider-originated new hires
  6. Open Field Mappings and customize per-field mapping for the 9 core fields
  7. Toggle Auto-Submit Timesheets and pick a submission schedule
  8. Toggle Auto-Retrieve Paychecks and pick a retrieval cadence
  9. Monitor the Dashboard for health, sync logs, and pending queues

For Employees

  1. Open Pay Stubs from the employee navigation (or ask the Payroll AI Agent: β€œShow me my latest pay stub”)
  2. Drill into any pay stub to see gross, net, taxes, deductions, YTD totals, and download the PDF
  3. Use Ask AI for quick questions: β€œWhat’s my YTD gross?”, β€œCompare my last two pay stubs”, β€œWhat are my current deductions?”

Best Practices

For Administrators

  • Run a Test Connection after every credential rotation
  • Review the Import Requests queue weekly β€” provider-originated new hires require manual approval before they become MangoApps users
  • Configure email-domain whitelist in Import Settings to prevent accidental user creation for contractors
  • Enable dual approval for compensation changes above a meaningful threshold (e.g., $5,000)
  • Set paycheck retention to match your regulatory obligation β€” don’t keep pay data longer than required
  • Watch the 7-day health percentage β€” anything below 75% warrants a look at the sync logs
  • For compensation changes tied to performance cycles, link the performance review so the audit trail is complete

For Deploying Alongside Payroll Processing

  • Pick one for any given employee population β€” Payroll Connect sends timesheets out to an external provider, Payroll Processing calculates payroll in-house. Running both against the same timesheets will double-process.
  • Use Payroll Connect for business units that already run ADP/Workday/etc. Use Payroll Processing for net-new populations where MangoApps is the system of record.


Payroll Connect is the bridge between MangoApps and your existing payroll system. If you already picked a provider, Payroll Connect is how you stop re-keying data and start giving employees real pay transparency.

Ask AI Product Advisor

Hi! I'm the MangoApps Product Advisor. I can help you with:

  • Understanding our 40+ workplace apps
  • Finding the right solution for your needs
  • Answering questions about pricing and features
  • Pointing you to free tools you can try right now

What would you like to know?