Introductie
Vastgoedkantoren en vastgoedbeheerbedrijven produceren regelmatig advertentiedocumenten voor nieuwe panden, of het nu gaat om druk, e-mailcampagnes, of klantportalen. Het handmatig samenstellen van deze documenten, van het verzamelen van makelaardetails en het schrijven van beschrijvingen tot het vinden van foto’s en het consistent opmaken van alles, kost tijd die elders besteed zou kunnen worden. In deze tutorial bouwen we een geautomatiseerde workflow met n8n, Claude, en DocuGenerate die binnen enkele seconden een gepolijste, direct-deelbare PDF-vastgoedadvertentie produceert.
De workflow gebruikt de Anthropic-node in n8n, die Claude aanroept om op verzoek realistische advertentiedata te genereren, en voegt deze samen met een professioneel ontworpen Word-sjabloon via DocuGenerate. De voltooide PDF wordt vervolgens gedownload en rechtstreeks opgeslagen in een Dropbox-map. Hoewel deze tutorial Claude gebruikt om gegevensinvoer te simuleren, kan dezelfde workflow worden gekoppeld aan elke echte gegevensbron: een webformulier, een CRM, een vastgoeddatabase, of een spreadsheet. De stappen voor documentgeneratie en -bezorging blijven identiek, ongeacht waar de data vandaan komt, wat dit een solide basis maakt voor automatisering in de praktijk. Aan het einde van deze gids heeft u een volledig functionele n8n-workflow die u kunt importeren en aanpassen aan uw eigen gebruikssituatie.
Het Sjabloon voor Vastgoedadvertenties Instellen
Voordat we de n8n-workflow bouwen, hebben we een documentsjabloon in DocuGenerate nodig. Voor deze tutorial gebruiken we het Word-sjabloon Property Listing, dat een strakke vastgoedlay-out heeft met een grote hero-afbeelding bovenaan, een rij van drie interieurfoto’s, belangrijke panddetails, een QR-code die linkt naar de advertentiepagina, en een makelaarskaart onderaan.

