⚠︎ This step is a verification check, not a full walkthrough. For the complete progress billing, retainage, and change order billing workflows, see Invoice Your Customers.
a. Review your open projects and confirm that the most recent pay application has been submitted for each active billing cycle. Unbilled work appears as underbilling on the WIP report but does not appear in AR — it's earned revenue that hasn't been invoiced yet.
b. Check retainage status on projects approaching substantial completion. Retainage sits in a separate Retainage Receivable account and does not age in standard AR until it is released. If retainage has not been released on a completed project, the final invoice has not been generated.
c. Look for approved change orders that have not been included in the most recent billing cycle. Unbilled approved change orders represent earned revenue that is not being invoiced.
⚠︎ Review AR aging at least weekly. Balances that slip past 90 days are significantly harder to collect.
⚠︎ Invoices without a payment term assigned have no due date and are excluded from aging bucket columns. Assign payment terms to every invoice to see correct aging distribution. Payment terms are configured at Settings > Invoicing > Payment Terms.
⚠︎ AR Transaction reports should be limited to a maximum one-year date range for performance. Larger ranges cause timeouts.
⚠︎ Retainage is not standard AR. Retainage Receivable is tracked in a separate GL account and does not appear in standard AR aging until it is formally released via the Collect Retainage workflow. When reviewing the balance sheet, do not combine Retainage Receivable with general AR — retainage is a contractual holdback, not a standard receivable.
⚠︎ Overbilling affects AR interpretation. If a project is overbilled (billed more than earned based on percentage of completion), the excess billing is a liability, not a true receivable. Cross-reference AR aging with the WIP report before escalating project balances to collections.
a. Go to Accounting > AR Management to view your outstanding customer balances organized by aging buckets. Use the Statement Type dropdown to select "As Of Date" and set your filters.
b. Use the filters to narrow by Business Unit, Customer Type, Min. Days Past Due, or Invoice Export Status to focus on the balances that need attention first.
c. Click into any customer row to see the individual invoices making up their balance. For commercial project customers, you may see a mix of progress billing invoices (pay applications) and standard job invoices (service work). Prioritize follow-up on the oldest outstanding amounts.
⚠︎ If a payment is received but you are not sure which invoices it covers, record it as an unapplied payment in Accounting > Customer Payments. Apply it to specific invoices once the customer confirms allocation. Do not leave unapplied payments unresolved — they inflate your AR balance.
a. Go to the customer record and click Collect Payment. Under Payment Details, enter the total payment amount and payment method.
b. In the Apply to Invoice section, select the invoices the payment should cover. Allocate the appropriate amount to each invoice. If the payment does not cover all invoices in full, apply partial amounts in order of oldest invoice first.
c. Click Save. Each invoice's balance updates and the payment splits are recorded for audit.
⚠︎ Retainage must be mapped to a dedicated Retainage Receivable GL account — not your general Accounts Receivable account. Without this mapping, retainage posts to a default account and creates reconciliation issues.
⚠︎ If retainage was enabled mid-project, earlier billing cycles may not have retainage applied. This creates a discrepancy between the expected and actual withheld amounts. Verify retainage history before releasing.
a. Open the project and navigate to the Application for Payment section. Use the Collect Retainage feature in the Continuation Sheet.
b. This moves the withheld balance from Retainage Receivable to Current Due and generates the final billing invoice. The retainage amount now appears in AR aging as a current receivable.
c. Send the final invoice to the customer. After payment is received, post and export the payment through the standard batch workflow.
⚠︎ This screen only pulls data from posted and exported invoices. Invoices in Pending status will not appear here.
⚠︎ For commercial customers with retainage, the statement reflects only the current-due portion of each billing cycle — not the retainage held. If the customer questions the statement total, clarify that retainage is tracked separately and will be invoiced upon project completion.
a. Go to Accounting > AR Management.
b. Choose the statement type from the Statement Type dropdown — As Of Date or Balance Forward.
c. Set the Date Range or As Of Date. Use filters to narrow the list.
d. Select the customers you want to send statements to. From the Actions dropdown, choose Email Statements, Print Statements, or Print Statements & Mark as Sent. Preview statements before sending.
⚠︎ A credit hold does not physically block new bookings. It triggers a high-visibility red banner on the call/booking screen. Your team should have a policy where CSRs transfer calls from delinquent customers to your Accounts Receivable team when they see the banner — the system will not prevent them from booking.
a. Open the customer record. Apply a "Credit Hold" tag to the customer. Tags are managed at Settings > Operations > Tag Types.
b. Configure the Credit Hold tag to Show on Dispatch Board so dispatchers also see the alert when the customer appears on the board.
c. Add a note explaining why the hold was placed or removed. For commercial customers, note the specific project(s) and outstanding amount — this helps your team understand the situation when the customer calls about a different project.
⚠︎ Card refunds process back to the original card only. If the original card has expired or been replaced, you cannot refund to that card — issue the refund as a check or leave it as an unapplied credit. Card refunds may take 1–2 business days to settle; ACH refunds take 3–5 business days.
⚠︎ Accounting sync: Adjustment invoices export as Credit Memos to your accounting software (QuickBooks, Intacct, Xero). Known issue: when syncing a negative adjustment invoice without an associated payment, the credit memo may use items from the original invoice instead of the adjustment invoice, overstating the credit amount. Always verify the credit memo in your accounting software after export.
a. Open the invoice record. The invoice must be in Posted or Exported status — if it's still Pending, edit the invoice directly instead of creating an adjustment.
b. Click Add an adjustment invoice and confirm in the pop-up. Add negative (credit) line items for the refund amount.
c. Apply a refund payment to the adjustment invoice. Select the refund method: credit card (refunds to the original card), ACH, check, or leave the credit unapplied on the customer's account to apply toward a future invoice.
d. Enter the refund amount and add a note explaining the reason. Complete the refund by following the steps in the article linked below.
⚠︎ Interest charges automatically generate adjustment invoices linked to the original invoices. The original invoice must use a payment term that has interest settings configured.
⚠︎ There is no automatic recurring interest — someone on your team must manually charge interest each cycle.
⚠︎ Review your contract terms before charging interest on progress billing invoices. Many commercial contracts specify their own late-payment provisions that may differ from what you configure in ServiceTitan.
a. First, create a task code item in your Pricebook for interest charges (you can leave the price at $0.00). For the full setup steps, see the Charge interest using the Invoices module article linked below.
b. Configure a payment term with interest settings: go to Settings > Invoicing > Payment Terms. Select or create a payment term, open the Interest tab, enable the Charge Interest toggle, and set the interest rate, grace period, and charge frequency.
c. To apply charges, go to Accounting > Invoices. Select the overdue invoices, then click Actions > Charge Interest. Select the accrual start date, review the calculated charges, and confirm.
⚠︎ Write-offs are processed via adjustment invoices, not a dedicated "Write Off" button. The adjustment invoice exports as a Credit Memo to your accounting software.
⚠︎ If the original invoice has already been exported, the adjustment invoice is the only correction path.
⚠︎ For project invoices, a write-off affects the project's financial summary (Budget vs. Actual and WIP). Verify the impact on the WIP report after posting the write-off — the project's billed revenue decreases but earned revenue does not, which changes the overbilling/underbilling position.
a. Open the invoice record for the uncollectible balance.
b. Click Add an adjustment invoice. Add a negative line item for the amount to write off. Map the line item to your Bad Debt expense GL account.
c. Enter a memo documenting the write-off reason. Post the adjustment invoice to zero out the balance and record the expense in your general ledger.
⚠︎ Statement email delivery requires the "View/Email Customer Statements" permission to be enabled for your user role.
⚠︎ For commercial customers, payment timing is often governed by contractual terms (Net 30, Net 45, Net 60). A balance that appears overdue in AR aging may not actually be past due per the contract. Verify contractual payment terms before sending collection communications.
a. Go to Accounting > AR Management. Filter for overdue balances using the Min. Days Past Due filter.
b. Select the customers you want to remind. Click the Actions dropdown and select Email Statements.
c. Preview the statement, customize if needed, then click Send.
⚠︎ "Exported" does not mean fully synced to your accounting system. If the external system rejected a record, the individual record's sync status may show an error even though the batch itself shows "Exported." Always check per-record sync status when troubleshooting GL mismatches.
⚠︎ Auto-batching can interfere with manual batch management. If auto-batching is enabled, invoices may be auto-batched within seconds of creation. When you need to manage batches manually, temporarily disable auto-batching at Settings > Accounting > Journal Entries and Auto-Batching to prevent conflicts.
a. Run the AR Transactions report (Reports > All Reports > search "AR Transactions") and compare the total to the Accounts Receivable balance on your Balance Sheet in your accounting software for the same date.
b. Check for unposted invoices or payments. Go to Accounting > Batch/Export Transactions and post any pending batches.
c. For commercial projects, verify that Retainage Receivable is mapped to its own GL account and is not mixed into general AR. If retainage is posting to the AR account, the AR total will be overstated by the amount of unreleased retainage across all active projects.
d. Check for unposted retainage release invoices. When retainage is released via the Collect Retainage workflow, the resulting invoice must be posted to move the balance from Retainage Receivable to AR in the GL.
e. Look for manual journal entries posted directly to the AR account. These bypass the sub-ledger and create discrepancies.
a. Compare the Retainage Receivable GL account balance against the retainage summary on each project's AFP history. These should match.
b. Check whether the retainage GL label is configured correctly. Without this label, retainage posts to a default or general AR account instead of the dedicated Retainage Receivable account.
c. Verify that retainage was enabled before the first billing cycle. If retainage was enabled mid-project, earlier billings may not have retainage applied, creating a discrepancy.
d. After retainage release, confirm the final invoice was posted and exported. Unposted release invoices leave stale retainage balances on the books.
⚠︎ ACH refunds take 3–5 business days to settle. Verify the payment status on the invoice before issuing a duplicate refund.
a. Verify the original payment has fully settled — not just authorized. If it hasn't settled, void it rather than issuing a refund.
b. Confirm your payment processor connection is active. Go to Settings > Integrations > Payment Processing and verify the connection status.
c. If the credit card on file has expired, issue the refund as a check or apply a credit to the customer's account using an adjustment invoice.
⚠︎ Credit Hold is an alert, not a system block. ServiceTitan does not disable the ability to book a job for a customer with a credit hold tag. Consistent enforcement depends on your team following an established collections process.
a. Understand that Credit Hold is a tag-based visual alert, not a system block. Confirm the "Credit Hold" tag is applied to the customer record and configured to Show on Dispatch Board.
b. Verify the CSR is seeing the red banner on the booking screen. If not, confirm the tag is active and applied to the correct customer record.
c. Since the system does not physically disable the "Book Job" button, enforcement depends on your team's process. CSRs should transfer calls from delinquent customers to Accounts Receivable when the credit hold banner appears. Consider reviewing role permissions under Settings > People > Roles if you need to restrict which users can override AR policies.