Agent skill

Payroll Gl Reconciliation

by LeoYeAI in LeoYeAI/openclaw-master-skills

Reconcile payroll processor reports (Gusto, ADP, Paychex, Rippling) to general ledger journal entries in QuickBooks Online, Xero, or other accounting software.

MITAuto-check passedBusiness, Finance & HR

Install Payroll Gl Reconciliation

skills CLI
$ npx skills add LeoYeAI/openclaw-master-skills --skill payroll-gl-reconciliation -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install LeoYeAI/openclaw-master-skills payroll-gl-reconciliation --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/payroll-gl-reconciliation .claude/skills/payroll-gl-reconciliation && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
payroll-gl-reconciliation
GitHub stars
2.2k
Token cost
~6.2k tokens
SKILL.md length
663 words
Files
2
Skills in repo
1,235
Repo updated
First seen
Licence
MIT

At a glance

Reconcile payroll processor reports (Gusto, ADP, Paychex, Rippling) to general ledger journal entries in QuickBooks Online, Xero, or other accounting software.

  • Works in 4 steps: Direct mapping — each employee assigned… → Headcount ratio — allocate shared costs… → Time tracking — allocate based on logged… → …
  • : reconciling payroll registers to GL
  • SKILL.md covers When to Use This Skill, Payroll GL Reconciliation…, Standard Chart of Accounts… and Department / Cost Center…, plus 9 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Payroll Gl Reconciliation is an agent skill from LeoYeAI/openclaw-master-skills. Reconcile payroll processor reports (Gusto, ADP, Paychex, Rippling) to general ledger journal entries in QuickBooks Online, Xero, or other accounting software. Automates journal entry creation from payroll summaries, validates wage/tax/benefit allocations to correct GL accounts, detects variances, and flags discrepancies before month-end close. Produces audit-ready reconciliation workpapers. Use when: reconciling payroll registers to GL, mapping payroll processor exports to chart of accounts, creating payroll…

Its SKILL.md is about 6.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `_meta.json`).

It sits in Business, Finance & HR, covering Accounting and bookkeeping. It works with QuickBooks. The repository describes itself as: 🧠 Curated collection of 1209+ best OpenClaw skills — weekly updated by MyClaw.ai. The licence is MIT.

When your agent uses it

  • : reconciling payroll registers to GL
  • Mapping payroll processor exports to chart of accounts
  • Creating payroll journal entries
  • Validating employee benefit deductions

Example prompts

  • “/payroll-gl-reconciliation”

Requirements

  • Python 3

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Direct mapping — each employee assigned a department in payroll system
  2. Headcount ratio — allocate shared costs proportionally
  3. Time tracking — allocate based on logged hours per project/department
  4. Revenue ratio — allocate shared overhead by revenue contribution

What it can do on your machine

Read from SKILL.md and the folder at commit e5199b5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are python).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Payroll Gl Reconciliation loads about 6.2k tokens when it runs. Until then it costs about 202 tokens; SKILL.md has 663 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~202
When it runs · the whole SKILL.md, loaded when a task matches
~6.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from LeoYeAI/openclaw-master-skills at commit e5199b5, republished under its MIT licence (© LeoYeAI). 663 words, ~6,155 tokens.

Download SKILL.mdSave it as .claude/skills/payroll-gl-reconciliation/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
payroll-gl-reconciliation
description
Reconcile payroll processor reports (Gusto, ADP, Paychex, Rippling) to general ledger journal entries in QuickBooks Online, Xero, or other accounting software. Automates journal entry creation from payroll summaries, validates wage/tax/benefit allocations to correct GL accounts, detects variances, and flags discrepancies before month-end close. Produces audit-ready reconciliation workpapers. Use when: reconciling payroll registers to GL, mapping payroll processor exports to chart of accounts, creating payroll journal entries, validating employee benefit deductions, or preparing payroll workpapers. NOT for: payroll processing or running payroll (use your payroll platform), tax filing (W-2, 941), on-chain payroll (use on-chain-payroll), HR onboarding, or benefits enrollment.
version
1.0.0
author
PrecisionLedger
tags
payroll, reconciliation, accounting, journal-entries, gl, quickbooks, month-end, compliance

Payroll GL Reconciliation Skill

Reconcile payroll processor reports to general ledger journal entries. Automate journal entry creation, validate account mappings, detect variances, and produce audit-ready workpapers — all from raw payroll exports.


When to Use This Skill

