Payroll Export & Sync

Punchwell turns the hours your team clocks into a clean, payroll-ready summary. You set each person’s pay type, rate, and frequency once; Punchwell computes their gross for the current pay period — including weekly and daily overtime, double-time, and holiday pay — and hands you a CSV you can take straight to your payroll provider.

One thing to be clear about up front: Punchwell exports payroll data. It does not move money. There is no direct deposit, no payment processing, no tax filing, and no tax custody anywhere in the suite. That is deliberate. Keeping money movement out means there is no payment-processor or tax-custody risk sitting on your WordPress site — you take the payroll-ready CSV (or the connector format) to the provider that actually cuts the checks. Think of Punchwell as the timesheet-to-payroll bridge, not the bank.

Everything lives under Punchwell → Payroll Sync. The page is tabbed:

  • Payout Report — current-period gross for every employee, plus an employer summary.
  • Export — download a worked-hours CSV in your provider’s format.
  • Import — load a provider’s roster CSV to match (or create) employees by email.
  • Compensation — set each employee’s pay type, rate, frequency, and payroll ID.
  • Settings — company-wide defaults: pay frequency, overtime rules, currency, and CSV options.

Dollar figures (rates, payouts, the report) are admin/manager-only by default — gated on the manage_options capability. You can change which capability is required with the hrm_payroll_export_capability filter.

Where the hours come from. Payroll math reads the attendance your team clocks in Punchwell (punch in / punch out, with your shift, rounding, and grace rules already applied). If a punch is wrong or missing, fix it in the Attendance Reports add-on before you run payroll — the export uses whatever is recorded.


Before you start

The Payroll Sync screen ships in the hrm-payroll-export add-on. To use it:

  1. The base Punchwell plugin must be active. (See Installation.)
  2. Activate the hrm-payroll-export add-on. The Punchwell → Payroll Sync menu item appears.
  3. Optionally activate a connector add-on — SurePayroll or Gusto — if you export to one of those services. You do not need a connector for basic CSV export; a built-in Generic CSV provider always works.

Employees in Punchwell are WordPress users (the hrm_employee / hrm_manager roles). Payroll only looks at those users, so there is nothing extra to import to get started.


Step 1 — Set company defaults (Settings tab)

Open Punchwell → Payroll Sync → Settings. These defaults apply to everyone unless you override them per employee. Every option here ships at a sensible, no-surprise default, so a fresh install behaves predictably until you change something.

Pay schedule

  • Default pay frequency — Weekly, Bi-weekly, Semi-monthly, or Monthly. (Default: Bi-weekly.) Each employee can differ; this is just the fallback.
  • Week start — which weekday a workweek begins on (used for weekly overtime). Defaults to your WordPress Start of Week setting.
  • Bi-weekly anchor — a reference date that fixes which two-week window a bi-weekly period falls in.

Overtime

  • Overtime enabled — the company master switch for overtime (on by default).
  • Overtime threshold — weekly hours before overtime applies (default 40). Setting this to 0 is treated as “no overtime,” not “everything is overtime.”
  • Overtime multiplier — the pay multiple for overtime hours (default 1.5×).
  • Exclude 1099 contractors from overtime — on by default, matching the federal FLSA position that independent contractors are not owed overtime. Turn it off if a state or your own policy requires OT for contractors.

Daily overtime & double-time (off by default — leave off for simple weekly-only overtime)

  • Daily overtime — when enabled, hours over the daily threshold (default 8/day) become overtime, and hours over the double-time threshold (default 12/day) become double-time.
  • Double-time multiplier — the pay multiple for double-time hours (default 2×).

Holiday pay (off by default)

  • Holiday pay — when enabled, hours worked on a date in your company holiday calendar are paid at the holiday multiplier (default 1.5×). The holiday calendar is the one you build under Leave & Holidays (Holiday Import). Holiday hours are kept separate from overtime counting, so a premium is never stacked on a premium.

Currency — symbol, code, position (before/after the amount), decimal places, and thousands/decimal separators. This controls how amounts display in the report and how they’re formatted in CSV.

CSV output — delimiter (comma, semicolon, or tab), whether to include a UTF-8 BOM (helps Excel open accented characters correctly), and the date format used in exported files.

