Acquisition intelligence

Offer math as tested code. Narrative as a model. Communication as someone else’s system.

Land OS is the decision layer for remote land acquisition — not a CRM, not an SMS sender, not a PropTech SaaS. Parcels, owners, comps, deals, buyers, and an append-only activity log. Motivation score and opening offer are pure functions with a locked test suite. The language model writes briefs from numbers already in the database. GoHighLevel remains the compliant communications plane.

Context

County exports, skip-trace files, and gut-feel offers do not compose. A model that invents an offer is a liability. A CRM that also “decides” the number hides the formula. Outbound SMS from an underwriting app creates consent and carrier-risk the product should never own.

Architecture

Six objects: Parcel (APN/TMS facts), Owner, Comp, Deal (underwriting + status), Buyer, Activity. Scoring is a pure function of documented fields in lib/scoring.ts. Underwriting in lib/underwriting.ts implements maxAcquisition = estimatedResale − targetGrossProfit − transactionCosts − riskReserve, then openingOffer = maxAcquisition × ratio (default 0.60). Contract price above the ceiling requires an override string.

Kill rules flag — they do not auto-kill — no legal access, unclear ownership, title defect, zoning that forbids a plausible use. A human confirms every flag. Every status mutation writes an Activity row. Silent updates are a defect.

The LLM is a prose engine. Property briefs and comp narratives receive numbers as inputs. Owner PII and skip-trace files live in /data, gitignored and cursorignored, and never enter a model prompt. Outreach queues can be handed to GoHighLevel; this process never sends.

Implementation

Phase-gated build

Phase 0 is a ledger: import, table, filters, real county exports, no model. Scoring is not wired into the UI until the table has been used on live parcels. That order is enforced as process, not a slide.

Reviewable weights

Motivation weights live in one exported constant. Changing scoring or underwriting requires passing tests and a note in an append-only decisions log. Before/after on two real parcels is the review standard.

Hard money guard

The UI must refuse a contract above maxAcquisition without override + reason. The ceiling is the product. The opening ratio is a policy default, not a suggestion from a chat model.

Separation of intelligence and send

Qualified sellers can be queued for GoHighLevel. Consent, opt-out, and carrier registration stay on that platform. Land OS records outcomes; it does not originate messages.

Non-negotiables

No autonomous offers or sends

Scores and offers are recommendations. A human approves every offer and every outbound. legalReviewedAt is a workflow gate, not legal advice.

Not generalized PropTech

No public signup, billing, or nationwide marketplace. The product is an internal operating system for acquisition, exit matching, and diligence tracking.

Exit structure varies by state and belongs with licensed counsel or a title company in the transaction state. The schema gate is operational, not an opinion letter.

All systemsBook an audit