Introduction
Property agents spend hours each week on repetitive tasks: uploading photos to listing sites, writing descriptions, generating videos for social media. Each property requires manual work across multiple platforms, and any mistake means starting over. The real cost isn't just time; it's listings that go live late or descriptions that don't match your brand voice.
This workflow automates the entire process from raw property photos to polished listings. You feed in images and basic details once. The system generates professional descriptions, creates video walkthroughs, and publishes everything across your channels without touching a single file.
We'll use three focused tools: ai-boost to analyse and tag your property photos, copy-ai to write compelling descriptions, and hour-one to generate presentable video content. An orchestration tool (we'll show Zapier, n8n, and Make examples) coordinates everything. No coding required, though we've included examples for those who want to customise.
The Automated Workflow
Which Orchestration Tool to Use
All three options work for this workflow. Choose based on your existing stack:
-
Zapier if you want the quickest setup with minimal configuration; their interface handles most logic visually.
-
n8n if you're self-hosting or need more complex conditional logic without extra cost per task.
-
Make (Integromat) if you're already comfortable with their visual builder and want reasonable pricing.
We'll provide working examples for Zapier and n8n below. The logic translates easily to Make.
How the Workflow Works
The process has four stages:
- Property data entry (address, basic details, photo upload).
- Photo analysis and tagging (ai-boost).
- Description generation (copy-ai).
- Video generation and publishing (hour-one).
Data flows in one direction. Each stage outputs what the next stage needs as input.
Stage 1:
Trigger and Data Collection
The workflow starts when a property is added to your system. This could be a form submission, a spreadsheet update, or an API call. For simplicity, we'll assume a Google Form or Airtable base.
Trigger example in Zapier:
When new record added to Airtable table "Properties"
Fields captured:
- Property address
- Number of bedrooms
- Number of bathrooms
- Asking price
- Photo URLs (comma-separated or array)
Trigger example in n8n:
{
"trigger": "Airtable node",
"operation": "Get all records",
"table": "Properties",
"filters": [
{
"field": "Status",
"condition": "is",
"value": "Ready for listing"
}
]
}
Store these values in memory or local variables. You'll pass them through each subsequent step.
Stage 2:
Photo Analysis with ai-boost
ai-boost uses computer vision to analyse property images. It tags features (kitchen type, flooring, natural light, condition) and extracts metadata.
API endpoint:
POST https://api.ai-boost.io/v1/analyse-image
Headers:
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Body:
{
"image_url": "https://example.com/property-photo-1.jpg",
"analysis_type": "real_estate",
"return_tags": true,
"return_sentiment": true
}
Response example:
{
"image_id": "img_abc123",
"tags": [
{
"feature": "kitchen",
"type": "modern",
"confidence": 0.94
},
{
"feature": "flooring",
"type": "hardwood",
"confidence": 0.87
},
{
"feature": "lighting",
"description": "abundant natural light",
"confidence": 0.91
}
],
"overall_sentiment": "high_quality",
"description_hints": [
"modern kitchen",
"hardwood flooring",
"bright and airy"
]
}
In Zapier, this step looks like:
- Add an action step: "HTTP / Webhooks".
- Method: POST.
- URL:
https://api.ai-boost.io/v1/analyse-image - Headers:
Authorization: Bearer [your key] - Data: Use Zapier's field mapper to pass
image_urlfrom the trigger. - Store the response tags in a Zapier storage variable.
In n8n, use the HTTP Request node:
{
"node": "HTTP Request",
"method": "POST",
"url": "https://api.ai-boost.io/v1/analyse-image",
"authentication": "Generic Credential Type",
"genericAuthType": "Bearer Token",
"options": {
"headers": {
"Authorization": "Bearer {{ $secrets.AI_BOOST_KEY }}"
}
},
"body": {
"image_url": "{{ $node['Trigger'].json['photo_url'] }}",
"analysis_type": "real_estate",
"return_tags": true
}
}
If you have multiple photos per property, loop this step. Many orchestration tools support iterations natively.
Stage 3:
Description Generation with copy-ai
Now you have structured data about the property's features. Feed this into copy-ai to generate a listing description that matches your brand voice.
API endpoint:
POST https://api.copy-ai.io/v1/generate
Headers:
Authorization: Bearer YOUR_COPY_AI_KEY
Content-Type: application/json
Body:
{
"template": "real_estate_listing",
"variables": {
"property_address": "42 Oak Street, London",
"bedrooms": 3,
"bathrooms": 2,
"asking_price": "£450,000",
"features": [
"modern kitchen",
"hardwood flooring",
"bright and airy",
"period features"
],
"tone": "professional_warm"
},
"max_length": 300
}
Response example:
{
"generated_text": "A stunning three-bedroom period property in the heart of Islington. Recently renovated, this home features a modern kitchen, beautiful hardwood flooring, and abundant natural light throughout. Original period details remain in the generous reception rooms. The property benefits from two full bathrooms and a well-maintained exterior. Perfect for families or professionals seeking character and contemporary comfort. Viewing highly recommended.",
"generation_id": "gen_xyz789"
}
In Zapier:
- Add another HTTP / Webhooks action.
- Pass the features extracted by ai-boost (from the previous step's stored tags).
- Include property details from the original trigger.
- Store the generated description.
In n8n:
{
"node": "HTTP Request",
"method": "POST",
"url": "https://api.copy-ai.io/v1/generate",
"authentication": "Generic Credential Type",
"body": {
"template": "real_estate_listing",
"variables": {
"property_address": "{{ $node['Trigger'].json['address'] }}",
"bedrooms": "{{ $node['Trigger'].json['bedrooms'] }}",
"features": "{{ $node['AI Boost'].json['description_hints'] }}",
"tone": "professional_warm"
}
}
}
copy-ai supports custom brand voice templates. If you have a house style, create a reusable template in their dashboard and reference it by ID.
Stage 4:
Video Generation with hour-one
hour-one creates short video walkthroughs from property photos and descriptions. The API accepts images and text, then returns a video URL.
API endpoint:
POST https://api.hour-one.io/v1/videos
Headers:
Authorization: Bearer YOUR_HOUR_ONE_KEY
Content-Type: application/json
Body:
{
"script": "Welcome to 42 Oak Street, a stunning three-bedroom property in Islington. This spacious kitchen features modern appliances and plenty of natural light. Original period features blend seamlessly with contemporary fixtures throughout the home.",
"images": [
{
"url": "https://example.com/photo-1.jpg",
"duration_seconds": 4
},
{
"url": "https://example.com/photo-2.jpg",
"duration_seconds": 4
},
{
"url": "https://example.com/photo-3.jpg",
"duration_seconds": 5
}
],
"voice": {
"language": "en-GB",
"speaker": "professional_female"
},
"background_music": "soft_ambient",
"aspect_ratio": "16:9"
}
Response example:
{
"video_id": "vid_def456",
"status": "processing",
"estimated_completion_seconds": 180,
"video_url": null,
"polling_url": "https://api.hour-one.io/v1/videos/vid_def456"
}
Hour-one generates videos asynchronously. You'll need to poll the URL or set up a webhook to check when the video is ready.
In Zapier, use a Delay step plus a repeat action:
- After generating the video request, add a Delay of 5 minutes.
- Add another HTTP / Webhooks action to poll the
polling_url. - Check if
statusis "completed". - If not, loop back to the delay. (This isn't elegant, but Zapier's native webhook support for hour-one is limited.)
In n8n, use the Wait node plus a webhook listener:
{
"node": "Wait",
"waitType": "set time interval",
"amount": 3,
"unit": "minutes"
}
Then add a HTTP Request node to poll:
{
"node": "HTTP Request",
"method": "GET",
"url": "https://api.hour-one.io/v1/videos/{{ $node['Video Request'].json['video_id'] }}",
"authentication": "Generic Credential Type"
}
Alternatively, configure hour-one to send a webhook callback to your n8n webhook URL when the video is ready. This avoids repeated polling.
Stage 5:
Publish to Listing Platforms
Once you have all assets (description, video), publish them. This could mean:
-
Updating an Airtable record with the generated content.
-
Posting to your website via a content API.
-
Sending to real estate portals like Rightmove or Zoopla (if they offer API access for your account type).
Final Zapier action:
Update Airtable record with:
- Generated description (from copy-ai)
- Video URL (from hour-one)
- Status: "Listed"
Final n8n action:
{
"node": "Airtable",
"operation": "Update record",
"recordId": "{{ $node['Trigger'].json['airtable_record_id'] }}",
"fields": {
"Description": "{{ $node['Copy AI'].json['generated_text'] }}",
"VideoURL": "{{ $node['Video Polling'].json['video_url'] }}",
"ListingStatus": "Live"
}
}
The Manual Alternative
If you want to retain more control over quality, you can run this workflow semi-manually. After ai-boost and copy-ai generate content, pause the automation and send yourself an email with the generated description and photo tags. Review, edit if needed, then manually resume.
In Zapier, add a "Send Email" action before the video generation step. In n8n, use a "Wait for Webhook" node and trigger continuation via a manual button in your interface.
This approach trades speed for editorial oversight, useful for premium properties where brand consistency is critical.
Pro Tips
Error handling for failed image uploads
If ai-boost fails to analyse an image (corrupted file, unsupported format), the workflow halts. Add a condition in your orchestration tool:
If ai-boost response status is not 200:
Send email alert with image URL and error code
Mark property as "requires manual review"
Do not proceed to copy-ai
Rate limiting and delays
All three AI tools have rate limits. copy-ai allows 100 requests per minute on their standard plan. If you're processing multiple properties simultaneously, add a 1-second delay between each API call. In n8n:
{
"node": "Set",
"value1": "name",
"value2": "delay_milliseconds",
"value3": "1000"
}
Then in your HTTP Request node, set a rate limit option if available, or use n8n's native throttle functionality.
Reusing descriptions across similar properties
If two properties share identical features (e.g., two studio flats in the same building), cache the generated description. In Zapier, store it in a database or Airtable lookup table. Query by property type and address postcode before calling copy-ai. This saves API credits.
Customising brand voice without manual editing
copy-ai supports custom templates. Instead of regenerating descriptions each time, create a template in their dashboard with your preferred tone, word choices, and structure. Reference it by ID in every API call. Update the template once; all future descriptions inherit the change.
Monitoring costs per property
Track how many API calls each property consumes:
-
ai-boost: 1 call per image (charge per image).
-
copy-ai: 1 call per description.
-
hour-one: 1 call per video (charged by video duration).
Log these in your orchestration tool or a spreadsheet. If a single property triggers 20 images, costs spike. Set quotas: only analyse the first 8 images per property, selecting the most relevant ones.
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| ai-boost | Starter | £29 | 5,000 image analyses per month; ~£0.006 per additional image. |
| copy-ai | Professional | £49 | 10,000 API calls per month; includes unlimited templates. |
| hour-one | Creator | £99 | 50 video generations per month; videos up to 5 minutes. |
| Zapier | Standard | £20–£29 | If using only this workflow: ~100 tasks per execution. Billed per month. |
| n8n | Self-hosted (free) or Cloud Pro | £0 or £50 | Self-hosted has no recurring cost; Cloud Pro includes support and backups. |
| Make (Integromat) | Pro | £15 | 10,000 operations per month; often cheaper than Zapier for high-volume workflows. |
Sample calculation for 10 properties per month:
-
ai-boost (8 images per property): 80 analyses = £29 (within starter limit).
-
copy-ai: 10 calls = £49 (within professional limit).
-
hour-one: 10 videos = £99 (within creator limit).
-
Orchestration (Zapier): ~200 tasks = £29.
-
Total: £206 per month, or £20.60 per property.
If you self-host n8n, the cost drops to £177 per month.
Summary
This workflow eliminates the manual work of creating listing descriptions and promotional videos. Property photos feed into ai-boost, which tags features. Those tags, combined with basic property details, go to copy-ai for description generation. The description and original photos then create a video via hour-one. Everything updates your Airtable database automatically.
Setup takes 1–2 hours. Ongoing maintenance is minimal: monitor error rates weekly, update your copy-ai template if brand voice changes, and adjust image limits if costs creep up.
For agents processing 10 or more properties monthly, the time saved justifies the subscription costs. For smaller portfolios, the workflow still works but the cost-to-value ratio improves as volume increases.