Trigger phrases:

  • "Reconcile payroll to the GL"
  • "Create journal entries for payroll"
  • "Payroll didn't hit the right accounts"
  • "Map Gusto export to QuickBooks"
  • "Check payroll entries for month-end close"
  • "Payroll reconciliation workpaper"
  • "Validate payroll tax liabilities"

NOT for:

  • Running or processing payroll — use Gusto, ADP, or Paychex directly
  • Filing 941/940/W-2 — use a tax compliance workflow
  • On-chain payroll disbursement — use on-chain-payroll skill (PTIN-backed, not here)
  • Benefits enrollment or HR workflows — out of scope
  • Actual QuickBooks data entry — use qbo-automation for live API writes

Payroll GL Reconciliation Overview

Every payroll run produces three categories of GL impact:

1. GROSS WAGES EXPENSE (Debit)
   ├── Regular wages
   ├── Overtime wages
   ├── Bonus / commissions
   └── PTO / sick pay

2. EMPLOYER PAYROLL TAXES EXPENSE (Debit)
   ├── Employer FICA (Social Security 6.2%)
   ├── Employer Medicare (1.45%)
   ├── Federal Unemployment (FUTA 0.6%)
   └── State Unemployment (SUTA — rate varies by state)

3. LIABILITY ACCOUNTS (Credit)
   ├── Net pay payable (cash out → employee bank accounts)
   ├── Employee FICA withheld
   ├── Employee Medicare withheld
   ├── Federal income tax withheld
   ├── State income tax withheld
   ├── Employee benefits deductions (health, dental, 401k)
   └── Employer benefits contributions (401k match, HSA)

The fundamental check:

Total Debits = Gross Wages + Employer Taxes + Employer Benefits
Total Credits = Net Pay + All Withholdings + All Liabilities

Debits must equal Credits. If not, there's an error.

Standard Chart of Accounts Mapping

Expense Accounts (Debits)
Payroll Line ItemGL AccountAccount Type
Regular wages6100 – Salaries & Wages ExpenseExpense
Overtime pay6100 – Salaries & Wages ExpenseExpense
Bonus / commissions6110 – Bonus ExpenseExpense
Employer FICA6200 – Payroll Tax ExpenseExpense
Employer Medicare6200 – Payroll Tax ExpenseExpense
FUTA6210 – Federal Unemployment Tax ExpenseExpense
SUTA6220 – State Unemployment Tax ExpenseExpense
Employer 401(k) match6300 – Employee Benefits ExpenseExpense
Employer health premium6310 – Health Insurance ExpenseExpense
Employer HSA contribution6320 – HSA Contribution ExpenseExpense
Liability Accounts (Credits)
Payroll Line ItemGL AccountAccount Type
Net pay to employees2000 – Net Payroll PayableCurrent Liability
Employee FICA withheld2100 – FICA PayableCurrent Liability
Employee Medicare withheld2110 – Medicare PayableCurrent Liability
Federal income tax withheld2120 – Federal Withholding PayableCurrent Liability
State income tax withheld2130 – State Withholding PayableCurrent Liability
Employee 401(k) deduction2200 – 401(k) PayableCurrent Liability
Employee health deduction2210 – Health Insurance PayableCurrent Liability
Employer FICA (matching)2100 – FICA PayableCurrent Liability
Employer Medicare (matching)2110 – Medicare PayableCurrent Liability

Note: When taxes are remitted to the IRS/state, debit the liability account and credit cash.


Department / Cost Center Allocation

For multi-department businesses, allocate wages by department:

6100 – Wages Expense (Engineering)    [Debit]    $45,000
6100 – Wages Expense (Sales)          [Debit]    $30,000
6100 – Wages Expense (G&A)            [Debit]    $25,000

Allocation methods:

  1. Direct mapping — each employee assigned a department in payroll system
  2. Headcount ratio — allocate shared costs proportionally
  3. Time tracking — allocate based on logged hours per project/department
  4. Revenue ratio — allocate shared overhead by revenue contribution

Processor-Specific Export Formats

Gusto

Gusto provides a "Payroll Journal" CSV export under Reports → Journal Entries.

python
import csv
from dataclasses import dataclass
from typing import List

@dataclass
class GustoPayrollLine:
    pay_date: str
    employee_name: str
    department: str
    gross_wages: float
    employee_fica: float
    employee_medicare: float
    federal_withholding: float
    state_withholding: float
    employee_401k: float
    employee_health: float
    net_pay: float
    employer_fica: float
    employer_medicare: float
    futa: float
    suta: float
    employer_401k: float
    employer_health: float

