A vendor compliance lifecycle, from review to renewal
Eight Make scenarios take a vendor from a submitted packet through review, cure and approval, watch their documents for expiry, close the annual cycle, reconcile payments and block new work for anyone who lapses, never their invoices.
Where this applies
Any business that engages contractors or suppliers and has to keep their paperwork current: property managers, facilities firms, construction, event operators.
- scenarios, built as one cycle
- 8
- expiry stages: 60, 30, 15 days, then day 0
- 4
The problem
Getting a vendor's paperwork in is the beginning. Someone has to review it against a checklist, ask for fixes, approve the vendor for payment, notice when an insurance certificate is about to expire, and deal with the vendors who never respond, without ever withholding money for work already done.
That is a lifecycle, not a task: a state for every vendor, an owner for every transition, and a firm policy about what the system may do on its own.
What we built
One vocabulary, three tables
Vendors, Documents and Cycles share a single status vocabulary: not sent, sent, received pending review, current or cure required, approved for payee setup, with expiring, lapsed and terminated as side states. 'Assignment blocked' is a separate flag, so a vendor can be blocked without losing their history.
Review with a human gate
An hourly scenario runs four independent routes, each made idempotent by a flag: a Slack review card with a checklist for each newly received packet; a cure email listing the reasons and a re-open link, sent only once reasons have been written; an approval request when a vendor is current; and a hand-off to finance with the fields needed to create the payee, which asks for the exact payee name back in the thread.
Expiry on exact days
A daily scenario watches every document's expiry. At 60 days it asks the vendor to renew, at 30 it sends a second notice and alerts the manager, at 15 it escalates, and at expiry it marks the document expired, lapses the vendor and blocks new assignments. Matching on the exact day keeps each notice to one send; releasing a vendor is always a person.
Closing the cycle, once
The day after a cycle's due date, a scenario lapses every vendor still sent or awaiting a cure, blocks new assignments, reports who lapsed and marks the cycle closed, so it runs once per cycle. Its message states the policy: outstanding invoices are still paid, only new work is blocked. A separate scenario opens the next annual cycle and resets the vendors.
Reconciliation against the outside world
A payment reconciler joins the bank's payee names to the stored payee names exactly, flags any vendor paid while not current (the payment is right, the new work is the exception) and creates a stub vendor for an unknown payee. A weekly audit lists packets sent and not received. A vendor sync keeps the vendor table in step with the property-management system's users and publishes a daily do-not-assign list. A task poll compares a stored snapshot against pending tasks to log reassignments for a person to classify.
The outcome
Built in September as a set around a shared data model. The review scenario ran 29 times in a September test window, with 151 operations and no errors.
The rest of the lifecycle has no run history and is switched off; the intake stage that feeds it is a separate project.
The design is consistent: one status vocabulary, a token join between a packet and its vendor, flags that make every route idempotent, and one rule, that invoices are always paid, new work may be blocked, and a release is always a human.
Where it stops
This is a built lifecycle that is not yet running as a whole. The send and reminder scenarios read a fixed cycle record and a fixed year, so opening a new cycle would not yet drive them, and resetting vendors does not clear every stamp those scenarios key on. Payment reconciliation matches payee names exactly and has no fuzzy route. The task poll needs a seeded snapshot and cannot see tasks that leave the pending state. Several empty-result paths depend on how Make aggregators behave and have not been exercised. Some scenarios have notices tied to a missed run day, and owner-engaged vendors are recognised by a text match.
Built with
- Make.com
- Airtable
- Gmail
- Slack
- Make data store
- Property-management system API
Patterns used
- One status vocabulary
- Notices on exact days
- Block new work, never payment
- Snapshot diff in a data store
Page copy drafted with AI assistance. Skofi is accountable for it. Editorial policy
Have something shaped like this?
If any part of the above resembles a problem you are living with, a short call is the fastest way to find out whether it is the same problem underneath.
What happens on the call
- 15 minutes, no deck
- We map the process on the call
- A written scope, or an honest no