Employee self-service — opt-in (off by default). When enabled, each employee gets a read-only Punchwell → My Pay page showing only their own pay estimate (covered below).

Click Save Settings.


Step 2 — Set each employee’s pay (Compensation tab)

Open Punchwell → Payroll Sync → Compensation. This is a table of all employees. For each person you can set:

  • Pay type — Hourly or Salary.
  • Pay rate — for hourly, the hourly rate; for salary, the annual salary.
  • Frequency — Weekly, Bi-weekly, Semi-monthly, or Monthly. Leave it on Company default to inherit the Settings value.
  • Overtime eligibilityCompany default (follow the company rules), Always eligible, or Not eligible (exempt). An explicit per-employee choice always wins over the company switch and the contractor rule.
  • Overtime multiplierCompany default, or a per-person override of 1.5×, 2×, 2.5×, or 3×.
  • Payment method + handle — e.g. Direct deposit / ACH, Check, PayPal, Venmo, Cash App, Zelle, and so on, plus a handle/account field. This is data only — Punchwell records it for your reference and includes it in the CSV; it does not send anything. (It matters for tax reporting: paying a contractor through a third-party platform like PayPal/Venmo/Cash App shifts 1099-K responsibility to that platform, whereas ACH/check means you issue the 1099-NEC.)
  • Payroll Employee ID — the ID this person carries in your payroll provider’s system. The export can be limited to employees who have one (see Export below).

Click Save Compensation. Punchwell also keeps an append-only pay-rate revision log per employee (who changed it, when, and the effective date), so you have a simple raise history without a separate table.

The same fields appear on the WordPress user profile. You can edit one person’s compensation from Users → (the employee) → Edit instead of the bulk table. Both require the payroll capability and edit access to that user — an employee can’t set their own pay rate on their own profile.


Worker classification (1099 / FT / PT / temp / intern)

Each employee carries an employment type (full-time, part-time, temporary, intern, or 1099 contractor), set on their profile in the base plugin. It shows under the employee’s name in the Payout Report and is carried into the Generic CSV export so your provider knows who’s a contractor.

Its main payroll effect: when Exclude 1099 contractors from overtime is on (the default), workers classified as 1099 contractors are computed with no overtime, regardless of hours — the standard FLSA position. Flip that Settings toggle off if your situation requires contractors to receive overtime.


Step 3 — Run the Payout Report

Open Punchwell → Payroll Sync → Payout Report. Pick a reference date — any date inside the pay period you want to see — and click Update. Punchwell finds the pay period containing that date (per each employee’s frequency) and computes everyone’s gross for it.

How the math works

  • Hourly: worked hours come from attendance, grouped by week. Hours over the weekly overtime threshold are paid at the overtime multiplier. If daily overtime/double-time and/or holiday pay are enabled in Settings, those split out first — daily OT and weekly OT never double-count the same hour, and holiday hours are paid at the holiday multiplier separately.
  • Salary: annual salary ÷ pay periods per year (Weekly = 52, Bi-weekly = 26, Semi-monthly = 24, Monthly = 12). Worked hours are shown for reference but don’t change a salaried payout.

The report lists, per employee: type, frequency, the pay-period window, regular/overtime hours (plus double-time and holiday lines when those features are on), rate, and gross payout. Above the table, an employer summary totals current payout across all employees, the head count, total hours, and a breakdown by pay frequency.

Terminated employees (as of the reference date) are excluded automatically.

Click Download Payout CSV to save the report — including the per-employee regular/OT/double-time/holiday hours and pay, rate, and gross — as a spreadsheet for your records.


Step 4 — Export worked hours to a provider

Open Punchwell → Payroll Sync → Export. This produces a worked-hours CSV in your payroll provider’s expected shape.

  1. Payroll provider — choose Generic CSV (built in) or a connector you’ve activated (SurePayroll, Gusto).
  2. Pay period — set the From and To dates. (If you reverse them, Punchwell swaps them for you.)
  3. Options:
    • Only employees with a Payroll Employee ID — on by default, so you don’t export people your provider can’t match.
    • Exclude terminated employees — on by default.
  4. Click Download CSV.

The export carries the real regular / overtime split (and double-time / holiday hours when those are enabled in Settings), not a flat lump of hours — the same breakdown the Payout Report uses. The Generic CSV also includes employment type and the payment method/handle. Every text cell is hardened against spreadsheet formula injection.


