How-to

Automated Job Ad Video: One Render per Open Role

Render a 34-second job ad from eight fields in your ATS. One video per requisition, the same design every time, one credit each, published before a designer opens a file.

Automated Job Ad Video: One Render per Open Role

An automated job ad video is one render per requisition, not one design project per role. Map eight fields from your ATS onto a 34-second template, POST one request when the role is published, and the video is ready before a designer opens a file. Each render costs one credit.

The finished video

This guide renders Job Ad Promo - Open Role Announcement - a 34-second 16:9 ad in seven scenes: a self-aware hook, the role reveal, the team scene, three numbered perk cards, and a full-bleed yellow Apply payoff.

The ad rendered from the payload in step 5.

Eight fields change per role and drive 35 overlays. Everything else - colour, type, timing, the copy between the fields - is identical in every render, which is the entire point.

What you need

  • A Renderly API key. Create one in the dashboard under Settings → API keys.
  • An ATS that fires a webhook when a requisition is published, or a sheet of open roles.
  • A company logo at a URL that serves the file directly, ideally a transparent PNG, because the outro forces it to solid ink.

Step 1 - Decide whether you want one video or the same video

Search this query and you get makers. Biteable's AVA, FlexClip, Storykit and InVideo all take a job description and generate a video from it. VideoMyJob and Rezoomo do a different thing again: they put a hiring manager on camera inside a branded frame. Both are real products and neither is this one.

The difference is what varies between roles. A maker gives every opening its own copy and its own layout, so 40 roles become 40 different-looking videos, each needing a look before it ships. A template changes only the words, so the 40th render is approved by the same decision that approved the first.

That makes it a volume question, not a quality one. Four openings a year is a job for a designer. Forty, which must read as one company, is a job for a template: the design work is already done and each render is one credit.

Step 2 - Map the requisition onto eight fields

Eight fields cover the whole 34 seconds:

FieldSceneComes from
company_logo1 and 7Your brand assets, one URL
job_title2The requisition title
location_mode2City and working pattern, as one string
team_name3The hiring team or department
perk_1, perk_2, perk_34, 5, 6Written by hand, once per company
apply_url7A short vanity link, not the ATS URL

company_logo is one field used twice. Scene 1 renders it as supplied on the dark open; scene 7 applies brightness(0), so the same file knocks out to solid ink on the yellow Apply frame. One URL covers both, whatever colour the logo is.

The perks are the only fields that are not a lookup, and they carry the personality. Write three for the company, not three per role, and keep them true: "No-meeting Wednesdays. We defend them like it's our job." beats a line about a dynamic environment.

Step 3 - Keep the title, the location and the team inside their boxes

Every text field is a fixed size. Nothing shrinks to fit, and an overrun does not fail the render - it publishes a video with a line missing. Make the limits a validation rule in your mapping function:

FieldBoxHoldsBreaks at
job_title1520x360, 150px2 lines, ~46 characters"Vice President of Engineering, Developer Platform" - 3 lines, one lost
location_modepill from x=140~15 characters"Remote · worldwide" - runs into the Full-time pill
team_namefrom x=140, 120px~430px of text"Platform" - touches the static word "team."
perk_1/2/31560x380, 110px3 lines, ~90 characters99 characters - 4th line lost
apply_url800x112, 38px mono48 charactersa full ATS link with UTM parameters

Two of those are collisions rather than overflows, and they are the ones that surprise people. The location_mode pill grows to fit its text, but the Full-time pill beside it is nailed to x=514, leaving about 280px once the border and 44px of padding are counted. "Berlin · hybrid" lands 42px clear; "San Francisco · on-site" sits on top of its neighbour.

team_name collides the same way with the static word "team." at x=570. "Growth" ends 50px short of it; "Platform" ends 6px past it. The scene reads "You'd join the Growth team.", so map long team names down to one short word.

Step 4 - Pick a voice: the yellow ad or the deadpan one

Two templates ship on the same eight fields. job-ad-promo is yellow on ink in Space Grotesk and opens "Yes, this is a job ad." job-ad-promo-v2, The Honest Job Ad, is lime on spruce in Geist and reframes the perks as Full Disclosure confessions.

