Vendor Dispatch with Spending Limits
Dispatches maintenance work orders to the right vendor with a not-to-exceed (NTE) amount and keeps spending inside each owner's limits. Three times a day it reads new work orders from your property management system (Buildium or a Google Sheet), has AI pick the trade and estimate the cost, and routes each one. A vendor whose insurance (COI) has expired or is not on file is skipped and you are alerted; if no insured vendor is left the job is not dispatched. A job estimated at or over the bid threshold (not emergencies) goes out for bids: one email to you with up to 3 vendors in Bcc. A job whose NTE is over the owner's approval threshold, or would take the property over this month's budget, is drafted as an approval request to the owner and waits in your Approval Queue. Everything else is emailed to the best-ranked insured vendor with the NTE, added to the Spend Ledger and written back to the work order (Buildium: vendor plus the NTE in the vendor notes; Sheets: status, vendor and NTE columns). Each work order is claimed in the Dispatch Log before anything is sent, so it is handled once; delete its Dispatch Log row to run it again. Up to 50 work orders per run. Spreadsheet tabs, header in row 1: Vendors: A company, B trades (comma list of plumbing, electrical, hvac, appliance, roofing, pest, locksmith, landscaping, cleaning, painting, general), C properties served (comma list; blank or * for all), D rep name, E rep email, F insurance (COI) expiry date, G preferred rank (1 = first choice), H Buildium vendor ID (Buildium only; a vendor without one is never dispatched to). Owners: A property, B owner email, C approval threshold override ($), D monthly budget override ($), E address shown to vendors (optional). Spend Ledger: A date, B property, C unit, D work order, E trade, F vendor, G NTE, H route, I category. Dispatch Log: A work order ID, B claimed on, C property, D unit, E issue. With Google Sheets as the system, also Work Orders: A work order ID (required; a row without one is never dispatched), B date reported, C property, D unit, E issue, F details, G access or contact notes, H status (blank or New = waiting; the flow writes Dispatched), I vendor, J NTE. With Buildium, name each property by its Buildium property ID in the Vendors and Owners tabs. Setup: create the tabs, connect Google (Sheets and Gmail) and Buildium if you use it, add an OpenAI API key in Settings, and set the dollar thresholds on the setup screen; they land in the Settings node, where you can change them later. Save the flow once after importing it to arm the schedule. Limitations: an owner approval waits in your Approval Queue with no automatic timeout, and the owner's reply is not read, so dispatch approved jobs yourself and add them to the Spend Ledger. Bids are requested, not compared. The budget check re-reads the Spend Ledger for each work order, so spend dispatched earlier in the same run counts; a job waiting for owner approval counts only once you add it to the Spend Ledger. Jobs sent for bids, owner approval or an alert are recorded only in the Dispatch Log. Buildium: only work orders in status New updated in the last 7 days are read; Buildium has no NTE field, so the NTE goes at the top of the vendor notes; and a job is dispatched only to a vendor with its Buildium vendor ID in Vendors column H; when the chosen vendor has none, nothing is sent and you are alerted. The cost estimate is an AI guess, which is why every dispatch carries an NTE.
What's inside · 39 steps
- Schedule
- PromptTemplate×16
- GoogleSheetsIntegration×8
- CombineData×2
- CodeSandbox×3
- Loop
- LanguageModel
- StructuredOutput
- Switch
- GmailIntegration×3
- ApprovalQueue
- IfElse
Use this template
Sign in to open this workflow in the builder, ready to connect your accounts.
Use this template