FS-DOC-03Operations
Process Runbook / SOP
Commission and Payout Calculation
[YourCompany.com] · Finance Department · Prepared by FullSpec · [Today's Date]
This runbook is the operating guide for your automated commission and payout calculation process. It tells your finance team exactly what the automation handles, what the one human step is, how to respond when something goes wrong, and how to keep the system accurate over time. FullSpec built, tested, and launched the automation end to end. Your team's role is to review and approve the payout summary each period, maintain the rate table in Google Sheets, and act on any flagged exceptions before payroll is submitted.
01Process overview
Every pay period, as soon as the period close date is reached, the automation pulls all closed-won deals from HubSpot, cleans and structures the data, applies the current commission rate tiers from Google Sheets, and writes a per-rep payout summary. The sales manager receives a Slack message to review and approve the figures. Once approved, commission totals are pushed to Gusto, a journal entry is created in Xero, and every rep receives a personalised Slack message showing their deal-level breakdown. Nothing reaches payroll without explicit manager sign-off. The only recurring manual input required from your team is that approval decision.
Process name
Commission and Payout Calculation
Trigger
Pay period end date is reached according to the configured schedule (bi-weekly or monthly)
Final output
Commission totals loaded into Gusto, a Xero journal entry created, and each rep notified via Slack with their deal-level breakdown
Agents running
Deal Ingestion Agent, Commission Calculation Agent, Payout Distribution Agent
Tools involved
HubSpot, Google Sheets, Slack, Gusto, Xero
Weekly volume
40 to 120 deal records per pay period; runs bi-weekly or monthly
Human checkpoint
Manager reviews the payout summary in Slack and clicks Approve before payroll is updated
Process owner
[Your name] — Finance Analyst
Process Runbook / SOPPage 1 of 4
FS-DOC-03Operations
02Step-by-step: what happens and who acts
What you actually need to do: There is one human step in this process. The sales manager must open the Slack approval message, review the payout summary table, and click Approve (or flag an issue) before the workflow continues. Every other step runs automatically. If exceptions are flagged by the Commission Calculation Agent, the finance analyst reviews those specific records before the approval message is sent.
Step
What happens
Who acts
Type
1
The automation platform detects the scheduled pay period end date and triggers the workflow. A period label and timestamp are applied to tag all downstream records for this cycle.
Automation
Automated
2
The Deal Ingestion Agent calls the HubSpot API and retrieves all closed-won deals within the pay period date range. It filters out test and voided records, normalises field names, maps each deal to the correct rep ID, and writes one clean row per deal into a designated Google Sheets tab.
Deal Ingestion Agent
Automated
3
The Commission Calculation Agent reads the clean deal list and the active commission rate table in Google Sheets. It determines each rep's quota attainment tier for the period and applies the correct percentage to every deal, including any splits or clawbacks. Any deal that cannot be matched confidently to a rate tier is written to a separate exceptions list.
Commission Calculation Agent
Automated
4
If the exceptions list contains any records, the finance analyst receives a notification and reviews each flagged item. The analyst confirms or corrects the deal data in HubSpot or Google Sheets so the record can be included in the final summary.
Finance Analyst
Human
5
The Commission Calculation Agent writes the finalised per-rep payout summary to Google Sheets, showing each rep's name, deal count, total revenue, commission rate applied, and gross commission amount for the period.
Commission Calculation Agent
Automated
6
The Payout Distribution Agent posts a Slack message to the sales manager containing the payout summary table and two action buttons: Approve and Flag Issue. The workflow pauses and waits for a response. Nothing moves to payroll until the manager responds.
Payout Distribution Agent
Automated
7
The sales manager reads the Slack approval message, checks the figures, and clicks Approve. If a number looks wrong, the manager clicks Flag Issue and adds a short note. A flagged issue routes the workflow back to the finance analyst for review before resubmission.
Sales Manager
Human
8
Once approval is confirmed, the Payout Distribution Agent pushes each rep's commission total to Gusto as an additional earnings line item, mapped to the correct employee record for the current pay run.
Payout Distribution Agent
Automated
9
The Payout Distribution Agent creates a commission expense journal entry in Xero, coded to the correct cost centre for the period. The approved payout summary from Google Sheets is referenced as the supporting document.
Payout Distribution Agent
Automated
10
Each rep receives a personalised Slack direct message listing their individual deals, the rate applied, and their gross commission for the period. This gives reps visibility of the breakdown before the payslip is issued.
Payout Distribution Agent
Automated
Process Runbook / SOPPage 2 of 4
FS-DOC-03Operations
03Handling exceptions
Situation
What the system does
What you do
A deal cannot be matched to a rate tier (missing quota attainment data or unrecognised rep ID)
The Commission Calculation Agent writes the deal to the exceptions list in Google Sheets and flags it with a reason code. The deal is excluded from the payout summary until resolved. The finance analyst is notified.
Open the exceptions tab in Google Sheets. Check the deal record in HubSpot to confirm the rep ID and deal value. Correct the data in either system, then trigger a manual recalculation for the affected rep using the re-run instruction in Section 04.
A deal record appears more than once in the HubSpot export (duplicate close events)
The Deal Ingestion Agent detects duplicate deal IDs in the same period and keeps only the most recently updated record. It logs the removed duplicate in a separate audit row in Google Sheets.
Review the duplicate log after each run to confirm the correct record was retained. If the wrong version was kept, update the deal in HubSpot and request a re-run from FullSpec support.
The rate table in Google Sheets has been edited in a way the calculation agent cannot parse (merged cells, deleted headers, or free-form text in a rate column)
The Commission Calculation Agent fails to read the rate table and stops the workflow. An error notification is sent to the finance analyst via Slack with details of which row or column caused the failure.
Do not edit the rate table structure. Restore the affected row or column to the original format described in Section 05. Once the sheet is corrected, contact FullSpec support to re-trigger the calculation step.
The sales manager does not respond to the Slack approval message within the configured timeout window (default: 48 hours)
The workflow sends a reminder Slack message to the manager at the 24-hour mark. If no response is received by the 48-hour deadline, the workflow pauses and alerts the finance analyst and operations lead.
Contact the sales manager directly to confirm availability. If the manager is absent, escalate to the designated backup approver listed in the contact table in Section 04. Do not approve the payout yourself unless you are the named backup approver.
The Gusto push fails because an employee record is missing or the payroll run has already been locked
The Payout Distribution Agent logs a Gusto write error and sends a Slack alert to the finance analyst with the affected rep name and the error message returned by Gusto.
Check Gusto to confirm whether the payroll run is still open. If the run is locked, manually enter the commission total as a correction or adjustment in the next pay run and note the reason. If the employee record is missing, add it in Gusto and contact FullSpec support to retry the push.
The HubSpot API or Google Sheets is temporarily unavailable at the time the workflow triggers
The automation platform retries the failed step up to three times with a five-minute delay between each attempt. If all three retries fail, the workflow halts and the finance analyst receives a Slack alert naming the unavailable tool.
Check the status page for the affected tool (HubSpot or Google). Once the service is restored, contact FullSpec support at support@gofullspec.com to manually re-trigger the workflow from the failed step. Do not start a manual calculation unless the outage extends beyond the payroll submission deadline.
04Who to contact and when
Fill in the rows below once your team is confirmed. Keep this table updated whenever roles change so the right person is always reachable during a pay period. The FullSpec rows are fixed and do not change.
Role
Name
How to reach them
Process owner (Finance Analyst)
[Your name]
[Your email or Slack handle]
Payout approver (Sales Manager)
[Rep name]
[Rep email or Slack handle]
Backup approver (if manager is unavailable)
[Rep name]
[Rep email or Slack handle]
Bookkeeper / Xero owner
[Rep name]
[Rep email]
Operations lead
[Rep name]
[Rep email or Slack handle]
FullSpec builder
FullSpec team
support@gofullspec.com
FullSpec support
FullSpec support desk
support@gofullspec.com
Process Runbook / SOPPage 3 of 4
FS-DOC-03Operations
05Ongoing maintenance
Whenever commission rates or quota thresholds change
Update the rate table in the designated Google Sheets tab. Use only the approved column structure: do not add merged cells, change column headers, or use free-form notes inside rate cells. Notify FullSpec support if you are unsure whether a structural change is safe.
Finance Analyst
Whenever rep or deal-type notification templates need updating (Slack messages to reps)
Contact FullSpec support at support@gofullspec.com with the revised wording. Do not edit the Slack message templates directly inside the automation platform unless FullSpec has granted you editing access.
Finance Analyst + FullSpec
Monthly spot-check (after each pay period for the first three months, then quarterly)
Open the payout ledger in Google Sheets and spot-check five to ten deal rows against the original HubSpot records to confirm the correct rate was applied. Log the check date and your initials in the audit tab.
Finance Analyst
After each pay period run
Review the automation error log in the designated Google Sheets audit tab. Look for any rows flagged with error or skipped status. Resolve or escalate within two business days of the period close.
Finance Analyst
When a team member joins, leaves, or changes role
Update the contact table in Section 04 of this runbook. Update the Gusto employee record and the HubSpot rep ID if the change affects a commissioned rep. Notify FullSpec support if a new rep's ID needs to be added to the rate table mapping.
Finance Analyst + Operations Lead
Quarterly volume review
Check whether deal volume has grown beyond the 40 to 120 records per pay period range that the current configuration was tested against. If volumes have increased significantly, contact FullSpec to review API rate limits and confirm the automation can handle the load.
Operations Lead + FullSpec
Most common maintenance issue: The single most frequent problem after go-live is an unannounced edit to the commission rate table in Google Sheets. Someone adds a new product line, changes a tier threshold, or reformats a cell, and the calculation agent fails silently or applies the wrong rate. Always treat the rate table as a structured data source, not a working spreadsheet. Any change to rates or thresholds should be made carefully in the correct column format, and the automation should be tested against a sample deal before the next live pay period runs.
Process Runbook / SOPPage 4 of 4