def parse_gusto_export(filepath: str) -> List[GustoPayrollLine]:
    """
    Parse Gusto payroll journal CSV into structured records.
    
    Gusto columns (may vary by plan):
    'Check Date', 'Employee Name', 'Department', 'Gross Pay',
    'Employee OASDI', 'Employee Medicare', 'Federal WH', 'State WH',
    '401k Employee', 'Medical Employee', 'Net Pay',
    'Employer OASDI', 'Employer Medicare', 'FUTA', 'SUTA',
    '401k Employer', 'Medical Employer'
    """
    lines = []
    with open(filepath, 'r') as f:
        reader = csv.DictReader(f)
        for row in reader:
            lines.append(GustoPayrollLine(
                pay_date=row.get('Check Date', ''),
                employee_name=row.get('Employee Name', ''),
                department=row.get('Department', 'General'),
                gross_wages=float(row.get('Gross Pay', 0) or 0),
                employee_fica=float(row.get('Employee OASDI', 0) or 0),
                employee_medicare=float(row.get('Employee Medicare', 0) or 0),
                federal_withholding=float(row.get('Federal WH', 0) or 0),
                state_withholding=float(row.get('State WH', 0) or 0),
                employee_401k=float(row.get('401k Employee', 0) or 0),
                employee_health=float(row.get('Medical Employee', 0) or 0),
                net_pay=float(row.get('Net Pay', 0) or 0),
                employer_fica=float(row.get('Employer OASDI', 0) or 0),
                employer_medicare=float(row.get('Employer Medicare', 0) or 0),
                futa=float(row.get('FUTA', 0) or 0),
                suta=float(row.get('SUTA', 0) or 0),
                employer_401k=float(row.get('401k Employer', 0) or 0),
                employer_health=float(row.get('Medical Employer', 0) or 0),
            ))
    return lines
Show full SKILL.md (273 more words)Show less
ADP

ADP exports vary by product (RUN, Workforce Now, TotalSource). Request the "Payroll Register" + "Tax Summary" reports.

python
def parse_adp_register(filepath: str) -> dict:
    """
    Parse ADP payroll register. ADP uses fixed-width or pipe-delimited format.
    
    Key ADP column names:
    'Employee Name', 'Reg Hours', 'Reg Earn', 'OT Earn', 'Gross',
    'FIT', 'SIT', 'SS EE', 'MED EE', 'SS ER', 'MED ER',
    '401K EE', '401K ER', 'Medical EE', 'Medical ER',
    'Net Pay', 'FUTA', 'SUI'
    """
    # ADP format detection
    with open(filepath, 'r') as f:
        header = f.readline()
    
    delimiter = '|' if '|' in header else ','
    # ... parse with detected delimiter
    pass
Paychex
python
def parse_paychex_summary(filepath: str) -> dict:
    """
    Paychex Payroll Summary Report.
    Download from: My Paychex → Reports → Payroll Summary
    
    Key sections in Paychex report:
    - 'Earnings' block: Regular, Overtime, Bonus
    - 'Employee Deductions' block: FIT, SIT, FICA, Medicare, Benefits
    - 'Employer Taxes' block: FUTA, SUTA, FICA ER, Medicare ER
    - 'Employer Benefits': 401k Match, Health ER
    - 'Check Summary': Net Pay total
    """
    pass

Journal Entry Builder

python
from dataclasses import dataclass, field
from typing import List
from decimal import Decimal, ROUND_HALF_UP

@dataclass
class JournalLine:
    account_number: str
    account_name: str
    debit: Decimal = Decimal('0')
    credit: Decimal = Decimal('0')
    memo: str = ''
    department: str = ''

@dataclass
class JournalEntry:
    date: str
    reference: str
    description: str
    lines: List[JournalLine] = field(default_factory=list)
    
    @property
    def total_debits(self) -> Decimal:
        return sum(line.debit for line in self.lines)
    
    @property
    def total_credits(self) -> Decimal:
        return sum(line.credit for line in self.lines)
    
    @property
    def is_balanced(self) -> bool:
        return abs(self.total_debits - self.total_credits) < Decimal('0.01')
    
    def validate(self) -> list:
        """Return list of validation errors."""
        errors = []
        if not self.is_balanced:
            errors.append(
                f"UNBALANCED: Debits ${self.total_debits} ≠ Credits ${self.total_credits} "
                f"(difference: ${abs(self.total_debits - self.total_credits)})"
            )
        if not self.lines:
            errors.append("Journal entry has no lines")
        for i, line in enumerate(self.lines):
            if line.debit > 0 and line.credit > 0:
                errors.append(f"Line {i+1} has both debit and credit — split into two lines")
        return errors


