Alchemy RecipeBeginnerautomation

Real estate listing automation with property photos and descriptions

Published

Property agents spend hours each week on repetitive tasks: uploading photos, writing descriptions, formatting listings across multiple platforms. A typical agent might manage 15-20 active listings at any given time, which means thousands of manual data entry operations each month. What if that entire workflow could run automatically, with your property photos generating polished descriptions and video walkthrough scripts without you lifting a finger?

This is where combining three focused AI tools becomes practical. AI-Boost handles image processing and metadata extraction from property photos. Copy-AI generates compelling listing descriptions based on that extracted data. Hour-One creates video scripts and can even produce synthetic presenter videos for property walkthroughs. Wire them together with an orchestration tool, and you've got a system that takes a folder of raw property images and produces complete, ready-to-publish listings.

The beauty of this approach is that it requires zero manual handoff between steps. Your orchestration tool manages all the data passing, error handling, and sequencing. You define the workflow once, then it works the same way every time.

The Automated Workflow

Choosing Your Orchestration Tool

For this particular workflow, I'd recommend Zapier for absolute beginners, or n8n if you want more control and lower costs at scale. Make works well too, though it sits between the two in terms of ease and flexibility. Claude Code is less suitable here since you'll need persistent workflow execution rather than one-off script runs.

If you're managing just 1-2 properties weekly, Zapier's straightforward interface gets you running fastest. Beyond that, n8n gives you better cost efficiency and more granular data manipulation between steps.

The Overall Flow

Here's how data moves through the system:

  1. Property images arrive in a folder (Dropbox, Google Drive, or via API upload)
  2. AI-Boost processes images and extracts features, room count, condition assessments
  3. Extracted data flows to Copy-AI with a property-specific prompt
  4. Copy-AI generates listing descriptions and marketing copy
  5. Hour-One receives the copy and generates a video script (and optionally produces the video)
  6. Final outputs land in a structured format ready for your listings portal or CRM

Setting Up with n8n

I'll walk through n8n since it offers the most transparent API control and lowest long-term cost.

Start by creating a new workflow. Your first node should trigger on a file upload. n8n has native Google Drive and Dropbox connectors, so you can monitor a specific folder for new property images.


Trigger: Google Drive - Watch for Files
Folder: /Property_Photos/
File type: .jpg, .png
Polling interval: Every 5 minutes

Configure it to pick up image files matching your naming convention. For instance, files named property_12345_kitchen.jpg let you group photos by property ID later.

Extracting Image Data with AI-Boost

AI-Boost's API endpoint for image analysis is straightforward. You'll send the image file and receive structured JSON back with room identifications, condition assessments, and feature detection.

First, retrieve your API key from the AI-Boost dashboard. In n8n, add an HTTP Request node pointing to their image analysis endpoint:


POST https://api.ai-boost.com/v1/analyze/property
Headers:
  Authorization: Bearer YOUR_AI_BOOST_API_KEY
  Content-Type: application/json

Body (raw):
{
  "image_url": "{{ $json.webViewLink }}",
  "analysis_type": "property_features",
  "return_fields": ["rooms", "condition", "features", "estimated_size"]
}

n8n's expression syntax uses {{ }} to reference data from previous nodes. The webViewLink comes directly from the Google Drive trigger node.

Important: AI-Boost can accept either a direct image file or a URL. Since Google Drive and Dropbox can provide shareable URLs, pass those instead of uploading the file again. This saves bandwidth and processing time.

Store the response in a variable. You'll get JSON like this:

{
  "property_id": "12345",
  "rooms": {
    "bedrooms": 3,
    "bathrooms": 2,
    "living_areas": 2
  },
  "condition": "good",
  "features": ["hardwood floors", "gas heating", "garden", "parking"],
  "estimated_size_sqft": 2100
}

Generating Copy with Copy-AI

Next, pass this structured data to Copy-AI. Their API accepts the extracted features and generates property descriptions in various styles (luxury listing, family-friendly, investment property, etc.).

Add another HTTP Request node:


POST https://api.copy-ai.com/v1/generate/property_listing
Headers:
  Authorization: Bearer YOUR_COPYAI_API_KEY
  Content-Type: application/json