Using the SurePayroll and Gusto connectors

Connectors are small, separate add-on plugins that format the export for a specific payroll service. Punchwell’s payroll engine ships Generic CSV so basic export always works; activate a connector only if you export to that service.

  • SurePayroll (hrm-payroll-surepayroll) — appears in the provider dropdown as “SurePayroll (hours import CSV).” SurePayroll imports are keyed by Employee ID, so make sure each person has their SurePayroll Employee ID set on the Compensation tab.
  • Gusto (hrm-payroll-gusto) — appears as “Gusto (Smart Import hours CSV).” Gusto’s Smart Import accepts a CSV of employee hours and auto-matches the columns on its end.

Both connectors require the hrm-payroll-export engine to be active. To use one: activate the connector add-on, then pick it from the Provider dropdown on the Export tab and download as usual.

Confirm columns against your account. The connector column layouts are sensible defaults researched against each provider’s standard import template. Payroll providers do customize import formats per account, so do a small test import in your provider first and adjust if your account expects something different. More providers (ADP RUN, QuickBooks Payroll, Paychex Flex, Square Payroll, and others) can be added as new connector add-ons.


Importing a roster (Import tab)

If your payroll provider can already export a list of employees, you can pull their Payroll Employee IDs into Punchwell instead of typing them in.

Open Punchwell → Payroll Sync → Import:

  1. Source provider — pick a connector that supports import (e.g. SurePayroll or Gusto). The help text lists which columns it recognizes; matching is by email.
  2. CSV file — upload the provider’s employee export (a .csv or .txt with a header row).
  3. Mode — start with Preview (dry run). It reads the file and shows you exactly what would happen — each row marked match / create / skip — and writes nothing.
  4. New employees — optionally tick Create Punchwell employees for rows with no matching email. New accounts are created as Punchwell Employees with no login email sent; set their passwords later via a normal password reset.
  5. Review the preview, then come back and choose Apply changes to commit.

Matched employees get their Payroll Employee ID stored for future exports. The upload is nonce- and capability-gated, accepts only CSV/text, and is parsed read-only.


Employee self-service: “My Pay” (optional)

If you enable Employee self-service under Settings, each employee sees a read-only Punchwell → My Pay page showing only their own information: pay type, rate, frequency, the current pay-period window, their hours (regular/OT, plus double-time/holiday if enabled), estimated gross, payment method, and their own key HR dates (birthday, joining date, probation/contract/visa). It’s clearly labeled an estimate — actual pay is whatever the employer runs. Employees never see anyone else’s pay, and dollar figures for the whole company stay admin/manager-only.


FAQ

Does Punchwell actually pay my employees? No. Punchwell does the calculation and the export — pay type and rate, a payout report with weekly and daily overtime, double-time and holiday pay, worker classification, and CSV (plus SurePayroll and Gusto connectors). It does not move money. You take the payroll-ready CSV to your payroll provider, who handles deposits and taxes. That’s intentional: no payment-processor or tax-custody risk lives on your site.

Where do the hours come from? From the attendance your team clocks in Punchwell, with your shift, rounding, and grace rules already applied. Correct any wrong or missing punches in the Attendance Reports add-on before exporting.

Can a manager or employee see everyone’s pay? Pay amounts and the report are admin/manager-only (the manage_options capability by default; adjustable via the hrm_payroll_export_capability filter). Employees only ever see their own figures, and only if you turn on the My Pay self-service page.

How is overtime calculated? By default, weekly: hours over 40 in a week (using your week-start setting) are paid at 1.5×. You can optionally enable daily overtime and double-time (e.g. over 8 and over 12 hours in a day) and holiday pay. Daily and weekly overtime are reconciled so the same hour is never counted twice, and overtime eligibility can be set per employee.

Do I need a SurePayroll or Gusto connector to export? No. The Generic CSV provider is built into the payroll engine and always available. Connectors just format the file for a specific service.

Will the connector CSV import cleanly into my payroll account? The column layouts are well-researched defaults, but providers customize import templates per account. Run a small test import first and adjust if needed. See Using the connectors above.

Are terminated employees included? No. Both the Payout Report and the Export exclude anyone terminated as of the reference/period date.