How-to

Vacation Rental Listing Video: One Per Property

Render a vacation rental listing video for every property in your feed, in 16:9 for the booking page and 9:16 for social, and update it when rates change.

Vacation Rental Listing Video: One Per Property

A vacation rental listing video can come from the photos you already have. Map each property in your feed to 24 fields, POST one request, and get back a 32-second 16:9 video for the booking page. The same fields render a 26-second vertical cut for Reels and TikTok. When the rate changes, render again. One script covers 10 properties or 10,000.

The finished video

This guide renders Vacation Rental Listing - Sun-Warmed, a 32-second 1920x1080 video in six scenes: the property name over the hero photo, the view with the host's tagline, three rooms, the guest, bedroom and bath counts with three amenities, the pool, and a close with the nightly rate and where to book.

The sun-warmed listing, rendered from the template's sample values.

Two siblings take the same fields. Alpine Winter is a 32-second 16:9 look for cabins and chalets. City Apartment is a 26-second 1080x1920 cut for the social half of the funnel.

What you need

  • A Renderly API key. Create one in the dashboard under Settings → API keys.
  • A property feed with one row per listing: your PMS export, a CSV or a database.
  • Six photos per property at URLs that serve the image file directly.

Step 1 - Decide whether to film or to render from the photos

Most guides for this tell a host how to film a walkthrough with a phone. At least one property management platform offers a video made from the listing photos, delivered within 24 hours, and asks you to approve each video before it goes live. Both are good answers for one property.

A template earns its place when you run a portfolio. Every property gets the same type, pacing and close, so 200 listings read as one brand. The video is ready when the render finishes, and the cost is fixed by its length. A short-stay listing also changes more often than a home for sale: the nightly rate moves with the season and the availability window moves every month. A template renders the new values into the same video. If you sell homes rather than let them, the real estate listing guide is the better fit.

Step 2 - Map each listing to the 24 template fields

FieldsWhat goes in them
property_name, location_label, rating_labelThe name, the area and the review score as one string
property_taglineOne line in the host's voice about the view
room_1_label, room_2_label, room_3_labelThe three room names
guests_value, bedrooms_value, baths_valueThe three counts guests filter on
amenity_1, amenity_2, amenity_3Three amenities, one line each
availability_label, price_label, price_noteThe open dates, the nightly rate and the minimum stay
cta_label, cta_detailThe button text and your booking URL
photo_hero, photo_view, photo_room_1 to photo_room_3, photo_poolSix photo URLs

Send every field. An omitted one keeps the sample value, so a missing price_label shows the template's $540 on your property. In the City Apartment cut, photo_pool sits behind the three neighbourhood lines, so a street photo works better there than a pool.

Step 3 - Check the short lines before you render

The variables endpoint, GET /api/v1/templates/vacation-rental-v1/variables, reports a maxCharacters for each text field. Three lines are tight across the three looks. The property name has room for about 37 characters on the sun-warmed hero. The call to action has about 17 there, so "Book your stay" fits and "Check dates and book now" does not. The price has about 18 in the vertical cut. If one feed renders all three looks, write to these limits.

A line that is too long does not fail. The tail is hidden and the render still succeeds. Preview a few listings first. Previews take the same body, cost nothing, and return a previewUrl and a warnings array:

curl -X POST https://renderly.video/api/v1/previews \
  -H "Authorization: Bearer $RENDERLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "templateId": "vacation-rental-v1", "replacements": { "property_name": "The Brick Loft at Vesterbro, Copenhagen" } }'

A line that will clip returns TEXT_MAY_CLIP. It is an estimate from average character width, so open the previewUrl for every listing it flags.

Step 4 - Render the 16:9 video and the 9:16 cut