Het sjabloon gebruikt de volgende merge-tags:
agent_photo, agent_name, agent_email, agent_phone, agent_address: Contactgegevens van de makelaar, weergegeven op de kaart in de footer. price: Prominent weergegeven naast de titel. surface, bedrooms, bathrooms, kitchens: Belangrijke pandstatistieken weergegeven in de detailrij. description: Een korte alinea die het pand beschrijft, weergegeven onder de titelsectie. main_image, image1, image2, image3: Pandfoto’s ingesloten in de lay-out. url: Omgezet naar een QR-code die wordt weergegeven in de rechterbovenhoek van het document.
Verschillende functies van dit sjabloon zijn het waard om nader toe te lichten:
-
Formaataanpassing van afbeeldingen. De hero-afbeelding gebruikt de formaatsyntax [%main_image | size:'auto':600] om de hoogte te beperken tot 600 pixels, met behoud van de beeldverhouding. De drie interieurfoto’s gebruiken [%image1 | size:240:'auto'] om hun breedte vast te zetten op 240 pixels, zodat alle drie de afbeeldingen dezelfde grootte hebben en op één rij zijn uitgelijnd. Afbeeldingen kunnen worden doorgegeven als een openbare URL of als een base64-gecodeerde data-URI.
-
QR-code. Het veld url wordt niet weergegeven als platte tekst. In plaats daarvan gebruikt het sjabloon de syntax [%url | qrcode:60:60 | set:'barcolor':'#2f7498'] om de waarde weer te geven als een QR-code met aangepaste afmetingen en een merkkleur die overeenkomt met het documentthema. Het scannen van de code in de gegenereerde PDF brengt de lezer rechtstreeks naar de vastgoedadvertentiepagina online.
-
Meervoudsvorming. De statistiekenrij gebruikt voorwaardelijke syntax om automatisch de meervoudsvorm te verwerken. Het aantal slaapkamers wordt bijvoorbeeld geschreven als [bedrooms] Bedroom[#bedrooms > 1]s[/] in het sjabloon, wat resulteert in “1 Bedroom” of “3 Bedrooms” afhankelijk van de waarde van het veld bedrooms. Hetzelfde patroon geldt voor bathrooms en kitchens.
Alle drie deze functies zijn afhankelijk van de uitgebreide syntax van DocuGenerate, die voor het sjabloon moet worden ingeschakeld voordat documenten worden gegenereerd. U kunt dit inschakelen in de sjabloonsinstellingen in de webapp.
Overzicht van de n8n-Workflow
In deze workflow gebruiken we Claude om dummy-advertentiedata te genereren, zodat het proces end-to-end kan worden gedemonstreerd zonder dat een live database of extern systeem nodig is. In een echte implementatie zouden de handmatige trigger en de node Message a model worden vervangen door een trigger en gegevensbron die uw daadwerkelijke proces weerspiegelt.
De volledige workflow bestaat uit verschillende nodes die in een lineaire volgorde zijn verbonden:

U kunt het workflow-JSON-bestand downloaden en rechtstreeks importeren in uw n8n-instantie. U moet de DocuGenerate-sjabloon-ID, uw API-gegevens, en het Dropbox-doelpad bijwerken zodat ze overeenkomen met uw eigen configuratie. Laten we elke node in detail doorlopen.
Advertentiedata Genereren met Claude
De eerste functionele node is de node Message a model uit de Anthropic-integratie, geconfigureerd om het model claude-sonnet-4-6 te gebruiken. De rol hiervan in deze workflow is het produceren van een realistische set waarden voor vastgoedadvertenties die kunnen worden doorgegeven aan DocuGenerate. Om deze node te gebruiken, heeft u een Anthropic-account nodig en een API-sleutel gegenereerd vanuit de Anthropic Console, die u toevoegt als credential in n8n wanneer u de node voor de eerste keer instelt.

De prompt bevat de volledige JSON-structuur die het sjabloon verwacht, waarbij de meeste velden leeg zijn gelaten voor Claude om in te vullen. Het veld agent_photo is vooraf ingevuld met een URL-patroon van randomuser.me, een gratis dienst die een realistische portretfoto retourneert voor een gegeven numerieke ID. Claude krijgt de instructie om <AGENT_ID> te vervangen door een willekeurig geheel getal tussen 1 en 50, wat bij elke uitvoering een andere makelaarsfoto oplevert.

Dit is de volledige prompt die in de node wordt gebruikt:
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"
}
De vier afbeeldingsvelden zijn voor de eenvoud statisch ingesteld als Pexels-URL’s. In een praktijkscenario zouden dit daadwerkelijke foto’s van het pand zijn, opgehaald uit een mediabibliotheek, een CRM-bijlage, of een cloudopslagbucket. Het veld url verwijst naar deze blogpost en wordt weergegeven als QR-code in het uiteindelijke document.
Claude retourneert de voltooide JSON verpakt in een markdown-codeblok. Het antwoord van de node Message a model heeft de volgende structuur:
[
{
"content": [
{
"type": "text",
"text": "```json\n{\n \"agent_name\": \"Sarah Mitchell\",\n \"price\": \"$485,000\",\n ...\n}\n```"
}
]
}
]
De daadwerkelijke advertentiedata bevindt zich genest in content[0].text en is verpakt in markdown-fences, wat betekent dat deze niet rechtstreeks door de volgende node kan worden gebruikt. Dat is wat de Code-node in de volgende stap afhandelt.
De Claude-Respons Parsen
De node Code in JavaScript extraheert het JSON-object uit de respons van Claude en stelt dit beschikbaar als schone, gestructureerde data voor de rest van de workflow. Deze stap is om twee redenen nodig: de node Message a model retourneert het volledige API-responsobject in plaats van alleen de tekstinhoud, en Claude verpakt zijn JSON-uitvoer vaak in markdown-codefences, zelfs wanneer dit niet wordt gevraagd. In plaats van te vertrouwen op prompt engineering om deze inconsistentie te verhelpen, handelt de Code-node dit elke keer betrouwbaar af.

