Off-program drift: spend leaking outside your approved vendors
When HQ publishes a preferred-vendor program (a set of vendors franchisees are expected to use, negotiated for network pricing, quality, or compliance reasons), the natural next question is: is any…
On this page
What "off-program" means
When HQ publishes a preferred-vendor program (a set of vendors franchisees are expected to use, negotiated for network pricing, quality, or compliance reasons), the natural next question is: is anyone actually using something else? Off Program is the row on the Vendors page that answers that question in dollars. It lists every vendor in active use somewhere in the network that is not on any currently active vendor-approval program, ranked by how much the network is spending on it every month.
This is not a list of banned vendors. Verinode does not block a franchisee from using a vendor, and it does not tell them which one to pick. It reads the vendor relationships franchisees have already recorded and the programs HQ has already published, and it shows leadership where the two disagree. What HQ does with that, nothing, a reminder, a renegotiated program, is a leadership call.
Where to find it
Open Vendors from the HQ sidebar at hq.verinode.ai/vendors. Off Program is the third row on the page, directly under the Hero panel and the Local Network row, and above Rate Drift and the spend-ranked rows further down (Top Vendors, Renegotiation Candidates, Broadest Network Footprint, All Vendors). Off Program and Rate Drift sit next to each other deliberately: off-program is the wrong-vendor problem, rate drift (covered in its own article) is the right-vendor-at-the-wrong-price problem. Both bridge Vendors with Programs, HQ's compliance layer.
Clicking a vendor tile in this row opens the same vendor detail overlay used everywhere else on the page, with the vendor's category, Verinode Score, program status, negotiated rate (if any), and per-franchisee participation. Closing the overlay drops you back on the Vendors home exactly where you left it.
How off-program status is worked out
Nothing here is entered by hand. Off-program status is computed nightly from two tables:
- the network data, filtered to rows with
type = 'vendor_approval'andstatus = 'active'for your group. This is the set of preferred-vendor programs HQ currently has live. A program in draft, sunset, or archived status does not count, only active programs set the bar. - the network data, filtered to
party_kind = 'vendor', joined against those active programs. Each row is one vendor's qualification on one program, tagged approved, preferred, or required.
For every vendor the network is actively using (from the same nightly spend rollup the rest of the Vendors page reads), Verinode checks whether its canonical vendor identity appears as an approved party on any active program:
- If it does, its status is approved, preferred, or required (whichever tier is highest across all the programs it qualifies on), and it does not appear in this row.
- If it does not, its status is off_program, and it lands here, provided it clears the network's privacy floor (see below).
If a vendor qualifies on more than one active program at different tiers, Verinode keeps the highest: required outranks preferred, preferred outranks approved. The point is to give every vendor the benefit of its strongest standing, not to penalize it for also appearing on a lesser program.
Note
Off-program status only exists relative to programs that currently exist. A vendor cannot drift against a policy HQ has never published. That is why this whole row goes quiet, on purpose, until at least one vendor-approval program is active. See the first empty state below.
What each tile shows
Each row in Off Program is a tile, one per off-program vendor, sorted by network monthly spend, highest first, capped at the top ten. Every tile carries:
- Label (top), the vendor's network monthly spend, formatted as a rounded dollar figure (for example "$4.2k" or "$180"). If no monthly spend is on file for that vendor yet, the label reads "Off-program" instead of a dollar amount.
- Headline, the vendor's name.
- Sub-line, the number of franchisees currently using the vendor ("3 franchisees", or "1 franchisee" when only one clears the privacy floor) and its most common vendor category (for example "Equipment Rental" or "Moisture Monitoring"), humanized from the underlying catalog value.
- Meta line, a fixed caption: "Not on an HQ-approved vendor program." This is the same on every tile in the row, it is the reason the vendor is here.
Tiles in this row render with a stronger visual weight than the general vendor rows below, an Ember Red accent and higher intensity, the same visual language the platform uses everywhere for things worth a second look, not a hard alarm, but a nudge that this is the row leadership opens the page to check.
The monthly spend figure
Behind the row, Verinode also totals every off-program vendor's network monthly spend into a single number: how much the network is paying, every month, to vendors outside any HQ-approved program. That total is not printed as its own line inside the web row today (the row is a ranked list of vendors, not a summary card), but it is the same figure surfaced as a standalone KPI on the mobile HQ Vendors view, labeled "Off-Program" with the caption "Monthly spend off approved programs." On mobile it reads as a dash until at least one program is active, then a dollar figure with a supporting line reading how many vendors are behind it (or "No vendor programs yet" before any program exists).
Read the row and the total the same way: this is not spend HQ is losing, it is spend that has not yet been steered onto a negotiated, HQ-vetted relationship. Every dollar in it is a candidate for either bringing that vendor onto the program or moving those franchisees to one that already qualifies.
The privacy boundary
HQ never sees which specific franchisee is paying which specific off-program vendor bill. The nightly rollup that feeds this row aggregates franchisee-recorded vendor relationships (vendor name, monthly spend) into network-level totals per vendor; individual invoices and line items never leave the franchisee's own data.
There is a second, stricter gate on top of that in networks made up of independent franchisees: a vendor used by only a single franchisee is suppressed from every vendor row on the page, including this one, because a "one franchisee, one vendor" line would identify that franchisee by elimination even without a name attached. Those suppressed vendors are counted, not shown, in the hero panel's "N hidden as single-franchisee" note. Off-program vendors that clear that floor (used by more than one franchisee) appear here normally. In networks where every location is the same legal entity, this extra gate does not apply, since there is no separate franchisee identity to protect.
Empty states
This row has two distinct quiet states, and they mean different things:
No active vendor-approval programs. If your group has never published a vendor-approval program, or every program that once existed is now draft, sunset, or archived, the row reads:
No active vendor approval programs defined yet. Once HQ publishes a preferred-vendor program in /programs, drift against it will surface here.
This is not a data gap, it is a policy gap. There is nothing wrong with your vendor data; there is simply no approved list yet for anything to drift against. Publish a program in Programs and this row activates on the next nightly refresh.
No drift. If at least one vendor-approval program is active and every vendor in active network use is on it, the row reads:
Every vendor in active network use is on an HQ-approved program. No drift to address.
This is the state you want: a published policy with full adherence. It can also appear if every off-program vendor in the raw data happens to be used by only one franchisee (suppressed by the privacy floor above), so a quiet row does not always mean zero off-program relationships exist, it means none are visible without risking a single franchisee's identity.
How to use it
Work this row after you have published or updated a vendor-approval program, since that is what gives it something to compare against. Read it top to bottom, since it is already sorted by spend: the vendors at the top are where the most network dollars are riding on a relationship HQ has not vetted. For each one, the vendor detail overlay shows whether it is worth bringing onto the program (check its Verinode Score and category fit against what's already approved) or whether the franchisees using it should be pointed at a vendor that already qualifies. Either way, the fix is a program decision, made in Programs, not something this row does on its own.
- 1Open Vendors from the HQ sidebar and scroll to Off Program.
- 2Confirm at least one vendor-approval program is active. If the row shows the "no active programs" message, go publish one in Programs first.
- 3Read the tiles top to bottom, spend-ranked, the top tiles are the biggest off-program dollars.
- 4Click a tile to open the vendor's detail overlay: check its category, Verinode Score, and franchisee count.
- 5Decide, per vendor: add it to the program (if it earns a place), or plan to move its franchisees to an already-approved alternative.
- 6Track the follow-through in Programs, not here, this row will clear itself once the program catches up.
Related reading
- The network vendor headline: count, annual spend, top vendor, satisfaction, the Hero panel above this row, whose priority pill shows the off-program count once any program is active.
- Programs, where vendor-approval programs are published and vendors are added as approved parties.
- Standards and Compliance, the sibling governance surfaces this row's "policy vs. reality" pattern also applies to.
- Network privacy boundary, the fuller explanation of what HQ can and cannot see about individual franchisees.