Immobilienanzeigen mit n8n und DocuGenerate Generieren

Artikelbild
Autor Von DocuGenerate

13. März 2026

Einführung

Immobilienmakler und Hausverwaltungen erstellen regelmäßig Anzeigendokumente für neue Objekte – sei es für Druckmedien, E-Mail-Kampagnen oder Kundenportale. Die manuelle Zusammenstellung dieser Dokumente – von der Sammlung von Maklerdaten und dem Verfassen von Beschreibungen bis hin zur Quellensuche für Fotos und der konsistenten Formatierung – nimmt Zeit in Anspruch, die anderweitig besser genutzt werden könnte. In diesem Tutorial erstellen wir einen automatisierten Workflow mit n8n, Claude und DocuGenerate, der in Sekundenschnelle eine professionelle, versandfähige Immobilienanzeigen-PDF erstellt.

Der Workflow verwendet den Anthropic-Knoten in n8n, der Claude aufruft, um auf Abruf realistische Anzeigendaten zu generieren, und diese über DocuGenerate in eine professionell gestaltete Word-Vorlage einzufügen. Die fertige PDF wird dann heruntergeladen und direkt in einem Dropbox-Ordner gespeichert. Obwohl dieses Tutorial Claude zur Simulation von Dateneingaben verwendet, kann derselbe Workflow mit jeder echten Datenquelle verbunden werden: einem Webformular, einem CRM, einer Immobiliendatenbank oder einer Tabellenkalkulation. Die Schritte zur Dokumentengenerierung und -lieferung bleiben unabhängig davon, woher die Daten stammen, identisch, was dieses Tutorial zu einer soliden Grundlage für die Automatisierung in der Praxis macht. Am Ende dieses Leitfadens verfügen Sie über einen vollständig funktionsfähigen n8n-Workflow, den Sie importieren und an Ihren eigenen Anwendungsfall anpassen können.

Die Immobilienanzeigen-Vorlage Einrichten

Bevor wir den n8n-Workflow aufbauen, benötigen wir eine Dokumentvorlage in DocuGenerate. Für dieses Tutorial verwenden wir die Word-Vorlage Property Listing, die ein sauberes Immobilien-Layout mit einem großen Headerbild oben, einer Reihe von drei Innenraumfotos, wichtigen Objektdetails, einem QR-Code, der auf die Anzeigenseite verweist, und einer Maklerkarte am Ende enthält.

Immobilienanzeigen-Vorlage mit Merge-Tags

Die Vorlage verwendet folgende Merge-Tags:

  • agent_photo, agent_name, agent_email, agent_phone, agent_address: Maklerkontaktdaten in der Fußzeile.
  • price: Prominent neben der Überschrift angezeigt.
  • surface, bedrooms, bathrooms, kitchens: Wichtige Objektdaten in der Detailzeile.
  • description: Ein kurzer Absatz zur Beschreibung des Objekts, unterhalb des Kopfzeilenabschnitts angezeigt.
  • main_image, image1, image2, image3: In das Layout eingebettete Objektfotos.
  • url: Wird in einen in der oberen rechten Ecke des Dokuments angezeigten QR-Code umgewandelt.