def build_payroll_journal_entry(
    lines: List[GustoPayrollLine],
    pay_date: str,
    pay_period: str,
    account_map: dict = None,
) -> JournalEntry:
    """
    Build a complete payroll journal entry from payroll data.
    
    Args:
        lines: Parsed payroll lines (one per employee or department total)
        pay_date: Date of journal entry (e.g., "2026-03-15")
        pay_period: Human-readable period (e.g., "March 1-15, 2026")
        account_map: Optional override for default GL account numbers
    
    Returns:
        JournalEntry with all debits and credits, ready for posting
    """
    
    # Default account map (customize to client's COA)
    accounts = {
        'wages_expense': ('6100', 'Salaries & Wages Expense'),
        'bonus_expense': ('6110', 'Bonus Expense'),
        'payroll_tax_expense': ('6200', 'Payroll Tax Expense'),
        'futa_expense': ('6210', 'Federal Unemployment Tax Expense'),
        'suta_expense': ('6220', 'State Unemployment Tax Expense'),
        'benefits_expense': ('6300', 'Employee Benefits Expense'),
        'health_expense': ('6310', 'Health Insurance Expense'),
        'net_pay_payable': ('2000', 'Net Payroll Payable'),
        'fica_payable': ('2100', 'FICA / SS Payable'),
        'medicare_payable': ('2110', 'Medicare Payable'),
        'federal_wh_payable': ('2120', 'Federal Withholding Payable'),
        'state_wh_payable': ('2130', 'State Withholding Payable'),
        'retirement_payable': ('2200', '401(k) Payable'),
        'health_payable': ('2210', 'Health Insurance Payable'),
    }
    if account_map:
        accounts.update(account_map)
    
    # Aggregate totals
    totals = {
        'gross_wages': Decimal('0'),
        'employer_fica': Decimal('0'),
        'employer_medicare': Decimal('0'),
        'futa': Decimal('0'),
        'suta': Decimal('0'),
        'employer_401k': Decimal('0'),
        'employer_health': Decimal('0'),
        'net_pay': Decimal('0'),
        'employee_fica': Decimal('0'),
        'employee_medicare': Decimal('0'),
        'federal_wh': Decimal('0'),
        'state_wh': Decimal('0'),
        'employee_401k': Decimal('0'),
        'employee_health': Decimal('0'),
    }
    
    for line in lines:
        totals['gross_wages'] += Decimal(str(line.gross_wages))
        totals['employer_fica'] += Decimal(str(line.employer_fica))
        totals['employer_medicare'] += Decimal(str(line.employer_medicare))
        totals['futa'] += Decimal(str(line.futa))
        totals['suta'] += Decimal(str(line.suta))
        totals['employer_401k'] += Decimal(str(line.employer_401k))
        totals['employer_health'] += Decimal(str(line.employer_health))
        totals['net_pay'] += Decimal(str(line.net_pay))
        totals['employee_fica'] += Decimal(str(line.employee_fica))
        totals['employee_medicare'] += Decimal(str(line.employee_medicare))
        totals['federal_wh'] += Decimal(str(line.federal_withholding))
        totals['state_wh'] += Decimal(str(line.state_withholding))
        totals['employee_401k'] += Decimal(str(line.employee_401k))
        totals['employee_health'] += Decimal(str(line.employee_health))
    
    je = JournalEntry(
        date=pay_date,
        reference=f"PR-{pay_date.replace('-', '')}",
        description=f"Payroll — {pay_period}",
        lines=[]
    )
    
    def add_debit(key: str, amount: Decimal, memo: str = ''):
        if amount > 0:
            num, name = accounts[key]
            je.lines.append(JournalLine(
                account_number=num, account_name=name,
                debit=amount.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP),
                memo=memo or je.description
            ))
    
    def add_credit(key: str, amount: Decimal, memo: str = ''):
        if amount > 0:
            num, name = accounts[key]
            je.lines.append(JournalLine(
                account_number=num, account_name=name,
                credit=amount.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP),
                memo=memo or je.description
            ))
    
    # DEBITS (expenses)
    add_debit('wages_expense', totals['gross_wages'], 'Gross wages')
    add_debit('payroll_tax_expense', totals['employer_fica'] + totals['employer_medicare'], 'Employer FICA + Medicare')
    add_debit('futa_expense', totals['futa'], 'Federal unemployment tax')
    add_debit('suta_expense', totals['suta'], 'State unemployment tax')
    add_debit('benefits_expense', totals['employer_401k'], 'Employer 401(k) match')
    add_debit('health_expense', totals['employer_health'], 'Employer health premium')
    
    # CREDITS (liabilities)
    add_credit('net_pay_payable', totals['net_pay'], 'Net pay to employees')
    add_credit('fica_payable', totals['employee_fica'] + totals['employer_fica'], 'FICA SS payable (EE + ER)')
    add_credit('medicare_payable', totals['employee_medicare'] + totals['employer_medicare'], 'Medicare payable (EE + ER)')
    add_credit('federal_wh_payable', totals['federal_wh'], 'Federal income tax withheld')
    add_credit('state_wh_payable', totals['state_wh'], 'State income tax withheld')
    add_credit('retirement_payable', totals['employee_401k'] + totals['employer_401k'], '401(k) payable (EE + ER)')
    add_credit('health_payable', totals['employee_health'] + totals['employer_health'], 'Health ins payable (EE + ER)')
    
    return je

