16 KiB
name, description
| name | description |
|---|---|
| property-assessor | Assess a real property from an address or listing URL and produce a decision-grade summary. Use when a user wants fair value, comps, rental or STR viability, carry-cost review, HOA or insurance risk analysis, or offer guidance for a condo, house, townhouse, or similar residential property. Prefer when the task should discover and reconcile multiple listing sources from a street address first, then give a buy/pass/only-below-X verdict. |
Property Assessor
Start from the property address when possible. Treat listing URLs as supporting evidence, not the only source of truth.
Inputs
Accept any of:
- a street address
- one or more listing URLs
- an address plus user constraints such as investment only, owner-occupant, long-term rental, STR, or distance to a target location
Core workflow
- Normalize the address and property type.
- Discover accessible listing or public-record sources for the same property.
- Establish a baseline fact set from the best available source.
- Cross-check the same property on other sites.
- Pull same-building comps for condos or nearby comps for houses/townhomes.
- Underwrite carrying cost with taxes, HOA, insurance, and realistic friction.
- Flag risk drivers before giving a verdict.
- End with a specific recommendation:
buy,pass, oronly below X.
Approval-averse / chat-safe behavior
When operating from chat surfaces such as WhatsApp, Telegram, Signal, or other messaging channels, prefer workflows that do not trigger host exec approval prompts.
Use this priority order:
web_searchfor discoveryweb_fetchwhen page fetch is sufficientweb-automationone-shot extraction or accessible all-photos pages only when needed- interactive browser/gallery automation only as a last resort
Rules:
- Prefer accessible listing text, public mirrors, and scrollable all-photos pages over custom gallery traversal.
- Avoid fragile interactive gallery flows if they are likely to require approval or bounce the user into Control UI.
- If a richer photo pass would require approval, do not silently force that path first. Continue with the best approval-free workflow available and clearly lower confidence if needed.
- Only escalate to approval-heavy browser interaction when there is no reasonable alternative and the extra fidelity materially changes the assessment.
Source order
Prefer this order unless the user says otherwise:
- Zillow
- Redfin
- Realtor.com
- HAR / Homes.com / brokerage mirror pages
- county or appraisal pages
Use the web-automation skill for rendered pages and anti-bot-heavy sites.
Use web_search sparingly to discover alternate URLs, then return to web-automation for extraction.
Helper runtime
property-assessor now includes TypeScript helper commands for:
- public-record jurisdiction lookup
- fixed-template PDF rendering
Before using those helper commands:
cd ~/.openclaw/workspace/skills/property-assessor
npm install
Public-record enrichment
Public-record / assessor data should be used when available and linked in the final result.
Default approach:
- start from the street address
- resolve the address to county/state/geography
- identify the related appraisal district / assessor jurisdiction
- use the official public-record site as a primary-source check against listing data
- link the official jurisdiction page and any direct property page used in the final result
Use the helper CLI first:
cd ~/.openclaw/workspace/skills/property-assessor
npm install
scripts/property-assessor locate-public-records --address "<street-address>"
This command currently:
- resolves the address through the official Census geocoder
- returns county/state/FIPS/GEOID context
- for Texas, resolves the official Texas Comptroller county directory page
- returns the county appraisal district and tax assessor/collector links when available
Important rules:
- listing-site geo IDs are hints only; do not treat them as assessor record keys
- parcel/APN/account identifiers from Zillow/HAR/Redfin are much stronger keys than listing geo IDs
- if a direct public-record property page is available, use its data in the assessment and link it explicitly
- if the jurisdiction can be identified but the property detail page is not directly retrievable, still link the official jurisdiction page and say what could not be confirmed
Texas rule
For Texas properties, public-record enrichment is required when feasible.
Process:
- run
locate-public-recordsfrom the subject address - use the returned Texas Comptroller county directory page as the official jurisdiction reference
- use the returned CAD website for address / account / parcel lookup
- when accessible, capture:
- account number
- owner name
- land value
- improvement value
- assessed total
- exemptions
- tax office links
In the final assessment, explicitly label official public-record facts as such.
Minimum data to capture
For the target property, capture when available:
- address
- ask price or last known list price
- property type
- beds / baths
- sqft
- lot size if relevant
- year built
- HOA fee and included services
- taxes
- days on market
- price history
- parking
- waterfront / flood clues
- subdivision / building name when applicable
- same-building or nearby active inventory
- listing photos and visible condition cues
- included appliances and obvious missing appliances
- flooring mix, especially whether carpet is present
- public-record jurisdiction and linked official source
- account / parcel / tax ID if confirmed
- official assessed values and exemptions if confirmed
Photo and condition review
Always look at the listing photos when they are available. Do not rate a property only from structured text.
Required photo-access workflow
When the source site exposes listing photos, prefer the most accessible all-photos view first. This can be:
- a scrollable all-photos page
- a photo grid
- an expanded photo list
- or, if necessary, a modal gallery/lightbox
Use web-automation for this. Preferred process:
- Open the listing page.
- Click the photo entry point such as
See all photos,See all 29 photos,Show all photos, or the main hero image. - If that opens a scrollable all-photos view, grid, or photo page that clearly exposes the listing images, use that directly for photo review.
- Only use next-arrow / slideshow traversal when the site does not provide an accessible all-photos view.
- If you must use a modal/lightbox, verify that you are seeing distinct images, not just a gallery preview tile or repeated screenshot of the first image.
- Review enough images to cover the key rooms and exterior, and for smaller listings aim to review all photos when practical.
- If photo access fails or is incomplete, say so explicitly and do not claim that you reviewed all photos.
Minimum honesty rule: never say you "looked at all photos" unless the site actually exposed the full set and you successfully reviewed them. A gallery landing page, collage preview, repeated first image, or a single screenshot of the listing page does not count as full photo review.
What to inspect in the photos
At minimum, note:
- overall finish level: dated, average, lightly updated, fully updated
- kitchen condition: cabinets, counters, backsplash, appliance quality
- bathroom condition: vanity, tile, surrounds, fixtures
- flooring: tile, vinyl, laminate, hardwood, carpet
- whether carpet appears in bedrooms, stairs, or living areas
- obvious make-ready issues: paint, damaged trim, old fixtures, mismatched finishes, worn surfaces
- visible missing items: refrigerator, washer/dryer, range hood, dishwasher, etc.
- any signs of deferred maintenance or water intrusion visible in photos
- exterior/common-area condition when visible
- balconies, decks, sliders, windows, and waterfront-facing elements for condos/townhomes near water
If photo review is incomplete
If photos are weak, incomplete, blocked, or the gallery automation fails:
- say so explicitly
- lower confidence
- avoid strong condition claims
- do not infer turnkey condition from marketing text alone
Mandatory photo-review rule
If an accessible all-photos view, photo grid, photo page, or fallback source exists, photo review is required before making condition claims. Do not silently skip photos just because pricing, comps, or carrying-cost analysis can proceed without them.
Before outputting Photo review: not completed, you must attempt a reasonable photo-access chain when sources are available.
Preferred order:
- primary listing source all-photos page (for example Zillow
See all photos/See all X photos) - HAR photo page
- Realtor.com photo page
- brokerage mirror or other accessible listing mirror
Use the first source that exposes the listing photos reliably. A scrollable photo page, photo grid, or expanded all-photos view counts. Do not stop at the first failure if another accessible source is available.
Zillow-specific rule
For Zillow listings, do not treat the listing shell text or hero gallery preview as a photo review attempt.
You must use only web-automation to:
- open the Zillow listing page
- click
See all photos/See all X photos - access the resulting all-photos page or scrollable photo view
- review the exposed photo set from that page
If Zillow exposes a page with a scroller that shows the listing photos, that page counts as the Zillow photo source and should be used directly.
If that scroller page exposes direct image links such as https://photos.zillowstatic.com/..., treat those URLs as successful photo access and use that image set for review.
This is preferred over fragile modal next/previous navigation.
If the rendered Zillow listing shell itself already exposes the full direct Zillow image set and the extracted image count matches the announced photo count, that also counts as successful photo access even if the See all photos click path is flaky.
For this normal Zillow all-photos workflow, stay inside web-automation only.
Use the dedicated file-based extractor first:
cd ~/.openclaw/workspace/skills/web-automation/scripts
node zillow-photos.js "<zillow-listing-url>"
Do not escalate to coding-agent, ad hoc Python helpers, or extra dependency-heavy tooling just to open See all photos, inspect the scroller page, or extract Zillow image URLs.
Only escalate beyond web-automation if web-automation itself truly cannot access the all-photos/scroller page or the exposed image set.
Do not rely on generic page text, photo counts, or non-photo shells as a Zillow attempt.
Only fall back to HAR/Realtor/broker mirrors if the Zillow all-photos path was actually attempted with web-automation and did not expose the photos reliably.
A source only counts as an attempted photo source if you actually did one of these:
- opened the all-photos page / photo grid / photo page successfully, or
- explicitly tried to open it and observed a concrete failure
The following do not count as a photo-source attempt by themselves:
- seeing a
See all photosbutton - seeing a photo count
- reading listing text that mentions photos
- capturing only the listing shell, hero image, or collage preview
HAR fallback rule
If Zillow photo extraction does not expose usable direct image URLs, try HAR next for the same property.
For HAR listings, use only web-automation to:
- open the HAR listing page
- click
Show all photos/View all photos - access the resulting all-photos page or photo view
- extract the direct image URLs from that page
Use the dedicated HAR extractor first:
cd ~/.openclaw/workspace/skills/web-automation/scripts
node har-photos.js "<har-listing-url>"
If HAR exposes the direct photo URLs from the all-photos page, treat that as successful photo access and use that image set for review. Do not stop after a failed Zillow attempt if HAR is available and exposes the listing photos more reliably.
When a dedicated extractor returns imageUrls, inspect the images in that returned set before making condition claims.
For smaller listings, review the full extracted set when practical; for a 20-30 photo listing, that usually means all photos.
Approval-safe command shape
When running web-automation from chat-driven property assessment, prefer file-based commands under ~/.openclaw/workspace/skills/web-automation/scripts.
Good:
node check-install.jsnode zillow-photos.js "<url>"node har-photos.js "<url>"
Avoid approval-sensitive inline interpreter eval where possible:
node -e "..."node --input-type=module -e "..."
The final assessment must explicitly include these lines in the output:
Photo source attempts: <action-based summary>Photo review: completed via <source>orPhoto review: not completed
If completed, briefly summarize the condition read from the photos. If not completed, mark condition confidence as limited and say why.
PDF report requirement
The deliverable is not just chat text. A fixed-template PDF report must be generated for completed assessments.
Use the property-assessor helper CLI:
cd ~/.openclaw/workspace/skills/property-assessor
npm install
scripts/property-assessor render-report --input "<report-payload-json>" --output "<output-pdf>"
The renderer uses a fixed template and must keep the same look across runs.
Template rules are documented in references/report-template.md.
The PDF report should include:
- report header
- verdict panel
- subject-property summary table
- Snapshot
- What I like
- What I do not like
- Comp view
- Underwriting / carry view
- Risks and diligence items
- Photo review
- Public records
- Source links
Recipient-email gate
Before rendering or sending the PDF, the skill must know the target recipient email address(es).
If the prompt does not include target email(s):
- stop
- ask the user for the target email address(es)
- do not render or send the final PDF yet
If target email(s) are present:
- include them in the report payload
- render the PDF with the fixed template
- if a delivery workflow is available, use those same target email(s) for sending
The renderer enforces this gate and will fail if the payload has no recipient email list.
Normalization / make-ready adjustment
Estimate a rough make-ready budget when condition is not turnkey. The goal is not contractor precision; the goal is apples-to-apples comparison.
Use simple buckets and state them as rough ranges:
- light make-ready: paint, fixtures, minor hardware, patching
- medium make-ready: flooring replacement in some rooms, appliance replacement, bathroom refresh
- heavy make-ready: major kitchen/bath work, widespread flooring, obvious deferred maintenance
Call out carpet separately. If carpet is present, estimate replacement or removal cost as part of the make-ready note.
Underwriting rules
Always show a simple carrying-cost view with at least:
- principal and interest if available from the listing
- taxes per month
- HOA per month if applicable
- insurance estimate or note uncertainty
- realistic effective carry range after maintenance, vacancy, and property-specific risk
Treat these as strong caution flags:
- high HOA relative to price or expected rent
- older waterfront or coastal exposure
- unknown reserve / assessment history for condos
- many active units in the same building or micro-area
- stale days on market with weak price action
- no clear rent support
Output format
Keep the answer concise but decision-grade:
- Snapshot
- What I like
- What I do not like
- Comp view
- Underwriting / carry view
- Risks and diligence items
- Verdict with fair value range and offer guidance
Also include:
- public-record / CAD evidence and links when available
- the path to the rendered PDF after generation
If the user did not provide recipient email(s), ask for them instead of finalizing the PDF workflow.
Reuse notes
When condos are involved, same-building comps and HOA economics usually matter more than neighborhood averages. For detailed heuristics and the reusable memo template, read:
references/underwriting-rules.mdreferences/report-template.md