Switching is one word in templateId. The decision worth making is to stop switching: a candidate who sees three of your roles in a week should see the same video three times with different words in it.

Step 5 - Render one video the moment a requisition opens

One published role becomes one POST. The template's API id is job-ad-promo, the same string as its gallery URL.

curl -X POST https://renderly.video/api/v1/renders \
  -H "Authorization: Bearer $RENDERLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "templateId": "job-ad-promo",
    "replacements": {
      "company_logo": "https://cdn.example.com/brand/logo-mark.png",
      "job_title": "Senior Backend Engineer",
      "location_mode": "Berlin · hybrid",
      "team_name": "Payments",
      "perk_1": "Actually flexible hours. Not \"flexible\" with air quotes.",
      "perk_2": "A learning budget nobody guilt-trips you for using.",
      "perk_3": "No-meeting Wednesdays. We defend them like it'\''s our job.",
      "apply_url": "example.jobs/backend-payments"
    },
    "webhookUrl": "https://your-app.com/hooks/renderly"
  }'

Any field you leave out keeps the template's default, and those defaults belong to a fictional company called Acme. A missing company_logo does not fail the render, it publishes Acme's logo on your careers page. Validate the requisition before the request, not the file after it.

The call returns a job id immediately and the finished URL arrives on the render.completed webhook, signed with HMAC-SHA256; the webhooks guide covers verifying it.

What this costs at scale

Renderly bills 1 credit per minute of 1080p output, rounded up to the nearest half credit. A 34-second ad is 0.57 minutes, which rounds to one credit.

Roles per monthCreditsPlanCost
12 - one company hiring steadily12Creator, $29/moincluded
200 - an agency desk200Creator, $29/moincluded
1,000 - a staffing firm1,000Business, $99/moincluded
2,0002,000Business + 1,000 extra at $0.12$219/mo

At a thousand roles a month the video costs about ten cents an opening, well under the job board fee for the same posting. Rendering is not the constraint; writing three honest perks is.

Where to go next

The argument behind step 1 is set out at length in template-based video versus AI-generated video. If your open roles live in a spreadsheet rather than an ATS, the loop in the CSV guide renders the whole list, and the Google Sheets guide puts it on a trigger.

Frequently asked

Does Renderly write the job ad from the job description?
No, and that is the line worth drawing before you choose a tool. Biteable, FlexClip, Storykit and InVideo generate both copy and layout from a job description. Renderly renders a fixed design from strings you supply, so the words stay yours and every run looks the same. If you want a machine to write the ad, this is the wrong category.
What happens if the job title is too long?
The third line is cut off and the render still reports success. The title box is 1520x360 at a fixed 150px, which holds two lines. "Senior Staff Software Engineer, Platform Infrastructure" wraps to three and loses one. Keep titles under about 46 characters, or shorten them in the mapping function - every text field sets fontSizeFixed, so nothing auto-shrinks.
Can I use my own brand colours and fonts?
Not through replacements. The eight dynamic fields carry text, a logo and a URL; the yellow, the ink and Space Grotesk are baked in. For full control, send the whole composition as inputProps instead of templateId, or clone the template into a project and edit it once.
What is the difference between the two job ad templates?
Voice, not structure. Job Ad Promo is yellow on ink in Space Grotesk and opens "Yes, this is a job ad." The Honest Job Ad is lime on spruce in Geist, and reframes the perks as Full Disclosure confessions. Both run 34 seconds on the same eight fields, so switching is one word in templateId.
How does the video get onto LinkedIn?
Renderly returns an MP4 URL on the render.completed webhook and stops there. Posting is your ATS or scheduler's job - hand the URL to whatever already publishes the text ad. The file is 1920x1080, which LinkedIn, a careers page and an embedded player all take without a re-encode.
What does it cost to re-render when a role changes?
One credit, the same as the first render. Requisitions get edited more than people expect: a title is rewritten, a salary band is added, the location flips to hybrid. Budget about 1.3 renders per opening, and fire on the ATS update event as well as publish while the ad is live.