How it works
What this workflow does
Turn an Airtable tender record into a short bid/no-bid brief for the designated reviewer. An authenticated webhook reads the record, confirms it is still New, asks OpenAI for a summary and exact requirement excerpts, and sends the brief to Slack. The reviewer chooses Bid or Pass, and the workflow writes the decision back to Airtable only if the tender is unchanged.
The workflow imports inactive with dryRun: true. Run with sample data uses a fictional tender record and brief, so the preview does not call Airtable, OpenAI, or Slack.
This is the qualification step for the Target ICP Classification & VIP Lead Notification blueprint; the Commercial-to-Delivery Project Handoff blueprint covers what happens after a successful bid.
Tender facts stay grounded
Capture tender facts requires a New record with a title, a future deadline, and requirements under 18,000 characters. It stores a snapshot of the title, deadline, and requirements so later steps can detect edits.
OpenAI returns a short summary, up to four requirement excerpts, and up to three open questions. Every excerpt must appear exactly in the tender requirements. The workflow rejects unsupported excerpts and oversized text instead of sending an invented requirement to the reviewer. The Slack brief includes the deadline in UTC and a link back to the Airtable record.
Review without acting on stale facts
Before the review, the workflow re-reads the record and requires it to still be New with an unchanged snapshot. It then marks the record Under Review and writes the brief. The Slack request goes only to the configured reviewer and waits up to two days.
The decision is accepted only from that reviewer. If the deadline has passed by the time the response arrives, the record is marked Review Expired rather than accepting a late bid decision. After the review, the workflow re-reads the record again and requires it to remain Under Review with the same facts before writing Bid, Pass, the reviewer, and the response time.
Validation scope
The supplied report confirms the isolated n8n 2.47.4 import, inactive state, and sample path. It also covers structural checks, requirement-excerpt verification, reviewer binding, deadline handling, and changed-record blocking. Live Airtable, OpenAI, and Slack calls require a staging test with your accounts.
How to use
Before you start
- A current n8n instance.
- An Airtable base and tender table.
- An Airtable personal access token with record read and write access.
- An OpenAI API key and a JSON-mode model.
- A Slack app with signed approvals and Capture Who Responded support.
1. Import and run the sample
Download the complete package, extract the ZIP, and read the full setup guide. Import tender-bid-review.n8n.json and keep it inactive.
Open Run with sample data and choose Test workflow. Assemble bid review should return the sample deadline, summary, requirement excerpts, and questions.
2. Prepare the Airtable table
Create a table with these fields:
- Title (text)
- Deadline (date and time)
- Requirements (long text)
- Status (text)
- Brief (long text)
- Decision (text)
- Decision By (text)
- Decision At (text)
Add an eligible record with a future deadline and Status set to New.
3. Configure and connect
In Setup, set airtableBaseId, tendersTableId, reviewerId, and the OpenAI model. Select a Header Auth credential with an Airtable bearer token on all Airtable nodes and a separate OpenAI bearer credential on Summarize tender text.
Configure signed Slack approvals for the designated reviewer. Add a private inbound Header Auth credential to Receive event.
4. Send a tender review
POST the Airtable recordId using the supplied test payloads to check the tender, Bid, and Pass shapes. The webhook acknowledges receipt; the Slack message and Airtable record show the result.
5. Test and operate
Test in staging with a copied record and dryRun set to false. The Slack wait lasts up to two days, and the tender deadline still applies. A reviewer can choose Bid or Pass, and the record stores the reviewer and response time. If a deadline passes or the reviewer does not answer, the record is marked Review Expired.
If the record changes during review, check the current record before resetting it to New for a fresh decision. If Slack fails after a record is marked Under Review, confirm there is no pending request before resetting it. Send one review event per record at a time, and use the source record to verify requirements and eligibility before making a commitment.
Related automations
Use the Proposal Draft & Slack Approval System after a Bid decision, and the Won Deal to Draft Invoice System and Client Onboarding & Project Handoff Automation after the work is won. The Partner Introduction Approval System applies a similar reviewer-gated pattern. Read the Target ICP Classification blueprint for the qualification model.