Einige Besonderheiten dieser Vorlage sind es wert, genauer erläutert zu werden:

  • Bildgrößen. Das Headerbild verwendet die [%main_image | size:'auto':600] -Syntax, um seine Höhe auf 600 Pixel zu begrenzen und dabei das Seitenverhältnis zu bewahren. Die drei Innenraumfotos verwenden [%image1 | size:240:'auto'], um ihre Breite auf 240 Pixel festzulegen, was alle drei Bilder gleich groß und in einer Reihe ausgerichtet hält. Bilder können entweder als öffentliche URL oder als base64-kodierter Daten-URI übergeben werden.

  • QR-Code. Das Feld url wird nicht als Klartext angezeigt. Stattdessen verwendet die Vorlage die Syntax [%url | qrcode:60:60 | set:'barcolor':'#2f7498'], um den Wert als QR-Code mit benutzerdefinierten Abmessungen und einer zur Vorlage passenden Markenfarbe darzustellen. Das Scannen des Codes in der generierten PDF führt den Leser direkt zur Objektanzeigenseite online.

  • Pluralisierung. Die Statistikzeile verwendet die Bedingungssyntax, um die Pluralisierung automatisch zu handhaben. Die Schlafzimmeranzahl wird beispielsweise als [bedrooms] Bedroom[#bedrooms > 1]s[/] in der Vorlage geschrieben, was je nach Wert des Feldes bedrooms “1 Bedroom” oder “3 Bedrooms” ausgibt. Dasselbe Muster gilt für bathrooms und kitchens.

Alle drei Funktionen erfordern die erweiterte Syntax von DocuGenerate, die für die Vorlage aktiviert werden muss, bevor Dokumente generiert werden. Sie können sie in den Vorlageneinstellungen in der Web-App aktivieren.

Überblick über den n8n-Workflow

In diesem Workflow verwenden wir Claude, um Dummy-Anzeigendaten zu generieren, damit der Prozess End-to-End ohne Live-Datenbank oder externes System demonstriert werden kann. In einer realen Bereitstellung würden der manuelle Trigger und der Message a model-Knoten durch einen Trigger und eine Datenquelle ersetzt, die Ihren tatsächlichen Prozess widerspiegeln.

Der vollständige Workflow besteht aus mehreren linear verbundenen Knoten:

Der vollständige n8n-Workflow

Sie können die Workflow-JSON-Datei herunterladen und direkt in Ihre n8n-Instanz importieren. Sie müssen die DocuGenerate-Vorlagen-ID, Ihre API-Zugangsdaten und den Dropbox-Zielpfad an Ihr eigenes Setup anpassen. Gehen wir nun jeden Knoten im Detail durch.

Anzeigendaten mit Claude Generieren

Der erste funktionale Knoten ist der Message a model-Knoten aus der Anthropic-Integration, konfiguriert zur Verwendung des Modells claude-sonnet-4-6. Seine Rolle in diesem Workflow besteht darin, einen realistischen Satz von Immobilienanzeigen-Werten zu erzeugen, die an DocuGenerate übergeben werden können. Um diesen Knoten zu verwenden, benötigen Sie ein Anthropic-Konto und einen API-Schlüssel, der in der Anthropic Console generiert wird, den Sie in n8n als Zugangsdaten beim erstmaligen Einrichten des Knotens hinzufügen.

API-Schlüssel-Konfiguration für den Anthropic-Knoten

Der Prompt enthält die vollständige JSON-Struktur, die die Vorlage erwartet, wobei die meisten Felder leer für Claude zum Befüllen belassen werden. Das Feld agent_photo ist mit einem URL-Muster von randomuser.me vorbelegt, einem kostenlosen Dienst, der für eine gegebene numerische ID ein realistisches Porträtfoto zurückgibt. Claude wird angewiesen, <AGENT_ID> durch eine zufällige ganze Zahl zwischen 1 und 50 zu ersetzen, was bei jedem Durchlauf ein anderes Makler-Foto erzeugt.

Konfiguration des Message a model-Knotens

Hier ist der vollständige Prompt, der im Knoten verwendet wird:

Can you generate dummy values for the following JSON? The <AGENT_ID> needs to be an integer from 1 to 50.
The description needs to be around 400 characters. The output needs to be just the updated JSON.

{
  "agent_photo": "https://randomuser.me/api/portraits/women/<AGENT_ID>.jpg",
  "agent_address": "",
  "agent_phone": "",
  "agent_email": "",
  "agent_name": "",
  "description": "",
  "kitchens": "",
  "bathrooms": "",
  "bedrooms": "",
  "surface": "",
  "price": "",
  "url": "https://www.docugenerate.com/blog/generate-property-listings-with-n8n-and-docugenerate/",
  "main_image": "https://images.pexels.com/photos/1571459/pexels-photo-1571459.jpeg",
  "image1": "https://images.pexels.com/photos/2062431/pexels-photo-2062431.jpeg?w=400",
  "image2": "https://images.pexels.com/photos/2089698/pexels-photo-2089698.jpeg?w=400",
  "image3": "https://images.pexels.com/photos/164595/pexels-photo-164595.jpeg?w=400"
}

Die vier Bildfelder werden der Einfachheit halber als statische Pexels-URLs belassen. In einem realen Szenario würden dies tatsächliche Fotos des Objekts sein, die aus einer Medienbibliothek, einem CRM-Anhang oder einem Cloud-Speicher-Bucket abgerufen werden. Das Feld url verweist auf diesen Blogbeitrag und wird als QR-Code im endgültigen Dokument dargestellt.

Claude gibt das ausgefüllte JSON zurück, eingebettet in einen Markdown-Codeblock. Die Antwort vom Message a model-Knoten hat folgende Struktur:

[
  {
    "content": [
      {
        "type": "text",
        "text": "```json\n{\n  \"agent_name\": \"Sarah Mitchell\",\n  \"price\": \"$485,000\",\n  ...\n}\n```"
      }
    ]
  }
]

Die tatsächlichen Anzeigendaten sind in content[0].text verschachtelt und von Markdown-Begrenzungszeichen umgeben, was bedeutet, dass sie vom nächsten Knoten nicht direkt verwendet werden können. Darum kümmert sich der Code-Knoten im folgenden Schritt.

Die Claude-Antwort Parsen

Der Code in JavaScript-Knoten extrahiert das JSON-Objekt aus Claudes Antwort und stellt es als saubere, strukturierte Daten für den Rest des Workflows bereit. Dieser Schritt ist aus zwei Gründen notwendig: Der Message a model-Knoten gibt das vollständige API-Antwortobjekt und nicht nur den Textinhalt zurück, und Claude neigt dazu, seine JSON-Ausgabe in Markdown-Codeblöcken zu verpacken, auch wenn es angewiesen wurde, dies nicht zu tun. Anstatt sich auf Prompt Engineering zu verlassen, um diese Inkonsistenz zu beheben, erledigt der Code-Knoten dies bei jeder Ausführung zuverlässig.

Konfiguration des Code in JavaScript-Knotens

const text = $input.first().json.content[0].text;
const json = text.replace(/```json\n?/, '').replace(/\n?```/, '').trim();
return { json: JSON.parse(json) };

Die erste Zeile liest den Textwert aus Claudes Antwort. Die zweite Zeile entfernt die Markdown-Begrenzungszeichen mit zwei regulären Ausdrücken. Die dritte Zeile parst die bereinigte Zeichenkette in ein JavaScript-Objekt und gibt es als Knotenausgabe zurück. Nach diesem Schritt sind alle Anzeigenfelder (agent_name, price, bedrooms usw.) als oberste Schlüssel im JSON des Elements verfügbar und können direkt an DocuGenerate übergeben werden.

Das Dokument Generieren

Der Generate document-Knoten verwendet die DocuGenerate-Integration für n8n, um die Anzeigendaten mit der Word-Vorlage zusammenzuführen und eine PDF zu erstellen. Um diesen Knoten zu verwenden, installieren Sie DocuGenerate in Ihrer n8n-Instanz und konfigurieren Sie ihn mit Ihrem API-Schlüssel.

Konfiguration des Generate document-Knotens

Der Knoten wird mit folgenden Parametern konfiguriert:

  • Template Name or ID: Die im Schritt Vorlage einrichten hochgeladene Vorlage Property Listing.
  • Name: Ein n8n-Ausdruck, der einen dynamischen Dokumentnamen generiert: Property Listing for {{ $json.price }} ({{ $json.surface }}). Dies erzeugt einen Dateinamen wie Property Listing for $485,000 (1,850 sq ft), der jedes Dokument leicht identifizierbar macht.
  • Format: Auf PDF (.pdf) gesetzt.
  • Data: Auf {{ $json }} gesetzt, was die gesamte Ausgabe des Code-Knotens als Daten-Payload übergibt. Da der Code-Knoten bereits ein flaches JSON-Objekt mit allen Vorlagenfeldern auf oberster Ebene produziert, ist keine zusätzliche Zuordnung erforderlich.

Wenn der Knoten erfolgreich ausgeführt wird, enthält die Antwort unter anderem ein Feld document_uri mit einer URL, die auf die generierte PDF verweist, sowie ein Feld filename mit dem Dateinamen des Dokuments.

Die Generierte PDF Herunterladen

DocuGenerate gibt eine URL zum generierten Dokument zurück, nicht den binären Dateiinhalt direkt. Um die PDF im nächsten Schritt in Dropbox hochzuladen, müssen wir die Datei zunächst von dieser URL abrufen. Der HTTP Request-Knoten erledigt dies durch eine GET-Anfrage an die document_uri, die vom Knoten Generate document zurückgegeben wurde.

Konfiguration des HTTP Request-Knotens

Der Parameter URL ist auf {{ $json.document_uri }} gesetzt und referenziert die Dokument-URL aus dem vorherigen Schritt. Die binären Dateidaten sind anschließend für den Dropbox-Knoten zum Hochladen verfügbar.

Die PDF in Dropbox Speichern

Der letzte Knoten lädt die generierte PDF in einen dedizierten Dropbox-Ordner hoch, indem er den Dropbox-Knoten in n8n verwendet, und gibt dem Team sofortigen Zugriff auf das neue Anzeigendokument.

Konfiguration des Upload a file-Knotens

Der Knoten verwendet OAuth2-Authentifizierung, die mit Ihrem Dropbox-Konto verbunden ist. Der Parameter File Path ist auf /n8n/Property Listings/{{ $json.filename }} gesetzt, wodurch jedes Dokument im Ordner /n8n/Property Listings/ unter Verwendung des von DocuGenerate zurückgegebenen Dateinamens gespeichert wird. Die Option Binary File ist aktiviert, damit der Knoten den Dateiinhalt aus der Ausgabe des HTTP Request-Knotens liest und nicht von einem statischen Pfad.

Sobald der Workflow abgeschlossen ist, ist die generierte PDF in Dropbox verfügbar und sieht so aus. Sie können auch eine Beispiel-PDF herunterladen, um das Endergebnis zu sehen.

Beispiel der generierten Immobilienanzeigen-PDF

Reale Datenquellen

Der aktuelle Workflow verwendet Claude als praktischen Ersatz für eine echte Datenquelle, aber in der Praxis kommen Immobilienanzeigendaten selten von einem KI-Modell. Sie liegen typischerweise in einer Formulareinreichung, einem CRM-Datensatz, einer Datenbankzeile oder einer Tabellenkalkulation vor. Da die Schritte zur Dokumentengenerierung und -lieferung unabhängig vom Ursprung der Daten gleich bleiben, ist das Ersetzen des Anthropic-Knotens durch einen anderen Trigger und eine andere Datenquelle alles, was nötig ist, um diesen Tutorial-Workflow in eine produktionsreife Automatisierung zu verwandeln. Nachfolgend sind einige häufige Szenarien aufgeführt, für die sich dieser Workflow gut eignet.

Webformulare

Viele Agenturen verwenden Online-Formulare, um Objektdetails von Maklern vor der Erstellung von Marketingmaterialien zu erfassen. Ein Formular-Tool wie Jotform, Typeform oder Tally kann Felder wie Adresse, Preis, Zimmeranzahl, Fläche und eine Beschreibung direkt vom Makler erfassen. Wenn eine neue Einreichung eingeht, kann die Formularplattform den n8n-Workflow über einen Webhook auslösen und alle erfassten Daten direkt in den Dokumentengenerierungsschritt einspeisen. Dadurch wird die Erstellung von Immobilienanzeigen zu einer natürlichen Fortsetzung des Aufnahmeprozesses, ohne manuelle Datenübertragung.

CRM-Systeme

Immobilienunternehmen, die ihren Bestand in einem CRM wie Salesforce, HubSpot oder Pipedrive verwalten, können die Dokumentengenerierung auslösen, wenn ein Objektdatensatz eine bestimmte Pipeline-Phase erreicht – zum Beispiel wenn er als “Veröffentlichungsbereit” oder “Neues Angebot” markiert wird. Der Workflow würde die relevanten Felder aus dem CRM-Datensatz abrufen, sie in die Vorlage einfügen und die PDF entweder zurück im Datensatz speichern oder dem zuständigen Makler per E-Mail zustellen. So bleibt das Anzeigendokument mit den CRM-Daten synchron und doppelte Dateneingabe wird eliminiert.

Datenbanken und Tabellenkalkulationen

Teams, die ihren Objektbestand in einer Datenbank wie PostgreSQL, Airtable oder Notion oder in einer Tabellenkalkulation wie Google Sheets oder Excel verwalten, können neue oder aktualisierte Datensätze planmäßig oder bei Hinzufügen einer Zeile abfragen. n8n verfügt über native Knoten für all diese Plattformen, was es einfach macht, eine Zeile zu lesen, die Spalten den Vorlagenfeldern zuzuordnen und für jedes Objekt eine PDF zu generieren. Dieser Ansatz eignet sich besonders gut für Agenturen, die mehrere Anzeigen auf einmal hinzufügen und alle Dokumente in einem einzigen automatisierten Durchlauf generieren möchten.

Fazit

In diesem Tutorial haben wir einen n8n-Workflow erstellt, der automatisch eine Immobilienanzeigen-PDF generiert. Der Workflow verwendet Claude, um realistische Dateneingaben zu simulieren, parst die Antwort in strukturiertes JSON, fügt die Daten in eine professionell gestaltete Word-Vorlage ein und speichert die resultierende PDF in Dropbox. Die Vorlage demonstriert mehrere erweiterte DocuGenerate-Funktionen, darunter Bildgrößenanpassung mit Filtern, QR-Code-Generierung und automatische Pluralisierung über Bedingungssyntax.

In einer realen Bereitstellung würde der Anthropic-Knoten durch eine Verbindung zu Ihrer tatsächlichen Datenquelle ersetzt – sei es ein Webformular, ein CRM, eine Datenbank oder eine Tabellenkalkulation. Die Schritte zur Dokumentengenerierung und -lieferung bleiben dabei gleich, was diesen Workflow einfach an nahezu jede Immobilienverwaltungsumgebung anpassbar macht.

Ressourcen

Diesen Beitrag teilen