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.

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.
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
| Fields | What goes in them |
|---|---|
property_name, location_label, rating_label | The name, the area and the review score as one string |
property_tagline | One line in the host's voice about the view |
room_1_label, room_2_label, room_3_label | The three room names |
guests_value, bedrooms_value, baths_value | The three counts guests filter on |
amenity_1, amenity_2, amenity_3 | Three amenities, one line each |
availability_label, price_label, price_note | The open dates, the nightly rate and the minimum stay |
cta_label, cta_detail | The button text and your booking URL |
photo_hero, photo_view, photo_room_1 to photo_room_3, photo_pool | Six 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.
| Properties | 16:9 only | Both cuts | Plan | Cost |
|---|---|---|---|---|
| 100 | 100 credits | 150 credits | Creator, $29/mo (200 credits) | included |
| 1,000 | 1,000 credits | 1,500 credits | Business, $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?
Can one listing render both a 16:9 and a 9:16 video?
What happens when the property name is too long?
How do I update the video when the nightly rate changes?
Can I add a voiceover to each listing?
Related guides
Bulk Video from CSV: Generate One Video per Row
Turn a CSV export into finished videos. Map headers to template variables, send one render request per row from a resumable script, and collect every result.
Google Sheets to Video: Automate Video Creation from a Sheet
Turn spreadsheet rows into finished videos. Connect a Google Sheet to the Renderly API with Apps Script, map columns to variables, and render every row.
Airtable to Video: Automate Video Creation from a Base
Turn Airtable records into finished videos automatically. Connect a base to the Renderly API, map fields to template variables, and render every row without opening an editor.