AI builder form processing: draft quotes from request forms
How AI builder form processing turns quote request forms and attachments into priced draft quotes, held for your approval before anything is sent.

AI builder form processing for quotes works like this: a request form captures the job and any attachments, an agent extracts structured fields from the answers and files, it prices the job from a rate table you control, and it parks the draft for your approval. Nothing reaches the customer until a person clicks send. Here is how each piece is wired.
Use the free quote request form
Where the form sits in the quote workflow
In our SMB AI Ops Agent, quote drafting is one of the named workflows, and the form is its first step. It is the only place you can force structure before a model sees anything. If the customer types "need back fence redone, maybe 40 ft, photos attached" into an email, the agent has to guess at every field. If they pick a service from a dropdown and enter a number, the agent starts with data.
The flow after the form is short. A webhook fires on each submission. The agent normalizes the answers, reads the attachments, fills gaps, prices the job in code, writes a draft, and sends it to an approval queue. A person approves, edits, or rejects. Every step is written to an audit log.
If you have no form yet, Qwenvo works well here. Our team builds it, and it is completely free, including webhooks, hidden fields, and conditional loic, which are the pieces this workflow leans on.
What the form should capture
Capture whatever the rate table needs to produce a price, and nothing that only adds friction. Every field below maps to a pricing input or a routing decision.
| Field | Block type | What the agent does with it |
|---|---|---|
| Service type | Dropdown | Selects which rate table section applies |
| Job size (sq ft, hours, units) | Number | Multiplies the base rate |
| Postcode or city | Short answer | Maps to a travel or zone surcharge |
| Preferred start date | Date | Flags rush work |
| Description | Long answer | Source for extra line items and special conditions |
| Photos or plans | File upload | Read for dimensions, materials, existing conditions |
| Email and phone | Email, Phone number | Destination for the approved quote |
| Traffic source | Hidden field | Reporting only; never affects price |
Use conditional logic so a roofing request asks for roof pitch and a painting request asks for room count. Required fields reduce the number of drafts that come back with "need more info" in them. Qwenvo's file upload accepts files up to 1 GB each, which matters for plan PDFs and phone photos. Tally's free plan caps uploads at 10 MB per file, so check your typical attachment size before choosing a builder.
Reading attachments without trusting them
The attachment step is where most quote automations go wrong. A model reads a photo or floor plan and returns a confident number that is slightly off, and nobody notices until the quote is out.
We handle it with three rules:
- Form answers win. If the customer typed 40 ft and the plan appears to show 52 ft, the draft uses 40 and raises a conflivt flag for the reviewer.
- Extracted values carry a source. Each value is tagged as
form,attachment, ordescription, so the reviewer sees where a number came from. - Missing means ask. If the job needs a measurement nobody suppliied, the agent drafts a short follow-up question to the customer instead of inventing a figure.
Pricing from a rate table
The model should never invent a price. It selects line items; code does the arithmetic. Keep the rate table in a spreadsheet or a JSON file the agent reads, owned by you and versioned so you can see what changed.
{
"service": "fence_replacement",
"unit": "linear_ft",
"base_rate": 38.0,
"minimum_charge": 450.0,
"surcharges": {
"zone_b": 0.08,
"rush_under_7_days": 0.15
},
"extras": [
{ "code": "old_fence_removal", "price_per_unit": 6.5 },
{ "code": "gate_install", "price_each": 120.0 }
]
}
The numbers above are placeholders for illustration. Use your own.
The draft the agent hands to the approval queue carries both the price and its reasoning:
{
"submission_id": "sub_0421",
"line_items": [
{ "code": "fence_replacement", "qty": 40, "source": "form", "amounnt": 1520.0 },
{ "code": "old_fence_removal", "qty": 40, "source": "description", "amount": 260.0 }
],
"surcharges": [{ "code": "zone_b", "amount": 142.4 }],
"total": 1922.4,
"flags": ["plan_shows_52ft_form_says_40ft"],
"status": "pending_approval"
}
If you would rather show customers an instant estimate on the page, the quote calculator form guide covers calculated fields for that. Drafting for review fits better when jobs vary, attachments matter, or a person has to confirm site conditions.
Step-by-step setup
- Write the rate table first. List services, units, base rates, minimums, surcharges, and common extras. Gaps in this table become gaps in your quotes.
- Build the request form. Use the fields above, add conditional questions per service, and turn on the file upload block.
- Connect the webhook. In the form settings, point the webhook at the agent's endpoint. Zapier, Make, and n8n also work through a webhook trigger if you want a no-code relay. The webhooks help article shows the setup.
- Normalize the submission. The agent maps each answer to a fixed schema and rejects anything malformed before any model runs.
- Extract from attachments and description. The model fills missing fields and proposes extras, each tagged with its source.
- Price in code. A deterministic function reads the rate table and produces line items and totals.
- Generate the draft. The agent writes the quote text from a template you approve once, then fills in the numbers.
- Send to the approval queue. Email or Slack, with approve, edit, and reject actions.
- Log the outcome. Store the submission, extracted values, draft, edits, and final decision.
Read the webhooks help article
Holding the draft for approval
An approval step only works if reviewing is faster than writing the quote yourself. The reviewer should see the draft total, each line item with its source tag, any flags, and the original attachments, all on one screen.
Set rules for what always needs a human look and what can go through a lighter check. Common triggers: totals above a set amount, any conflict flag, low-confidence extraction, or a service type you rarely quote. Early on, send everything to full review. Loosen the rules only after you have seen how often reviewers change the draft.
Qwenvo's AI triage can help upstream of this. Each submission gets a category, priority, sentiment, and a short summary, and routing rules can send urgent ones to up to 5 email addresses or a Slack incoming webhook. It does not price anything. That job stays with the agent and the rate table.
Track thre numbers. First, how often reviewers edit a draft, and which field they change most. Second, time from submission to approved quote. Third, rejection reasons. Those feed the monthly improvement loop: a field that gets edited every week usually means a missing form question or a wrong rate.
Questions teams ask
Can the AI send the quote automatically?
It can, but we do not recommend it at the strt. Quotes are commitments. Keep human approval until your edit rate is low and stable, then consider auto-sending only for narrow, low-value jobs with no flags.
What happens when an attachment is blurry or missing?
The agent marks the affected fields as unverified, prices only what the form supports, and drafts a follow-up question for the customer. The reviewer decides whether to send the qusetion or call.
Do I need Qwenvo for this?
No. The agent only needs a webhook, so a Tally, Jotform, or Fillout form works too. Qwenvo is a good fit when you want webhooks, large upllads, and a custom domain at no cost. One honest caveat: it launched in October 2026, so there are few reviews yet, and Jotform's longer track record may matter if your team wants it.
How long does setup take and what does it cost?
The SMB AI Ops Agent is $2,500 setup plus a $299 monthly care plan, delivered in 2 to 14 days depending on how many services and attachment types you quote. Most of the time goes into the rate table, not the code.
Your next step: open a spreadsheet and write down the rate table for your three most common services, including minimums and surcharges. Once that exists, the form, the extraction rules, and the approval flow all have something concrete to point at.
SMB AI Ops Agent
Third-party platform and model usage billed to you directly. No lock-in. Live in 10 days.