const text = $input.first().json.content[0].text;
const json = text.replace(/```json\n?/, '').replace(/\n?```/, '').trim();
return { json: JSON.parse(json) };
De eerste regel leest de tekstwaarde uit de respons van Claude. De tweede regel verwijdert de markdown-codefences met behulp van twee reguliere expressies. De derde regel parseert de opgeschoonde tekenreeks naar een JavaScript-object en retourneert dit als node-uitvoer. Na deze stap zijn alle advertentievelden (agent_name, price, bedrooms, enz.) beschikbaar als velden op het hoogste niveau in de JSON van het item, klaar om rechtstreeks te worden doorgegeven aan DocuGenerate.
Het Document Genereren
De node Generate document gebruikt de DocuGenerate-integratie voor n8n om de advertentiedata samen te voegen met het Word-sjabloon en een PDF te produceren. Om deze node te gebruiken, installeert u DocuGenerate in uw n8n-instantie en configureert u deze met uw API-sleutel.

De node is geconfigureerd met de volgende parameters:
- Template Name or ID: Het sjabloon Property Listing dat is geüpload in de stap sjabloon instellen.
- Name: Een n8n-expressie die een dynamische documentnaam genereert:
Property Listing for {{ $json.price }} ({{ $json.surface }}). Dit produceert een bestandsnaam zoals Property Listing for $485,000 (1,850 sq ft), waardoor elk document eenvoudig te herkennen is. - Format: Ingesteld op
PDF (.pdf). - Data: Ingesteld op
{{ $json }}, wat de volledige uitvoer van de Code-node doorgeeft als de datapayload. Aangezien de Code-node al een plat JSON-object produceert met alle sjabloonvelden op het hoogste niveau, is er geen aanvullende koppeling nodig.
Wanneer de node succesvol wordt uitgevoerd, bevat het antwoord onder andere een veld document_uri met een URL die verwijst naar de gegenereerde PDF, en een veld filename met de bestandsnaam van het document.
De Gegenereerde PDF Downloaden
DocuGenerate retourneert een URL naar het gegenereerde document in plaats van rechtstreeks de binaire bestandsinhoud. Om de PDF in de volgende stap naar Dropbox te uploaden, moeten we het bestand eerst ophalen van die URL. De node HTTP Request verzorgt dit door een GET-verzoek te doen naar de document_uri die wordt geretourneerd door de node Generate document.

De parameter URL is ingesteld op {{ $json.document_uri }}, wat verwijst naar de document-URL uit de vorige stap. De binaire bestandsdata is vervolgens beschikbaar voor de Dropbox-node om te uploaden.
De PDF Opslaan in Dropbox
De laatste node uploadt de gegenereerde PDF naar een aangewezen Dropbox-map met behulp van de Dropbox-node in n8n, waardoor het team onmiddellijk toegang heeft tot het nieuwe advertentiedocument.

De node gebruikt OAuth2-authenticatie gekoppeld aan uw Dropbox-account. De parameter File Path is ingesteld op /n8n/Property Listings/{{ $json.filename }}, waarmee elk document wordt opgeslagen in de map /n8n/Property Listings/ met de bestandsnaam die door DocuGenerate is geretourneerd. De optie Binary File is ingeschakeld, zodat de node de bestandsinhoud leest uit de uitvoer van de HTTP Request-node in plaats van een statisch pad.
Zodra de workflow is voltooid, is de gegenereerde PDF beschikbaar in Dropbox en ziet deze er als volgt uit. U kunt ook een voorbeeld-PDF downloaden om het uiteindelijke resultaat te bekijken.

