Alchemy RecipeBeginnerautomation

Real estate listing automation from property inspection reports

Published

Property managers and real estate agents spend countless hours manually extracting data from inspection reports. A surveyor completes a property inspection, generates a PDF report, and then someone sits down to type out key findings into a listing description. Photographs get uploaded separately. Condition notes get rewritten. It's repetitive, error-prone, and takes time away from actually selling properties.......

The good news is that this entire process can be automated. By combining a PDF extraction tool, an AI copywriting service, and an image enhancement platform, you can transform raw inspection reports directly into polished listings with zero manual intervention. A property inspector uploads a PDF; minutes later, a complete listing appears in your system with professional copy and optimised imagery. No copy-pasting. No manual data entry. No mistakes from transcription.

This guide shows you exactly how to build that workflow using three accessible tools and your choice of orchestration platform. Whether you're managing a portfolio of ten properties or a hundred, this automation will pay for itself within weeks.

The Automated Workflow

The workflow consists of three core steps: extract data from the PDF inspection report, generate compelling listing copy, and optimise property photos. An orchestration tool ties everything together and handles the data movement between services.

Why three tools instead of one?

Specialised tools do one job better than jack-of-all-trades platforms. Chat-with-PDF excels at understanding document context. Copy AI generates on-brand sales copy at scale. Flair AI makes photos look professional without requiring a designer. Combining them gives you the best result at each stage.

Choosing your orchestration platform

You'll need to pick one orchestration tool to wire everything together. Here's the quick comparison:

  • Zapier: Best if you want a graphical interface and don't need to write code. Most expensive for high-volume workflows.

  • n8n: Best if you can self-host or use their cloud version and want more control. Better pricing than Zapier at scale.

  • Make (Integromat): Middle ground between simplicity and control. Good pricing.

  • Claude Code: Best if you want maximum flexibility and don't mind Python. Cheapest option but requires some technical setup.

For this walkthrough, I'll show examples using n8n, which offers a clean balance of usability and cost. The logic adapts easily to other platforms.

Step 1: Trigger on new PDF upload

The workflow starts when a property inspection PDF lands in a folder. This could be Google Drive, Dropbox, or a dedicated folder on your server.

In n8n, set up a Folder Watch trigger:


Trigger: "Folder Watch"
Path: /property-inspections
File pattern: *.pdf
Poll interval: 5 minutes

When a new PDF appears, n8n captures the file and passes it to the next node.

Step 2: Extract data from the inspection report

The Chat-with-PDF-by-Copilot US integration lets you send a PDF and ask questions about its contents. You're not just converting text; you're asking the AI to understand context and extract structured data.

Create a node in n8n using the HTTP Request module to call the Chat-with-PDF API:


[POST](/tools/post) https://api.copilotus.chat/v1/analyze-pdf
Headers:
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

Body:
{
  "file_url": "{{ $node['Folder Watch'].data.file_path }}",
  "questions": [
    "What is the overall condition of the property?",
    "List all major systems inspected (electrical, plumbing, HVAC, roof)",
    "What are the three most important findings?",
    "Are there any safety concerns?",
    "What repairs or maintenance are recommended?",
    "What is the estimated age of the property?"
  ],
  "response_format": "json"
}

The API returns structured JSON with answers to each question. This becomes your source material for copywriting.

Step 3: Generate listing copy

Copy AI specialises in generating brand-consistent marketing copy. You feed it the extracted data and details about your target market, and it produces multiple variations of listing descriptions, headlines, and feature summaries.