Body (raw):
{
  "property_data": {
    "bedrooms": {{ $json.rooms.bedrooms }},
    "bathrooms": {{ $json.rooms.bathrooms }},
    "size_sqft": {{ $json.estimated_size_sqft }},
    "condition": "{{ $json.condition }}",
    "features": {{ JSON.stringify($json.features) }}
  },
  "style": "professional_marketing",
  "length": "medium",
  "target_audience": "first_time_buyers"
}

Copy-AI returns multiple output formats:

{
  "short_description": "Charming 3-bedroom home with modern finishes...",
  "long_description": "Welcome to this beautifully maintained property...",
  "headline": "Spacious Family Home in Sought-After Neighbourhood",
  "bullet_points": [
    "Three generous bedrooms with fitted wardrobes",
    "Newly refurbished kitchen with integrated appliances",
    "Established garden with patio area"
  ]
}

Store each of these outputs separately; you'll use them in different places across your listing.

Creating Video Scripts with Hour-One

Hour-One specialises in generating video scripts and optionally creating videos with synthetic presenters. This step takes your property description and transforms it into engaging video content.

Add another HTTP Request node:


POST https://api.hour-one.com/v1/generate/video_script
Headers:
  Authorization: Bearer YOUR_HOURONE_API_KEY
  Content-Type: application/json

Body (raw):
{
  "content": "{{ $json.long_description }}",
  "property_details": {
    "bedrooms": {{ $json.rooms.bedrooms }},
    "bathrooms": {{ $json.rooms.bathrooms }},
    "address": "{{ $json.property_address }}"
  },
  "script_type": "property_walkthrough",
  "duration_seconds": 120,
  "presenter_style": "professional",
  "generate_video": true,
  "video_format": "vertical"
}

Hour-One's response includes both the script and (if you requested it) a video file link:

{
  "script": "Welcome to 15 Oak Lane. This stunning three-bedroom property offers modern living...",
  "video_url": "https://videos.hour-one.com/v/abc123xyz",
  "video_duration": 122,
  "presenter_name": "Sarah"
}

Combining Everything into a Final Output

Now you need a node that assembles all this data into a single, structured record. Use n8n's Function or Code node to build a clean JSON object:

return {
  property_id: $input.all()[0].json.property_id,
  listing_data: {
    headline: $input.all()[2].json.headline,
    short_description: $input.all()[2].json.short_description,
    long_description: $input.all()[2].json.long_description,
    bullet_points: $input.all()[2].json.bullet_points,
    property_features: $input.all()[0].json.features,
    rooms: $input.all()[0].json.rooms,
    estimated_size: $input.all()[0].json.estimated_size_sqft
  },
  video_content: {
    script: $input.all()[3].json.script,
    video_url: $input.all()[3].json.video_url,
    presenter: $input.all()[3].json.presenter_name
  },
  generated_at: new Date().toISOString()
};

Storing Results

Finally, save this output somewhere useful. Your options include:

  • A Google Sheet (useful for review and posting)
  • Your CRM database via API
  • A JSON file in Dropbox
  • Directly to your listings portal's API

For a Google Sheet, n8n's native Google Sheets connector works well:


Action: Append or Update in Spreadsheet
Spreadsheet: Property Listings Database
Sheet: Generated Listings
Row data:
  - Property ID: {{ $json.property_id }}
  - Headline: {{ $json.listing_data.headline }}
  - Description: {{ $json.listing_data.long_description }}
  - Features: {{ $json.listing_data.property_features.join(", ") }}
  - Video URL: {{ $json.video_content.video_url }}
  - Script: {{ $json.video_content.script }}

Error Handling

Real workflows need to handle failures. Add error handlers to each API call node:


If the AI-Boost request fails:
1. Log the error to a separate "Failed Analyses" sheet
2. Send you an email notification
3. Don't proceed to Copy-AI (because without extracted features,
   the description generation will be poor)

In n8n, use "Continue on Fail" set to false for critical steps, and add a separate Error Handler node that emails you.

Testing Before Going Live

Before running this on 20 properties, test with a single sample image. Upload one property photo and watch it flow through each step. Check that:

  • AI-Boost correctly identifies rooms and features
  • Copy-AI produces descriptions that match your brand voice
  • Hour-One generates usable scripts (you might want "professional" vs. "casual" presenter styles depending on your market)

