1. Purpose and scope
The tool takes a lot address or parcel ID and returns a one page report on what the public record says about building there: flood zone, utilities, septic or sewer, MUD district, deed restrictions on file, and what is being built nearby.
It serves Persona B (build on your lot) as the offer behind the lot report landing page, and Persona A (land plus build) as a screen on any lot a buyer is considering. The ISA and the buyers agent use the same output on calls.
In scope
- Lookup by street address or appraisal district PIN, Montgomery County, Texas only at launch.
- Public record data only. Every field in the output carries its source and a retrieval date.
- A four state verdict per lot, with the reasons listed.
- A customer report (web page and PDF) and an operator view (extra fields for Jacob, the ISA and the buyers agent).
- A lead record written to the CRM on every submission.
Out of scope
- Any construction cost range, price per square foot, or savings estimate. The report shows [RANGE TO BE SET BY JACOB] where a range would go, and Jacob sets it before launch or the block stays hidden.
- Survey, soil, drainage engineering, wetlands delineation, or a legal opinion on title or restrictions.
- Counties other than Montgomery. The data layer is built per county so adding Harris or Liberty later is a new adapter, not a rewrite.
- Builder pricing or builder matching. The report ends with a request to talk to a buyers agent.
2. Fields in
Single page form. Fields 1 and 2 are required (either one). The rest are optional and improve the operator view or qualify the lead.
| # | Field key | Label shown | Type and validation | Required | Why we ask |
|---|---|---|---|---|---|
| 1 | address | Lot address | Text, address autocomplete (Google Places or county situs list). Must resolve to one PIN or return a pick list. | Either 1 or 2 | Primary lookup key. Vacant lots often have only a road name and a number. |
| 2 | pin | Parcel ID (appraisal district account number) | Digits only, 5 to 8 characters, checked against the roll. Helper text shows where to find it on a tax statement. | Either 1 or 2 | Exact key. Beats an address when the situs is blank. |
| 3 | full_name | Your name | Text, 2 to 80 characters. | Yes | Lead record and report greeting. |
| 4 | email | RFC 5322 basic format check. Report link is sent here. | Yes | Delivery and nurture. | |
| 5 | phone | Mobile phone | US 10 digit, normalised to E.164. Optional. If filled, the SMS consent checkbox appears and must be ticked separately. | No | ISA follow up. |
| 6 | sms_consent | Text message consent | Checkbox, unticked by default, text in section 8.5. Stored with timestamp, IP and exact wording version. | Only if phone filled | Compliance record. |
| 7 | owner_status | Do you own this lot? | Radio: Yes, I own it / I am looking at buying it / Other. | No | Routes Persona B vs Persona A. "Looking at buying" is a Persona A lead. |
| 8 | financing | How do you plan to pay for the build? | Select: One time close construction loan / Construction loan with draws / Cash / Not sure yet. | No | Top qualifying signal. One time close is the shortest path to a closing. |
| 9 | timeline | When do you want to start? | Select: Within 6 months / 6 to 12 months / 12 to 24 months / Just looking. | No | Lead priority. |
| 10 | consent_contact | Contact consent | Checkbox: "I agree Builder Connect Group may contact me about this report by email." Unticked default. | Yes | Email compliance record. |
Hidden fields captured automatically
utm_source, utm_medium, utm_campaign, utm_content, landing_variant, referrer, submitted_at (UTC), ip_hash, postcard_code (if the visitor arrived from a QR or short URL on a mailer, which pre-fills the PIN).
Form behaviour
- If the address matches several parcels (a split lot, a replat), show a pick list of up to 10 with PIN, acres and legal description. Never guess.
- If nothing matches, show: "We could not find that address in the Montgomery County appraisal roll. Try your parcel ID, or call (346) 273-1143." Log the miss with the typed value.
- Submit button label: "Get my lot report". Button disabled until required fields validate. Inline errors under each field, never alerts.
3. Data sources
Every source is wrapped by one adapter that returns {value, status, source_name, source_url, retrieved_at, raw_ref}. status is one of ok, not_found, error, stale. No adapter may throw into the pipeline.
| ID | Source | What we take | Access | Refresh | Stale after |
|---|---|---|---|---|---|
| S1 | Montgomery Central Appraisal District roll (the file already pulled: 60,328 vacant residential lots) | PIN, owner name, mailing address, situs, legal description, acres, land use code, lots held by owner, absentee flag, subdivision, block, lot | Bulk roll loaded to our database. Key on PIN and normalised situs. | Weekly, Monday, with the ownership change job | 10 days |
| S2 | FEMA National Flood Hazard Layer (NFHL) | Flood zone code (X, AE, A, AO, VE and others), SFHA flag, base flood elevation where published, FIRM panel number and effective date, floodway flag | FEMA NFHL ArcGIS REST service, point in polygon query on the parcel centroid and again on each parcel corner | Live query, cached 30 days per PIN | 90 days |
| S3 | Texas Commission on Environmental Quality MUD and water district boundaries | District name, district type (MUD, WCID, PUD, FWSD), district ID | TCEQ water district boundary layer, point in polygon | Quarterly download | 120 days |
| S4 | Utility service area layers: water CCNs from the Public Utility Commission of Texas, sewer CCNs, and district maps from S3 | Named water provider, named sewer provider, or "none mapped" | PUC CCN service area layers, point in polygon | Quarterly | 120 days |
| S5 | County and city permit records | Residential new construction permits within 1 mile: address, permit date, status, valuation field if published. Also any permit on the subject parcel. | The county permit extract used for the 792 permit analysis. City permit portals for Conroe, Magnolia, Montgomery and others added one by one, each its own adapter. | Weekly | 14 days |
| S6 | Texas Natural Resource Information System or county road layer | Frontage on a county maintained road, state road, private road or none | Road centerline layer, distance from parcel boundary | Annual | 400 days |
| S7 | County On Site Sewage Facility (OSSF) program records | Existing OSSF permit on the PIN or street address; local program contact | Records request or public portal, whichever the county offers. If no machine feed exists, S7 returns not_found and the report says to confirm with the county. | Monthly if feed exists | 60 days |
| S8 | County plat and deed restriction index (Montgomery County Clerk) | Recorded plat reference for the subdivision, presence of recorded restrictions or a property owners association for the subdivision. Flag only, no reading of the text. | Clerk index lookup by subdivision name | Quarterly | 180 days |
| S9 | Builder Connect internal database | Hot feed membership (lot bought in last 90 days), prior report requests for this PIN, builder coverage by ZIP | Own tables | Live | n/a |
Source fallback rule
If a source returns error, retry twice with 2 second backoff, then continue. The affected field shows "Not available from the public record right now" and the verdict can be at most AMBER (section 6.6). A report is never blocked because one source is down.
4. Pipeline
- Resolve. Normalise the input (uppercase, strip suffix variants such as RD and ROAD, strip unit text). Match on PIN, else on situs. Output one PIN or a pick list.
- Geometry. Fetch the parcel polygon from the appraisal district GIS parcel layer. Compute the centroid and the polygon bounds. If no polygon exists, use the geocoded situs point and set
geometry_quality = "point_only". - Fan out. Call S2 to S8 in parallel with a 6 second timeout each.
- Normalise. Convert every result to the output schema (section 5).
- Evaluate rules. Run rules R1 to R14 (section 6). Each rule emits zero or one finding.
- Score. Derive the verdict from the findings.
- Render. Build the web report, the PDF and the operator view from the same JSON.
- Deliver. Show the web report immediately. Email the PDF link within 60 seconds. Write the lead record to the CRM.
- Notify. Route to the ISA or buyers agent queue by lead priority (section 6.8).
Target: web report in under 12 seconds for 95 percent of lookups. If the fan out is still running at 12 seconds, show the report with pending blocks and update them in place (poll every 3 seconds, stop at 30).
5. Fields out
One JSON document per lookup, stored as lot_report. Customer report shows the fields marked C. Operator view shows C plus O.
{
"report_id": "uuid",
"generated_at": "ISO 8601 UTC",
"parcel": {
"pin": "string", "situs": "string", "county": "Montgomery",
"acres": number, "legal_description": "string", "subdivision": "string|null",
"geometry_quality": "polygon|point_only"
},
"flood": { "zone": "string", "sfha": bool, "floodway": bool, "bfe_ft": number|null,
"pct_parcel_in_sfha": number|null, "firm_panel": "string", "firm_effective": "date", "status": "ok|error" },
"water": { "provider": "string|null", "type": "public|district|none_mapped", "status": "..." },
"sewer": { "provider": "string|null", "type": "public|district|none_mapped", "status": "..." },
"district": { "name": "string|null", "type": "MUD|WCID|PUD|FWSD|none", "id": "string|null" },
"septic": { "likely_required": bool, "existing_ossf_permit": bool|null, "program_contact": "string" },
"access": { "road_type": "county|state|private|none_mapped", "road_name": "string|null" },
"restrictions": { "plat_recorded": bool|null, "restrictions_on_file": bool|null, "poa_present": bool|null },
"nearby_permits_1mi": { "count_12mo": int, "count_36mo": int, "items": [ {"address", "date", "status"} ], "status": "..." },
"own_permit_on_parcel": { "exists": bool, "type": "string|null", "date": "date|null" },
"findings": [ { "rule": "R1", "severity": "blocker|confirm|info", "text_key": "string", "source_id": "S2" } ],
"verdict": "GREEN|AMBER|RED|GREY",
"cost_block": { "range": "[RANGE TO BE SET BY JACOB]", "visible": false },
"source_log": [ { "id", "status", "retrieved_at" } ],
"operator": { "owner_name", "mailing_address", "absentee", "lots_held", "hot_feed_days_since_purchase", "lead_priority", "financing", "owner_matches_submitter" }
}
Customer report blocks, in order
| Block | Shows | Merge fields |
|---|---|---|
| 1 Header | Address, PIN, acres, county, date of report | {{situs}} {{pin}} {{acres}} {{generated_at}} |
| 2 Verdict line | One sentence verdict plus count of items to confirm | {{verdict_sentence}} |
| 3 Flood | Zone, in or out of the special flood hazard area, panel and date | {{flood_zone}} {{firm_panel}} |
| 4 Water and sewer | Providers or the statement that none is mapped, with what that means (septic and well) | {{water_provider}} {{sewer_provider}} |
| 5 District | MUD or other district name, or "none on record" | {{district_name}} |
| 6 Access and restrictions | Road type, plat on record, restrictions or POA flag | {{road_type}} {{restrictions_flag}} |
| 7 Nearby building | Count of new home permits within 1 mile in 12 months, and a list of up to 8 | {{nearest_permits_1mi}} |
| 8 Cost to build | Hidden unless Jacob sets the range | [RANGE TO BE SET BY JACOB] |
| 9 Next step | Call or book with a buyers agent, compensation line, disclaimer | Static |
6. Logic
6.1 Rules
Severity blocker means the record shows something that can stop or sharply change a build. confirm means a person must check before anyone spends money. info is shown, no effect on the verdict.
| Rule | Condition | Severity | Customer text key |
|---|---|---|---|
| R1 | Flood zone is VE, or floodway flag is true | blocker | flood_severe |
| R2 | Zone is A, AE or AO (SFHA true) and not floodway | confirm | flood_sfha (elevation certificate, base flood elevation and likely finished floor height must be checked; flood insurance cost to be quoted by an insurance agent) |
| R3 | Zone is X shaded (0.2 percent annual chance) or X with a levee note | confirm | flood_shaded_x |
| R4 | Zone is X unshaded, SFHA false | info | flood_minimal ("Minimal mapped flood hazard. A map can miss local drainage, so confirm with the county.") |
| R5 | Sewer type is none_mapped | confirm | septic_required (on site sewage facility permit and soil evaluation needed; lot size and soil decide what is allowed) |
| R6 | Water type is none_mapped | confirm | well_required (private well, confirm with the county and the lender) |
| R7 | District type is MUD, WCID, PUD or FWSD | info, plus confirm if the district publishes a tax rate we have not loaded | district_present (district tax rate and any impact or tap fees are set by the district; the report links to the district) |
| R8 | Road type is private or none_mapped | confirm | access_check (confirm recorded legal access and who maintains the road) |
| R9 | Restrictions on file true or POA present | confirm | restrictions_check (minimum size, setbacks, builder approval or an architectural committee may apply) |
| R10 | Parcel acres below the smallest allowed lot for septic in that county program [THRESHOLD TO BE CONFIRMED WITH COUNTY OSSF PROGRAM] and R5 is true | blocker | septic_lot_small |
| R11 | Parcel is in a recorded subdivision flagged in S8 as having no plat on file, or legal description starts with "ABSTRACT" or "A0" with a "split" note | confirm | unplatted_check (an unplatted or split tract may need platting or a county permit before a building permit) |
| R12 | Existing residential permit on this parcel | confirm | existing_permit (there may already be a home, a pad or an open permit) |
| R13 | Nearby permits in 12 months is 0 | info | no_nearby_activity (no new home permits recorded within 1 mile in the last 12 months) |
| R14 | Nearby permits in 12 months is 1 or more | info | nearby_activity (state the count, never a trend word) |
6.2 Verdict
| Verdict | Rule | Customer sentence (template) |
|---|---|---|
| RED | Any blocker finding | "The public record shows an item that can stop or change a build on this lot: {{blocker_list}}. Talk to a buyers agent before you spend money on plans." |
| AMBER | No blocker, one or more confirm findings, or any source in error | "The public record shows no blocker on this lot. It shows {{confirm_count}} items to confirm before you build: {{confirm_list}}." |
| GREEN | No blocker, no confirm, all sources ok | "The public record shows no blocker and no open items on this lot. Records do not replace a survey, soil work or a builder's site review." |
| GREY | Parcel unresolved, S1 missing, or fewer than 4 of S2 to S8 returned ok | "We could not read enough of the public record to give a verdict on this lot. A buyers agent will review it by hand and contact you." |
6.3 Flood percent of parcel
If a polygon exists, intersect with the NFHL polygons and compute pct_parcel_in_sfha as intersected area divided by parcel area, rounded to whole percent. Where a parcel is partly in the SFHA, use the zone with the largest overlap as zone and add the line "Part of this lot ({{pct_parcel_in_sfha}} percent) is in the special flood hazard area." Any overlap with a floodway triggers R1 regardless of percent.
6.4 Nearby permits
Great circle distance from the parcel centroid to each permit point, 1 mile radius. Count permits with type "new single family residence" only. Exclude permits at the subject address. Order the list by distance. Show at most 8. If the permit extract has no coordinates for a record, geocode the permit address once and cache it; if that fails, drop the record and log it.
6.5 Septic likelihood
septic.likely_required = true when sewer type is none_mapped. The tool never states that septic is allowed on the lot, only that the record maps no sewer service.
6.6 Source errors cap the verdict
One or more sources in error or stale status caps the verdict at AMBER and adds the finding "Some records could not be read when this report was made" with the list of affected blocks.
6.7 Cost block
cost_block.visible is false until Jacob sets the range in the admin config. When visible, the block shows the range exactly as set, with the line "Ranges are not quotes. A builder prices your actual plan and site." The tool computes no cost itself in v1.
6.8 Lead priority (operator only, never shown to the customer)
| Priority | Condition | Route |
|---|---|---|
| P1 | financing is one time close AND (owner_status is "own it" AND owner_matches_submitter, or owner_status is "looking at buying") AND timeline within 12 months | Buyers agent queue, call within 1 business day |
| P2 | Hot feed member (lot bought in last 90 days) with any financing, or P1 conditions except timeline | ISA queue, call within 1 business day |
| P3 | Phone with SMS consent, any other combination | ISA queue, call within 2 business days |
| P4 | Email only | Nurture sequence by persona, no call |
Rationale: a one time close loan reaches Builder Connect's first payment in roughly 45 to 60 days, cash draws only at the end of a 12 to 18 month build. Priority is a call order, not a screen for who gets served; every submitter gets the same report.
7. Edge cases
| Case | Behaviour |
|---|---|
| Address matches several PINs | Pick list with PIN, acres, legal description. No auto choice. |
| Address matches no PIN | Message in section 2, miss logged, ISA alerted if phone was supplied. |
| Situs is blank on the roll (common on vacant lots) | Geocode the legal description's subdivision, block and lot to a parcel through the GIS layer. If that fails, ask for the PIN. |
| Address is inside a city (Conroe, Magnolia, Montgomery, Willis, Shenandoah and others) | Show the city name and the line "Inside the city limits of {{city}}. City permits and rules apply instead of county rules." City permits come from the city adapter if one exists, otherwise the nearby permits block shows the county only and says so. |
| Address is in the extraterritorial jurisdiction of a city | Add confirm finding: "Within the extraterritorial jurisdiction of {{city}}. Confirm which rules apply." |
| Parcel straddles two flood zones | Section 6.3. Show both zones in the operator view. |
| FEMA map is under revision or a Letter of Map Amendment exists | If NFHL returns a pending flag, add confirm finding. The tool does not read LOMA letters in v1; the operator note says so. |
| Parcel under 0.1 acre or over 25 acres | Run normally. Over 25 acres adds the info line "Large tract. Land use may be agricultural, confirm ag valuation implications with the appraisal district." Under 0.1 acre adds a confirm finding. |
| Ag exemption on the roll | Info line: "This land may carry an agricultural valuation. Building a home can change it." Confirmation with the appraisal district. |
| Parcel already has an improvement value or a permit | R12 fires. The ISA is told the lot may not be vacant. |
| Owner on the roll is a company or trust | Report runs. Operator flag entity_owner. Owner match check skipped. |
| Submitter name does not match the owner on the roll | Report still runs because the data is public. Operator flag owner_matches_submitter = false. P1 requires the match, or "looking at buying". Match rule below. |
How owner_matches_submitter is computed | Step 1: take the roll owner string (example "LAM, THIEN"). If it contains "&" or " AND ", or a semicolon, split it into separate owners and test each one. Step 2: for each owner, split on the first comma. Text before the comma is the last name, text after is the given names (a roll value with no comma is read as last name first, then given names). Step 3: normalise the owner pieces and the submitted full name: uppercase, delete periods, commas and apostrophes, turn hyphens into spaces, drop JR, SR, II, III, IV, collapse spaces. Step 4: split the submitted name on spaces. The result is true when the owner last name equals the LAST token of the submitted name (or the submitted name contains the whole owner last name as consecutive tokens) AND the first given name of the owner equals the FIRST token of the submitted name. A first initial only (one letter) counts as equal to any name starting with that letter. Middle names are ignored. Step 5: if no owner passes, the result is false. If the owner is a company or trust, the result is null (not computed, see the entity row) and P1 treats null as false unless the ISA ticks "Confirmed owner by phone" in the operator view, which sets it to true. Worked example: roll "LAM, THIEN", form "Thien Lam" gives true; form "Lam Thien" gives false, and the ISA confirms by phone. |
| Same PIN requested more than 3 times in 24 hours from different emails | Serve the cached report, flag the operator view as possible third party interest, no extra source calls. |
| Same email requests many PINs | Allow 5 per day. The sixth shows a message to call (346) 273-1143. Likely a builder or investor, flag multi_lot_requester. Builder Connect does not hide this from the owner, it is a routing flag only. |
| Out of county address | "We cover Montgomery County for now." Capture the email for a county waitlist with the same consent checkbox. |
| Owner is out of state and not the submitter | Absentee flag shown to the operator only. |
| Source returns conflicting data (appraisal acres vs GIS polygon area differ by more than 10 percent) | Show appraisal acres, add operator flag acreage_mismatch with both numbers, add confirm finding "Lot size should be checked against a survey." |
| Bot or scripted traffic | Honeypot field, rate limit 10 requests per IP per hour, invisible challenge on the third request. |
| Email delivery fails | Web report still shows. Retry once at 5 minutes. Log bounce. |
| Person asks for removal of their data or opts out | Admin action suppress(email) deletes the lead contact fields and blocks future sends. STOP by text sets sms_consent = false within 1 minute. |
8. Customer facing copy
All strings below are DRAFT for Jacob's approval. They are the only copy a buyer reads.
8.1 Form page
What does the public record say about your lot?
Enter your address or parcel ID. You get a report on flood zone, water and sewer, MUD district, what the county has on record, and what is being built within a mile.
How this works. Builder Connect Group represents buyers. When you build with a builder we introduce, the builder pays Builder Connect's fee. Going direct to the builder does not lower your price. The lot report costs you nothing, and there is no obligation to use us.
8.2 Report footer (every report and PDF)
About this report. This report summarises public records from the Montgomery Central Appraisal District, FEMA, TCEQ, the Public Utility Commission of Texas, county permit data and the county clerk, as of the retrieval dates listed. Records can be late, incomplete or wrong. A map is not a survey, a flood zone is not a promise about flooding, and a record that shows no problem is not a promise that none exists. This report is not a survey, a soil or drainage study, an engineering opinion, a title opinion, legal advice or a quote for construction. Confirm every item with the agency named, a licensed surveyor, a licensed engineer or a title company before you buy, plan or build.
Who we are. Builder Connect Group | CB&A, Realtors. We represent buyers. We do not build homes. When you build with a builder we introduce, the builder pays Builder Connect's fee. Going direct to the builder does not lower your price.
(346) 273-1143 | jacob@builderconnect.net
8.3 Finding texts
| Key | Customer text (DRAFT) |
|---|---|
flood_severe | This lot is mapped in zone {{flood_zone}}, which includes a high risk or floodway area. Building here may be limited or may need engineering, and a lender may not finance it. Confirm with the county floodplain administrator before you spend money on plans. |
flood_sfha | This lot is mapped in zone {{flood_zone}}, a special flood hazard area. Homes here are normally built above a set elevation and lenders require flood insurance. Ask for an elevation certificate and an insurance quote before you commit. |
flood_shaded_x | This lot is in zone X shaded, a moderate flood hazard area. Flood insurance is not required by most lenders here, but you may want it. Ask for a quote. |
flood_minimal | This lot is mapped in zone X, minimal mapped flood hazard. A map can miss local drainage, so confirm with the county. |
septic_required | The record maps no sewer service at this lot. Plan on a septic system, which needs a county permit and a soil evaluation. Soil and lot size decide what system is allowed. |
well_required | The record maps no water provider at this lot. Plan on a private well and confirm what the county and your lender require. |
district_present | This lot sits in {{district_name}}. Districts charge their own property tax and may charge tap or impact fees. Ask the district for its current rate and fees. |
access_check | The road at this lot is mapped as {{road_type}}. Confirm that the lot has recorded legal access and who maintains the road. |
restrictions_check | The county clerk index shows recorded restrictions or an owners association for this subdivision. They can set minimum home size, setbacks, materials and approval steps. Get a copy before you design. |
septic_lot_small | The lot is {{acres}} acres and the record maps no sewer. Lots this size may not qualify for a septic system. Confirm with the county before you go further. |
unplatted_check | This tract may not be part of a recorded plat. An unplatted or split tract may need platting or a county permit before a building permit. |
existing_permit | The county shows a permit on this parcel: {{own_permit_type}}, {{own_permit_date}}. There may already be a structure or an open permit. |
nearby_activity | {{count_12mo}} new home permits were recorded within 1 mile of this lot in the last 12 months. The list is below. |
no_nearby_activity | No new home permits were recorded within 1 mile of this lot in the last 12 months. |
8.4 Result page next step block
Next step
A buyers agent at Builder Connect Group can walk through this report with you in 15 minutes and tell you which builders work in your area. Call (346) 273-1143 or reply to the email this report came in.
The builder pays Builder Connect's fee, and going direct to the builder does not lower your price.
8.5 SMS consent (shown only when a phone number is entered)
[ ] I agree to receive text messages from Builder Connect Group about my lot report and building on my lot. Message frequency varies. Msg and data rates may apply. Reply STOP to cancel, HELP for help. Consent is not a condition of getting a report.
8.6 Email consent and footer
[ ] I agree Builder Connect Group may contact me by email about this report.
Every email carries: an unsubscribe link, "[MAILING ADDRESS TO BE SET BY JACOB]", and the line "Builder Connect Group | CB&A, Realtors".
8.7 Page footer (Texas)
TREC Information About Brokerage Services | Consumer Protection Notice
Builder Connect Group | CB&A, Realtors | (346) 273-1143 | jacob@builderconnect.net
9. Sample run (operator note, not customer copy)
OPERATOR NOTE: SAMPLE ONLY. The parcel fields below are a real record from bar/data/sample-absentee-200.csv. Every flood, utility, district, access and permit field is a merge field because none of that data is loaded. Do not show this to a customer. Nothing here is a fact about this address beyond the three appraisal roll fields.
| Field | Value | Source |
|---|---|---|
| pin | 251189 | S1 (roll sample) |
| situs | 27927 NICHOLS SAWMILL RD, MAGNOLIA TX 77355 | S1 (roll sample) |
| legal_description | INDIGO LAKE ESTATES 05, BLOCK 1, LOT 5, REPLAT 5A | S1 (roll sample) |
| acres | 14.0 | S1 (roll sample) |
| absentee / lots held / out of county | yes / 1 / yes (operator only) | S1 (roll sample) |
| flood.zone | {{flood_zone}} | S2, not loaded |
| water.provider, sewer.provider | {{water_provider}}, {{sewer_provider}} | S4, not loaded |
| district.name | {{district_name}} | S3, not loaded |
| nearby_permits_1mi | {{nearest_permits_1mi}} | S5, not loaded |
| verdict | {{verdict}} | Computed after S2 to S8 return |
Sample customer block with merge fields
Lot report for 27927 NICHOLS SAWMILL RD, MAGNOLIA TX 77355
PIN 251189 | 14.0 acres | Montgomery County | {{generated_at}}
{{verdict_sentence}}
Flood: zone {{flood_zone}}, FIRM panel {{firm_panel}}.
Water: {{water_provider}}. Sewer: {{sewer_provider}}. District: {{district_name}}.
New home permits within 1 mile in 12 months: {{count_12mo}}.
The builder pays Builder Connect's fee, and going direct to the builder does not lower your price.
10. Acceptance tests
A developer is done when all of these pass.
| # | Given | Then |
|---|---|---|
| T1 | A PIN in zone AE, public water, no sewer, no district | Verdict AMBER, findings R2 and R5, flood block and septic block shown. |
| T2 | A PIN with floodway overlap | Verdict RED, finding R1, customer text flood_severe. |
| T3 | A PIN in zone X unshaded, all providers mapped, no restrictions, 3 permits within 1 mile | Verdict GREEN, finding R4 and R14 with count 3. |
| T4 | S2 times out | Report renders in under 15 seconds, flood block reads "Not available from the public record right now", verdict not GREEN. |
| T5 | Address matching 2 PINs | Pick list shown, no report until one is chosen. |
| T6 | Phone entered, consent unticked | Lead saved with no SMS permission, no text sent. |
| T7 | Reply STOP to a text | sms_consent set to false inside 1 minute, confirmation text sent once. |
| T8 | Search all report copy for "free", "guarantee", "approved", "buildable", "safe" | No hits except inside this spec's rules. |
| T9 | Cost block with no range set | Block hidden, no number anywhere in the report. |
| T10 | Every customer page and PDF | Contains the compensation line, the disclaimer, TREC link, Consumer Protection Notice link, company line, phone and email. |
| T11 | Submitter is not the owner of record | Report runs, operator flag set, no owner name visible in the customer report. |
| T12 | Acres on roll 14.0, GIS polygon 11.2 | acreage_mismatch flag and confirm finding. |
11. Open items for Jacob
- Set the construction range, or confirm the cost block stays hidden: [RANGE TO BE SET BY JACOB].
- Confirm the county OSSF minimum lot size and whether an OSSF record feed exists (S7, rule R10).
- Choose which city permit portals to add first (S5).
- Approve the draft disclaimer in 8.2 and the finding texts in 8.3, ideally with a read from the brokerage's compliance contact.
- Choose the CRM that receives the lead record and the SMS provider that stores consent.
- Confirm data handling: how long lot reports and lead records are kept.
- Decide who in the business owns the weekly refresh of S1, S5 and the quarterly refresh of S3, S4, S8.