DEV Community

Alex Kane
Alex Kane

Posted on

n8n for PropTech & Real Estate SaaS: 5 Automations for RESPA, TRID, FCRA, and Fair Housing Compliance

If you're building PropTech or Real Estate SaaS — MLS platforms, mortgage lending tools, property management software, title and escrow systems — your automation layer isn't just an ops convenience. It's a regulated compliance component.

RESPA §8 kickback complaints trigger immediate HUD/CFPB referral to DOJ. TRID requires a Loan Estimate within 3 business days of a triggering event — cloud iPaaS latency is not a legal defense. FCRA §1681b permissible purpose: if tenant screening data flows through a cloud automation layer, that routing is a third-party disclosure without permissible purpose — §1681n willful violation carries $100–$1,000 statutory damages per incident, no cap, plus punitive damages plus attorney fees.

Self-hosted n8n changes the architecture. Tenant screening data stays inside your network. The TRID disclosure clock runs against your own SLA, not a cloud vendor's. The RESPA §8 audit trail lives in your own database. This post shows five automations — full workflow JSON — that encode these obligations directly.

The RegTech Stack for PropTech & Real Estate SaaS

Regulation Scope Fastest Clock Self-Hosting Argument
RESPA 12 USC §2601 Settlement service kickbacks and referral fees IMMEDIATE — HUD/CFPB referral to DOJ on complaint RESPA §8 audit trail in your own Postgres — no cloud intermediary with subpoena exposure
TRID (Reg X+Z) 12 CFR §1024/§1026 Loan Estimate and Closing Disclosure timing 3 business days from triggering event No cloud SLA dependency on the TILA rescission clock
FCRA 15 USC §1681 Tenant screening data permissible purpose IMMEDIATE — §1681n willful violation per unauthorized disclosure Screening data never leaves your network — no §1681b third-party disclosure
Fair Housing Act 42 USC §3604 Protected class discrimination in housing IMMEDIATE — HUD complaint and DOJ referral Fair lending audit log in your own database
CFPB Servicing Rules 12 CFR §1024 Loss mitigation, error resolution, escrow Error notice: 5 business days ack, 30 BD resolve CFPB exam response data stays behind your perimeter
FinCEN BSA/AML 31 CFR §1020 Currency transaction reports, SARs SAR: 30 days from detection of suspicious activity ≥$25,000 AML transaction data never flows to cloud intermediary

Seven tiers: ENTERPRISE_PROPTECH_PLATFORM / MIDMARKET_CRE_SAAS / RESIDENTIAL_MLS_SAAS / MORTGAGE_LENDING_SAAS / PROPERTY_MANAGEMENT_SAAS / TITLE_ESCROW_SAAS / PROPTECH_STARTUP

Seven compliance flags: RESPA_SECTION_8_COVERED / TRID_LENDER_SUBJECT / FCRA_TENANT_SCREENING_USER / FAIR_HOUSING_ACT_COVERED / CFPB_SUPERVISED_ENTITY / FINCEN_AML_REQUIRED / SOC2_REQUIRED

5 Automations — Full Workflow JSON

1. Tier-Segmented Compliance Onboarding Drip

Seven-tier email sequence routing buyers to the compliance narrative most relevant to their regulatory exposure. The fastest clocks — RESPA_KICKBACK_COMPLAINT (IMMEDIATE) and FCRA §1681n (IMMEDIATE) — appear in the Day 0 email for tiers with RESPA_SECTION_8_COVERED and FCRA_TENANT_SCREENING_USER flags.

Sharpest self-hosting argument (FCRA §1681b): Cloud iPaaS routing tenant screening results is a third-party disclosure without permissible purpose. §1681b requires permissible purpose before every transmission. The cloud vendor has no permissible purpose. §1681n willful violation: $100–$1,000 statutory damages per disclosure, no cap. Class action plaintiffs' bar has litigated this pattern. Self-hosted n8n eliminates the §1681b exposure architecturally — screening data never leaves your network.

