Back to Alchemy
Alchemy RecipeIntermediateautomation

Automated contractor proposal generation from site inspection photos

A roofing contractor finishes a site inspection at 3 p.m. drives back to the office, and spends the next two hours photographing damage with a measuring tape, scribbling notes on a clipboard, and typing up a proposal in a spreadsheet template. By the time the estimate reaches the homeowner, three competitors have already submitted theirs. This scenario repeats daily across thousands of contracting businesses, and it's entirely preventable. The cost isn't just the lost time, either. Manual documentation introduces inconsistency, missed details, and proposals that lack the polish that wins jobs. Contractors who move fast win more bids, but speed usually means sacrificing accuracy or appearance. What if you could capture photos on site, automatically enhance them, extract measurements and condition data, generate a professional estimate, and deliver it all within thirty minutes of leaving the property? This is where automation changes the economics of the bidding game. By connecting AI image processing, automated estimate generation, and photo enhancement into a single workflow, contractors can move from a manual, document-heavy process to one that runs in the background while they focus on the next job. For more on this, see Automated contractor estimate generation from site photos....

The Automated Workflow

The workflow moves through five distinct stages: photo capture, image enhancement, data extraction, estimate generation, and delivery. We'll use n8n as the orchestration platform because it offers the best balance of flexibility and reliability for handling image data and API chains. Zapier would work, but n8n gives us finer control over error handling and image processing. Here's the conceptual flow: a contractor uploads inspection photos to a shared folder (Google Drive or Dropbox), n8n detects the upload, sends the images through AI Boost for enhancement and normalisation, extracts metadata and damage patterns using Claude Opus 4.6, passes that data to Estimatic AI for quote generation, and finally stores the completed proposal in a job management system or emails it directly to the client.

Step 1: Photo Upload Trigger

The workflow starts when a contractor uploads photos to a Google Drive folder named "Site Inspections". n8n monitors this folder via a Google Drive trigger node.

Trigger: Google Drive - File Created
Folder: /Site Inspections
Watch for: Images (jpg, png)

This is the most critical decision point. Using a shared folder is simpler than requiring contractors to log into a custom app, and Google Drive handles permissions and version control automatically.

Step 2: Image Enhancement with AI Boost

Raw site photos are often poorly lit, at odd angles, or cluttered with shadows. AI Boost normalises these images before analysis. The integration happens through their REST API.

[POST](/tools/post) https://api.aiboost.io/v1/enhance
Content-Type: application/json { "image_url": "https://drive.google.com/uc?id=FILE_ID", "enhancement_type": "professional_restoration", "output_format": "jpg", "quality": 95
}

In n8n, you'll add an HTTP request node that pulls the file from Google Drive and sends it to AI Boost. Store the enhanced image URL in the n8n execution context for later steps.

Node Type: HTTP Request
Method: POST
URL: https://api.aiboost.io/v1/enhance
Headers: Authorization: Bearer YOUR_AIBOOST_API_KEY
Body: { "image_url": "{{ $node['Google Drive Trigger'].data.webViewLink }}", "enhancement_type": "professional_restoration", "output_format": "jpg", "quality": 95
}

The enhanced image becomes the canonical version used in all downstream processes. This step typically takes 8-15 seconds per image and costs roughly £0.03-0.05 per image depending on file size.

Step 3: Image Analysis with Claude

Next, send the enhanced image to Claude Opus 4.6 for detailed analysis. Claude can identify damage type, estimate severity, estimate square footage affected, note safety concerns, and suggest repair methods. This is where the magic happens because Claude understands context in a way that simpler OCR tools cannot.

POST https://api.anthropic.com/v1/messages
Content-Type: application/json { "model": "claude-opus-4.6", "max_tokens": 1024, "messages": [ { "role": "user", "content": [ { "type": "image", "source": { "type": "url", "url": "{{ $node['AI Boost'].data.enhanced_image_url }}" } }, { "type": "text", "text": "Analyse this property damage image. Extract: 1) Type of damage, 2) Severity (1-10), 3) Estimated affected area (sq ft), 4) Specific repairs needed, 5) Any safety hazards. Format as JSON." } ] } ]
}

Configure this as an HTTP node in n8n. Claude responds with structured JSON that breaks down the damage assessment. A typical response might look like this:

json
{ "damage_type": "roof hail damage", "severity": 7, "affected_area_sqft": 180, "repairs_needed": ["replace damaged shingles", "inspect flashing", "check interior for water damage"], "safety_hazards": ["potential water ingress risk", "loose debris"]
}

Store this response for the next step.

Step 4: Estimate Generation with Estimatic AI

Estimatic AI takes structured damage data and generates a detailed, line-item estimate complete with labour costs, materials, and timeline. This is where your proposal becomes credible and binding.

