Collect Bids → Extract Scope → Normalise → Flag Exclusions → Compare

Bid Normalisation Agent

Converts vendor proposals into comparable scopes and highlights exclusions and gaps, so a bid decision is made on like-for-like terms instead of whoever formatted best.

The Problem

Three bids, three formats. The cheapest hides the exclusions.

Vendor proposals come in different formats. Comparisons are apples-to-oranges. Hidden costs show up later.

What Changes

Bids put on the same footing, gaps surfaced.

Converts proposals into comparable scopes, highlights exclusions and gaps, and presents a side-by-side comparison. Your team decides based on real scope, not formatting.

Humans stay in control: Your team chooses the vendor. The agent makes the bids comparable and surfaces what is missing. It removes the apples-to-oranges, not the decision.

HOW THE AGENT WORKS

TRIGGERLLMAPIDECISIONACTIONWAIT
TRIGGERBids ReceivedProposals come in for a job
LLMExtract ScopePull line items and terms from each
LLMNormaliseMap all bids to a common scope
LLMFlag ExclusionsSurface gaps and hidden costs
DECISIONComparable?
ACTIONBuild ComparisonPresent the like-for-like table
The agent doesn't pick the winner. It normalises bids to a common scope and surfaces exclusions. Your team decides.

HOW TO BUILD IT

Three levels of depth. Pick the one that matches where you are.

For the ops person who needs to understand what's involved and brief their team.

Your BidsVendor proposals
The AgentWorkflow engine + LLM
Your ComparisonLike-for-like

WHAT YOUR TEAM PROVIDES ONCE

  • The scope - the work the bids are for
  • Common scope template - the line items to map every bid to
  • Exclusion patterns - what vendors commonly leave out
  • Comparison format - how you want bids presented
  • Decision owner - who selects the vendor
What happens day-to-day: Three bids come in for a roof repair, each formatted differently. The agent maps them to one common scope, surfaces what each excludes, and builds a comparison, so the team sees the cheapest bid is cheapest because it left out flashing.

For the IT person or technical lead who needs to scope the integration.

INQUIRY SOURCES

Email bids
PDF uploads
Vendor portal

WORKFLOW ENGINE (N8N)

Trigger
LLM - Extract scope
LLM - Normalise
LLM - Flag exclusions
Branch - comparable?
Build comparison
Route to decision

CONNECTS TO

Email / upload intakeRead: incoming bids
OCR / document parserExtract bid line items
Document / sheet storeWrite: normalised comparison
Notifications (email / Slack)Send comparison to the decision owner
WITHOUT PMS API

Agent works from uploaded bid files and outputs the comparison to a sheet.

WITH PMS API

Agent ingests bids and outputs a normalised comparison automatically. Best experience.

For the person who wants to build this agent step by step. Each node below maps to an n8n workflow node.

TRIGGERNode 1
Trigger - Bids Received
Bids arrive by email or upload for a defined job.
Output: { job_id, scope, bids[] }
LLMNode 2
LLM - Extract & Normalise
Pull each bid into the common scope template line by line.
Output: [{ vendor, line_items[], total, terms }]
You normalise vendor bids to a common scope.

For each bid, map its contents to the COMMON SCOPE TEMPLATE line items. Where a line is not addressed, mark it not_included. Return per vendor: line_items [{scope_line, included, amount}], total, terms.
Respond ONLY with a valid JSON array.

COMMON SCOPE TEMPLATE: {scope_template}
BIDS: {bids}
INPUT
Bid A $8k 'roof repair'; Bid B $9.5k 'roof repair incl flashing + 5yr warranty'
OUTPUT
[
  { "vendor": "A", "line_items": [{"scope_line":"tear-off","included":true,"amount":3000},{"scope_line":"flashing","included":false,"amount":0},{"scope_line":"warranty","included":false,"amount":0}], "total": 8000, "terms": "no warranty stated" },
  { "vendor": "B", "line_items": [{"scope_line":"tear-off","included":true,"amount":3200},{"scope_line":"flashing","included":true,"amount":900},{"scope_line":"warranty","included":true,"amount":0}], "total": 9500, "terms": "5yr warranty" }
]
LLMNode 3
LLM - Flag Exclusions
Highlight what each bid leaves out and any hidden-cost risk.
Output: [{ vendor, exclusions[], risk_note }]
You flag exclusions and hidden costs across normalised bids.

For each vendor, list exclusions (scope lines not included) and a risk_note about likely change orders.
Respond ONLY with a valid JSON array.

NORMALISED BIDS: {normalised}
OUTPUT
[
  { "vendor": "A", "exclusions": ["flashing", "warranty"], "risk_note": "Flashing almost certainly needed; expect a change order that erases the price gap." }
]
DECISIONNode 4
Condition - Comparable?
IF all bids mapped to the common scope → build the comparison. ELSE → request the missing detail.
Output: Branch: COMPARABLE (build) or INCOMPLETE (request)
ACTIONNode 5
Build Comparison
Produce the like-for-like comparison with exclusions called out and route to the decision owner.
Output: Decision-ready bid comparison delivered.
MVP vs Advanced — Where To Start
MVP — START HERE
  • Uploaded bids
  • LLM scope extraction
  • Manual normalisation
  • Comparison to a sheet
  • Manual exclusion notes
  • Email to owner
ADVANCED — ADD LATER

    Full Video Walkthrough Coming Soon

    From mismatched bids to a like-for-like comparison - step by step.

    Register to be notified

    Everything on this page is free to learn.

    When you're ready to build — do it yourself or bring us in.

    OTHER AGENTS IN LEASING & MARKETING

    Flags renewals early so terms get negotiated on time
    Detects missed windows, triggers rescheduling and backup outreach
    Builds performance profiles from response times and job history
    Blocks dispatch when compliance docs are missing or expired

    Frequently asked questions

    Bid Normalisation Agent is an AI agent that converts proposals into comparable scopes, and highlights gaps.
    Three bids, three formats. The cheapest hides the exclusions. The Bid Normalisation Agent addresses this — it converts proposals into comparable scopes, and highlights gaps.
    No — your team stays in control. Your team chooses the vendor. The agent makes the bids comparable and surfaces what is missing. It removes the apples-to-oranges, not the decision.