A contractor photographs a storm-damaged roof on Monday morning. By Tuesday afternoon, the property owner has three competing estimates in their inbox. Yours arrives Wednesday. You've already lost the job. This scenario plays out thousands of times daily across the contracting industry. The gap between inspection and estimate is where contractors bleed business to faster competitors. Most estimates are still hand-written or typed from scratch, with measurements eyeballed from photos and costs calculated manually. A two-hour job becomes four hours. A contractor managing ten inspections weekly loses an entire working day just to estimates. What if that gap could shrink to minutes? The workflow we'll build here combines three focused tools to turn inspection photos into professional, detailed cost estimates with almost no manual intervention. You'll photograph damage, upload the image, and receive a formatted estimate ready to send to clients. The orchestration happens in the background; you stay focused on inspections.
The Automated Workflow
We'll use n8n for this workflow because it handles image processing well, integrates easily with all three tools, and runs on your own infrastructure (important for handling sensitive client photos). Here's how the data flows: inspection photo comes in via email or upload webhook, gets cleaned up by Pixelcut AI, analysed by Estimatic AI for damage assessment and cost calculation, then formatted and enriched by HyperWrite into a professional proposal document.
Step 1: Image intake and processing
Set up an n8n workflow that listens for incoming images. You can use email triggers, webhook endpoints, or direct file uploads. Pixelcut AI cleans up the photo first, removing noise and improving contrast so Estimatic AI works with the best possible input.
n8n Webhook (POST /site-inspection) └─ Image File Input └─ Pixelcut API Call (POST https://api.pixelcut.ai/v1/enhance) └─ Base64-encoded image └─ enhancement_type: "construction_damage"
Configure the Pixelcut step with these settings:
json
{ "image_base64": "{{$node['Webhook'].json.image}}", "enhancement_mode": "contrast_boost", "background_removal": false, "output_format": "jpg", "quality": 95
}
The enhanced image becomes your input for Estimatic AI.
Step 2: Cost analysis with Estimatic AI
Estimatic AI integrates with most orchestration platforms via REST API. Send the cleaned image and basic job details: location, damage type, contractor licence information. Estimatic returns a structured estimate with line items, labour costs, material costs, and markup applied.
POST https://api.estimatic.ai/v1/generate-estimate
Content-Type: application/json
Authorization: Bearer YOUR_ESTIMATIC_API_KEY
Your n8n request body:
json
{ "image_url": "{{$node['Pixelcut'].json.processed_image_url}}", "damage_type": "roof_storm_damage", "location": "{{$node['Webhook'].json.location}}", "contractor_info": { "name": "Your Company", "licence": "YOUR_LICENCE_NUMBER", "markup_percent": 15 }, "include_materials": true, "include_labour": true
}
Estimatic returns a JSON object containing:
json
{ "estimate_id": "EST-20260315-001", "total_cost": 8750, "labour_hours": 32, "line_items": [ { "description": "Roof shingle replacement (48 sq ft)", "quantity": 48, "unit": "sq ft", "unit_cost": 12.50, "subtotal": 600 }, { "description": "Structural assessment and repairs", "quantity": 8, "unit": "hours", "unit_cost": 75, "subtotal": 600 } ], "materials_total": 3200, "labour_total": 4350, "tax_rate": 0.09, "final_total": 8755.50
}
Step 3: Format and enrich with HyperWrite
This is where the estimate becomes a professional proposal. HyperWrite takes Estimatic's raw data and your company branding to produce polished client-facing language. You provide a template that includes your company letterhead format, payment terms, warranty information, and any standard disclaimers. Set up a HyperWrite integration to format the estimate data:
POST https://api.hyperwrite.ai/v1/generate
Content-Type: application/json
Authorization: Bearer YOUR_HYPERWRITE_API_KEY
Request body:
json
{ "prompt": "Format this contractor estimate into a professional proposal document. Include the company header, itemised costs, total amount, payment terms (50% deposit, balance on completion), 2-year warranty statement, and instructions for acceptance. Data: {{$node['Estimatic'].json}}", "tone": "professional_formal", "max_length": 1200, "company_template": "contractor_proposal_v2"
}
HyperWrite returns formatted text that you store as a PDF or send directly to your CRM.
Step 4: Delivery and storage
The final step sends the formatted estimate to your client and archives the job file. Use n8n's built-in Gmail or SendGrid node to email the proposal, then store the estimate ID, image, and client details in a spreadsheet or database for tracking.
json
{ "to": "{{$node['Webhook'].json.client_email}}", "subject": "Your Site Inspection Estimate - {{$node['Estimatic'].json.estimate_id}}", "body": "{{$node['HyperWrite'].json.proposal_text}}", "attachments": [ { "filename": "estimate_{{$node['Estimatic'].json.estimate_id}}.pdf", "content": "{{$node['HyperWrite'].json.pdf_output}}" } ]
}
The Manual Alternative
If you prefer more control over pricing or want to adjust estimates before sending, skip the HyperWrite step and insert a manual approval gate. Use n8n's "Wait" node set to pause the workflow until you review and approve the Estimatic output. You can manually edit line items, adjust markup percentages, or add site-specific notes before HyperWrite formats the final proposal. This introduces a few minutes of manual work but prevents unexpected errors. Some contractors prefer this middle ground, especially for complex jobs where the automated estimate needs refinement.
Pro Tips
Handle rate limits on Estimatic.
The free tier allows 50 estimates per month.
If you run more than two inspections daily, upgrade to their professional plan or implement exponential backoff in n8n so failed requests retry after 60 seconds rather than immediately.
Store processed images securely.
Pixelcut and Estimatic cache images temporarily. For sensitive client photos (storm damage, security concerns), don't rely on external URLs. Download and store images in your own cloud storage, then reference local file paths in subsequent steps.
Test with test images first.
Before connecting real client photos, run the workflow with a handful of test images showing various damage types. Verify that Estimatic returns reasonable cost estimates for your region. Pricing varies significantly by geography, and Estimatic adjusts for location automatically.
Monitor accuracy over time.
When clients accept estimates, track the actual final cost versus what Estimatic predicted. Over time, you'll spot patterns: perhaps Estimatic underestimates labour on complex roof repairs, or overestimates material costs in your area. Use this feedback to adjust the markup percentage in Step 2.
Batch process multiple photos.
If a single site inspection generates five photos (roof from four angles plus ground-level damage), configure n8n to process all images in one workflow run, then combine the line items into a single estimate. Use the "Merge" node to aggregate Estimatic outputs.
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| n8n | Cloud Professional | £20 | Alternatively, self-hosted free version costs only hosting (around £5-10 on a basic VPS). Cloud version offers easier setup and maintenance. |
| Estimatic AI | Professional | £79 | Includes 200 estimates monthly, API access, and custom templates. Entry plan (£29) covers 50 estimates. |
| HyperWrite | Team | £15 per user | You need only one account to service multiple users; cost is per account, not per workflow. |
| Pixelcut AI | API Standard | £29 | 10,000 image operations monthly. Most contractors need fewer than 500 monthly. |
| Total | £143 | Covers roughly 200 estimates and unlimited users on HyperWrite and Pixelcut. |