← All work
Independent Build

Vendor Compliance Automation

An automated pre-screening system for tender submissions that reads every document in a vendor’s folder, evaluates it against the tender’s compliance rules, and escalates only what needs a human decision.

The Problem

What needed solving

In construction supply procurement, each tender cycle brings in a large volume of vendor submissions, and every submission contains up to ten separate compliance documents — CAC registration, tax clearance, PENCOM, ITF, NSITF, insurance, bank guarantee, TIN, company profile and the signed tender form.

Reviewing these by hand is slow and error-prone. Every document has to be opened, read, checked for validity against the submission deadline, and cross-referenced against the vendor’s registered name. Things get missed. When a disqualification is challenged, the review trail needs to hold up.

The goal was a system that does the mechanical checking consistently, records exactly why each document passed or failed, and never guesses when a document is unclear.

The Build

How the system works

n8n workflow for vendor compliance screening: a Google Drive folder trigger feeds into a wait step, Drive search and download, Extract from File converting each PDF to base64, an HTTP request to the Gemini API, a JavaScript rules engine, an append-row step writing to Google Sheets, an aggregate node, a second JavaScript node producing the submission summary, and an IF node routing submissions that need review to a Telegram alert.
The full screening workflow in n8n — from Drive trigger through the rules engine to Telegram escalation.
  1. Watch the submissions folder

    A Google Drive trigger watches the vendor submissions folder for folder-level updates, since vendors upload complete folders rather than individual files. A short wait lets uploads settle before enumeration begins.

  2. Enumerate the vendor’s documents

    A Google Drive search node lists every PDF inside the submitted folder, then a download node retrieves each one for processing.

  3. Extract to base64

    An Extract from File node converts each PDF to a base64 string. This step is essential on n8n Cloud, where binary data is stored on the filesystem and is not directly accessible in expressions.

  4. Read each document with Gemini

    An HTTP request sends each document to the Gemini API for extraction — identifying document type, dates, names and signature presence. Native batching paces requests to stay within the free tier’s rate limit.

  5. Apply the rules engine

    A JavaScript code node evaluates the extracted data against the tender specification. Company name is matched against the vendor folder name with a normalisation function that strips common company suffixes. Statutory documents are checked for validity as at the submission deadline. Insurance is checked for remaining cover. The bank guarantee is checked against the required minimum value. Presence-only documents are checked for existence. The tender form requires a positive signature signal.

  6. Flag rather than guess

    When a document is illegible or a required date cannot be found, the system does not assume. It marks the document for manual review with the reason recorded. This was the central design decision — a compliance tool that quietly guesses is worse than no tool at all.

  7. Log every result

    Each document result is appended to a Google Sheets compliance log with the file name, document type, vendor, expiry date, status, reason and timestamp — producing a complete audit trail for every submission.

  8. Roll up and escalate

    An aggregate node collects the full submission, a second code node produces a vendor-level completeness summary, and an IF node filters for submissions needing review. Only those trigger a Telegram alert.

Stack

Tools used

n8n Cloud Google Drive API Gemini API JavaScript rules engine Google Sheets Telegram HTTP Request batching
Outcome

What the system delivers

The system runs unattended. When a vendor uploads a folder, every document in it is read, checked against the tender rules, and logged without anyone opening a file.

Every decision is traceable. The compliance log records not just pass or fail but the specific reason — an expiry date, a name mismatch, a guarantee below threshold — which is what matters when a disqualification is questioned.

Ambiguity is escalated, not resolved silently. Documents the system cannot read confidently are flagged for a person rather than being passed or failed on a guess.

The team’s attention goes to the submissions that actually need judgement instead of the mechanical checking that precedes them.

Have a process like this?

Tell me what your team keeps doing by hand and I’ll tell you what it would take to automate.