Make adjustments to prompts if needed. For instance, if Copy-AI's descriptions are too formal, adjust the prompt to include "Use friendly, conversational language appropriate for first-time buyers."

The Manual Alternative

If you prefer not to automate the entire workflow, you can still use these tools individually and stitch things together manually.

Process: upload images to AI-Boost's web interface, download the analysis CSV, paste results into Copy-AI's form, review the generated descriptions, then manually create a script for Hour-One or rewrite it to match your style.

This approach gives you more editorial control but takes 20-30 minutes per property instead of the automated version's near-zero manual time. Most agents find this hybrid approach unworkable after the first few properties because the context switching and manual data copying become tedious.

The advantage of full automation is consistency and speed, not necessarily better quality. You'll want to review at least the first few generated listings anyway to ensure they reflect your brand voice accurately. For more on this, see Real estate listing automation from property inspection r....

Pro Tips

1. Batch Processing and Rate Limits

AI-Boost allows 100 analyses per minute on their standard plan; Copy-AI allows 50 generations per minute. If you're processing 50 properties at once, stagger your requests. In n8n, add a delay node between batches:


After processing 10 properties:
  Wait 60 seconds
  Then process the next 10

This prevents hitting rate limits and also gives you a chance to spot any errors early.

2. Image Quality Matters

AI-Boost's feature detection works best with well-lit, straight-on property photos. If you're working with poor-quality images, the extracted features will be incomplete, which cascades into mediocre descriptions. Brief your photographers (or remind yourself) to take clear, well-lit photos from multiple angles.

If AI-Boost struggles with an image, it will flag it with a confidence_score below 0.7. Set your workflow to skip low-confidence analyses and alert you for manual review.

3. Customising Prompts for Your Market

Copy-AI accepts prompt customisation. If you're selling luxury properties, tweak the prompt:


"style": "luxury_marketing",
"tone": "sophisticated_and_aspirational",
"emphasis": ["premium finishes", "exclusivity", "location prestige"]

For student rentals or first-time buyer homes, change it to:


"style": "accessible_marketing",
"tone": "friendly_and_practical",
"emphasis": ["value for money", "convenient location", "move-in ready"]

Test a few generated descriptions and save the prompt variations that work best. You can even run the same property data through multiple prompts and compare outputs.

4. Video Script Optimisation

Hour-One's video scripts work best if you specify the intended platform. Vertical videos (9:16) for TikTok and Instagram Reels need punchier scripts and faster pacing than horizontal videos (16:9) for YouTube. Adjust the duration_seconds and video_format accordingly:


For Instagram Reels (15-30 seconds):
  "duration_seconds": 25,
  "video_format": "vertical",
  "pacing": "fast"

For YouTube (2-3 minutes):
  "duration_seconds": 150,
  "video_format": "horizontal",
  "pacing": "measured"

5. Cost Monitoring

Your workflow will rack up API calls quickly. Track usage weekly rather than waiting for month-end invoices. Both n8n and Make have usage dashboards. Set alerts if you're approaching plan limits; it's cheaper to upgrade proactively than to have requests fail mid-batch.

Also, consider whether you really need every AI tool on every listing. Perhaps you generate full videos only for premium properties (where the effort justifies the cost) and skip video generation for rentals or quick sales.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
AI-BoostProfessional£9910,000 analyses/month; overages at £0.02 each
Copy-AIGrowth£149Unlimited generations; includes style customisation
Hour-OneBusiness£29950 videos/month; video generation is the expensive part
n8nSelf-hosted (Free) or Cloud Pro£0-£25Self-hosted is free; Cloud Pro scales with execution complexity
ZapierProfessional£50Alternative to n8n; includes 2,000 tasks/month
Google Drive/DropboxExisting plan£0-£10Likely already in use; no additional cost

Total estimated monthly cost for 20-30 property listings: £547-£597 (using self-hosted n8n and not generating videos for every property).

For comparison, outsourcing property photo descriptions and video scripts to a freelancer typically costs £15-£40 per listing, which would be £300-£1,200 monthly at the same volume. The automation pays for itself almost immediately if you're managing more than a handful of properties per month.

The largest variable cost is Hour-One video generation. If you generate videos for only premium properties (say, 5 per month instead of 25), your costs drop to roughly £150/month total.

More Recipes