Triage US residential real-property assessment review or appeal requests and prepare evidence packets when market value is a material ground. From an address and notice value, separates market, appraised, assessed, equalized, and taxable values; verifies jurisdiction-specific rules and valuation dates; analyzes comparable sales with APNs, stable transaction IDs, and contrary evidence; estimates a supportable requested value; and produces upload-ready English Markdown and PDF. Use for market-value informal reviews, decline-in-value or Proposition 8 requests, protests, grievances, abatements, comparable-sales packages, and defensible reduced-value estimates. Also use to identify the current authority, form, and deadline for unequal or non-uniform appraisal, exemption, classification, ownership, special valuation, or another non-market ground, but stop before comparable-sale valuation or packet generation for those grounds.
74
93%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Prepare an evidence-led market-value assessment challenge from a property address and a value shown on the owner's notice. Default to an English supporting attachment in matching Markdown and PDF. Adapt the filing stage and value terminology to the controlling jurisdiction.
Read references/methodology.md before researching or valuing a property. Read references/appeal-routes.md after identifying the state. Read references/case-schema.md before creating case data.
Use:
assets/case-template.json as the fail-closed v2 user template; its human-review gates are intentionally unset.assets/case-example.json as a fictional, fully verified test example. Never copy its approval flags into a real case.scripts/lookup_jurisdiction.py as a routing aid for all 50 states and the District of Columbia.scripts/build_appeal_packet.py for structural validation and private, no-clobber, failure-atomic Markdown/PDF generation.scripts/url_safety.py for canonical public-HTTPS authority validation shared by the builder and repository link checker.The scripts support CPython 3.11 through 3.14. Install PDF runtime dependencies from the
universal, hash-pinned scripts/requirements.lock when needed. Use Poppler's pdftoppm,
pdftotext, and pdfinfo for final inspection.
owner_attachment with url: null; keep local paths, private portal/document links, signed URLs, and attachment contents out of case data and final files.case.appeal_ground to market_value. If the requested ground is unequal/non-uniform appraisal, exemption, classification, ownership, special valuation, or another non-market issue, stop packet generation. Return only the verified authority, form, deadline, and a clear statement that a jurisdiction-specific evidence model is required. Do not convert neighboring assessments into sale evidence.appraised value is market-comparable. Require a sourced sale_comparable_market_value basis before comparing the value with sales.python3 scripts/lookup_jurisdiction.py --state <code>. Treat the result only as a research starting point. Verify the parcel, local authority, assessment event, value terminology, assessment ratio or cap, valuation date, filing stage, form, deadline, submission page, and accepted evidence window from current official sources.verified_residential classification supported by a parcel_record source. Stop without generating a packet when the subject is non-residential or residential use cannot be verified; do not infer use from a nationwide property-type-name list. Reconcile conflicting sources rather than selecting a convenient fact.null when no mechanical conversion is justified; a mechanical child must also remain null when its source request is unknown.assets/case-template.json. Record a stable transaction or recording ID for every candidate. Use public_url sources for public records and rules. Use owner_attachment with url: null only for an owner-supplied assessment notice, marketability evidence, MLS closed-sale sheet, closing disclosure, or equivalent transaction record, without storing a path, private link, or document contents. A private transaction attachment must be paired with a separate public parcel_record; it cannot establish parcel identity, residential classification, or legal rules. Set the appeal ground, residential-use status, contrary-review gates, and every case.verification flag to its passing value only after the named human fact-check is complete. Use assets/case-example.json only to understand a completed fictional structure.python3 scripts/build_appeal_packet.py /absolute/path/to/case.json --validate-onlypython3 scripts/build_appeal_packet.py /absolute/path/to/case.json \
--output-dir /absolute/path/to/case-specific-output \
--basename property-address-informal-reviewThe builder creates new files with private permissions and refuses to overwrite any existing path.
Markdown preserves the complete Unicode case text. PDF uses only the unembedded PDF Base 14
Helvetica and Helvetica-Bold fonts. Before PDF generation, the builder checks every character
against its supported WinAnsi glyph set. If any character is unsupported, it refuses to generate
the PDF, lists the Unicode code points, and instructs the user to use an official English spelling
or generate Markdown only with --no-pdf. Never silently transliterate or replace unsupported
characters. Use --force only after checking that the complete existing output pair belongs to
this case.
/FontFile, /FontFile2, or /FontFile3.owner_attachment reviewed on a stated date and file the actual attachment separately. An owner-provided MLS or closing record may support transaction_record, but each comparable still needs an independent public parcel_record; all rule roles remain public-only. Before opening a researched link, require a browser or connector with equivalent SSRF protections, or resolve the host once, reject any non-public answer, connect only to that validated numeric address while preserving SNI and Host, verify the connected peer, and repeat the process for every redirect. A separate preflight DNS lookup is not sufficient. Require evidence for the subject, each notice-value node and transformation, comparison-value basis, jurisdictional route, deadline, sale window, every candidate comparable, and any marketability factor.duplicate_record row must
reference the same earlier transaction ID and exactly match its address, APN, sale date, price
kind, price, and range.exclude_above_current_comparison_value controls only the final advocacy table; it does not excuse failure to research, record, and assess higher-priced evidence.range_lower_bound, both endpoints, and explicit provisional disclosure. Display both
endpoints and the price-per-square-foot interval. Never call the lower endpoint an exact closed
price or say the property “sold for” that amount.value_basis.current_comparison_value, explicitly designated and sourced as sale_comparable_market_value; acceptable categories include fair market, just, actual, true, estimated market, market, and full cash value.requested_comparison_value at a credible point and set likely_comparison_value_range separately. Do not promise an outcome.declaration_owner_approved to true only after that approval.Include:
Do not describe internal presentation filters as proof of value. Do not label a range endpoint as a closed price. Do not state that every comp is below the current value unless the data actually show it.
Do not deliver until:
/FontFile, /FontFile2, or /FontFile3. Any character outside
the supported PDF set must fail closed with its code point while remaining unchanged in Markdown.