DEV Community

Alex Kane
Alex Kane

Posted on

n8n for PropTech/Real Estate Tech SaaS Vendors: 5 Automations for TRID, RESPA Section 8, Fair Housing, and NAR Settlement

n8n for PropTech/Real Estate Tech SaaS Vendors: 5 Automations for TRID 3-Business-Day CD Delivery, RESPA Section 8, Fair Housing Algorithmic Bias, and NAR Settlement Compliance

The TRID 3-Business-Day Clock Your Cloud Automation Platform Is Getting Wrong

The TILA-RESPA Integrated Disclosure rule (TRID) requires that the borrower receive the Closing Disclosure at least 3 business days before loan consummation (Reg Z, 12 CFR 1026.19(f)(1)(ii)). Not send it — receive it.

For cloud automation platforms, the business day counting is the trap. Under Reg Z Comment 1026.2(a)(6), for TRID purposes a "business day" is any calendar day except Sundays and federal public holidays — not just Monday through Friday. Saturday counts. If consummation is Monday, the CD must be received by Thursday (not Wednesday). If consummation is Friday, the CD must be received by Tuesday.

A cloud iPaaS running a batch overnight delivery job doesn't know whether Saturday is a business day for TRID. It doesn't know the 10 federal holidays enumerated in 5 USC 6103. It doesn't track certified mail delivery confirmation or email read receipts. A CD "sent" on Tuesday evening that the borrower doesn't open until Wednesday morning may fail the 3-business-day clock.

The enforcement consequence: CFPB can require lenders to extend consummation (re-disclose), waive prepayment penalties, or — in pattern violations — impose civil money penalties. Secondary market purchasers (Fannie/Freddie/FHLMC) may reject loans with TRID disclosure defects.

Who This Is For: 7 PropTech/Real Estate SaaS Customer Tiers

Not every real estate SaaS faces the same compliance surface. The automations need to be segmented by tier:

Tier Primary Compliance Risk Key Regulation
MORTGAGE_ORIGINATION_SAAS TRID CD/LE delivery timing, RESPA Section 8 kickbacks, CFPB ATR/QM, HMDA LAR Reg Z 12 CFR 1026.19, RESPA 12 USC 2601, HMDA 12 CFR 1003
PROPERTY_MANAGEMENT_SAAS FCRA tenant screening adverse action, Fair Housing automated denial FCRA 15 USC 1681m, FHA 42 USC 3604
REAL_ESTATE_LISTING_SAAS Fair Housing algorithmic disparate impact, NAR Settlement buyer agreements FHA 42 USC 3604, NAR Settlement March 2024
PROPTECH_ANALYTICS_SAAS Fair Housing disparate impact in AVM/scoring models, HMDA geocoding FHA 42 USC 3604, HMDA 12 CFR 1003
SHORT_TERM_RENTAL_SAAS FCRA-adjacent screening, state discrimination laws, local STR ordinances FCRA (if using consumer reports), FHA 42 USC 3604
COMMERCIAL_RE_SAAS HMDA CRA data, FIRREA appraisal independence, RESPA for mixed-use HMDA, FIRREA 12 USC 3350, RESPA
PROPTECH_STARTUP RESPA Section 8 overview, NAR Settlement impact, Fair Housing basics 12 USC 2601, FHA

7 Compliance Flags Your n8n Onboarding Drip Should Detect

When a customer signs up, the automation should classify them by compliance flag set:

  • TRID_REGULATED — originates or services mortgage loans; subject to Reg Z TRID CD/LE timing rules
  • HMDA_REPORTER — threshold lender (25+ closed-end originations or 500+ open-end in prior 2 years); annual LAR filing March 1 required
  • FAIR_HOUSING_ALGORITHM — uses automated scoring, recommendation, or filtering on protected-class-proximate features (zip code, school district, neighborhood name)
  • RESPA_SETTLEMENT_SERVICE — involved in closing, escrow, title, appraisal referral, or real estate brokerage settlement services
  • NAR_SETTLEMENT_SUBJECT — facilitates buyer-agent tours or buyer-broker compensation; must enforce written buyer agreement before any tour
  • FCRA_TENANT_SCREENER — uses consumer reports for rental application decisions; adverse action notice required within 5 business days
  • CFPB_QM_ATR_SUBJECT — originates residential mortgage loans; must maintain ability-to-repay documentation under 12 CFR 1026.43

5 n8n Workflow Architectures for PropTech/Real Estate SaaS Vendors

Workflow 1: Tier-Segmented Onboarding Drip