Variance Detection & Reconciliation Checks

python
def reconcile_payroll_to_gl(
    payroll_je: JournalEntry,
    gl_actual: dict,
    tolerance_usd: float = 0.10
) -> dict:
    """
    Compare expected journal entry (from payroll export) vs actual GL entries.
    
    Args:
        payroll_je: Journal entry built from payroll processor data
        gl_actual: Dict of {account_number: actual_amount} from GL export
        tolerance_usd: Acceptable rounding variance (default $0.10)
    
    Returns:
        Reconciliation result with variances and pass/fail flags
    """
    variances = []
    
    for line in payroll_je.lines:
        expected = float(line.debit or line.credit)
        actual = gl_actual.get(line.account_number, 0)
        diff = abs(expected - actual)
        
        if diff > tolerance_usd:
            variances.append({
                'account': f"{line.account_number} – {line.account_name}",
                'expected': expected,
                'actual': actual,
                'variance': actual - expected,
                'variance_pct': (actual - expected) / expected * 100 if expected else None,
                'flag': 'MATERIAL' if diff > 100 else 'MINOR'
            })
    
    return {
        'reconciled': len(variances) == 0,
        'material_variances': [v for v in variances if v['flag'] == 'MATERIAL'],
        'minor_variances': [v for v in variances if v['flag'] == 'MINOR'],
        'total_variance_usd': sum(v['variance'] for v in variances),
        'action_required': len([v for v in variances if v['flag'] == 'MATERIAL']) > 0
    }


def common_variance_causes(account: str, variance: float) -> str:
    """Suggest likely cause for common payroll variances."""
    causes = {
        'net_pay': [
            "Mid-period employee start/termination not reflected",
            "Manual check or off-cycle payment missing from register",
            "Direct deposit reversal or reissue",
        ],
        'fica': [
            "SS wage base hit ($168,600 for 2024) — employee no longer subject",
            "New hire mid-period: partial period calculation",
            "Prior-period correction posted in current period",
        ],
        'futa': [
            "FUTA wage base hit ($7,000) for one or more employees",
            "FUTA credit reduction for states with outstanding loans",
        ],
        'suta': [
            "State-specific taxable wage base reached",
            "Rate change effective mid-year",
        ],
        '401k': [
            "Employee changed contribution % mid-period",
            "Annual contribution limit reached ($23,000 for 2024)",
            "Employer match formula mismatch",
        ],
    }
    return causes.get(account, ["Review payroll register vs GL detail for this account"])

Workpaper Output Format

