Real Estate

Short-Term Rental

/extract/json

Schema for short-term vacation rental listings (Airbnb, VRBO, etc.).

Download the schemareal-estate/short-term-rental.json

short-term-rental.schema

// names marked ? are optional

listing_id?:string// Platform-specific listing identifier. Commonly found in: listing URL slug, page metadata, listing ID field.
title:string// Title or name of the rental listing. Commonly found in: listing page header, h1 tag, og:title meta tag.
platform:string// Platform hosting the listing (e.g., Airbnb, VRBO). Commonly found in: site domain, platform branding, page footer.
host_name?:string// Name of the property host. Commonly found in: host profile section, listing header, contact info.
host_is_superhost?:boolean// Whether the host has superhost or equivalent status. Commonly found in: host profile badge, superhost indicator, listing header.
property_type:string// Type of space offered. Commonly found in: listing header, property type badge, room type indicator. One of: entire_place, private_room, shared_room, other.
city:string// City where the rental is located. Commonly found in: listing location, breadcrumb, map section.
state?:string// State or region of the rental. Commonly found in: listing location, breadcrumb, map section.
country:string// Country where the rental is located. Commonly found in: listing location, breadcrumb, map section.
latitude?:number// Geographic latitude coordinate. Commonly found in: map embed data, JSON-LD structured data.
longitude?:number// Geographic longitude coordinate. Commonly found in: map embed data, JSON-LD structured data.
bedrooms:number// Number of bedrooms. Commonly found in: listing specs bar, property details, header stats.
bathrooms:number// Number of bathrooms. Commonly found in: listing specs bar, property details, header stats.
max_guests:number// Maximum number of guests allowed. Commonly found in: listing specs bar, guest capacity display, header stats.
nightly_rate:number// Base nightly rate in the listed currency. Commonly found in: price display, nightly rate box, booking widget.
weekend_rate?:number// Weekend nightly rate. Commonly found in: pricing details, rate breakdown, booking widget.
cleaning_fee?:number// One-time cleaning fee per booking. Commonly found in: fee breakdown section, booking summary, pricing details.
service_fee?:number// Platform service fee per booking. Commonly found in: fee breakdown section, booking summary, pricing details.
minimum_nights?:number// Minimum number of nights required per booking. Commonly found in: listing policies section, booking widget, availability details.
maximum_nights?:number// Maximum number of nights allowed per booking. Commonly found in: listing policies section, booking widget, availability details.
review_count?:number// Total number of guest reviews. Commonly found in: review section header, listing rating display, review count badge.
review_rating?:number// Average guest review rating. Commonly found in: listing header rating, star rating display, review summary.
amenities?:string[]// List of amenities available at the rental. Commonly found in: amenities section, what this place offers, listing features.
cancellation_policy?:string// Cancellation policy for the listing. Commonly found in: cancellation policy section, booking terms, listing policies. One of: flexible, moderate, strict, other.
images?:string[]// URLs of listing images. Commonly found in: photo gallery, image carousel, og:image meta tag.
description?:string// Full text description of the rental. Commonly found in: listing description section, about this space, overview text.
instant_book?:boolean// Whether the listing supports instant booking. Commonly found in: instant book badge, booking widget, listing header indicators.
page_title?:string// Title of the source page. Tabstack auto-fills this from page metadata when left empty.
favicon?:string// Favicon URL of the source page. Tabstack auto-fills this from page metadata when left empty.

Try it live

A sample Short-Term Rental document, generated from the schema. Edit it, or paste a real response, and see it checked against the schema instantly. It runs in your browser, nothing is sent anywhere.

your-output.json
validation

Valid, matches Short-Term Rental

Every required field is present and each value matches its type. Extra fields are allowed. A field the page does not carry is not guaranteed to come back as null, so check values rather than only checking for null.

/extract/json

Copy-paste usage

The same call in TypeScript, Python, and curl. Point it at your own URL and go. The schema drives the response, so you get back the fields you asked for instead of a page to parse.

Features

  • Typed TypeScript and Python SDKs
  • One call, no parsing code and no second LLM pass
  • The same field names on every request, even when the page layout changes
short-term-rental.ts
// curl -sfLO https://raw.githubusercontent.com/Mozilla-Ocho/tabstack-schemas/main/real-estate/short-term-rental.json
import Tabstack from '@tabstack/sdk'
import schema from './short-term-rental.json' with { type: 'json' }

const client = new Tabstack() // reads TABSTACK_API_KEY from the environment

try {
  const data = await client.extract.json({
    url: 'https://example.com/listing/123',
    json_schema: schema,
    effort: 'standard', // 'min' | 'standard' | 'max'
  })

  console.log(data)
} catch (err) {
  console.error('Extraction failed:', err)
}

Ship this schema in one call.

Pass a URL, get matching JSON back. Free to start, no extraction layer to maintain.