Routes new customer signups to tier-specific onboarding tracks: mortgage origination gets TRID CD delivery architecture guidance and RESPA Section 8 referral fee warnings; property management gets FCRA adverse action notice templates; listing platforms get Fair Housing algorithmic bias testing protocols and NAR Settlement buyer agreement verification flows.

{
  "name": "PropTech/Real Estate Onboarding Drip (Tier-Segmented)",
  "nodes": [
    {
      "id": "1",
      "name": "Webhook New Customer",
      "type": "n8n-nodes-base.webhook",
      "parameters": {
        "path": "proptech-realestate-onboard",
        "responseMode": "responseNode"
      },
      "position": [
        250,
        300
      ]
    },
    {
      "id": "2",
      "name": "Switch Route by Tier",
      "type": "n8n-nodes-base.switch",
      "parameters": {
        "mode": "rules",
        "rules": {
          "values": [
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.tier }}",
                    "operation": "equals",
                    "value2": "MORTGAGE_ORIGINATION_SAAS"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.tier }}",
                    "operation": "equals",
                    "value2": "PROPERTY_MANAGEMENT_SAAS"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.tier }}",
                    "operation": "equals",
                    "value2": "REAL_ESTATE_LISTING_SAAS"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.tier }}",
                    "operation": "equals",
                    "value2": "PROPTECH_ANALYTICS_SAAS"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.tier }}",
                    "operation": "equals",
                    "value2": "SHORT_TERM_RENTAL_SAAS"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.tier }}",
                    "operation": "equals",
                    "value2": "COMMERCIAL_RE_SAAS"
                  }
                ]
              }
            }
          ]
        }
      },
      "position": [
        500,
        300
      ]
    },
    {
      "id": "3",
      "name": "Gmail Mortgage Welcome TRID",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "={{ $('Webhook New Customer').item.json.email }}",
        "subject": "TRID 3-Business-Day CD Clock + RESPA Section 8 \u2014 Your Mortgage SaaS Onboarding Checklist",
        "message": "Welcome to FlowKit. As a mortgage origination SaaS vendor: (1) TRID Closing Disclosure must be RECEIVED by borrower 3 business days before consummation (Reg Z 12 CFR 1026.19(f)(1)(ii)). Business day = any day except Sunday and federal holidays. Cloud automation that batch-delivers CDs overnight may trigger TRID violations. (2) RESPA Section 8 (12 USC 2601): any referral fee routing through your automation workflows is a HUD/CFPB enforcement target. GFE changed to LE under TRID 2015."
      },
      "position": [
        800,
        100
      ]
    },
    {
      "id": "4",
      "name": "Gmail PropMgmt Welcome FCRA",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "={{ $('Webhook New Customer').item.json.email }}",
        "subject": "FCRA Tenant Screening Adverse Action + Fair Housing Act \u2014 Your Property Management SaaS Checklist",
        "message": "FCRA 15 USC 1681m: adverse action notice required within 5 business days of denial based on consumer report. Must include: CRA name/address, right to free copy within 60 days, right to dispute. Cloud automation that auto-denies without triggering notice = FCRA violation. Fair Housing Act 42 USC 3604: automated screening algorithms must be tested for disparate impact on protected classes."
      },
      "position": [
        800,
        300
      ]
    },
    {
      "id": "5",
      "name": "Gmail Listing Welcome FHA Algorithmic",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "={{ $('Webhook New Customer').item.json.email }}",
        "subject": "Fair Housing Act Algorithmic Disparate Impact + NAR Settlement March 2024 \u2014 Your Listing SaaS Checklist",
        "message": "Fair Housing Act (42 USC 3604): HUD and DOJ have brought enforcement actions against algorithmic listing/recommendation systems that produce disparate impact on protected classes even without discriminatory intent. NAR Settlement March 2024: buyer agent must have written compensation agreement before any property tour \u2014 listing platforms must not facilitate tours without verified buyer agreements."
      },
      "position": [
        800,
        500
      ]
    },
    {
      "id": "6",
      "name": "Wait 4 Days",
      "type": "n8n-nodes-base.wait",
      "parameters": {
        "resume": "timeInterval",
        "unit": "days",
        "value": 4
      },
      "position": [
        1050,
        300
      ]
    },
    {
      "id": "7",
      "name": "Gmail Day 4 Compliance Checkpoint",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "={{ $('Webhook New Customer').item.json.email }}",
        "subject": "Day 4: Your PropTech Compliance Deadline Calendar",
        "message": "Your 4-day check-in. The n8n compliance workflow tracks: TRID CD delivery (3 business days), HMDA LAR annual March 1, FCRA adverse action (5 business days), NAR buyer agreement (before tour), RESPA Section 8 referral log."
      },
      "position": [
        1300,
        300
      ]
    },
    {
      "id": "8",
      "name": "Wait 4 More Days",
      "type": "n8n-nodes-base.wait",
      "parameters": {
        "resume": "timeInterval",
        "unit": "days",
        "value": 4
      },
      "position": [
        1550,
        300
      ]
    },
    {
      "id": "9",
      "name": "Gmail Day 8 Product Expansion CTA",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "={{ $('Webhook New Customer').item.json.email }}",
        "subject": "Day 8: Advanced PropTech Compliance Workflows Available",
        "message": "Next: the TRID/Fair Housing/RESPA/HMDA incident pipeline (8 event types). Available in the FlowKit bundle: https://stripeai.gumroad.com"
      },
      "position": [
        1800,
        300
      ]
    }
  ],
  "connections": {
    "Webhook New Customer": {
      "main": [
        [
          {
            "node": "Switch Route by Tier",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch Route by Tier": {
      "main": [
        [
          {
            "node": "Gmail Mortgage Welcome TRID",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Gmail PropMgmt Welcome FCRA",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Gmail Listing Welcome FHA Algorithmic",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait 4 Days",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait 4 Days",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait 4 Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail Mortgage Welcome TRID": {
      "main": [
        [
          {
            "node": "Wait 4 Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail PropMgmt Welcome FCRA": {
      "main": [
        [
          {
            "node": "Wait 4 Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail Listing Welcome FHA Algorithmic": {
      "main": [
        [
          {
            "node": "Wait 4 Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 4 Days": {
      "main": [
        [
          {
            "node": "Gmail Day 4 Compliance Checkpoint",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail Day 4 Compliance Checkpoint": {
      "main": [
        [
          {
            "node": "Wait 4 More Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 4 More Days": {
      "main": [
        [
          {
            "node": "Gmail Day 8 Product Expansion CTA",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 2: PropTech Compliance Deadline Tracker

Tracks all time-sensitive compliance clocks: TRID Closing Disclosure (3 business days before consummation), TRID Loan Estimate (3 business days after application), HMDA LAR annual filing (March 1), FCRA adverse action notice (5 business days), CFPB QM ATR documentation retention (3 years), FIRREA appraisal independence certification. Business day calculator excludes Sundays and all 10 federal holidays in 5 USC 6103.

Clock types tracked:

  • TRID_CLOSING_DISCLOSURE — 3 business days before consummation; Reg Z 12 CFR 1026.19(f)(1)(ii)
  • TRID_LOAN_ESTIMATE — 3 business days after application; Reg Z 12 CFR 1026.19(e)(1)(iii)
  • HMDA_LAR_ANNUAL — March 1 annual LAR submission to CFPB; 12 CFR 1003.5
  • HMDA_QUARTERLY — Q1-Q3 quarterly submission for large reporters; 12 CFR 1003.5(a)(1)(ii)
  • FCRA_ADVERSE_ACTION — 5 business days after adverse action decision based on consumer report; 15 USC 1681m
  • NAR_BUYER_AGREEMENT — before any property tour; NAR Settlement March 2024
  • CFPB_QM_ATR_RETENTION — 3 years after consummation; 12 CFR 1026.25(c)(3)
  • FIRREA_APPRAISAL_CERT — before loan approval; 12 USC 3350
  • RESPA_GFE_RETENTION — 3 years; RESPA Reg X 12 CFR 1024.17
  • HUD_AFFH_ANNUAL — AFFH Assessment of Fair Housing annual certification
{
  "name": "PropTech Compliance Deadline Tracker",
  "nodes": [
    {
      "id": "1",
      "name": "Schedule Daily 7AM",
      "type": "n8n-nodes-base.scheduleTrigger",
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "triggerAtHour": 7
            }
          ]
        }
      },
      "position": [
        250,
        300
      ]
    },
    {
      "id": "2",
      "name": "Google Sheets Read Compliance Events",
      "type": "n8n-nodes-base.googleSheets",
      "parameters": {
        "operation": "getAll",
        "sheetId": "YOUR_SHEET_ID",
        "range": "ComplianceEvents!A2:J1000"
      },
      "position": [
        500,
        300
      ]
    },
    {
      "id": "3",
      "name": "Code Calculate Days and Classify",
      "type": "n8n-nodes-base.code",
      "parameters": {
        "jsCode": "const now = new Date(); const fedHolidays = ['2024-01-01','2024-01-15','2024-02-19','2024-05-27','2024-06-19','2024-07-04','2024-09-02','2024-10-14','2024-11-11','2024-11-28','2024-12-25']; function countBizDays(start, end) { let count = 0; const d = new Date(start); while (d < end) { const day = d.getDay(); const ds = d.toISOString().slice(0,10); if (day !== 0 && !fedHolidays.includes(ds)) count++; d.setDate(d.getDate()+1); } return count; } const results = []; for (const item of $input.all()) { const d = item.json; const deadline = new Date(d.deadline_date); const bizDaysRemaining = countBizDays(now, deadline); let severity; if (['TRID_CLOSING_DISCLOSURE','TRID_LOAN_ESTIMATE'].includes(d.clock_type) && bizDaysRemaining <= 0) { severity = 'TRID_BREACH'; } else if (['FCRA_ADVERSE_ACTION'].includes(d.clock_type) && bizDaysRemaining <= 1) { severity = 'CRITICAL'; } else if (bizDaysRemaining <= 1) { severity = 'CRITICAL'; } else if (bizDaysRemaining <= 3) { severity = 'HIGH'; } else if (bizDaysRemaining <= 7) { severity = 'MEDIUM'; } else { severity = 'OK'; } if (severity !== 'OK') { results.push({ json: { ...d, bizDaysRemaining, severity, calculatedAt: now.toISOString() } }); } } return results;"
      },
      "position": [
        750,
        300
      ]
    },
    {
      "id": "4",
      "name": "Switch Route by Severity",
      "type": "n8n-nodes-base.switch",
      "parameters": {
        "mode": "rules",
        "rules": {
          "values": [
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.severity }}",
                    "operation": "equals",
                    "value2": "TRID_BREACH"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.severity }}",
                    "operation": "equals",
                    "value2": "CRITICAL"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.severity }}",
                    "operation": "equals",
                    "value2": "HIGH"
                  }
                ]
              }
            }
          ]
        }
      },
      "position": [
        1000,
        300
      ]
    },
    {
      "id": "5",
      "name": "Slack TRID BREACH Alert",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#compliance-critical",
        "text": "TRID BREACH: {{ $json.customer_name }} \u2014 Closing Disclosure not delivered 3 business days before consummation. Clock type: {{ $json.clock_type }}. Immediate escalation to compliance officer + loan officer required."
      },
      "position": [
        1250,
        100
      ]
    },
    {
      "id": "6",
      "name": "Slack Critical Alert",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#compliance-alerts",
        "text": "{{ $json.severity }} [{{ $json.clock_type }}] Customer: {{ $json.customer_name }} | Deadline: {{ $json.deadline_date }} | {{ $json.bizDaysRemaining }} business days remaining | Penalty: {{ $json.max_penalty }}"
      },
      "position": [
        1250,
        300
      ]
    },
    {
      "id": "7",
      "name": "Gmail Daily Compliance Summary",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "compliance@yourcompany.com",
        "subject": "PropTech Compliance Deadline Summary {{ $now.format('YYYY-MM-DD') }}",
        "message": "Daily compliance scan complete. Check Slack for TRID/FCRA/HMDA/Fair Housing critical items."
      },
      "position": [
        1250,
        500
      ]
    }
  ],
  "connections": {
    "Schedule Daily 7AM": {
      "main": [
        [
          {
            "node": "Google Sheets Read Compliance Events",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets Read Compliance Events": {
      "main": [
        [
          {
            "node": "Code Calculate Days and Classify",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code Calculate Days and Classify": {
      "main": [
        [
          {
            "node": "Switch Route by Severity",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch Route by Severity": {
      "main": [
        [
          {
            "node": "Slack TRID BREACH Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack Critical Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack Critical Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack TRID BREACH Alert": {
      "main": [
        [
          {
            "node": "Gmail Daily Compliance Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 3: PropTech API Health Monitor

Polls every 5 minutes: property listing API (Fair Housing disparate impact risk on downtime — suppressed listings during outage can create disparate access patterns), appraisal/AVM API (FIRREA independence — downtime creates manual override pressure), credit bureau API (FCRA adverse action 5-business-day clock starts at denial, not at report delivery), HMDA geocoding API (census tract classification required for every LAR record).

{
  "name": "PropTech API Health Monitor",
  "nodes": [
    {
      "id": "1",
      "name": "Schedule Every 5 Min",
      "type": "n8n-nodes-base.scheduleTrigger",
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "value": 5
            }
          ]
        }
      },
      "position": [
        250,
        300
      ]
    },
    {
      "id": "2",
      "name": "HTTP Check Property Listing API",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "https://api.your-listings.com/v1/health",
        "method": "GET",
        "continueOnFail": true
      },
      "position": [
        500,
        100
      ]
    },
    {
      "id": "3",
      "name": "HTTP Check Appraisal API",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "https://api.your-avm.com/health",
        "method": "GET",
        "continueOnFail": true
      },
      "position": [
        500,
        300
      ]
    },
    {
      "id": "4",
      "name": "HTTP Check Credit Bureau API",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "https://api.your-credit-bureau.com/health",
        "method": "GET",
        "continueOnFail": true
      },
      "position": [
        500,
        500
      ]
    },
    {
      "id": "5",
      "name": "HTTP Check HMDA Geocoding API",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "https://ffiec.cfpb.gov/api/public/hmda/rateSpread/2023",
        "method": "GET",
        "continueOnFail": true
      },
      "position": [
        500,
        700
      ]
    },
    {
      "id": "6",
      "name": "Code Aggregate Health Classify Exposure",
      "type": "n8n-nodes-base.code",
      "parameters": {
        "jsCode": "const checks = [\n  { name: 'property_listing_api', status: $('HTTP Check Property Listing API').item?.json?.status, regulation: 'Fair Housing Act 42 USC 3604 \u2014 listing suppression = disparate impact', severity: 'HIGH' },\n  { name: 'appraisal_api', status: $('HTTP Check Appraisal API').item?.json?.status, regulation: 'FIRREA 12 USC 3350 \u2014 appraisal independence; AVM downtime = manual override risk', severity: 'HIGH' },\n  { name: 'credit_bureau_api', status: $('HTTP Check Credit Bureau API').item?.json?.status, regulation: 'FCRA 15 USC 1681 \u2014 adverse action notice 5-biz-day clock starts on denial; downtime = undocumented denial queue', severity: 'CRITICAL' },\n  { name: 'hmda_geocoding_api', status: $('HTTP Check HMDA Geocoding API').item?.json?.status, regulation: 'HMDA 12 CFR Part 1003 \u2014 census tract geocoding required for LAR; downtime = incomplete reporting', severity: 'MEDIUM' }\n];\nconst failures = checks.filter(c => c.status !== 'ok' && c.status !== 200);\nif (failures.length === 0) return [{ json: { status: 'ALL_HEALTHY' } }];\nreturn failures.map(f => ({ json: { api: f.name, regulation: f.regulation, severity: f.severity, downtime_start: new Date().toISOString() } }));"
      },
      "position": [
        800,
        300
      ]
    },
    {
      "id": "7",
      "name": "IF Has Failures",
      "type": "n8n-nodes-base.if",
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.status }}",
              "operation": "notEqual",
              "value2": "ALL_HEALTHY"
            }
          ]
        }
      },
      "position": [
        1050,
        300
      ]
    },
    {
      "id": "8",
      "name": "Slack API Failure Alert",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#compliance-critical",
        "text": "API HEALTH FAILURE: {{ $json.api }} is DOWN. Regulation at risk: {{ $json.regulation }} ({{ $json.severity }}). Unprocessed compliance events accumulating."
      },
      "position": [
        1300,
        200
      ]
    },
    {
      "id": "9",
      "name": "Google Sheets Log Downtime",
      "type": "n8n-nodes-base.googleSheets",
      "parameters": {
        "operation": "append",
        "sheetId": "YOUR_SHEET_ID",
        "range": "DowntimeLog!A:F",
        "values": [
          [
            "={{ $json.api }}",
            "={{ $json.regulation }}",
            "={{ $json.severity }}",
            "={{ $json.downtime_start }}",
            "UNRESOLVED",
            ""
          ]
        ]
      },
      "position": [
        1300,
        400
      ]
    }
  ],
  "connections": {
    "Schedule Every 5 Min": {
      "main": [
        [
          {
            "node": "HTTP Check Property Listing API",
            "type": "main",
            "index": 0
          },
          {
            "node": "HTTP Check Appraisal API",
            "type": "main",
            "index": 0
          },
          {
            "node": "HTTP Check Credit Bureau API",
            "type": "main",
            "index": 0
          },
          {
            "node": "HTTP Check HMDA Geocoding API",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Check Property Listing API": {
      "main": [
        [
          {
            "node": "Code Aggregate Health Classify Exposure",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Check Appraisal API": {
      "main": [
        [
          {
            "node": "Code Aggregate Health Classify Exposure",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Check Credit Bureau API": {
      "main": [
        [
          {
            "node": "Code Aggregate Health Classify Exposure",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Check HMDA Geocoding API": {
      "main": [
        [
          {
            "node": "Code Aggregate Health Classify Exposure",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code Aggregate Health Classify Exposure": {
      "main": [
        [
          {
            "node": "IF Has Failures",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF Has Failures": {
      "main": [
        [
          {
            "node": "Slack API Failure Alert",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Slack API Failure Alert": {
      "main": [
        [
          {
            "node": "Google Sheets Log Downtime",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 4: PropTech Compliance Incident Alert Pipeline

Eight incident types with tier-specific routing:

Incident Type Regulation Maximum Penalty
TRID_VIOLATION Reg Z 12 CFR 1026.19(f) Loan rescission + CFPB civil money penalties
RESPA_KICKBACK_FLAG RESPA 12 USC 2607 $10,000 fine + 1 year imprisonment
FAIR_HOUSING_DISPARATE_IMPACT FHA 42 USC 3604 DOJ/HUD enforcement + injunction + compensatory damages
NAR_BUYER_AGREEMENT_MISSING NAR Settlement March 2024 Commission forfeiture + MLS suspension
FCRA_ADVERSE_ACTION_MISSED FCRA 15 USC 1681m $1,000/violation civil penalty + actual damages
HMDA_REPORTING_ERROR HMDA 12 CFR 1003 CFPB civil money penalties (up to $1M/day for willful)
FIRREA_INDEPENDENCE_VIOLATION FIRREA 12 USC 3350 OCC/FDIC enforcement action
HUD_AFFH_COMPLAINT HUD AFFH rule Federal funding conditions
{
  "name": "PropTech Compliance Incident Alert Pipeline",
  "nodes": [
    {
      "id": "1",
      "name": "Webhook Compliance Incident",
      "type": "n8n-nodes-base.webhook",
      "parameters": {
        "path": "proptech-compliance-incident",
        "responseMode": "responseNode"
      },
      "position": [
        250,
        300
      ]
    },
    {
      "id": "2",
      "name": "Switch Incident Type",
      "type": "n8n-nodes-base.switch",
      "parameters": {
        "mode": "rules",
        "rules": {
          "values": [
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.incident_type }}",
                    "operation": "equals",
                    "value2": "TRID_VIOLATION"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.incident_type }}",
                    "operation": "equals",
                    "value2": "RESPA_KICKBACK_FLAG"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.incident_type }}",
                    "operation": "equals",
                    "value2": "FAIR_HOUSING_DISPARATE_IMPACT"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.incident_type }}",
                    "operation": "equals",
                    "value2": "NAR_BUYER_AGREEMENT_MISSING"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.incident_type }}",
                    "operation": "equals",
                    "value2": "FCRA_ADVERSE_ACTION_MISSED"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.incident_type }}",
                    "operation": "equals",
                    "value2": "HMDA_REPORTING_ERROR"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.incident_type }}",
                    "operation": "equals",
                    "value2": "FIRREA_INDEPENDENCE_VIOLATION"
                  }
                ]
              }
            }
          ]
        }
      },
      "position": [
        500,
        300
      ]
    },
    {
      "id": "3",
      "name": "Slack TRID Alert",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#compliance-critical",
        "text": "TRID VIOLATION: {{ $json.loan_id }} \u2014 CD not delivered 3 business days before consummation {{ $json.consummation_date }}. Reg Z 12 CFR 1026.19(f)(1)(ii). Lender may need to extend consummation date. Borrower: {{ $json.borrower_name }}."
      },
      "position": [
        800,
        50
      ]
    },
    {
      "id": "4",
      "name": "Slack RESPA Alert",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#compliance-critical",
        "text": "RESPA SECTION 8 FLAG: {{ $json.customer_name }} \u2014 referral fee or thing of value detected in workflow log. 12 USC 2607 \u2014 criminal penalty up to $10,000 + 1 year imprisonment. Routing to compliance officer: {{ $json.workflow_log_url }}"
      },
      "position": [
        800,
        150
      ]
    },
    {
      "id": "5",
      "name": "Slack Fair Housing Alert",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#compliance-critical",
        "text": "FAIR HOUSING DISPARATE IMPACT DETECTED: {{ $json.customer_name }} \u2014 algorithm producing statistically significant disparity for {{ $json.protected_class }} ({{ $json.disparity_ratio }}x). HUD/DOJ enforcement risk. 42 USC 3604. Immediate algorithm review + documentation required."
      },
      "position": [
        800,
        250
      ]
    },
    {
      "id": "6",
      "name": "Slack NAR Alert",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#compliance-alerts",
        "text": "NAR SETTLEMENT VIOLATION: {{ $json.customer_name }} \u2014 property tour {{ $json.tour_id }} facilitated without verified buyer agent written agreement. March 2024 NAR settlement requirement. Tour must not proceed without signed agreement."
      },
      "position": [
        800,
        350
      ]
    },
    {
      "id": "7",
      "name": "Slack FCRA Alert",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#compliance-critical",
        "text": "FCRA ADVERSE ACTION MISSED: {{ $json.customer_name }} \u2014 tenant {{ $json.applicant_name }} denied {{ $json.denial_date }} based on consumer report. Adverse action notice not sent within 5 business days. FCRA 15 USC 1681m. $1,000/violation civil penalty risk."
      },
      "position": [
        800,
        450
      ]
    },
    {
      "id": "8",
      "name": "Slack HMDA Alert",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#compliance-alerts",
        "text": "HMDA REPORTING ERROR: {{ $json.customer_name }} \u2014 LAR record {{ $json.lar_id }} missing required field {{ $json.missing_field }}. 12 CFR Part 1003. Annual LAR filing deadline March 1. CFPB civil money penalties apply."
      },
      "position": [
        800,
        550
      ]
    },
    {
      "id": "9",
      "name": "Slack FIRREA Alert",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#compliance-critical",
        "text": "FIRREA APPRAISAL INDEPENDENCE VIOLATION: {{ $json.customer_name }} \u2014 loan {{ $json.loan_id }}: appraiser selection or pressure signal detected in workflow. 12 USC 3350 + USPAP Ethics Rule. OCC/FDIC enforcement risk. Immediate review required."
      },
      "position": [
        800,
        650
      ]
    },
    {
      "id": "10",
      "name": "Google Sheets Log Incident",
      "type": "n8n-nodes-base.googleSheets",
      "parameters": {
        "operation": "append",
        "sheetId": "YOUR_SHEET_ID",
        "range": "ComplianceIncidents!A:H",
        "values": [
          [
            "={{ $json.incident_type }}",
            "={{ $json.customer_name }}",
            "={{ $json.severity }}",
            "={{ new Date().toISOString() }}",
            "OPEN",
            "",
            "",
            ""
          ]
        ]
      },
      "position": [
        1100,
        350
      ]
    }
  ],
  "connections": {
    "Webhook Compliance Incident": {
      "main": [
        [
          {
            "node": "Switch Incident Type",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch Incident Type": {
      "main": [
        [
          {
            "node": "Slack TRID Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack RESPA Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack Fair Housing Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack NAR Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack FCRA Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack HMDA Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack FIRREA Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack TRID Alert": {
      "main": [
        [
          {
            "node": "Google Sheets Log Incident",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack RESPA Alert": {
      "main": [
        [
          {
            "node": "Google Sheets Log Incident",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack Fair Housing Alert": {
      "main": [
        [
          {
            "node": "Google Sheets Log Incident",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack NAR Alert": {
      "main": [
        [
          {
            "node": "Google Sheets Log Incident",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack FCRA Alert": {
      "main": [
        [
          {
            "node": "Google Sheets Log Incident",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack HMDA Alert": {
      "main": [
        [
          {
            "node": "Google Sheets Log Incident",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack FIRREA Alert": {
      "main": [
        [
          {
            "node": "Google Sheets Log Incident",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 5: Weekly PropTech Compliance KPI Dashboard

Monday 8AM report to CEO + CCO: TRID CDs pending (3-business-day clock), HMDA LAR records in queue, FCRA adverse action notices pending, NAR buyer agreements missing before tours, Fair Housing disparate impact investigations open, RESPA Section 8 referral flags.

{
  "name": "PropTech Weekly KPI Dashboard",
  "nodes": [
    {
      "id": "1",
      "name": "Schedule Monday 8AM",
      "type": "n8n-nodes-base.scheduleTrigger",
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 8 * * 1"
            }
          ]
        }
      },
      "position": [
        250,
        300
      ]
    },
    {
      "id": "2",
      "name": "Google Sheets Read Compliance Events",
      "type": "n8n-nodes-base.googleSheets",
      "parameters": {
        "operation": "getAll",
        "sheetId": "YOUR_SHEET_ID",
        "range": "ComplianceEvents!A2:J1000"
      },
      "position": [
        500,
        200
      ]
    },
    {
      "id": "3",
      "name": "Google Sheets Read Incidents",
      "type": "n8n-nodes-base.googleSheets",
      "parameters": {
        "operation": "getAll",
        "sheetId": "YOUR_SHEET_ID",
        "range": "ComplianceIncidents!A2:H1000"
      },
      "position": [
        500,
        400
      ]
    },
    {
      "id": "4",
      "name": "Code Compute KPIs",
      "type": "n8n-nodes-base.code",
      "parameters": {
        "jsCode": "const events = $('Google Sheets Read Compliance Events').all().map(i => i.json); const incidents = $('Google Sheets Read Incidents').all().map(i => i.json); const now = new Date(); const tridPending = events.filter(e => e.clock_type === 'TRID_CLOSING_DISCLOSURE' && new Date(e.deadline_date) > now).length; const hmdaPending = events.filter(e => e.clock_type === 'HMDA_LAR_ANNUAL').length; const fcraPending = events.filter(e => e.clock_type === 'FCRA_ADVERSE_ACTION' && new Date(e.deadline_date) > now).length; const narMissing = incidents.filter(i => i.incident_type === 'NAR_BUYER_AGREEMENT_MISSING' && i.status === 'OPEN').length; const fairHousingOpen = incidents.filter(i => i.incident_type === 'FAIR_HOUSING_DISPARATE_IMPACT' && i.status === 'OPEN').length; const respaFlags = incidents.filter(i => i.incident_type === 'RESPA_KICKBACK_FLAG' && i.status === 'OPEN').length; return [{ json: { tridCDsPending: tridPending, hmdaLARRecords: hmdaPending, fcraAdverseActionPending: fcraPending, narBuyerAgreementsMissing: narMissing, fairHousingComplaintsOpen: fairHousingOpen, respaSection8Flags: respaFlags, reportDate: now.toISOString().slice(0,10) } }];"
      },
      "position": [
        800,
        300
      ]
    },
    {
      "id": "5",
      "name": "Gmail Weekly Dashboard to CEO CCO",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "ceo@yourcompany.com",
        "cc": "cco@yourcompany.com",
        "subject": "PropTech Compliance KPI Dashboard \u2014 Week of {{ $json.reportDate }}",
        "message": "Weekly PropTech/Real Estate Compliance Summary:\n\nTRID Closing Disclosures pending (3-biz-day clock): {{ $json.tridCDsPending }}\nHMDA LAR records in queue: {{ $json.hmdaLARRecords }}\nFCRA adverse action notices pending (5-biz-day clock): {{ $json.fcraAdverseActionPending }}\nNAR buyer agreements missing before tour: {{ $json.narBuyerAgreementsMissing }}\nFair Housing disparate impact investigations open: {{ $json.fairHousingComplaintsOpen }}\nRESPA Section 8 referral flags open: {{ $json.respaSection8Flags }}\n\nPowered by FlowKit n8n automation. https://stripeai.gumroad.com"
      },
      "position": [
        1100,
        300
      ]
    }
  ],
  "connections": {
    "Schedule Monday 8AM": {
      "main": [
        [
          {
            "node": "Google Sheets Read Compliance Events",
            "type": "main",
            "index": 0
          },
          {
            "node": "Google Sheets Read Incidents",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets Read Compliance Events": {
      "main": [
        [
          {
            "node": "Code Compute KPIs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets Read Incidents": {
      "main": [
        [
          {
            "node": "Code Compute KPIs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code Compute KPIs": {
      "main": [
        [
          {
            "node": "Gmail Weekly Dashboard to CEO CCO",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Why Self-Hosted n8n Is the Argument You Should Be Making to PropTech/RE SaaS Buyers

The TRID business day counting problem: A cloud iPaaS executing your CD delivery workflow doesn't know the federal holiday calendar (5 USC 6103). Saturday closings — common in real estate — require CD delivery by Tuesday, not Monday. The automation that batch-delivers CDs overnight can silently miscalculate this. Self-hosted n8n means you control the business day calculator, the delivery confirmation logic, and the consummation date override process.

The RESPA Section 8 discovery problem: Every referral fee or thing of value that flows through a cloud automation vendor's platform is logged in their infrastructure. In a CFPB or HUD enforcement investigation, those logs are discoverable. RESPA criminal penalties (12 USC 2607) require that referral workflows not generate evidence in third-party systems. Self-hosted n8n keeps referral flow logs in your infrastructure under your control.

The Fair Housing disparate impact algorithm problem: If your recommendation or ranking algorithm produces disparate impact on protected classes, the training data and decision logs in cloud iPaaS infrastructure become plaintiff's exhibit A in an FHA disparate impact lawsuit. 42 USC 3604 + Inclusive Communities (2015 SCOTUS) = disparate impact liability without discriminatory intent. Your algorithm audit trail should not live in a vendor you don't control.

The HMDA geocoding integrity problem: HMDA census tract geocoding errors in LAR files — whether from a stale geocoding API, a boundary change, or a bad batch import — can trigger CFPB LAR resubmission demands and civil money penalties. A self-hosted geocoding pipeline with version-controlled census boundary data is auditable in ways a third-party API call is not.


The FlowKit n8n workflow bundle includes all 5 PropTech/Real Estate architectures above, with business day calculators, federal holiday exclusion lists, and tier-specific onboarding sequences ready to configure.

Store: stripeai.gumroad.com

Tags: n8n, automation, realestate, compliance

Top comments (0)