# Auditing IT and pro services in QuickBooks Enterprise

> How to audit IT and professional services invoices in QuickBooks Enterprise against contracts, statements of work, and rate cards for margin drift.

Source: https://valuexpa.com/insights/how-do-you-audit-it-and-professional-services-spend-in
Publisher: ValueXPA (https://valuexpa.com)
Updated: 2026-10-22

---

Margin drift is the gap between what a vendor contract says and what the invoice actually charges. In IT and professional services, that gap hides easily because the "contract" is often a statement of work, a master services agreement, and a rate card living in three separate PDFs, none of which QuickBooks Enterprise reads.

QuickBooks Enterprise records what a vendor billed. It does not know what the statement of work capped, what the blended rate should be, or whether last quarter's change order ever got signed. Auditing this category means building the comparison outside the ledger and pulling QuickBooks data into it.

## Executive Summary

IT and professional services spend drifts because the controlling document is a statement of work or master services agreement, not a purchase order, and QuickBooks Enterprise has no field for either. Bill.com or Enterprise's own AP module will happily post an invoice at whatever rate and hours the vendor lists, because there is nothing in the system asserting a ceiling, a blended rate, or a milestone deliverable that should have replaced hourly billing.

The mechanism is a mismatch between where the terms live and where the payment decision gets made. A not-to-exceed cap sits in a contract folder. The invoice approval happens in QuickBooks, by someone who has not opened that folder in months. Three-way matching, where it exists at all in Enterprise, checks the bill against a purchase order and a receipt of goods. It has no equivalent for a consulting hour or a fixed milestone payment, so those categories pass every control the system has and still miss the contract.

What changes it is moving the comparison outside QuickBooks: a standing register of active SOWs, their caps and rate cards, checked against the vendor detail report before each invoice is approved. That is a process fix, not a software fix, and it works whether or not QuickBooks Enterprise ever adds the field.

## 1. Why does QuickBooks Enterprise miss IT and professional services drift?

**QuickBooks Enterprise has no native field for a statement of work, a not-to-exceed cap, or a blended rate schedule. Its purchase order and three-way matching functions are built for goods with a quantity and a unit price, not for consulting hours or milestone deliverables. An IT invoice can match the bill entered against it perfectly and still violate the SOW that governs the engagement, because the SOW was never entered anywhere the system checks.**

The core issue is that QuickBooks Enterprise treats every vendor bill the same way: a line item, a quantity, a rate, a total. That model fits a fastener order. It does not fit a consulting engagement priced with a blended rate across seniority levels, a fixed monthly retainer, or a project capped at a dollar ceiling regardless of hours logged.

When the AP team enters the bill, the software checks it for internal consistency and against whatever purchase order exists, if one was cut at all. [IT and professional services engagements](/insights/it-and-professional-services-controls-in-quickbooks) can skip the purchase order step entirely when the spend is treated as overhead rather than procurement.

That means the invoice can be entered, approved, and paid without anyone in the software ever comparing it to the SOW's rate card or cap. The contract terms exist. They just live outside the system making the payment decision.

## 2. What documents do you need before you can audit this category?

**You need the master services agreement, every active statement of work, the current rate card by role or seniority level, and any signed change orders. Pull the vendor detail report from QuickBooks Enterprise for the same vendor and period. The audit is the comparison between these two sets of documents, not anything QuickBooks itself can generate, because the system holds only one half of the comparison.**

Start with the master services agreement, which usually sets the general terms: payment timing, termination rights, and sometimes a rate card that applies across all work under it. Then collect every statement of work signed under that agreement, since each one can carry its own cap, deliverable schedule, or rate exception.

Change orders matter as much as the original SOW. A project that started at a fixed price and later added scope should have a signed amendment reflecting the new terms. If the amendment does not exist, the vendor's higher billing has no contractual basis regardless of whether the added work was real.

On the QuickBooks side, export the vendor detail report filtered to the vendor and period in question, along with the memo field on each bill if line-level detail was entered there. This gives you the two halves needed for the actual comparison work in the next section.

## 3. How do you match invoice detail against the statement of work?

**Line up each invoice period against the SOW's rate card, role mix, and any cap, then check three things: the rate charged per role matches the card, the total for the period has not crossed the cap, and any milestone billed was actually delivered. QuickBooks Enterprise will not flag any of these on its own, so the check runs in a spreadsheet built from the exported vendor detail report.**

Rate verification is the simplest check and the one most often skipped. If the SOW specifies a blended rate or separate rates by role, seniority level, or resource type, confirm the invoice's rate matches, not just that the total looks reasonable against last month.

Cap tracking requires running a cumulative total against the SOW's not-to-exceed ceiling, since a single invoice can look fine in isolation while the year-to-date total against that SOW has already crossed the cap. QuickBooks Enterprise reports by vendor and by period, not by contract, so this cumulative view has to be built manually or in a separate spreadsheet.

Milestone verification means confirming the deliverable tied to a fixed payment was actually accepted, not just that the invoice date lines up with the SOW's payment schedule. A vendor can bill on schedule for a milestone that slipped.

### A. Rate card check

Compare the rate on each line item to the role-based rate card in the SOW or MSA. A senior consultant billed at a senior rate for work a junior resource performed is a rate card violation even when the total invoice amount looks unremarkable.

### B. Cap and cumulative tracking

Track spend against each SOW's ceiling across the life of the engagement, not per invoice. Because QuickBooks Enterprise reports by vendor and period rather than by contract, this running total has to be maintained outside the system, updated with every new invoice.

## 4. Can you build this check inside QuickBooks Enterprise itself?

**Partially. Custom fields and classes in QuickBooks Enterprise can tag a bill with a contract or project identifier, which helps group invoices for review. But the system still cannot store a rate card, evaluate a cumulative cap, or confirm milestone delivery, so the comparison logic has to live in a spreadsheet or a separate control fed by exports from QuickBooks.**

QuickBooks Enterprise supports custom fields on bills and class tracking, both of which can tag each invoice with the SOW or project it belongs to. That is a real improvement over an unlabeled bill, because it lets you filter the vendor detail report down to a single engagement rather than sorting through every bill from a vendor that runs multiple concurrent projects.

What it cannot do is hold the rate card itself as a lookup table the system checks against, or accumulate spend against a cap and warn when it is approached. Those require either a manual process, a spreadsheet control maintained alongside the exports, or a separate system that ingests QuickBooks data and compares it to contract terms.

The practical approach for most AP teams is tagging in QuickBooks for traceability, and the substantive rate and cap check in a maintained spreadsheet, reviewed on the same cadence as invoice approval rather than after the fact.

## 5. What controls prevent this drift going forward?

**Require a purchase order or a QuickBooks class tag for every SOW before the first invoice is entered, maintain a single register of active contracts with caps and rate cards, and route any invoice approaching its cap for a second approval. None of this needs new software; it needs the existing approval step to check something it currently does not.**

A purchase order for [IT and professional services engagements](/insights/it-and-professional-services-controls-in-quickbooks), even a simple one referencing the SOW number, gives QuickBooks Enterprise something to match the bill against and creates a record that ties the invoice to a specific contract rather than a general vendor relationship.

A contract register, even a shared spreadsheet, listing every active SOW with its cap, rate card, and expiration date turns the cumulative tracking problem from a research task into a lookup. Whoever approves the invoice checks the register before approving, not after a quarterly review finds the overrun.

A threshold-based second approval, triggered as cumulative billing against a SOW approaches its cap, catches the overrun while there is still time to have the conversation with the vendor rather than after the engagement has already exceeded its budget.

- **Purchase order at start:** A purchase order for IT and professional services engagements, even a simple one referencing the SOW number, gives QuickBooks Enterprise something to match the bill against and ties the invoice to a specific contract.

- **Standing contract register:** A shared register listing every active SOW with its cap, rate card, and expiration date turns the cumulative tracking problem from a research task into a lookup, checked before approval rather than after.

- **Threshold-based second approval:** Route an invoice for a second look once cumulative billing against a SOW is approaching its cap, so the conversation with the vendor happens before the engagement exceeds its budget, not after.

## 6. Is this worth a diagnostic instead of doing it in-house?

**Doing this in-house works if someone owns the contract register and the time to maintain it. A diagnostic makes sense when the SOW volume across IT, consulting, and professional services has grown past what one person can track manually, or when nobody currently owns the reconciliation and months of unreviewed invoices need a first pass.**

The in-house version described above is not complicated. It requires a maintained register, a consistent tagging convention in QuickBooks Enterprise, and someone with the authority to hold an invoice back pending a cap check. Many finance teams can run this themselves once the process exists.

Where it breaks down is scale and backlog. A company running a handful of IT vendors under simple SOWs can track this in a spreadsheet without much overhead. A company with several active engagements across IT, consulting, and specialized professional services, several with change orders, starts losing the thread, especially if the register was never built and nobody has looked at cumulative spend against caps.

A Margin Drift Diagnostic is built for that backlog: it reviews the invoice-to-contract match across 12 to 18 months of historical spend, across ValueXPA diagnostics, and produces a prioritized recovery and prevention roadmap in 2 to 4 weeks. The client retains 100% of recoveries, across ValueXPA diagnostics, which matters when the question is whether the exercise pays for itself.

For the wider pattern this sits inside, start with the [margin drift](/insights/best-invoice-validation-software-smb) guide. See also [diagnostic or software: what to buy first](/insights/diagnostic-or-software-what-to-buy-first) and [build vs. buy: can you do contract-to-invoice matching in excel?](/insights/build-vs-buy-can-you-do-contract-to-invoice-matching-in).

For the wider pattern this sits inside, start with the [margin drift](/insights/best-invoice-validation-software-smb) guide. See also [diagnostic or software: what to buy first](/insights/diagnostic-or-software-what-to-buy-first) and [build vs. buy: can you do contract-to-invoice matching in excel?](/insights/build-vs-buy-can-you-do-contract-to-invoice-matching-in).

## 7. Frequently Asked Questions (People Also Ask)

### Does QuickBooks Enterprise support statements of work natively?

No. QuickBooks Enterprise has no field for a statement of work, a not-to-exceed cap, or a role-based rate card. It records the bill a vendor submits and matches it, at most, against a purchase order. The SOW terms have to be tracked outside the system and compared to QuickBooks data manually.

### What is a not-to-exceed cap and why does it get missed?

A not-to-exceed cap is a contract clause capping total billing on an engagement regardless of hours logged. It gets missed because it lives in the SOW, not in QuickBooks, and nothing in the invoice approval workflow checks cumulative spend against it before payment.

### Can class tracking in QuickBooks Enterprise replace a contract register?

No. Class tracking can tag a bill with a project or contract identifier, which helps filter reports, but it cannot store a rate card, evaluate a cumulative cap, or confirm a milestone was delivered. Those checks still require a separate register or spreadsheet.

### Who should own the contract register for IT and professional services SOWs?

Whoever approves the invoices needs access to it at the point of approval, so it is typically owned by AP or a controller function, updated whenever a new SOW or change order is signed, and checked before, not after, payment.

### What happens if a change order was never signed?

If a vendor's scope grew but no signed amendment exists, the higher billing has no contractual basis. The invoice should be held against the original SOW's terms until a change order is signed, regardless of whether the additional work was real.

### Does three-way matching in QuickBooks Enterprise catch SOW violations?

Three-way matching checks a bill against a purchase order and a receipt of goods. It has no equivalent for a consulting hour or a milestone deliverable, so an invoice can pass three-way matching and still violate the SOW's rate card or cap.

### How do you verify a milestone payment was earned?

Confirm the deliverable tied to the payment was actually accepted, not just that the invoice date matches the SOW's payment schedule. A vendor can bill on schedule for a milestone that has not actually been completed or accepted.

### Is this general information or legal advice?

This is general information about auditing invoices against contract terms, not legal advice. Questions about enforceability of a specific SOW, MSA, or change order should go to counsel.

### What triggers a second approval on an IT services invoice?

A second approval should trigger when cumulative billing against a SOW is approaching its cap, based on the register's running total, giving the team time to raise the issue with the vendor before the ceiling is crossed.

### Does a Margin Drift Diagnostic replace the contract register?

No. The diagnostic reviews historical invoice-to-contract matches and produces a roadmap, across ValueXPA diagnostics. Maintaining the register going forward is still an internal process, though the diagnostic's findings often shape how that register gets built.

### Is contract complexity quietly draining your operating margin?

A small systematic drift between your negotiated contracts and your actual vendor billing compounds quietly across a year of invoices. Stop guessing at your exposure and run a targeted audit.

**[Take the Free Screener → https://valuexpa.com/margin-drift-screener](https://valuexpa.com/margin-drift-screener)**

## Executive Summary

IT and professional services spend drifts because the controlling document is a statement of work or master services agreement, not a purchase order, and QuickBooks Enterprise has no field for either. Bill.com or Enterprise's own AP module will happily post an invoice at whatever rate and hours the vendor lists, because there is nothing in the system asserting a ceiling, a blended rate, or a milestone deliverable that should have replaced hourly billing. The mechanism is a mismatch between where the terms live and where the payment decision gets made. A not-to-exceed cap sits in a contract folder. The invoice approval happens in QuickBooks, by someone who has not opened that folder in months. Three-way matching, where it exists at all in Enterprise, checks the bill against a purchase order and a receipt of goods. It has no equivalent for a consulting hour or a fixed milestone payment, so those categories pass every control the system has and still miss the contract. What changes it is moving the comparison outside QuickBooks: a standing register of active SOWs, their caps and rate cards, checked against the vendor detail report before each invoice is approved. That is a process fix, not a software fix, and it works whether or not QuickBooks Enterprise ever adds the field.

## 1. Why does QuickBooks Enterprise miss IT and professional services drift?

QuickBooks Enterprise has no native field for a statement of work, a not-to-exceed cap, or a blended rate schedule. Its purchase order and three-way matching functions are built for goods with a quantity and a unit price, not for consulting hours or milestone deliverables. An IT invoice can match the bill entered against it perfectly and still violate the SOW that governs the engagement, because the SOW was never entered anywhere the system checks. The core issue is that QuickBooks Enterprise treats every vendor bill the same way: a line item, a quantity, a rate, a total. That model fits a fastener order. It does not fit a consulting engagement priced with a blended rate across seniority levels, a fixed monthly retainer, or a project capped at a dollar ceiling regardless of hours logged. When the AP team enters the bill, the software checks it for internal consistency and against whatever purchase order exists, if one was cut at all. [IT and professional services engagements](/insights/it-and-professional-services-controls-in-quickbooks) can skip the purchase order step entirely when the spend is treated as overhead rather than procurement. That means the invoice can be entered, approved, and paid without anyone in the software ever comparing it to the SOW's rate card or cap. The contract terms exist. They just live outside the system making the payment decision.

## 2. What documents do you need before you can audit this category?

You need the master services agreement, every active statement of work, the current rate card by role or seniority level, and any signed change orders. Pull the vendor detail report from QuickBooks Enterprise for the same vendor and period. The audit is the comparison between these two sets of documents, not anything QuickBooks itself can generate, because the system holds only one half of the comparison. Start with the master services agreement, which usually sets the general terms: payment timing, termination rights, and sometimes a rate card that applies across all work under it. Then collect every statement of work signed under that agreement, since each one can carry its own cap, deliverable schedule, or rate exception. Change orders matter as much as the original SOW. A project that started at a fixed price and later added scope should have a signed amendment reflecting the new terms. If the amendment does not exist, the vendor's higher billing has no contractual basis regardless of whether the added work was real. On the QuickBooks side, export the vendor detail report filtered to the vendor and period in question, along with the memo field on each bill if line-level detail was entered there. This gives you the two halves needed for the actual comparison work in the next section.

## 3. How do you match invoice detail against the statement of work?

Line up each invoice period against the SOW's rate card, role mix, and any cap, then check three things: the rate charged per role matches the card, the total for the period has not crossed the cap, and any milestone billed was actually delivered. QuickBooks Enterprise will not flag any of these on its own, so the check runs in a spreadsheet built from the exported vendor detail report. Rate verification is the simplest check and the one most often skipped. If the SOW specifies a blended rate or separate rates by role, seniority level, or resource type, confirm the invoice's rate matches, not just that the total looks reasonable against last month. Cap tracking requires running a cumulative total against the SOW's not-to-exceed ceiling, since a single invoice can look fine in isolation while the year-to-date total against that SOW has already crossed the cap. QuickBooks Enterprise reports by vendor and by period, not by contract, so this cumulative view has to be built manually or in a separate spreadsheet. Milestone verification means confirming the deliverable tied to a fixed payment was actually accepted, not just that the invoice date lines up with the SOW's payment schedule. A vendor can bill on schedule for a milestone that slipped. ### A. Rate card check Compare the rate on each line item to the role-based rate card in the SOW or MSA. A senior consultant billed at a senior rate for work a junior resource performed is a rate card violation even when the total invoice amount looks unremarkable. ### B. Cap and cumulative tracking Track spend against each SOW's ceiling across the life of the engagement, not per invoice. Because QuickBooks Enterprise reports by vendor and period rather than by contract, this running total has to be maintained outside the system, updated with every new invoice.

## 4. Can you build this check inside QuickBooks Enterprise itself?

Partially. Custom fields and classes in QuickBooks Enterprise can tag a bill with a contract or project identifier, which helps group invoices for review. But the system still cannot store a rate card, evaluate a cumulative cap, or confirm milestone delivery, so the comparison logic has to live in a spreadsheet or a separate control fed by exports from QuickBooks. QuickBooks Enterprise supports custom fields on bills and class tracking, both of which can tag each invoice with the SOW or project it belongs to. That is a real improvement over an unlabeled bill, because it lets you filter the vendor detail report down to a single engagement rather than sorting through every bill from a vendor that runs multiple concurrent projects. What it cannot do is hold the rate card itself as a lookup table the system checks against, or accumulate spend against a cap and warn when it is approached. Those require either a manual process, a spreadsheet control maintained alongside the exports, or a separate system that ingests QuickBooks data and compares it to contract terms. The practical approach for most AP teams is tagging in QuickBooks for traceability, and the substantive rate and cap check in a maintained spreadsheet, reviewed on the same cadence as invoice approval rather than after the fact.

## 5. What controls prevent this drift going forward?

Require a purchase order or a QuickBooks class tag for every SOW before the first invoice is entered, maintain a single register of active contracts with caps and rate cards, and route any invoice approaching its cap for a second approval. None of this needs new software; it needs the existing approval step to check something it currently does not. A purchase order for [IT and professional services engagements](/insights/it-and-professional-services-controls-in-quickbooks), even a simple one referencing the SOW number, gives QuickBooks Enterprise something to match the bill against and creates a record that ties the invoice to a specific contract rather than a general vendor relationship. A contract register, even a shared spreadsheet, listing every active SOW with its cap, rate card, and expiration date turns the cumulative tracking problem from a research task into a lookup. Whoever approves the invoice checks the register before approving, not after a quarterly review finds the overrun. A threshold-based second approval, triggered as cumulative billing against a SOW approaches its cap, catches the overrun while there is still time to have the conversation with the vendor rather than after the engagement has already exceeded its budget. 1. Purchase order at start: A purchase order for IT and professional services engagements, even a simple one referencing the SOW number, gives QuickBooks Enterprise something to match the bill against and ties the invoice to a specific contract. 2. Standing contract register: A shared register listing every active SOW with its cap, rate card, and expiration date turns the cumulative tracking problem from a research task into a lookup, checked before approval rather than after. 3. Threshold-based second approval: Route an invoice for a second look once cumulative billing against a SOW is approaching its cap, so the conversation with the vendor happens before the engagement exceeds its budget, not after.

## 6. Is this worth a diagnostic instead of doing it in-house?

Doing this in-house works if someone owns the contract register and the time to maintain it. A diagnostic makes sense when the SOW volume across IT, consulting, and professional services has grown past what one person can track manually, or when nobody currently owns the reconciliation and months of unreviewed invoices need a first pass. The in-house version described above is not complicated. It requires a maintained register, a consistent tagging convention in QuickBooks Enterprise, and someone with the authority to hold an invoice back pending a cap check. Many finance teams can run this themselves once the process exists. Where it breaks down is scale and backlog. A company running a handful of IT vendors under simple SOWs can track this in a spreadsheet without much overhead. A company with several active engagements across IT, consulting, and specialized professional services, several with change orders, starts losing the thread, especially if the register was never built and nobody has looked at cumulative spend against caps. A Margin Drift Diagnostic is built for that backlog: it reviews the invoice-to-contract match across 12 to 18 months of historical spend, across ValueXPA diagnostics, and produces a prioritized recovery and prevention roadmap in 2 to 4 weeks. The client retains 100% of recoveries, across ValueXPA diagnostics, which matters when the question is whether the exercise pays for itself. For the wider pattern this sits inside, start with the [margin drift](/insights/best-invoice-validation-software-smb) guide. See also [diagnostic or software: what to buy first](/insights/diagnostic-or-software-what-to-buy-first) and [build vs. buy: can you do contract-to-invoice matching in excel?](/insights/build-vs-buy-can-you-do-contract-to-invoice-matching-in). For the wider pattern this sits inside, start with the [margin drift](/insights/best-invoice-validation-software-smb) guide. See also [diagnostic or software: what to buy first](/insights/diagnostic-or-software-what-to-buy-first) and [build vs. buy: can you do contract-to-invoice matching in excel?](/insights/build-vs-buy-can-you-do-contract-to-invoice-matching-in).

## Common questions

### Does QuickBooks Enterprise support statements of work natively?

No. QuickBooks Enterprise has no field for a statement of work, a not-to-exceed cap, or a role-based rate card. It records the bill a vendor submits and matches it, at most, against a purchase order. The SOW terms have to be tracked outside the system and compared to QuickBooks data manually.

### What is a not-to-exceed cap and why does it get missed?

A not-to-exceed cap is a contract clause capping total billing on an engagement regardless of hours logged. It gets missed because it lives in the SOW, not in QuickBooks, and nothing in the invoice approval workflow checks cumulative spend against it before payment.

### Can class tracking in QuickBooks Enterprise replace a contract register?

No. Class tracking can tag a bill with a project or contract identifier, which helps filter reports, but it cannot store a rate card, evaluate a cumulative cap, or confirm a milestone was delivered. Those checks still require a separate register or spreadsheet.

### Who should own the contract register for IT and professional services SOWs?

Whoever approves the invoices needs access to it at the point of approval, so it is typically owned by AP or a controller function, updated whenever a new SOW or change order is signed, and checked before, not after, payment.

### What happens if a change order was never signed?

If a vendor's scope grew but no signed amendment exists, the higher billing has no contractual basis. The invoice should be held against the original SOW's terms until a change order is signed, regardless of whether the additional work was real.

---

ValueXPA runs a fixed-scope Margin Drift Diagnostic that validates every service vendor invoice against contract terms, for $100M+ US industrial manufacturers and distributors. Two to four weeks. The client retains 100% of recoveries. https://valuexpa.com/contact-us
