A production-grade n8n workflow that automatically reads raw property requirement messages from Google Sheets, extracts structured data using a locally hosted Ollama AI (LLaMA 3), validates the output, and saves clean structured records — with full error handling, routing, and logging.
Built by keviv777 as part of the india-ai-agent-toolkit
[Start Parser — Scheduled/Manual Trigger]
│
▼
[Read Raw Messages — Google Sheets]
│
▼
[Filter and Classify]
│
▼
[Route Messages]
├── Valid ──► [Split Multi Requirements]
│ │
│ ▼
│ [Extract with Ollama AI] ◄── POST http://localhost:11434
│ │
│ ▼
│ [Validate and Parse AI Response]
│ │
│ ▼
│ [Route Parsed Results]
│ ├── Success ──► [Save to Structured Output — Sheets]
│ └── Failed ──► [Log Errors — Sheets]
│ [Save Failed to Structured Output]
│ [Mark as Processed — Sheets]
└── Skipped ──► [Save Skipped Messages — Sheets]
- ✅ Production-grade pipeline — full error handling, logging, and routing
- ✅ AI-powered extraction — pulls price, location, BHK, area, amenities from raw text
- ✅ Zero API cost — uses self-hosted Ollama (no OpenAI / cloud AI billing)
- ✅ Smart routing — success / failed / skipped paths handled separately
- ✅ Duplicate prevention — marks processed records to avoid re-parsing
- ✅ Google Sheets as database — no external DB required
- ✅ Handles multi-requirement messages — splits and processes each requirement individually
| Tool | Purpose |
|---|---|
| n8n (self-hosted) | Workflow orchestration |
| Ollama (LLaMA 3) | Local AI for data extraction |
| Google Sheets | Input data + structured output storage |
| JavaScript (Code nodes) | Data validation + JSON parsing |
From a raw message like:
"Need 2BHK in Andheri West, budget 45k, prefer furnished, available immediately"
The AI extracts:
{
"bhk": "2BHK",
"location": "Andheri West",
"budget": "45000",
"furnished": "furnished",
"availability": "immediate",
"amenities": [],
"raw_message": "Need 2BHK in Andheri West..."
}| Column | Description |
|---|---|
message |
Raw property requirement text |
source |
Where message came from (WhatsApp, form, etc.) |
processed |
TRUE/FALSE — marks if already parsed |
timestamp |
When message was received |
| Column | Description |
|---|---|
bhk |
Number of bedrooms |
location |
Area/city preference |
budget |
Budget in INR |
furnished |
Furnished / semi / unfurnished |
availability |
Timeline / move-in date |
amenities |
List of required amenities |
raw_message |
Original message for reference |
| Column | Description |
|---|---|
raw_message |
Message that failed |
error_reason |
Why parsing failed |
timestamp |
When error occurred |
- n8n running (self-hosted recommended)
- Ollama installed locally: ollama.ai
- LLaMA 3 model pulled:
ollama pull llama3 - Google Sheets API credentials set up in n8n
# Install Ollama (Mac)
brew install ollama
# Or Linux
curl https://ollama.ai/install.sh | sh
# Pull the model
ollama pull llama3
# Start Ollama server
ollama serve
# Runs at http://localhost:11434- Download
Proppr_Property_Parser_CLEAN.json - In n8n → Import from file
- Connect your Google Sheets credentials
- Create a Google Sheet with the input structure above
- In n8n, update the Read Raw Messages node with your Sheet ID
- Update all append: sheet nodes with your output Sheet IDs
- Manual: Click "Execute workflow" in n8n
- Scheduled: Add a Schedule Trigger node (e.g., every 30 minutes)
proppr-property-parser/
├── Proppr_Property_Parser_CLEAN.json # n8n workflow (import this)
└── README.md
- Real estate agencies processing WhatsApp/form enquiries
- Property portals structuring raw lead data
- Rental platforms auto-classifying requirements
- Any business extracting structured data from messy text messages
- Ollama must be running locally on port
11434for the workflow to work - For cloud deployment, update the Ollama URL to your server's address
- Google Sheets credentials must be configured in n8n's credential manager
MIT — free to use, modify, and build upon.