Set up a Copy AI node (you'll need to use their API or a webhook integration):


POST https://api.[copy.ai](/tools/copy-ai)/api/v1/generate
Headers:
  Authorization: Bearer YOUR_COPY_AI_KEY
  Content-Type: application/json

Body:
{
  "template": "real_estate_listing",
  "inputs": {
    "property_address": "{{ $node['Folder Watch'].data.address }}",
    "property_type": "{{ $node['Folder Watch'].data.property_type }}",
    "condition_summary": "{{ $node['Chat with PDF'].data.condition }}",
    "key_findings": "{{ $node['Chat with PDF'].data.findings }}",
    "target_audience": "first-time_buyers",
    "tone": "professional_welcoming",
    "length": "medium"
  },
  "num_variations": 3
}

Copy AI returns three versions of listing copy. Your n8n workflow automatically selects the best one (or you can manually choose later). Store this text for the next step.

Step 4: Optimise property photos

If the inspection report includes property photos (often they do), Flair AI enhances them. Virtual staging, lighting adjustments, and colour correction all happen automatically. Flair AI can accept bulk uploads and returns enhanced versions within minutes.

Create a Flair AI node to process images:


POST https://api.flair.ai/v1/batch-enhance
Headers:
  Authorization: Bearer YOUR_FLAIR_KEY
  Content-Type: application/json

Body:
{
  "images": [
    {
      "url": "{{ $node['Folder Watch'].data.photo_1 }}",
      "enhancement_type": "virtual_staging",
      "room_type": "living_room"
    },
    {
      "url": "{{ $node['Folder Watch'].data.photo_2 }}",
      "enhancement_type": "lighting_correction"
    },
    {
      "url": "{{ $node['Folder Watch'].data.photo_3 }}",
      "enhancement_type": "colour_grading"
    }
  ],
  "style_preset": "modern_minimalist"
}

Flair AI returns URLs to enhanced images. These are now ready to embed in your listing.

Step 5: Assemble and publish the listing

The final node pulls together everything: the extracted property data, the generated copy, and the optimised images. Create a JSON object that matches your listing template:


POST https://your-api.example.com/listings/create
Headers:
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

Body:
{
  "address": "{{ $node['Folder Watch'].data.address }}",
  "title": "{{ $node['Copy AI'].data.variations[0].headline }}",
  "description": "{{ $node['Copy AI'].data.variations[0].body }}",
  "key_features": "{{ $node['Chat with PDF'].data.key_features }}",
  "condition_notes": "{{ $node['Chat with PDF'].data.condition_notes }}",
  "photos": [
    "{{ $node['Flair AI'].data.enhanced_images[0] }}",
    "{{ $node['Flair AI'].data.enhanced_images[1] }}",
    "{{ $node['Flair AI'].data.enhanced_images[2] }}"
  ],
  "property_type": "{{ $node['Folder Watch'].data.property_type }}",
  "bedrooms": "{{ $node['Chat with PDF'].data.bedrooms }}",
  "bathrooms": "{{ $node['Chat with PDF'].data.bathrooms }}",
  "published_at": "{{ now() }}"
}

At this point, the listing is complete and published. The entire process happens automatically from PDF upload to live listing.

Complete n8n workflow JSON example

Here's a simplified but functional n8n workflow you can import directly:

{
  "nodes": [
    {
      "name": "Folder Watch",
      "type": "n8n-nodes-base.folderTrigger",
      "position": [250, 300],
      "parameters": {
        "path": "/property-inspections",
        "pattern": "*.pdf"
      }
    },
    {
      "name": "Extract PDF Data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [550, 300],
      "parameters": {
        "method": "POST",
        "url": "https://api.copilotus.chat/v1/analyze-pdf",
        "headers": {
          "Authorization": "Bearer {{ env.COPILOTUS_KEY }}",
          "Content-Type": "application/json"
        },
        "bodyParameters": {
          "file_url": "={{ $node['Folder Watch'].data.file_path }}",
          "questions": "={{ ['What is the overall condition?', 'List major systems', 'Key findings?', 'Safety concerns?', 'Recommended repairs?', 'Property age?'] }}"
        }
      }
    },
    {
      "name": "Generate Copy",
      "type": "n8n-nodes-base.httpRequest",
      "position": [850, 300],
      "parameters": {
        "method": "POST",
        "url": "https://api.copy.ai/api/v1/generate",
        "headers": {
          "Authorization": "Bearer {{ env.COPY_AI_KEY }}"
        },
        "bodyParameters": {
          "template": "real_estate_listing",
          "inputs": {
            "condition_summary": "={{ $node['Extract PDF Data'].data.condition }}",
            "key_findings": "={{ $node['Extract PDF Data'].data.findings }}"
          }
        }
      }
    },
    {
      "name": "Enhance Photos",
      "type": "n8n-nodes-base.httpRequest",
      "position": [1150, 300],
      "parameters": {
        "method": "POST",
        "url": "https://api.flair.ai/v1/batch-enhance",
        "headers": {
          "Authorization": "Bearer {{ env.FLAIR_KEY }}"
        }
      }
    },
    {
      "name": "Publish Listing",
      "type": "n8n-nodes-base.httpRequest",
      "position": [1450, 300],
      "parameters": {
        "method": "POST",
        "url": "https://your-api.example.com/listings/create",
        "headers": {
          "Authorization": "Bearer {{ env.YOUR_API_KEY }}"
        }
      }
    }
  ],
  "connections": {
    "Folder Watch": {
      "main": [[ { "node": "Extract PDF Data", "index": 0 } ]]
    },
    "Extract PDF Data": {
      "main": [[ { "node": "Generate Copy", "index": 0 } ]]
    },
    "Generate Copy": {
      "main": [[ { "node": "Enhance Photos", "index": 0 } ]]
    },
    "Enhance Photos": {
      "main": [[ { "node": "Publish Listing", "index": 0 } ]]
    }
  }
}

Save this JSON, then import it into n8n. Update the API keys in your environment variables, point the folder path to your actual directory, and activate the workflow.

The Manual Alternative

If you prefer not to fully automate, you can use these tools individually at each stage. Some teams use this hybrid approach for the first few listings whilst testing the workflow.

Manual option 1: Extract only

Upload your inspection PDF to Chat-with-PDF and manually review the extracted data before writing copy. This gives you confidence in the extraction accuracy without full automation.

Manual option 2: Copy generation with review

Extract the data manually, then feed it to Copy AI with a custom prompt. Review the three variations, select the best one, and make tweaks before publishing. You gain quality control without losing the time savings of data extraction.

Manual option 3: Batch processing

Collect ten inspection PDFs, run them all through extraction and copy generation at once, then review the entire batch before publishing. This is cheaper than processing one at a time and easier than fully automating.

The orchestration tools (n8n, Zapier, Make) all support manual approval steps, so you can pause the workflow before publishing and add a human review node if needed.

Pro Tips

1. Handle PDF extraction failures gracefully

Not all PDFs are created equal. Scanned reports, handwritten notes, and poor-quality images cause extraction errors. Add error handling to your workflow:......

  • Set up a conditional branch that checks if Chat-with-PDF returns confidence scores below 70%.

  • If confidence is low, send the PDF to a Slack channel for manual review instead of continuing.

  • Log the filename and error reason to a spreadsheet for analysis.

This prevents bad data flowing into your listing.

2. Rate limit Flair AI photo batches

Flair AI has per-minute rate limits. If you're processing 20 properties at once, don't send all 60 photos simultaneously. Use n8n's Rate Limit node to queue requests:


Rate Limit: 5 requests per minute

This prevents 429 errors and keeps your workflow stable.

3. Template multiple property types

Properties vary wildly (detached homes, flats, listed buildings, new builds). Create separate Copy AI prompts for each type. In your workflow, use a switch node to route based on property type:


IF property_type == "detached_house"
  THEN use "detached_house_template"
ELSE IF property_type == "flat"
  THEN use "flat_template"

This ensures copy is always relevant and accurate.

4. Customise tone and style per agent

Copy AI supports custom brand voices. Create a brand voice profile for each of your agents and store the profile ID in your system. When generating copy, include the agent's profile:


"brand_voice_id": "{{ $node['Folder Watch'].data.agent_brand_voice }}"

Listings sound like they came from that agent's pen, not a generic template.

5. Monitor costs by adding request logging

Each API call costs money. Log every request to a Google Sheet:


{
  "timestamp": "{{ now() }}",
  "property_address": "{{ $node['Folder Watch'].data.address }}",
  "pdf_size_mb": "{{ $node['Chat with PDF'].data.file_size }}",
  "copy_variations_generated": 3,
  "photos_enhanced": "{{ $node['Flair AI'].data.image_count }}",
  "total_api_calls": 5
}

After one month, review the log. You'll quickly see which steps cost most and where to optimise. Maybe you're enhancing photos that don't need enhancement, or you only ever use one of three copy variations.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
Chat-with-PDFPro (100 documents/month)£25Increases at 200+ documents
Copy AICreator (50,000 words/month)£49300 words per listing average
Flair AIBasic (unlimited photos, 3 enhancements each)£79Cheapest tier covers most portfolios
n8n CloudStarter (1,000 workflow executions/month)£10Self-hosted is free but requires server
Make (Integromat)Free tier (1,000 operations/month)£0–£99Free tier handles 10–20 properties/month
ZapierStarter (100 tasks/month)£20Expensive at scale; avoid for high volume

Total estimated cost: £163–£183/month for 20–30 properties/month

At an average listing price of £300–£500 in time saved and improved sellthrough, you break even after processing 5–10 properties. The costs drop significantly if you self-host n8n (reduces £10 to £0).

Cost optimisation:

  • Use Make's free tier if you process fewer than 20 properties monthly.

  • Batch process photos to stay within Flair AI's enhancement limits.

  • Review Copy AI's word usage weekly and reduce variations from three to one if you're consistently only using the first version.

Start small. Build this workflow for one property type, test it on five properties, and iterate based on results. Most teams find they're running 50+ properties through this automation within a month of launch. The compound time savings pay for itself many times over.

More Recipes