{
  "name": "PropTech Tier-Segmented Compliance Onboarding Drip",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "proptech-onboarding",
        "responseMode": "responseNode"
      },
      "id": "n1",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "const tier = $json.tier || 'PROPTECH_STARTUP';\nconst tiers = {\n  'ENTERPRISE_PROPTECH_PLATFORM': {\n    subject: 'RESPA \u00a78 + FCRA \u00a71681b: Two Immediate-Trigger Violations Inside Your Cloud Automation Layer',\n    clock_1: 'RESPA_KICKBACK_COMPLAINT: IMMEDIATE \u2014 HUD/CFPB referral to DOJ on complaint filing. \u00a78: $10,000 fine + 1yr/count.',\n    clock_2: 'FCRA \u00a71681n willful: IMMEDIATE \u2014 $100\u2013$1,000 statutory damages per unauthorized disclosure, no cap + punitive + attorney fees.',\n    self_hosting_arg: 'Enterprise PropTech routing settlement referral data AND tenant screening data through cloud iPaaS simultaneously: RESPA \u00a78 audit trail exposure + FCRA \u00a71681b third-party disclosure in one architecture. Self-hosted n8n: both data streams inside your network, both audit logs in your own Postgres.'\n  },\n  'MIDMARKET_CRE_SAAS': {\n    subject: 'FinCEN BSA SAR + FCRA: Your Cloud Automation Layer Owes Documentation Before the 30-Day Clock',\n    clock_1: 'FINCEN_SAR: 30 days from detection of suspicious activity \u2265$25,000. Tipping-off prohibition: cannot notify subject SAR was filed.',\n    clock_2: 'FCRA \u00a71681n: IMMEDIATE on willful unauthorized disclosure of consumer report data.',\n    self_hosting_arg: 'CRE SaaS routing transaction data through cloud iPaaS: FinCEN SAR filing data flows to cloud intermediary with no tipping-off control boundary. Self-hosted n8n: SAR data stays inside your AML system boundary.'\n  },\n  'RESIDENTIAL_MLS_SAAS': {\n    subject: 'Fair Housing \u00a73604 + FCRA \u00a71681b: Automated Listing and Application Workflows Have Civil Rights Exposure',\n    clock_1: 'FAIR_HOUSING_COMPLAINT: IMMEDIATE \u2014 HUD complaint + DOJ referral. Disparate impact: no discriminatory intent required.',\n    clock_2: 'FCRA \u00a71681b: tenant application data routing requires permissible purpose before every transmission.',\n    self_hosting_arg: 'MLS SaaS routing listing and tenant application data through cloud iPaaS: Fair Housing \u00a73604 disparate impact audit trail and FCRA permissible-purpose log split across your system and the cloud vendor. Self-hosted n8n: complete audit trail in your own database.'\n  },\n  'MORTGAGE_LENDING_SAAS': {\n    subject: 'TRID 3-Day Disclosure Clock: Cloud iPaaS Latency Is Not a Legal Defense',\n    clock_1: 'TRID_LOAN_ESTIMATE: 3 business days from triggering event (6 TRID items received). TILA rescission right: 3 years if not properly disclosed \u00a71635.',\n    clock_2: 'TRID_CLOSING_DISCLOSURE: 3 business days before consummation. Changed circumstance re-disclosure adds 3 more business days.',\n    self_hosting_arg: 'Mortgage SaaS routing Loan Estimate triggers through cloud iPaaS: TRID 3-day clock runs from triggering event, not from when your cloud automation processes it. Cloud SLA is not a legal defense. Self-hosted n8n inside your network: disclosure generation runs on your hardware, no third-party SLA on the TILA clock.'\n  },\n  'PROPERTY_MANAGEMENT_SAAS': {\n    subject: 'FCRA \u00a71681b Permissible Purpose: Routing Tenant Screening Data Through Cloud iPaaS Is a Willful Violation',\n    clock_1: 'FCRA \u00a71681n willful: IMMEDIATE \u2014 $100\u2013$1,000 statutory damages per violation, no cap + punitive + attorney fees. Class action exposure.',\n    clock_2: 'CFPB_ERROR_NOTICE: 5 business days to acknowledge, 30 business days to resolve.',\n    self_hosting_arg: 'Property management SaaS routing tenant screening results through cloud iPaaS: \u00a71681b requires permissible purpose for every transmission. Cloud iPaaS = third-party processor without permissible purpose documentation. Self-hosted n8n: screening data never leaves your network. \u00a71681b exposure eliminated architecturally.'\n  },\n  'TITLE_ESCROW_SAAS': {\n    subject: 'RESPA \u00a78 Audit Trail + FinCEN AML: Your Settlement Automation Layer Has Two Compliance Clocks',\n    clock_1: 'RESPA_KICKBACK: IMMEDIATE \u2014 \u00a78 complaint triggers HUD/CFPB referral to DOJ. Criminal: $10,000 fine + 1yr/count.',\n    clock_2: 'FINCEN_SAR_30D: 30 days from detection of suspicious transaction \u2265$5,000 (31 CFR \u00a71022.320 non-bank financial institutions).',\n    self_hosting_arg: 'Title/escrow SaaS routing settlement data through cloud iPaaS: RESPA \u00a78 audit trail exposure + FinCEN SAR data flowing to cloud intermediary simultaneously. Self-hosted n8n: both data streams inside your compliance boundary, both audit logs in your own Postgres.'\n  },\n  'PROPTECH_STARTUP': {\n    subject: 'Before Your First Tenant Application: FCRA \u00a71681b and Fair Housing \u00a73604 Are Architecture Decisions',\n    clock_1: 'FCRA \u00a71681n: IMMEDIATE \u2014 $100\u2013$1,000 statutory damages per willful unauthorized disclosure. No revenue threshold, no safe harbor.',\n    clock_2: 'FAIR_HOUSING_COMPLAINT: IMMEDIATE \u2014 HUD complaint filing triggers investigation. Disparate impact liability without intent.',\n    self_hosting_arg: 'PropTech startup automating tenant applications through cloud iPaaS before implementing FCRA permissible-purpose documentation: violation clock starts with the first screening data transmission. Self-hosted n8n: screening data stays inside your network from day one.'\n  }\n};\nconst t = tiers[tier] || tiers['PROPTECH_STARTUP'];\nreturn [{ json: { tier, email_to: $json.email, company: $json.company,\n  subject: t.subject, clock_1: t.clock_1, clock_2: t.clock_2,\n  self_hosting_arg: t.self_hosting_arg } }];"
      },
      "id": "n2",
      "name": "Route By Tier",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        200,
        0
      ]
    },
    {
      "parameters": {
        "respondWith": "allIncomingItems",
        "options": {}
      },
      "id": "n3",
      "name": "Respond",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1,
      "position": [
        400,
        0
      ]
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Route By Tier",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route By Tier": {
      "main": [
        [
          {
            "node": "Respond",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

2. Compliance API Health Monitor (3-Minute Polling)

Monitors CFPB complaint API, HUD Fair Housing portal, FinCEN BSA e-filing system, RESPA guidance, and FCRA FTC guidance. Uses $getWorkflowStaticData for per-day deduplication — each endpoint checked once per day regardless of polling frequency.

{
  "name": "PropTech Compliance API Health Monitor",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "minutesInterval": 3
            }
          ]
        }
      },
      "id": "n1",
      "name": "Every 3 Minutes",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "const endpoints = [\n  { name: 'cfpb_complaints', url: 'https://api.consumerfinance.gov/data/complaints/', regulation: 'CFPB 12 CFR \u00a71024', impact: 'Complaint tracking \u2014 5-day acknowledgment SLA' },\n  { name: 'hud_fair_housing', url: 'https://www.hud.gov/fairhousing', regulation: 'Fair Housing Act 42 USC \u00a73604', impact: 'Fair housing complaint intake' },\n  { name: 'fincen_bsa_efiling', url: 'https://bsaefiling.fincen.treas.gov', regulation: 'FinCEN BSA 31 CFR \u00a71020', impact: 'SAR/CTR e-filing system availability' },\n  { name: 'cfpb_respa_guidance', url: 'https://www.consumerfinance.gov/compliance/compliance-resources/mortgage-resources/real-estate-settlement-procedures-act/', regulation: 'RESPA 12 USC \u00a72601', impact: 'RESPA guidance updates' },\n  { name: 'fcra_ftc_guidance', url: 'https://www.ftc.gov/legal-library/browse/statutes/fair-credit-reporting-act', regulation: 'FCRA 15 USC \u00a71681', impact: 'FCRA guidance and enforcement updates' }\n];\nconst key = `proptech_health_${new Date().toISOString().split('T')[0]}`;\nconst seen = $getWorkflowStaticData('global')[key] || {};\nconst items = [];\nfor (const ep of endpoints) {\n  if (!seen[ep.name]) { items.push({ json: { ...ep, key } }); }\n}\nreturn items.length > 0 ? items : [{ json: { skip: true } }];"
      },
      "id": "n2",
      "name": "Build Endpoints",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        200,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "const key = $json.key;\nconst sd = $getWorkflowStaticData('global');\nconst seen = sd[key] || {};\nseen[$json.name] = new Date().toISOString();\nsd[key] = seen;\nreturn [$input.item];"
      },
      "id": "n3",
      "name": "Mark Seen",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        600,
        0
      ]
    }
  ],
  "connections": {
    "Every 3 Minutes": {
      "main": [
        [
          {
            "node": "Build Endpoints",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Endpoints": {
      "main": [
        [
          {
            "node": "Mark Seen",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

3. Compliance Deadline Tracker (12 Deadline Types)

TRID Loan Estimate (3 BD) → TRID Closing Disclosure (3 BD) → RESPA GFE Tolerance (3 BD) → CFPB Error Acknowledgment (5 BD) → CFPB Error Resolution (30 BD) → FCRA Reinvestigation (30 days) → FCRA Adverse Action (5 BD) → FinCEN SAR (30 days) → FinCEN CTR (15 days) → HMDA Annual → RESPA Annual Escrow Statement → SOC2 renewal.

TRID architectural exposure: The 3-business-day Loan Estimate clock runs from the triggering event (6 TRID items received by lender), not from when your automation processes the application. If cloud iPaaS processing takes 4 hours due to rate limits or downtime, that 4 hours counts against your 3-day clock. TILA rescission right: borrower can rescind up to 3 years after consummation if disclosure was defective (15 USC §1635).

{
  "name": "PropTech Compliance Deadline Tracker",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 6
            }
          ]
        }
      },
      "id": "n1",
      "name": "Every 6 Hours",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "const deadlines = [\n  { type: 'TRID_LOAN_ESTIMATE', regulation: 'TRID Reg Z 12 CFR \u00a71026.19(e)', window: '3 business days from triggering event', urgency: 'CRITICAL', consequence: 'TILA rescission right 3 years \u00a71635 + CFPB supervisory action' },\n  { type: 'TRID_CLOSING_DISCLOSURE', regulation: 'TRID Reg Z 12 CFR \u00a71026.19(f)', window: '3 business days before consummation', urgency: 'CRITICAL', consequence: 'Loan rescission risk + CFPB enforcement' },\n  { type: 'RESPA_GFE_TOLERANCE', regulation: 'RESPA Reg X 12 CFR \u00a71024.7', window: '3 business days after application', urgency: 'HIGH', consequence: 'RESPA tolerance cure required' },\n  { type: 'CFPB_ERROR_NOTICE_ACK', regulation: 'CFPB Servicing 12 CFR \u00a71024.35', window: '5 business days', urgency: 'HIGH', consequence: 'CFPB exam finding + consumer harm finding' },\n  { type: 'CFPB_ERROR_RESOLUTION', regulation: 'CFPB Servicing 12 CFR \u00a71024.35(e)', window: '30 business days', urgency: 'HIGH', consequence: 'CFPB enforcement + actual damages' },\n  { type: 'FCRA_REINVESTIGATION', regulation: 'FCRA 15 USC \u00a71681i', window: '30 days from dispute (45 days with additional info)', urgency: 'HIGH', consequence: 'FCRA \u00a71681i liability + willful violation exposure' },\n  { type: 'FCRA_ADVERSE_ACTION', regulation: 'FCRA 15 USC \u00a71681m', window: '5 business days after adverse action', urgency: 'HIGH', consequence: 'FCRA \u00a71681n willful: $100\u2013$1,000/violation + punitive + attorney fees' },\n  { type: 'FINCEN_SAR_30D', regulation: 'FinCEN 31 CFR \u00a71020.320', window: '30 days from detection of suspicious activity \u2265$25,000', urgency: 'HIGH', consequence: 'BSA civil penalty up to $1M/day + criminal' },\n  { type: 'FINCEN_CTR_15D', regulation: 'FinCEN 31 CFR \u00a71010.311', window: '15 days after cash transaction >$10,000', urgency: 'HIGH', consequence: 'BSA civil penalty' },\n  { type: 'HMDA_ANNUAL_SUBMISSION', regulation: 'HMDA 12 CFR \u00a71003', window: 'March 1 annual', urgency: 'MEDIUM', consequence: 'CFPB enforcement + fair lending exam' },\n  { type: 'RESPA_ANNUAL_ESCROW_STATEMENT', regulation: 'RESPA 12 CFR \u00a71024.17(i)', window: '30 days after annual computation period', urgency: 'MEDIUM', consequence: 'RESPA violation + consumer harm finding' },\n  { type: 'SOC2_TYPE2_RENEWAL', regulation: 'SOC2 AICPA TSP \u00a7100', window: 'Annual audit cycle', urgency: 'LOW', consequence: 'Enterprise sales blocked + insurance premium increase' }\n];\nreturn deadlines.map(d => ({ json: { ...d, checked_at: new Date().toISOString() } }));"
      },
      "id": "n2",
      "name": "Build Deadlines",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        200,
        0
      ]
    }
  ],
  "connections": {
    "Every 6 Hours": {
      "main": [
        [
          {
            "node": "Build Deadlines",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

4. Incident Pipeline (8 Incident Types)

RESPA_KICKBACK_COMPLAINT (IMMEDIATE — HUD/CFPB to DOJ) → TRID_DISCLOSURE_MISS (3 BD clock, TILA rescission exposure) → FCRA_UNAUTHORIZED_DISCLOSURE (IMMEDIATE — §1681n willful, class action) → FAIR_HOUSING_COMPLAINT (IMMEDIATE — disparate impact, no intent required) → CFPB_ERROR_NOTICE (5 BD ack / 30 BD resolve) → FINCEN_SAR_TRIGGERED (30D, tipping-off prohibition) → FCRA_ADVERSE_ACTION (5 BD notice) → GENERAL.

{
  "name": "PropTech Compliance Incident Pipeline",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "proptech-incident",
        "responseMode": "responseNode"
      },
      "id": "n1",
      "name": "Incident Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "const incidentType = $json.incident_type;\nconst map = {\n  'RESPA_KICKBACK_COMPLAINT': {\n    priority: 'P0',\n    clock: 'IMMEDIATE \u2014 HUD/CFPB referral to DOJ on complaint filing',\n    response: 'Notify legal immediately. Pull all settlement referral records for involved parties. Preserve all communications. RESPA \u00a78 audit trail must be available for HUD investigation.',\n    penalty: 'Criminal: $10,000 fine + 1 year imprisonment per count. Civil: treble actual damages 12 USC \u00a72607(d).',\n    regulation: 'RESPA 12 USC \u00a72601 \u00a78'\n  },\n  'TRID_DISCLOSURE_MISS': {\n    priority: 'P0',\n    clock: '3 business days from triggering event \u2014 clock already running',\n    response: 'Identify triggering event timestamp. Calculate 3-BD deadline. If missed: cure procedure under Reg Z. Notify compliance officer. Pull application file.',\n    penalty: 'TILA rescission right: borrower can rescind up to 3 years after consummation (\u00a71635). CFPB supervisory action.',\n    regulation: 'TRID Reg Z 12 CFR \u00a71026.19(e)'\n  },\n  'FCRA_UNAUTHORIZED_DISCLOSURE': {\n    priority: 'P0',\n    clock: 'IMMEDIATE \u2014 \u00a71681n willful violation clock starts at disclosure event',\n    response: 'Document all consumer report data transmissions. Identify permissible purpose basis for each. Notify legal. Pull contracts with data providers. Preserve FCRA permissible purpose documentation.',\n    penalty: '\u00a71681n willful: $100\u2013$1,000 statutory damages per violation + punitive damages + attorney fees. Class action exposure.',\n    regulation: 'FCRA 15 USC \u00a71681b \u00a71681n'\n  },\n  'FAIR_HOUSING_COMPLAINT': {\n    priority: 'P0',\n    clock: 'IMMEDIATE \u2014 HUD complaint + DOJ referral. Disparate impact: no intent required.',\n    response: 'Preserve all listing and application decision records. Pull algorithmic decision audit trail. Conduct disparate impact analysis. Notify legal immediately.',\n    penalty: 'HUD administrative: up to $16,000 first violation, $70,000 subsequent. DOJ civil: actual damages + punitive + attorney fees.',\n    regulation: 'Fair Housing Act 42 USC \u00a73604'\n  },\n  'CFPB_ERROR_NOTICE': {\n    priority: 'P1',\n    clock: '5 business days to acknowledge, 30 business days to resolve',\n    response: 'Log error notice receipt timestamp. Assign compliance owner. Pull account records. Prepare written acknowledgment within 5 business days.',\n    penalty: 'CFPB supervisory action + consumer harm finding + actual damages. Pattern-and-practice: CFPB enforcement action.',\n    regulation: 'CFPB Servicing 12 CFR \u00a71024.35'\n  },\n  'FINCEN_SAR_TRIGGERED': {\n    priority: 'P1',\n    clock: '30 days from detection of suspicious activity \u2265$25,000. TIPPING-OFF PROHIBITION: cannot notify subject.',\n    response: 'Document detection event and timestamp. Assign AML officer. Begin SAR narrative drafting. DO NOT notify subject of SAR filing. File via FinCEN BSA E-Filing System.',\n    penalty: 'BSA civil: up to $1,000,000/day per violation. Criminal: up to 10 years imprisonment.',\n    regulation: 'FinCEN BSA 31 CFR \u00a71020.320'\n  },\n  'FCRA_ADVERSE_ACTION': {\n    priority: 'P1',\n    clock: '5 business days after adverse action taken',\n    response: 'Issue adverse action notice with required FCRA disclosures (CRA name/address/phone, right to dispute, right to free copy of report within 60 days).',\n    penalty: '\u00a71681m violation: $100\u2013$1,000 statutory damages per violation + punitive + attorney fees.',\n    regulation: 'FCRA 15 USC \u00a71681m'\n  },\n  'GENERAL': {\n    priority: 'P2',\n    clock: 'Review within 24 hours',\n    response: 'Log incident. Assign compliance owner. Determine applicable regulation and clock.',\n    penalty: 'TBD based on regulation.',\n    regulation: 'Multiple'\n  }\n};\nconst incident = map[incidentType] || map['GENERAL'];\nreturn [{ json: { incident_type: incidentType, ...incident, triggered_at: new Date().toISOString() } }];"
      },
      "id": "n2",
      "name": "Route Incident",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        200,
        0
      ]
    },
    {
      "parameters": {
        "respondWith": "allIncomingItems",
        "options": {}
      },
      "id": "n3",
      "name": "Respond",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1,
      "position": [
        400,
        0
      ]
    }
  ],
  "connections": {
    "Incident Webhook": {
      "main": [
        [
          {
            "node": "Route Incident",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route Incident": {
      "main": [
        [
          {
            "node": "Respond",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

5. Weekly KPI Dashboard

Active customers, MRR, active listings, applications processed. Compliance metrics 7D: RESPA complaints, FCRA disputes, Fair Housing complaints, CFPB error notices, SARs filed, TRID disclosure misses, FCRA adverse action notices. Open deadlines 30D. Sent to CEO + GC + CCO BCC.

{
  "name": "PropTech Weekly Compliance KPI Dashboard",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "weeksInterval": 1
            }
          ]
        }
      },
      "id": "n1",
      "name": "Weekly",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "const now = new Date();\nconst kpi = {\n  report_date: now.toISOString(),\n  period: 'Week of ' + now.toISOString().split('T')[0],\n  business_metrics: {\n    active_customers: 0,\n    mrr_usd: 0,\n    active_listings: 0,\n    applications_processed_7d: 0\n  },\n  compliance_metrics_7d: {\n    respa_complaints: 0,\n    fcra_disputes: 0,\n    fair_housing_complaints: 0,\n    cfpb_error_notices: 0,\n    sar_filed: 0,\n    trid_disclosure_misses: 0,\n    fcra_adverse_action_notices: 0\n  },\n  open_deadlines_30d: 0,\n  self_hosting_note: 'This KPI runs inside your own n8n instance. FCRA tenant screening data, RESPA settlement records, and FinCEN SAR data never left your network this week.'\n};\nreturn [{ json: kpi }];"
      },
      "id": "n2",
      "name": "Build KPI",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        200,
        0
      ]
    }
  ],
  "connections": {
    "Weekly": {
      "main": [
        [
          {
            "node": "Build KPI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

The FCRA §1681b Self-Hosting Argument

This is the architectural argument that changes PropTech procurement conversations:

Cloud iPaaS routing tenant screening data = your automation layer is a third-party processor receiving consumer report data. FCRA §1681b requires permissible purpose for every transmission. The cloud vendor is not a consumer reporting agency. It has no permissible purpose. It receives the data as a byproduct of your automation architecture.

§1681n willful violation: $100–$1,000 statutory damages per disclosure, no cap, plus punitive damages plus attorney fees. If your platform processes 1,000 tenant applications per month, each routed through cloud iPaaS, that's 1,000 potential §1681n violations per month before a single complaint is filed.

Self-hosted n8n = tenant screening data never leaves your network. The §1681b permissible purpose question is eliminated architecturally. Your FCRA compliance attorney writes one paragraph about an internal system — not a vendor risk assessment with an annual renewal date and a $5K-$50K assessment fee.

Same logic applies to RESPA §8: settlement service referral data staying inside your network means the audit trail is in your own Postgres, not on a cloud vendor's servers with their own subpoena exposure and data retention policies you don't control.

Implementation

All five workflows are available at stripeai.gumroad.com — full JSON, ready to import into any n8n instance.

Questions about PropTech compliance automation? Drop a comment below.

Top comments (0)