Reconciliation Workpaper (Markdown)
python
def generate_workpaper(
    je: JournalEntry,
    recon_result: dict,
    processor: str,
    client_name: str
) -> str:
    """Generate audit-ready reconciliation workpaper in markdown."""
    
    balanced_status = "✅ BALANCED" if je.is_balanced else "❌ UNBALANCED"
    recon_status = "✅ RECONCILED" if recon_result['reconciled'] else "⚠️ VARIANCES FOUND"
    
    lines_table = "\n".join([
        f"| {l.account_number} | {l.account_name} | "
        f"${l.debit:,.2f} | ${l.credit:,.2f} | {l.memo} |"
        for l in je.lines
    ])
    
    return f"""
# Payroll GL Reconciliation Workpaper
**Client:** {client_name}
**Pay Date:** {je.date}
**Period:** {je.description}
**Payroll Processor:** {processor}
**Prepared by:** Sam Ledger / PrecisionLedger
**Date Prepared:** {datetime.today().strftime('%Y-%m-%d')}

---

## Journal Entry — {balanced_status}

| Account # | Account Name | Debit | Credit | Memo |
|-----------|-------------|-------|--------|------|
{lines_table}
| | **TOTALS** | **${je.total_debits:,.2f}** | **${je.total_credits:,.2f}** | |

---

## GL Reconciliation — {recon_status}

{'**No material variances found. All accounts reconcile within tolerance.**' 
 if recon_result['reconciled'] 
 else f"**Material Variances: {len(recon_result['material_variances'])} accounts require investigation.**"}

{_format_variances(recon_result['material_variances'], 'MATERIAL VARIANCES')}
{_format_variances(recon_result['minor_variances'], 'MINOR VARIANCES (within $100)')}

---

## Sign-Off

- [ ] Journal entry reviewed for accuracy
- [ ] GL accounts agree to payroll register totals
- [ ] All variances investigated and resolved
- [ ] Journal entry posted in accounting system
- [ ] Payroll register filed in client workpaper folder

**Reviewer:** _________________ **Date:** _________________
"""

Step-by-Step Workflow

Monthly Payroll Close Checklist
For each payroll run in the period:

□ 1. EXPORT from payroll processor
     - Gusto: Reports → Journal Entries → CSV
     - ADP: Reports → Payroll Register + Tax Summary
     - Paychex: My Paychex → Reports → Payroll Summary

□ 2. PARSE the export
     - Run through appropriate parser function above
     - Verify employee count and period match expectations

□ 3. BUILD journal entry
     - Use build_payroll_journal_entry()
     - Confirm balanced (debits = credits)
     - Map to client's specific chart of accounts

□ 4. COMPARE to GL
     - Export actual GL entries for payroll accounts
     - Run reconcile_payroll_to_gl()
     - Investigate any variance > $100

□ 5. DOCUMENT variances
     - Root-cause each material variance
     - Prepare adjusting entries if needed
     - Note minor variances with explanation

□ 6. GENERATE workpaper
     - Run generate_workpaper()
     - Save as PDF in client workpaper folder
     - Include original payroll register as support

□ 7. POST to accounting system
     - Via QBO API (use qbo-automation skill) or manual entry
     - Confirm posting with journal entry reference number

□ 8. VERIFY tax liability balances
     - FICA Payable balance = this period + any prior unpaid
     - 941 semi-weekly vs monthly deposit schedule
     - State withholding deposit due dates by state

Tax Deposit Schedule Reference

Tax TypeFederal Deposit Schedule2026 Rates
Federal income tax withheldSemi-weekly or monthly*Varies per W-4
Employee FICA (SS)Same as FIT6.2% (up to $176,100 wage base)
Employer FICASame as FIT6.2%
Employee MedicareSame as FIT1.45% (+ 0.9% over $200k)
Employer MedicareSame as FIT1.45%
FUTAQuarterly if liability > $5000.6% (up to $7,000 wage base)
SUTAVaries by stateVaries (avg ~2.7%)

*Semi-weekly: payroll Wednesday/Thursday → deposit by following Wednesday; payroll Fri/Sat/Sun/Mon/Tue → deposit by following Friday *Monthly: deposit by 15th of following month (if prior year tax liability < $50,000)


Integration Points

  • qbo-automation — post journal entries via QBO API after reconciliation
  • financial-close-checklist — payroll recon is a required step in monthly close
  • compliance-monitor — track 941 and state tax deposit deadlines
  • crypto-tax-agent — if employee equity/token compensation involved
  • bank-reconciliation-agent — confirm net payroll matches bank ACH outflow

Example: End-to-End Reconciliation

Input: Gusto export, 15 employees, pay period March 1-15, 2026

Sam receives: gusto_payroll_2026-03-15.csv

Step 1: parse_gusto_export('gusto_payroll_2026-03-15.csv')
  → 15 employee records parsed
  → Total gross wages: $87,450.00

Step 2: build_payroll_journal_entry(lines, '2026-03-15', 'March 1-15, 2026')
  → Journal Entry PR-20260315
  → Total debits: $101,247.83
  → Total credits: $101,247.83
  → Status: BALANCED ✅

Step 3: reconcile_payroll_to_gl(je, qbo_gl_extract)
  → Account 6100 Wages: Expected $87,450 | Actual $87,450 ✅
  → Account 2100 FICA: Expected $10,842.90 | Actual $10,842.90 ✅
  → Account 2000 Net Pay: Expected $62,114.50 | Actual $62,190.00 ⚠️
    Variance: +$75.50 → Investigate (likely off-cycle check not in register)

