In short
n8n workflow that screens inbound real estate deal emails end to end. AI extracts address, price, rehab, ARV, rent, taxes and insurance from messy broker and wholesaler emails, and returns null rather than guessing. Validation normalises the numbers and stops incomplete deals. Deterministic code runs the underwriting: all-in cost, cash to close, NOI, cash flow, DSCR, CoC, ROI, cap rate and the 70% rule, then ten buy box checks read from a sheet. AI only writes the explanation. Five deals in one run: 2 PASS, 2 FAIL, 1 NEEDS DATA.
Project description
A real estate investor's deal inbox is full of broker emails, wholesaler blasts and listing alerts, and each one costs about 20 minutes to work out whether it is worth a second look. This n8n workflow screens five of them in ninety seconds and says exactly why each one failed. AI reads the messy email and writes the final explanation. Everything in between, the validation, the underwriting and the buy box, is deterministic code, because the model is not allowed near the math.
Tools & Deliverables
- n8n workflow triggered from a Gmail deal inbox, processing one deal at a time so every result is traceable
- AI extraction of address, price, rehab, ARV, rent, taxes and insurance from unstructured email text, returning null rather than a guess
- Validation layer with no AI: parses 75k into 75000, checks required fields, and flags impossible combinations such as ARV below asking price
- Deterministic underwriting: all-in cost, purchase loan, cash to close, cash left in deal, NOI, debt service, cash flow, DSCR, CoC, ROI, cap rate and the 70% rule
- Buy box of ten checks read from a Google Sheet, each returning its own pass or fail line, editable by the investor without touching the workflow
- One result row per deal with verdict, score, every metric, the checks it failed and a three sentence explanation, with passing deals ranked
The problem
- Twenty minutes per email, and most are a no. Opening the email, pulling the numbers into a spreadsheet, running the maths and deciding is the same twenty minutes whether the deal is good or obviously terrible. The bad ones cost exactly as much attention as the good ones.
- Deal emails are not structured data. A wholesaler blast is prose, a broker email is a PDF attachment and a forwarded listing is half a table. Price appears as "75k", rehab appears as "needs about 25", and rent may not appear at all.
- An LLM doing arithmetic is the wrong tool. Ask a model for DSCR and it will produce a confident number that is occasionally wrong, and there is no way to tell which is which by looking. In underwriting, a plausible wrong number is worse than no number.
- Missing data quietly becomes invented data. If rent is absent and the model estimates it, the deal gets underwritten on a guess and looks like every other analysed deal in the sheet.
- Buy box rules change, and developers should not be the bottleneck. Every investor's thresholds move with the market, and a build that needs a developer to change a DSCR floor stops being used within a month.
Approach
The architecture splits the job by what each tool is actually good at: raw email, then validated data, then deterministic underwriting, then the buy box, then a pass or fail, and only then an AI explanation. AI is used exactly twice. First it reads the unstructured email and pulls out address, price, rehab, ARV, rent, taxes and insurance, under an instruction to return null rather than estimate, so a missing number stays missing. Last, it receives the finished numbers and writes three sentences explaining the verdict, explicitly forbidden from recalculating anything. Between those two points, no model is involved.
The validation step is deliberately dumb and strict. It parses "75k" into 75000, checks that the required fields are present, and runs sanity checks such as ARV below asking price or rent implausibly high for the price. Incomplete deals never reach the underwriting stage at all, which is why the demo run returns NEEDS DATA for one property rather than a number built on a guess. The underwriting itself is pure arithmetic: all-in cost, purchase loan, cash to close, cash left in deal, NOI, debt service, cash flow, DSCR, CoC, ROI, cap rate and the 70% rule. The same inputs always produce the same numbers, which means a result can be audited and argued with. The buy box then applies ten checks whose thresholds live in a Google Sheet tab, so the investor tightens or loosens the criteria themselves and each check returns its own pass or fail line rather than one opaque score.
Solution
In the recorded run, five deals went through in one pass and came out as two PASS, two FAIL and one NEEDS DATA. A Cleveland property at $75,000 with $25,000 rehab and a $145,000 ARV passed with a DSCR of 1.31 and $228 a month of cash flow. A second Cleveland property at $145,000 failed with a DSCR of 0.98 and negative seventeen dollars a month, which is exactly the deal that looks fine in an email and loses money every month. A Columbus property was never underwritten at all, because rent and rehab were missing, so it returned NEEDS DATA instead of a number built on a guess.
Each deal writes one row: verdict, score, every metric, the specific checks it failed, and the three sentence explanation. Passing deals are ranked, so the investor's morning starts with a short ordered list rather than an inbox. The part that makes it trustworthy is the separation: because the numbers come from deterministic code, the same email screened twice gives the same answer, and when the investor disagrees with a verdict they can point at the exact check that failed rather than arguing with a model. The buy box lives in the sheet, so as criteria change with the market, the workflow keeps working without a developer.
FAQ
Why not just let the AI do the underwriting?
Because a language model produces a confident number whether or not it is right, and there is no way to see the difference in a spreadsheet. Arithmetic in code is repeatable and auditable. The model is used where it is genuinely better than code, which is reading a messy email and writing a readable explanation.
What happens when the email is missing numbers?
The extraction step is instructed to return null rather than estimate, validation blocks the deal, and it comes out as NEEDS DATA. One of the five demo deals does exactly this. That is a feature: a deal analysed on invented rent looks identical to a real one.
Can the investor change the buy box?
Yes, in the sheet. Ten checks with thresholds in a Buy Box tab, each returning its own pass or fail line. No workflow edit and no developer. The live demo shows it directly: raising the minimum DSCR from 1.25 to 1.35 flips deals from PASS to FAIL with nothing else touched.
What formats does it handle?
Broker emails, wholesaler blasts and listing alerts arriving at a dedicated deal inbox, with price written as 75k or $75,000 and fields in any order. The extraction step is built for prose, not for a fixed template.
Could this run in Make.com instead of n8n?
Yes: Gmail watch, an iterator for one deal at a time, an OpenAI module for extraction, a function or JSON module for the validation and underwriting maths, a router on the buy box result, then Sheets append. The deterministic layer matters more than the platform.