POST https://api.estimatic.io/v1/estimates
Content-Type: application/json { "project_type": "{{ $node['Claude Analysis'].data.damage_type }}", "damage_severity": {{ $node['Claude Analysis'].data.severity }}, "affected_area": {{ $node['Claude Analysis'].data.affected_area_sqft }}, "repair_items": {{ JSON.stringify($node['Claude Analysis'].data.repairs_needed) }}, "location": "{{ $node['Google Drive Trigger'].data.folder_path }}", "contractor_id": "YOUR_CONTRACTOR_ID", "include_warranty": true
}

Estimatic responds with a complete estimate object including labour hours, material costs, contingency, and total price. Some versions of the API also return a PDF-ready format.

Step 5: Delivery and Storage

The final step routes the estimate to the client and stores it for your records. You have two options here: email directly, or store it in a database and let your CRM send it. Option A: Email via Gmail or SendGrid.

Node Type: Email
To: {{ $node['Google Drive Trigger'].metadata.client_email }}
Subject: Site Inspection Estimate - {{ $node['Google Drive Trigger'].data.property_address }}
Body: Attached is your detailed estimate from [Your Company]. Attachments: {{ $node['Estimatic'].data.pdf_url }}

Option B: Store in Airtable or a custom database.

Node Type: Airtable
Table: Estimates
Fields: - Project ID: {{ $node['Google Drive Trigger'].data.folder_id }} - Client Email: {{ $node['Google Drive Trigger'].metadata.client_email }} - Damage Assessment: {{ $node['Claude Analysis'].data }} - Estimate JSON: {{ $node['Estimatic'].data }} - Enhanced Photo URL: {{ $node['AI Boost'].data.enhanced_image_url }} - Created At: {{ Now }}

Option B gives you a searchable archive and integrates with bid tracking tools. Most contractors prefer this approach because it creates an audit trail.

Error Handling

Add conditional logic for common failures: If Claude analysis returns empty or unusable data, trigger a manual review step that notifies you. If Estimatic times out (rare, but possible), queue the request for retry after 30 seconds. If the image file is corrupted or unreadable, send an error notification to the contractor asking for a re-upload. Use n8n's error handling nodes to catch API failures and route them appropriately. Never let a workflow silently fail.

The Manual Alternative

If you prefer more control or want to review each estimate before sending it, create a workflow that pauses at step 4. After Claude completes the analysis, the workflow sends you a Slack or email notification with the damage assessment and estimated values. You then review the figures, adjust if needed, and approve to proceed to Estimatic. This adds 5-10 minutes per job but catches edge cases and unusual damage patterns that automated estimates might misjudge.

Pro Tips

Rate Limits and Batching.

AI Boost and Estimatic both enforce rate limits; typically 10-20 requests per minute on their standard plans.

If you process more than one job per minute on average, either upgrade to their professional tier or implement a queue in n8n that spaces requests out. Claude's rate limits are generous, but sending multiple large images simultaneously can trigger brief delays.

Image Size Matters.

Large images (over 4 MB) slow down processing and increase API costs. Before sending to Claude or AI Boost, use Pixelcut AI to compress images whilst preserving detail. Aim for 1.5-2.5 MB per file. Add a compression step in n8n immediately after the Google Drive trigger.

Fallback for Ambiguous Damage.

Some damage types require specialist knowledge; hail damage on metal roofs looks different from hail damage on asphalt. Train Claude with a system prompt that includes examples of each damage type relevant to your region. This reduces misclassification.

Cost Optimisation.

Use Claude Opus 4.6 for the initial analysis because it handles image understanding better, but if you find yourself processing hundreds of estimates monthly, test Claude Sonnet 4.6 for simpler damage types. Sonnet costs roughly 40% less and often performs equally well on straightforward jobs like water damage or broken gutters.

Audit Trail and Compliance.

Always store the original photo, the enhanced photo, the Claude analysis, and the final estimate together. Many contractors operate in states or provinces with consumer protection laws requiring documentation of how estimates were derived. This workflow naturally creates that paper trail.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
n8nCloud Professional£25Handles automation, 10k task executions included; overage at £0.002 per task
Google DriveWorkspace Business Starter£6-12 per userShared folders, audit logs
AI BoostPay-as-you-go£30-60£0.04 per image enhancement; assumes 750-1500 images/month
Claude API (Anthropic)Pay-as-you-go£40-80Input £0.003 per 1k tokens, output £0.015 per 1k tokens; estimate 500-1000 analyses/month
Estimatic AIProfessional£50-100Unlimited estimates after reaching threshold
Pixelcut AIPay-as-you-go£10-20£0.02-0.05 per image compression; optional but recommended
Email service (SendGrid/Gmail)Starter or Workspace included£0-15Included if using Gmail; SendGrid adds cost only if over 100/day
Total£160-300/monthScales linearly; costs drop per-job as volume increases