Step 4: generate_workpaper(...)
  → Saved: workpapers/PR-20260315-recon.md
  → 1 minor variance flagged for review
  → All major accounts reconcile within tolerance

Common Errors & Fixes

ErrorLikely CauseFix
JE doesn't balanceRounding on individual linesUse Decimal, not float
FICA payable too lowSS wage base hit for high earnersCheck individual wage bases
Net pay varianceOff-cycle check or reversalSearch bank feed for extra ACH
Benefits mismatchMid-period enrollment changeCompare to benefits carrier invoice
SUTA varianceRate update not in systemConfirm current year SUTA rate
Missing departmentEmployee dept not set in payrollDefault to 'General', flag for setup

© LeoYeAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in skills/payroll-gl-reconciliation of LeoYeAI/openclaw-master-skills.

  • SKILL.md
  • _meta.json

Open the folder on GitHubat commit e5199b5

Compare with similar skills

Payroll Gl Reconciliation next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Payroll Gl Reconciliation compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Payroll Gl Reconciliation this skillLeoYeAI/openclaw-master-skills2.2k—~6.2kAutomated safety check: PassMIT
Fondo Install Authjeremylongshore/tons-of-skills-marketplace2.8k—~883Automated safety check: PassMIT
Fondo Local Dev Loopjeremylongshore/tons-of-skills-marketplace2.8k—~1.3kAutomated safety check: NotesMIT
Finance Opsericosiu/ai-marketing-skills3.6k1 repos~1.4kAutomated safety check: PassMIT
Bookkeeping CloseOneWave-AI/claude-skills336—~2kAutomated safety check: PassMIT
Find Cpa Firmjeremylongshore/tons-of-skills-marketplace2.8k—~3.5kAutomated safety check: NotesMIT

Similar skills

  • Fondo Install Auth

    jeremylongshore/tons-of-skills-marketplace

    Set up Fondo account and configure integrations with Gusto, QuickBooks, and bank accounts for automated startup bookkeeping and R&D tax credits.

    2.8k GitHub stars~883 tokensUpdated yesterday
    Business, Finance & HRAuto-check passed
  • Fondo Local Dev Loop

    jeremylongshore/tons-of-skills-marketplace

    Configure local development workflows that integrate with Fondo for financial data, using Fondo exports with QuickBooks or accounting tools.

    2.8k GitHub stars~1.3k tokensUpdated yesterday
    Business, Finance & HRAuto-check: notes
  • Finance Ops

    ericosiu/ai-marketing-skills

    AI-powered financial analysis suite. An agent skill from ericosiu/ai-marketing-skills.

    3.6k GitHub starsUsed in 1 repo~1.4k tokens
    Business, Finance & HRAuto-check passed
  • Bookkeeping Close

    OneWave-AI/claude-skills

    Categorizes transactions, reconciles bank and card statements to the ledger, works a month-end checklist and prepares a close package, without ever forcing a balance.

    336 GitHub stars~2k tokensUpdated 9 days ago
    Business, Finance & HRAuto-check passed
  • Find Cpa Firm

    jeremylongshore/tons-of-skills-marketplace

    A skill your agent uses whenever the user wants to find, shortlist, vet, or enrich US accounting and tax firms (CPA firms) — financial-statement audit, SOC 1/2 audit, corporate tax, bookkeeping for…

    2.8k GitHub stars~3.5k tokensUpdated yesterday
    Business, Finance & HRAuto-check: notes
  • QuickBooks Online Integration

    hewi333/Mom-n-Pop-Skills

    Connects a small business to QuickBooks Online for customers, estimates, invoices and payments, using Intuit OAuth 2.0 with token refresh and sandbox or production setups.

    122 GitHub stars~1.9k tokensUpdated 29 days ago
    Backend & APIsAuto-check passed

More from LeoYeAI/openclaw-master-skills

