"Can I build on this lot?" Feasibility Tool Spec

Builder Connect Group | Spec v0.1 | Prepared for Jacob Dow | Spec only, nothing is built

DRAFT for Jacob's approval. Internal developer spec. Customer facing copy appears only in the boxed sections.

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

Out of scope

Positioning rule. Builder Connect represents buyers. The tool must never read as if Builder Connect builds homes or sells lots it owns. Hard rule for every string in the product.

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 keyLabel shownType and validationRequiredWhy we ask
1addressLot addressText, address autocomplete (Google Places or county situs list). Must resolve to one PIN or return a pick list.Either 1 or 2Primary lookup key. Vacant lots often have only a road name and a number.
2pinParcel 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 2Exact key. Beats an address when the situs is blank.
3full_nameYour nameText, 2 to 80 characters.YesLead record and report greeting.
4emailEmailRFC 5322 basic format check. Report link is sent here.YesDelivery and nurture.
5phoneMobile phoneUS 10 digit, normalised to E.164. Optional. If filled, the SMS consent checkbox appears and must be ticked separately.NoISA follow up.
6sms_consentText message consentCheckbox, unticked by default, text in section 8.5. Stored with timestamp, IP and exact wording version.Only if phone filledCompliance record.
7owner_statusDo you own this lot?Radio: Yes, I own it / I am looking at buying it / Other.NoRoutes Persona B vs Persona A. "Looking at buying" is a Persona A lead.
8financingHow do you plan to pay for the build?Select: One time close construction loan / Construction loan with draws / Cash / Not sure yet.NoTop qualifying signal. One time close is the shortest path to a closing.
9timelineWhen do you want to start?Select: Within 6 months / 6 to 12 months / 12 to 24 months / Just looking.NoLead priority.
10consent_contactContact consentCheckbox: "I agree Builder Connect Group may contact me about this report by email." Unticked default.YesEmail 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

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.

IDSourceWhat we takeAccessRefreshStale after
S1Montgomery 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, lotBulk roll loaded to our database. Key on PIN and normalised situs.Weekly, Monday, with the ownership change job10 days
S2FEMA 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 flagFEMA NFHL ArcGIS REST service, point in polygon query on the parcel centroid and again on each parcel cornerLive query, cached 30 days per PIN90 days
S3Texas Commission on Environmental Quality MUD and water district boundariesDistrict name, district type (MUD, WCID, PUD, FWSD), district IDTCEQ water district boundary layer, point in polygonQuarterly download120 days
S4Utility service area layers: water CCNs from the Public Utility Commission of Texas, sewer CCNs, and district maps from S3Named water provider, named sewer provider, or "none mapped"PUC CCN service area layers, point in polygonQuarterly120 days
S5County and city permit recordsResidential 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.Weekly14 days
S6Texas Natural Resource Information System or county road layerFrontage on a county maintained road, state road, private road or noneRoad centerline layer, distance from parcel boundaryAnnual400 days
S7County On Site Sewage Facility (OSSF) program recordsExisting OSSF permit on the PIN or street address; local program contactRecords 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 exists60 days
S8County 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 nameQuarterly180 days
S9Builder Connect internal databaseHot feed membership (lot bought in last 90 days), prior report requests for this PIN, builder coverage by ZIPOwn tablesLiven/a
Not in the sample file. The 200 row sample CSV carries only S1 fields. Flood zone, utilities, MUD and nearby permits do not exist in any file we hold today. S2 to S8 must be wired before the tool can return a real report. Until then every such field is a merge field, for example {{flood_zone}}.

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

  1. 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.
  2. 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".
  3. Fan out. Call S2 to S8 in parallel with a 6 second timeout each.
  4. Normalise. Convert every result to the output schema (section 5).
  5. Evaluate rules. Run rules R1 to R14 (section 6). Each rule emits zero or one finding.
  6. Score. Derive the verdict from the findings.
  7. Render. Build the web report, the PDF and the operator view from the same JSON.
  8. Deliver. Show the web report immediately. Email the PDF link within 60 seconds. Write the lead record to the CRM.
  9. 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

BlockShowsMerge fields
1 HeaderAddress, PIN, acres, county, date of report{{situs}} {{pin}} {{acres}} {{generated_at}}
2 Verdict lineOne sentence verdict plus count of items to confirm{{verdict_sentence}}
3 FloodZone, in or out of the special flood hazard area, panel and date{{flood_zone}} {{firm_panel}}
4 Water and sewerProviders or the statement that none is mapped, with what that means (septic and well){{water_provider}} {{sewer_provider}}
5 DistrictMUD or other district name, or "none on record"{{district_name}}
6 Access and restrictionsRoad type, plat on record, restrictions or POA flag{{road_type}} {{restrictions_flag}}
7 Nearby buildingCount of new home permits within 1 mile in 12 months, and a list of up to 8{{nearest_permits_1mi}}
8 Cost to buildHidden unless Jacob sets the range[RANGE TO BE SET BY JACOB]
9 Next stepCall or book with a buyers agent, compensation line, disclaimerStatic

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.

