US STR Permit Registry & Market Evidence
Pricing
from $2.40 / 1,000 results
US STR Permit Registry & Market Evidence
Check 1–25 addresses against complete official STR permit queries, export normalized records across 32 US jurisdictions, or reconcile rights-bound market observations. Includes source links, publisher and retrieval clocks, receipts, and opt-in change monitoring; not a legal determination.
Pricing
from $2.40 / 1,000 results
Rating
0.0
(0)
Developer
Bryan
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
STR Permit Registry — Reconciled Official Short-Term Rental Evidence
This Actor refines fragmented official government permit, licence, registration, eligibility, address,
and parcel data into one source-bound record model. It preserves publisher semantics: an internal row or
address identifier stays a source_record_id, never a fabricated permit_id. Complementary official rows
are coalesced by stable identity, newest publisher evidence wins, older rows fill only empty fields, and
disagreements remain visible conflicts. CivicDataForge differentiates on that custody trail, privacy
stripping, honest nulls, complete-scope monitoring where supported, and hash-bound evidence and change
receipts for compliance, property diligence, and enforcement research.
One address in, one source-bound answer out
Set outputMode to address_evidence, choose exactly one city, and provide 1-25 addresses. The Actor fetches the complete selected publisher query and returns one row per submitted address:
EVIDENCE_FOUND— exact normalized address match in the published source;REVIEW_REQUIRED— invalid input or a plausible non-exact candidate that needs human review;NO_PUBLISHED_MATCH— no exact match in the complete selected publisher query;SCOPE_INCOMPLETE— reserved for bounded-file evaluations, never emitted as a complete-source negative.
Every decision includes the source, observation time, scope completeness, match basis, record fingerprints where present, and a deterministic decision_receipt_hash. A no-published-match result is not proof of illegality, ineligibility, or absence from every authority.
{"outputMode": "address_evidence","cities": ["orlando"],"addresses": ["1100 Briercliff Drive, Orlando, FL"]}
Reconcile lawful market observations without importing a competitor
Set outputMode to market_evidence to join independently acquired official, openly licensed,
customer-authorized, or contracted market observations to one complete official registry. CivicDataForge
does not promote a listing claim into a government permit: the output labels exact permit claims,
exact-address evidence, conflicts, ambiguous identities, coordinate-only discovery candidates, and honest
no-match results separately.
Every market source must carry a source-rights receipt recording its acquisition method, evidence URL,
review clock, and an allowed commercial-use and redistribution basis. review_required and not_allowed
fail closed before any customer row is emitted. Host names, owner names, email addresses, phone numbers,
payout data, guest data, and messages are rejected at any input depth. URLs containing embedded credentials
or secret-bearing query parameters are also rejected instead of being copied into receipts. Google or another search engine may help find
an official publisher, but the production source URL and rights evidence must point to the actual publisher
or authorized provider.
{"outputMode": "market_evidence","cities": ["orlando"],"marketSources": [{"source_id": "customer-pms-export","publisher": "Customer-authorized property management system","source_url": "https://customer.example/export","access_method": "customer_authorized","observed_at": "2026-08-25T12:00:00.000Z","rights": {"commercial_use": "allowed","redistribution": "allowed","basis": "The customer authorized processing and return of its portfolio records.","evidence_url": "https://customer.example/authorization","reviewed_at": "2026-08-25T12:00:00.000Z","asserted_by": "customer"},"observations": [{"reference_id": "property-1","platform": "customer-pms","listing_id": "listing-1","claimed_permit_id": "STR-1118212","address": "120 E Hazel Street, Orlando, FL","address_precision": "exact","observed_at": "2026-08-25T12:00:00.000Z"}]}]}
The Actor fetches the complete selected official registry itself. It accepts the market observations as a
rights-bound packet, returns one reconciliation row per observation, and writes a hashed
MARKET-EVIDENCE-MANIFEST. Approximate addresses never participate in automatic address matching, and
coordinates within 100 metres remain review candidates rather than proof.
55 sources live, all data-layer verified + freshness-gated (updated 2026):
| City | Status | Company operator | Expiration | Parcel |
|---|---|---|---|---|
| Seattle, WA | ✅ | — | ✅ | — |
| Orlando, FL | ✅ | ✅ | ✅ | ✅ |
| New Orleans, LA | ✅ | ✅ | ✅ | ✅ |
| Denver, CO | ✅ | — | ✅ | ✅ |
| Chicago, IL | ✅ | ✅ | ✅ | — |
| Marin County, CA | ✅ | ✅ | — | ✅ |
| Norfolk, VA | — | — | ✅ | ✅ |
| Nashville, TN | ✅ | ✅ | ✅ | ✅ |
| Osceola County, FL | ✅ | ✅ | ✅ | — |
| Polk County, FL | ✅ | ✅ | ✅ | ✅ |
| Austin, TX | ✅ | — | — | — |
| Houston, TX | ✅ | — | ✅ | ✅ |
| Sacramento, CA | ✅ | ✅ | ✅ | ✅ |
| San Bernardino County, CA | ✅ | ✅ | ✅ | ✅ |
| Bend, OR | — | ✅ | — | ✅ |
| Aspen, CO | — | ✅ | — | ✅ |
| Philadelphia, PA | ✅ | ✅ | ✅ | ✅ |
| Albuquerque, NM | ✅ | ✅ | ✅ | — |
| Asheville, NC | ✅ | ✅ | — | ✅ |
| Louisville, KY | — | ✅ | — | — |
| Arlington, TX | ✅ | ✅ | — | ✅ |
| San Diego, CA | — | ✅ | ✅ | — |
| Scottsdale, AZ | — | ✅ | ✅ | ✅ |
| Huntington Beach, CA | — | — | ✅ | ✅ |
| Coconino County, AZ | — | ✅ | — | ✅ |
| San Juan County, WA | ✅ | ✅ | — | ✅ |
| Chattanooga, TN | ✅ | — | ✅ | ✅ |
| Boston, MA | ✅ | — | — | ✅ |
| Las Vegas, NV | ✅ | ✅ | ✅ | ✅ |
| Kansas City, MO | ✅ | — | ✅ | ✅ |
| Washington, DC | ✅ | — | ✅ | ✅ |
| Honolulu, HI | ✅ | — | ✅ | ✅ |
| Honolulu, HI (approved NUCs) | ✅ | — | ✅ | ✅ |
| Big Bear Lake, CA | ✅ | ✅ | ✅ | ✅ |
| Clear Creek County, CO | ✅ | ✅ | ✅ | ✅ |
| Corpus Christi, TX | ✅ | ✅ | ✅ | — |
| Cambridge, MA | ✅ | — | — | ✅ |
| Columbus, GA | ✅ | — | ✅ | — |
| Cook County, MN | ✅ | ✅ | — | ✅ |
| Little Rock, AR | ✅ | ✅ | — | — |
| Cody, WY | ✅ | ✅ | — | — |
| Green Bay, WI | — | ✅ | — | ✅ |
| Key West, FL | ✅ | ✅ | — | ✅ |
| Covington, KY | ✅ | ✅ | — | ✅ |
| Shreveport, LA | ✅ | — | — | — |
| North Las Vegas, NV | — | ✅ | — | ✅ |
| Summit County, CO | ✅ | — | — | ✅ |
| Breckenridge, CO | ✅ | — | — | ✅ |
| Placer County, CA | ✅ | — | ✅ | ✅ |
| Belton, TX | — | — | — | — |
| Bedford, TX | — | — | ✅ | — |
| Baldwin County, GA | ✅ | — | — | ✅ |
| Ruidoso, NM | — | — | ✅ | — |
| Long Lake Township, MI | — | — | — | — |
| South Haven, MI | ✅ | — | — | — |
Field coverage reflects exactly what each city publishes, never faked; a blank always carries its reason in field_gaps. Company operator shows a business name only: a person's name is never shown. Parcel includes numbers read from the official county or city parcel map at the rental's point (parcel_source says which).
What you get (unified schema)
| field | example |
|---|---|
permit_id | STR-1118212 |
source_record_id | stable publisher row identity when no public permit number exists |
record_kind | publisher-semantic type: permit, licence, eligibility, business licence, or NUC certificate |
identifier_kind | distinguishes a real permit/licence number from a source-record identity |
status | Active / Inactive / License Issued - Active / Closed |
address | 120 E HAZEL ST, Orlando, FL |
owner_or_operator | Sunny Stays LLC (a business name only; a person's name is never shown) |
parcel | 0510235019000 (Denver) |
property_type | Short Term Rental / Single Family Home |
expiration_date | 2026-08-25 |
issued_date | 2025-05-23 (where published) |
city / state | Orlando / FL |
source_url | the city open-data endpoint the record came from |
evidence_sources | every official source that contributed to the reconciled record |
field_provenance | source responsible for each normalized field |
reconciliation_conflicts | disagreements retained for review, never silently overwritten |
source_updated_at | publisher clock where the transport exposes one |
source_content_sha256 | exact content digest for file-based sources |
raw | the city's original record, minus personal phone, email, people's names and owners' mailing addresses |
parcel_source | where a parcel number we added came from, e.g. gis2.arlingtontx.gov:TaxPIN (blank when the city published it) |
field_gaps | why each blank column is blank, e.g. {"expiration_date": "not_published_by_source"} |
field_notes | what a value means when it is not the obvious thing, e.g. Norfolk's expiration_date is a renewal-due date |
Every run also writes OUTPUT.xlsx and OUTPUT.csv to the run's key-value store: one row per permit,
the same columns in the same order for every city, dates as YYYY-MM-DD, blanks explained in plain words,
raw left out. The workbook has an "About these columns" tab, a "Cities" tab with fill rates per source,
and a "Status words" tab showing how each city's own status word was read (active, expired, pending,
closed or unknown).
Records are ordered so current/active permits surface first, and you can filter to active-only.
Who uses this
- STR analytics & data platforms — join permit legality onto listing data.
- Compliance vendors & municipalities — enforcement-side address/parcel matching.
- Property diligence teams — verify whether a property's rental permit is published as active.
- Researchers and market analysts — study licensed supply and permit-status changes.
Match a property portfolio
Need permit evidence for a list of properties instead of a whole-city export? Start with the CivicDataForge Permit Match Audit. One accepted proof-of-fit matches up to 25 submitted addresses in one supported jurisdiction for $99. The delivered evidence bundle separates exact published matches, human-review candidates, invalid input, and honest no-match findings; it also retains official source links, record fingerprints, and a hash-bound manifest.
The founding 30-day monitoring pilot is $500 for one supported jurisdiction and up to 500 submitted addresses, with a complete baseline, one scheduled comparison, change rows, integrity quarantine, and one buyer-selected handoff design. The $99 audit is credited toward an accepted $500 pilot. A no-match is never presented as proof that a property is illegal or ineligible.
Input
{ "cities": ["orlando"], "status": "active", "maxRecordsPerCity": 25, "snapshot": false }
That bounded example is the safest first run. It returns useful records quickly and writes hashed
RUN-RECEIPT and CHANGE-RECEIPT objects alongside the dataset. The run receipt states that the
coverage is bounded; it never presents a capped pull as a complete registry.
Complete change monitoring
Monitoring is deliberately stricter than an ordinary lookup. It is opt-in, is stored in a named key-value store inside the calling Apify account, and accepts only complete selected-city pulls:
{"cities": ["orlando"],"status": "all","maxRecordsPerCity": null,"resolveJurisdiction": true,"snapshot": true}
Run that exact input on a schedule. The first healthy run creates a version-3 baseline. Later runs compare only with a baseline having the same city, status filter, and jurisdiction-resolution setting. A published permit+unit pair remains stable across address corrections. When a publisher reuses one group licence across multiple properties without unit IDs, address remains part of identity so valid properties are not merged. Intraday runs have append-only timestamped keys and cannot overwrite one another.
The change receipt reports appeared, disappeared, status-changed, and other tracked-field changes. Each
accepted comparison also stores the complete machine-readable before/after change rows behind the
full_changes_key in the receipt. Count collapse, empty results, field loss, or publisher-schema drift
quarantines the candidate snapshot: its diagnostic receipt is retained, but it cannot replace the last
healthy baseline or become a confirmed customer change feed.
If snapshot is true while maxRecordsPerCity is set, the run fails before fetching data. This is an
intentional integrity gate: a capped page is not evidence that records outside the page disappeared.
Changing active to all creates a separate baseline instead of producing a false diff.
At pay-per-result pricing, complete pulls can cost materially more than the 25-row example. Start with one jurisdiction, inspect its complete record count and cost, and set an Apify spending limit before scheduling. The limit must cover every record in the selected complete pull. If Apify exposes a paid-dataset ceiling that is lower than the fetched record count, snapshot monitoring fails before storing a new baseline or receipt instead of labeling a platform-truncated dataset complete.
Receipts and automation
RUN-RECEIPTbinds the selected cities, filters, coverage, counts, monitoring state, and change-receipt hash.CHANGE-RECEIPTsaysdisabled,complete_baseline_created,compared_with_prior_complete_snapshot,integrity_quarantined, orcompleted_with_quarantined_scopes; it carries summaries plus the keys and hashes of full changes.- The named
str-registry-history-v3store retains append-only snapshots, full before/after change rows, and quarantined candidates. Version-2 history is left intact rather than silently reinterpreted. - Each receipt contains a canonical SHA-256 so downstream systems can detect alteration.
- Use Apify schedules for recurrence and webhooks to route the receipt into Slack, email, a database, or a review queue.
Customer-owned case workflow
Address-evidence mode can also set caseWorkflow to true. The Actor then writes a portable
CASE-BUNDLE with one case per caller reference. Each case binds the current decision receipt to a
hashed subject reference and a hash-chained human-disposition history; the case file does not store
the submitted address. Customers retain the bundle in their own system and return applicable
priorCases on the next run, avoiding a shared developer-owned property watchlist.
caseActions use optimistic locking and require a reviewer reference, reason, timestamp, expected
version, and expected case receipt. Forged or stale writes fail closed. A changed official-source
decision automatically reopens a resolved case, preserving the earlier disposition and the complete
transition chain instead of silently overwriting it.
Optional webhookUrl and secret webhookSecret inputs deliver the exact bundle to a public HTTPS
endpoint using one stable idempotency key, HMAC-SHA256 signing, and up to three attempts. Internal or
IP-literal targets, redirects, embedded credentials, and non-HTTPS endpoints are rejected. The
redacted WEBHOOK-DELIVERY receipt distinguishes downstream acceptance from transport failure.
The workflow records evidence and human handling; it does not send enforcement letters, collect tax, decide illegality, or replace municipal due process.
Getting the data
Download a run's results as JSON, CSV, Excel or XML from the run's dataset, or fetch them through the Apify API. Connect them to other tools with Apify integrations, and get notified when a run finishes with Apify webhooks. Every run also writes a ready-to-open OUTPUT.xlsx and OUTPUT.csv to its key-value store.
Source & legality
Data comes from official city and county open-data portals and GIS layers, accessed logged-out.
Each run reads every city's list live. Each row shows when the city last changed its list
(source_updated_at, where the city exposes it) and when we read it (last_verified_at). Personal
contact fields (phone, email) and the owner's mailing address are stripped from output, including raw.
owner_or_operator shows a business name only; where the city lists a person, the field is blank and
field_gaps says "person's name not shown".
This product is not a consumer report and must not be used to determine an individual's eligibility for credit, insurance, employment, or housing. Hilton Head and Beaufort are not included in this version.