curl -X POST https://renderly.video/api/v1/renders \
  -H "Authorization: Bearer $RENDERLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "templateId": "vacation-rental-v1",
    "replacements": {
      "property_name": "The Brick Loft at Vesterbro",
      "location_label": "VESTERBRO, COPENHAGEN · DENMARK",
      "rating_label": "RATED 4.94 · 212 REVIEWS",
      "property_tagline": "Twelve-foot windows, original brick, and Vesterbro out the front door.",
      "room_1_label": "THE LIVING ROOM",
      "room_2_label": "THE BEDROOM",
      "room_3_label": "THE KITCHEN",
      "guests_value": "4",
      "bedrooms_value": "2",
      "baths_value": "1",
      "amenity_1": "Four minutes to Enghave Plads metro",
      "amenity_2": "Bakery, wine bar and laundry on the block",
      "amenity_3": "Airport in twenty minutes, door to door",
      "availability_label": "OPEN NOVEMBER - DECEMBER 2026",
      "price_label": "1,450 kr",
      "price_note": "PER NIGHT · 2-NIGHT MINIMUM",
      "cta_label": "Book the loft",
      "cta_detail": "book.example.com/vesterbro",
      "photo_hero": "https://photos.example.com/vesterbro/hero.jpg",
      "photo_view": "https://photos.example.com/vesterbro/view.jpg",
      "photo_room_1": "https://photos.example.com/vesterbro/living.jpg",
      "photo_room_2": "https://photos.example.com/vesterbro/bedroom.jpg",
      "photo_room_3": "https://photos.example.com/vesterbro/kitchen.jpg",
      "photo_pool": "https://photos.example.com/vesterbro/street.jpg"
    }
  }'

Replace the photo URLs with your own. The response returns a jobId and creditsUsed: 1 immediately. For the vertical cut, send the same body with "templateId": "vacation-rental-listing-city-apartment". For a ski property, use vacation-rental-listing-alpine-winter.

Loop over the feed with the pattern in the CSV guide. Requests are limited per minute by plan: 120 on Creator and 300 on Business. There are no idempotency keys, so a retry after a timeout can render and charge for the same property twice. Check Dashboard → Renders before you retry.

Step 5 - Re-render when the rate or the season changes

The render request has no label field, so keep your own map from property to jobId as each POST returns. Register one webhook with POST /api/v1/webhooks for render.completed, look the property up by jobId, and publish the outputUrl to the listing. The webhooks guide covers verifying the signature.

Then watch the fields that change. When price_label, price_note or availability_label changes in the feed, render that property again and swap the URL. The rest of the portfolio stays as it is.

What this costs at scale

Renderly bills 1 credit per minute of 1080p output, rounded up to the nearest half credit. The 32-second 16:9 video rounds up to 1 credit. The 26-second vertical cut rounds up to half a credit. Both sizes bill at the 1080p rate.

Properties16:9 onlyBoth cutsPlanCost
100100 credits150 creditsCreator, $29/mo (200 credits)included
1,0001,000 credits1,500 creditsBusiness, $99/mo (1,000 credits)included, or $159 with both cuts

The $159 is the Business plan plus 500 extra credits at $0.12. A seasonal re-render of the whole portfolio costs the same again, but a rate change on 50 properties costs 50 to 75 credits.

Where to go next

The template page has the preview and the full field list. The case for one fixed look over a generator that changes it every run is in template-based video vs AI-generated video. If the feed lives in a spreadsheet, the Google Sheets guide sends each row as one render. To narrate each listing, the real estate voiceover guide adds a spoken track per property.

Frequently asked

Do I need to film the property?
No. The templates take six photos you already have for the listing: a hero, a view, three rooms and one more scene. Each photo slot crops the image to a fixed frame, so landscape listing photos also work in the vertical cut. Film a walkthrough only when one property is worth the shoot.
Can one listing render both a 16:9 and a 9:16 video?
Yes. The three vacation rental templates use the same 24 field names, so one replacements object renders all of them when you change templateId. The 32-second 16:9 video costs 1 credit and the 26-second 9:16 cut costs half a credit, so the pair is 1.5 credits per property.
What happens when the property name is too long?
The render succeeds and the end of the text is hidden. There is no error. The strictest line is the property name on the 16:9 sun-warmed hero, with room for about 37 characters. The free preview endpoint returns a TEXT_MAY_CLIP warning for each line that is likely to clip.
How do I update the video when the nightly rate changes?
Change the price_label or availability_label in your feed and render that property again. The look, the timing and the motion are part of the template, so the new video matches the old one except for the changed values. Only the properties you re-render cost credits.
Can I add a voiceover to each listing?
Not through these templates as they stand. Their dynamic fields are text and photos, and the background music is part of the design. To narrate each listing, clone the template into a project, add a sound overlay marked dynamic, and send its value in replacements, either as an audio URL or as text to speak.