RuleConditionSeverityCustomer text key
R1Flood zone is VE, or floodway flag is trueblockerflood_severe
R2Zone is A, AE or AO (SFHA true) and not floodwayconfirmflood_sfha (elevation certificate, base flood elevation and likely finished floor height must be checked; flood insurance cost to be quoted by an insurance agent)
R3Zone is X shaded (0.2 percent annual chance) or X with a levee noteconfirmflood_shaded_x
R4Zone is X unshaded, SFHA falseinfoflood_minimal ("Minimal mapped flood hazard. A map can miss local drainage, so confirm with the county.")
R5Sewer type is none_mappedconfirmseptic_required (on site sewage facility permit and soil evaluation needed; lot size and soil decide what is allowed)
R6Water type is none_mappedconfirmwell_required (private well, confirm with the county and the lender)
R7District type is MUD, WCID, PUD or FWSDinfo, plus confirm if the district publishes a tax rate we have not loadeddistrict_present (district tax rate and any impact or tap fees are set by the district; the report links to the district)
R8Road type is private or none_mappedconfirmaccess_check (confirm recorded legal access and who maintains the road)
R9Restrictions on file true or POA presentconfirmrestrictions_check (minimum size, setbacks, builder approval or an architectural committee may apply)
R10Parcel acres below the smallest allowed lot for septic in that county program [THRESHOLD TO BE CONFIRMED WITH COUNTY OSSF PROGRAM] and R5 is trueblockerseptic_lot_small
R11Parcel 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" noteconfirmunplatted_check (an unplatted or split tract may need platting or a county permit before a building permit)
R12Existing residential permit on this parcelconfirmexisting_permit (there may already be a home, a pad or an open permit)
R13Nearby permits in 12 months is 0infono_nearby_activity (no new home permits recorded within 1 mile in the last 12 months)
R14Nearby permits in 12 months is 1 or moreinfonearby_activity (state the count, never a trend word)

6.2 Verdict

VerdictRuleCustomer sentence (template)
REDAny 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."
AMBERNo 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}}."
GREENNo 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."
GREYParcel 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."
Wording rule. The tool never says "you can build", "approved", "buildable" or "safe". It says what the record shows. GREEN means no blocker was found in the records, nothing more. No verdict is ever shown as a promise.

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)

PriorityConditionRoute
P1financing 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 monthsBuyers agent queue, call within 1 business day
P2Hot feed member (lot bought in last 90 days) with any financing, or P1 conditions except timelineISA queue, call within 1 business day
P3Phone with SMS consent, any other combinationISA queue, call within 2 business days
P4Email onlyNurture 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

CaseBehaviour
Address matches several PINsPick list with PIN, acres, legal description. No auto choice.
Address matches no PINMessage 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 cityAdd confirm finding: "Within the extraterritorial jurisdiction of {{city}}. Confirm which rules apply."
Parcel straddles two flood zonesSection 6.3. Show both zones in the operator view.
FEMA map is under revision or a Letter of Map Amendment existsIf 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 acresRun 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 rollInfo 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 permitR12 fires. The ISA is told the lot may not be vacant.
Owner on the roll is a company or trustReport runs. Operator flag entity_owner. Owner match check skipped.
Submitter name does not match the owner on the rollReport 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 computedStep 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 emailsServe the cached report, flag the operator view as possible third party interest, no extra source calls.
Same email requests many PINsAllow 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 submitterAbsentee 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 trafficHoneypot field, rate limit 10 requests per IP per hour, invisible challenge on the third request.
Email delivery failsWeb report still shows. Retry once at 5 minutes. Log bounce.
Person asks for removal of their data or opts outAdmin 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

KeyCustomer text (DRAFT)
flood_severeThis 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_sfhaThis 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_xThis 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_minimalThis lot is mapped in zone X, minimal mapped flood hazard. A map can miss local drainage, so confirm with the county.
septic_requiredThe 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_requiredThe record maps no water provider at this lot. Plan on a private well and confirm what the county and your lender require.
district_presentThis 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_checkThe road at this lot is mapped as {{road_type}}. Confirm that the lot has recorded legal access and who maintains the road.
restrictions_checkThe 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_smallThe 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_checkThis 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_permitThe 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_activityNo 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.

FieldValueSource
pin251189S1 (roll sample)
situs27927 NICHOLS SAWMILL RD, MAGNOLIA TX 77355S1 (roll sample)
legal_descriptionINDIGO LAKE ESTATES 05, BLOCK 1, LOT 5, REPLAT 5AS1 (roll sample)
acres14.0S1 (roll sample)
absentee / lots held / out of countyyes / 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.

#GivenThen
T1A PIN in zone AE, public water, no sewer, no districtVerdict AMBER, findings R2 and R5, flood block and septic block shown.
T2A PIN with floodway overlapVerdict RED, finding R1, customer text flood_severe.
T3A PIN in zone X unshaded, all providers mapped, no restrictions, 3 permits within 1 mileVerdict GREEN, finding R4 and R14 with count 3.
T4S2 times outReport renders in under 15 seconds, flood block reads "Not available from the public record right now", verdict not GREEN.
T5Address matching 2 PINsPick list shown, no report until one is chosen.
T6Phone entered, consent untickedLead saved with no SMS permission, no text sent.
T7Reply STOP to a textsms_consent set to false inside 1 minute, confirmation text sent once.
T8Search all report copy for "free", "guarantee", "approved", "buildable", "safe"No hits except inside this spec's rules.
T9Cost block with no range setBlock hidden, no number anywhere in the report.
T10Every customer page and PDFContains the compensation line, the disclaimer, TREC link, Consumer Protection Notice link, company line, phone and email.
T11Submitter is not the owner of recordReport runs, operator flag set, no owner name visible in the customer report.
T12Acres on roll 14.0, GIS polygon 11.2acreage_mismatch flag and confirm finding.
Privacy rule. The customer report never displays the owner's name, mailing address or any other person's contact data. Those fields live in the operator view only.

11. Open items for Jacob