Gegevensbronnen in de Praktijk
De huidige workflow gebruikt Claude als handig vervangmiddel voor een echte gegevensbron, maar in de praktijk komt vastgoedadvertentiedata zelden van een AI-model. Deze bevindt zich doorgaans in een formulierinzending, een CRM-record, een databaserij, of een spreadsheet. Aangezien de stappen voor documentgeneratie en -bezorging hetzelfde blijven, ongeacht waar de data vandaan komt, is het vervangen van de Anthropic-node door een andere trigger en gegevensbron alles wat nodig is om deze tutorial-workflow om te zetten in een productieklare automatisering. Hieronder staan enkele veelvoorkomende scenario’s waarvoor deze workflow goed geschikt is.
Veel kantoren gebruiken online formulieren om panddetails te verzamelen van advertentiemakelaars voordat ze marketingmateriaal voorbereiden. Een formuliertool zoals Jotform, Typeform, of Tally kan velden vastleggen zoals adres, prijs, aantal kamers, oppervlakte, en een beschrijving rechtstreeks van de makelaar. Wanneer een nieuwe inzending binnenkomt, kan het formulierplatform de n8n-workflow activeren via een webhook, en alle verzamelde data rechtstreeks doorgeven aan de stap voor documentgeneratie. Dit maakt het maken van vastgoedadvertenties een natuurlijk vervolg op het intakeproces, zonder dat handmatige gegevensoverdracht nodig is.
CRM-Systemen
Vastgoedbedrijven die hun voorraad beheren in een CRM zoals Salesforce, HubSpot, of Pipedrive kunnen documentgeneratie activeren telkens wanneer een pandrecord een bepaalde pipelinefase bereikt, bijvoorbeeld wanneer het wordt gemarkeerd als “Ready to publish” of “New listing”. De workflow zou de relevante velden uit het CRM-record halen, deze samenvoegen met het sjabloon, en de PDF ofwel terugschrijven naar het record, ofwel per e-mail afleveren bij de toegewezen makelaar. Dit houdt het advertentiedocument gesynchroniseerd met de CRM-data en elimineert dubbele gegevensinvoer.
Databases en Spreadsheets
Teams die hun vastgoedvoorraad beheren in een database zoals PostgreSQL, Airtable, of Notion, of in een spreadsheet zoals Google Sheets of Excel, kunnen nieuwe of bijgewerkte records opvragen volgens een schema of als reactie op het toevoegen van een rij. n8n heeft native nodes voor al deze platforms, waardoor het eenvoudig wordt om een rij te lezen, de kolommen te koppelen aan de sjabloonvelden, en voor elk pand een PDF te genereren. Deze aanpak werkt bijzonder goed voor kantoren die meerdere advertenties tegelijk toevoegen en alle documenten in één geautomatiseerde run willen genereren.
Conclusie
In deze tutorial hebben we een n8n-workflow gebouwd die automatisch een PDF-vastgoedadvertentie genereert. De workflow gebruikt Claude om realistische gegevensinvoer te simuleren, parseert de respons naar gestructureerde JSON, voegt de data samen met een professioneel ontworpen Word-sjabloon, en slaat de resulterende PDF op in Dropbox. Het sjabloon demonstreert verschillende geavanceerde functies van DocuGenerate, waaronder formaataanpassing van afbeeldingen met filters, QR-codegeneratie, en automatische meervoudsvorming via voorwaardelijke syntax.
In een echte implementatie zou de Anthropic-node worden vervangen door een verbinding met uw daadwerkelijke gegevensbron, of dat nu een webformulier, een CRM, een database, of een spreadsheet is. De stappen voor documentgeneratie en -bezorging blijven hetzelfde, waardoor deze workflow eenvoudig aan te passen is aan bijna elke configuratie voor vastgoedbeheer.
Bronnen