All 1,200 skills in this repo
  • DevOps Pipeline Management

    LeoYeAI/openclaw-master-skills

    Manages pipelines on a DevOps quality and efficiency platform through its OpenAPI: list workspaces and templates, create, update, run and cancel pipelines, and read run records.

    2.2k GitHub stars~4.2k tokensUpdated 2 mo ago
    Auto-check: notes
  • Feishu Document Collaboration

    LeoYeAI/openclaw-master-skills

    Patches OpenClaw's Feishu extension so an edited document triggers an isolated agent session that reads the doc and replies inline, turning it into a live chat space.

    2.2k GitHub stars~2k tokensUpdated 2 mo ago
    Auto-check passed
  • Files Memory System

    LeoYeAI/openclaw-master-skills

    Multi-context memory management system for OpenClaw agents with group-isolated storage, global shared memory, workspace organization, and group-specific skills isolation.

    2.2k GitHub stars~3.8k tokensUpdated 2 mo ago
    Auto-check passed
  • GEO-Claw AI Visibility Agent

    LeoYeAI/openclaw-master-skills

    Runs a brand's AI-search visibility work end to end: diagnosing how AI platforms represent it, repositioning it, producing AI-optimized content and monitoring ongoing mentions.

    2.2k GitHub stars~4.7k tokensUpdated 2 mo ago
    Auto-check passed
  • Google Workspace CLI

    LeoYeAI/openclaw-master-skills

    Installs and authenticates the gws CLI, then automates Gmail, Drive, Sheets, Calendar, Docs, Chat and Tasks with ready-made recipes, persona bundles and security audits.

    2.2k GitHub stars~2.6k tokensUpdated 2 mo ago
    Auto-check: notes
  • HealthFit Health Advisors

    LeoYeAI/openclaw-master-skills

    Runs four advisor roles, a fitness coach, nutritionist, data analyst and TCM practitioner, to build a health profile and track workouts, diet and wellness over time.

    2.2k GitHub stars~4.4k tokensUpdated 2 mo ago
    Auto-check passed

Works with

Questions about Payroll Gl Reconciliation

What does Payroll Gl Reconciliation do?

Reconcile payroll processor reports (Gusto, ADP, Paychex, Rippling) to general ledger journal entries in QuickBooks Online, Xero, or other accounting software. Payroll Gl Reconciliation is an agent skill from LeoYeAI/openclaw-master-skills. Reconcile payroll processor reports (Gusto, ADP, Paychex, Rippling) to general ledger journal entries in QuickBooks Online, Xero, or other accounting software.

When should I use Payroll Gl Reconciliation?

Payroll Gl Reconciliation fits situations like: : reconciling payroll registers to GL; mapping payroll processor exports to chart of accounts; creating payroll journal entries; validating employee benefit deductions.

How do I install Payroll Gl Reconciliation in Claude Code?

Run `npx skills add LeoYeAI/openclaw-master-skills --skill payroll-gl-reconciliation -a claude-code`. Or copy the skill folder (skills/payroll-gl-reconciliation in LeoYeAI/openclaw-master-skills) into .claude/skills/payroll-gl-reconciliation in your project. Claude Code loads it when a task matches its description.

How do I install Payroll Gl Reconciliation in Codex?

Run `npx skills add LeoYeAI/openclaw-master-skills --skill payroll-gl-reconciliation -a codex`. Or copy the skill folder (skills/payroll-gl-reconciliation in LeoYeAI/openclaw-master-skills) into .agents/skills/payroll-gl-reconciliation in your project. Codex loads it when a task matches its description.

Can I use Payroll Gl Reconciliation in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LeoYeAI/openclaw-master-skills --skill payroll-gl-reconciliation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/payroll-gl-reconciliation, .gemini/skills/payroll-gl-reconciliation, .github/skills/payroll-gl-reconciliation and .opencode/skills/payroll-gl-reconciliation in your project.

What does Payroll Gl Reconciliation need to run?

SKILL.md names no scripts, command-line tools or credentials: Payroll Gl Reconciliation is instructions for the agent only. Our summary lists: Python 3.

Does Payroll Gl Reconciliation access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Payroll Gl Reconciliation safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Payroll Gl Reconciliation use?

Payroll Gl Reconciliation is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Payroll Gl Reconciliation use?

About 6.2k tokens (SKILL.md is roughly 25k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Payroll Gl Reconciliation?

Skills that share tags, products or a category with Payroll Gl Reconciliation: Fondo Install Auth (jeremylongshore/tons-of-skills-marketplace, 2.8k stars), Fondo Local Dev Loop (jeremylongshore/tons-of-skills-marketplace, 2.8k stars), Finance Ops (ericosiu/ai-marketing-skills, 3.6k stars) and Bookkeeping Close (OneWave-AI/claude-skills, 336 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Payroll Gl Reconciliation?

LeoYeAI (a GitHub user) maintains it in LeoYeAI/openclaw-master-skills, which has 2,161 GitHub stars. The repository holds 1,235 skills in this directory. The repository was last updated on July 20, 2026.

Source: LeoYeAI/openclaw-master-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.