Blog
GuideSeptember 29, 2026 · 13 min read
By the ZoomCap teamPublished September 29, 2026Facts checked September 29, 2026

How to Make a Demo Video for Your Website or SaaS App

A step-by-step way to make a website or SaaS demo video: pick the flow, script it, record it clean, add zoom and captions, and embed it without slowing the page.

By the ZoomCap team.We make ZoomCap, which appears in this article. Prices and features were checked on each vendor's own site on September 29, 2026. Where we could not test a tool ourselves, we say so. How we test

Short answer

Pick one flow that proves your headline, script it, record it in a clean browser profile with demo data, zoom in on each action and add captions, then export a small muted MP4 (plus an optional WebM) and embed it with a poster image and lazy loading.

The fastest way to make the video: record with ZoomCap. It zooms on your clicks and typing automatically, adds a background that matches your site and captions, and exports an MP4 up to 4K. It's free to try in the browser with nothing to install, your product's screens are never uploaded, and the full version is $29 once. Pick something else only if you want the demo hosted on a page you can edit after publishing.

A demo video for your website or SaaS app has two jobs: show a visitor what the product does faster than your copy can, and not slow down the page that is trying to convert them. Most guides cover the first job and ignore the second. This one covers both, step by step: choosing the flow, scripting, recording cleanly, adding zoom and captions, export sizes, and the HTML to embed a demo video without hurting page speed.

How to make a demo video for your website: eight steps

  1. Pick the flow that proves your headline, and decide between a muted hero loop, a full demo behind a play button, or short feature clips.
  2. Script it: a shot list for a loop, a two-column script for a narrated demo.
  3. Prepare a clean browser profile and a demo account with realistic data.
  4. Record a window or tab at a size where text stays readable.
  5. Edit: cut dead air, zoom in on each action, add captions.
  6. Export a master, then small web versions: MP4 (H.264), optional WebM, and a poster image.
  7. Embed with muted, playsinline, a poster, and lazy loading below the fold.
  8. Check page weight, layout shift, and a pause control.

1. Pick the flow (and the format)

Start from the headline of the page the video will sit on. If the headline says “Send invoices in 30 seconds”, the video shows an invoice being sent in about 30 seconds. The most common mistake with SaaS demo videos is showing the product's whole navigation instead of the one outcome the page is selling.

Then choose the format, because each has a different length, sound setting and embed:

FormatWhere on the pageLengthSoundEmbed
Hero loopAbove the fold, beside or under the headline10–20 s, loopsNoneSelf-hosted MP4, autoplay muted
Full demo“Watch the demo” button or a section lower down60–90 sVoiceover + captionsClick to play; self-hosted or YouTube/Vimeo behind a thumbnail
Feature clipsFeature sections down the page5–15 s eachNoneSelf-hosted MP4, plays when scrolled into view
Onboarding / docsHelp centre, empty states, docs30 s – 3 min, one taskVoiceover + captionsClick to play

Most SaaS landing pages need a hero loop and a full demo. Record the full demo first, then cut the loop and the feature clips out of it.

2. Script it

A hero loop has no voice, so write a shot list, not a script:

  1. Open on the most recognisable screen of your product. Never a login page.
  2. Do the one action that produces the outcome in the headline.
  3. Hold the result on screen for about two seconds.
  4. Return to the starting state so the loop restarts without a visible jump.

A full demo gets a two-column script (what is on screen, what you say) with five beats: hook, outcome, three steps, proof, call to action. We published a copy-paste template with a worked example in how to record a product demo. Read it aloud with a timer; if it runs over 90 seconds, cut words.

3. Clean browser, clean data

Website and SaaS demos are recorded in a browser, and browsers leak personal details into recordings. Before recording:

  • Create a separate browser profile for demos. Chrome, Edge and Firefox all support profiles. Keep it with no bookmarks bar, no extensions pinned to the toolbar, no history and no saved passwords, so the address bar doesn't autocomplete something personal.
  • Use a demo workspace with realistic, invented data. Believable company names, amounts and recent dates. Never real customer data, even blurred: blur is easy to miss for a single frame.
  • Dismiss everything that pops up: cookie banners, chat widgets, product tours, “what's new” modals, and browser prompts to save a password or allow notifications.
  • Turn on Do Not Disturb and quit Slack, mail and messages.
  • Pre-create the state you need, so nothing loads or builds on camera. A small script that resets the demo account lets you re-record in minutes when the UI changes.
  • Pick light or dark mode on purpose and match your landing page. A dark product video on a white page (or the reverse) looks like a hole in the layout.

4. Record

Record a single window or tab rather than a full high-resolution display. A 27-inch display recorded full-screen and shown in a 700-pixel-wide slot on your page makes every label unreadable. Size the browser window to about 1280×800 to 1440×900, or raise the page zoom to 110–125%, and record that.

SettingUse
Capture areaOne browser tab or window. Tab capture also hides the address bar and tab strip.
Resolution1080p or higher; extra resolution keeps zoomed-in text sharp
Frame rate30 fps for clicks and forms; 60 fps if you scroll a lot
CursorEnlarged, or redrawn by the recorder so you can resize it later
MicUSB or headset mic for the narrated demo; none for loops

When you fumble a step, pause, redo it and cut the mistake later. It is faster than restarting. Check your mic before a narrated take; our free webcam and mic test shows a live level meter in the browser without recording anything.

5. Zoom and captions

Three edits do most of the work on a website demo video:

  1. Cut dead air. Loading spinners, typing corrections, hesitations. If nothing changes on screen for two seconds and nobody is talking, cut it.
  2. Zoom in on each action. Zoom in as something happens and pull back when the viewer needs context. For a hero loop, one or two zooms are usually enough; more feels busy in a small slot. ZoomCap's CLI places zooms from your clicks and typing as you record, and in its browser recorder or any keyframe editor you set them by hand; our guide on zooming in on a screen recording covers both.
  3. Captions for the narrated demo. Many visitors will watch muted. Burn captions into the video or ship a WebVTT <track>, and proofread product names, which speech-to-text often gets wrong. ZoomCap generates captions in your browser with Whisper and burns them into the export.

Then frame it: a background colour that matches your site, some padding and rounded corners make a raw capture sit naturally on a landing page. Keep the same style for every clip on the page. In ZoomCap these are editor settings you can save as a style preset and reuse on every clip.

6. Export sizes

Export one high-quality master (1080p or 1440p H.264 MP4), then make small web versions from it. Page weight is the constraint here, not quality: a 40 MB hero video will hurt your load time on mobile no matter how good it looks.

FileSizeAudioTarget (our rule of thumb)
Hero loop1280 px wide (up to 1920 on a full-width hero), 30 fpsRemovedAbout 1–3 MB for 10–20 s; 5 MB ceiling
Feature clip960–1280 px wideRemovedUnder 1–2 MB each
Full demo1920×1080AAC, 128–192 kbpsSize matters less because it loads only on click
Poster imageSame dimensions as the video—WebP or JPEG, well under 100 KB

With ffmpeg, the three web files look like this (adjust the CRF up for smaller files):

# MP4 (H.264): plays everywhere
ffmpeg -i master.mp4 -t 15 -vf "scale=1280:-2,fps=30" \
  -c:v libx264 -profile:v high -crf 26 -preset slow \
  -pix_fmt yuv420p -movflags +faststart -an demo.mp4

# WebM (VP9): usually smaller, for browsers that support it
ffmpeg -i master.mp4 -t 15 -vf "scale=1280:-2,fps=30" \
  -c:v libvpx-vp9 -crf 36 -b:v 0 -row-mt 1 -an demo.webm

# Poster: one frame from 2 seconds in
ffmpeg -ss 2 -i demo.mp4 -frames:v 1 -q:v 3 demo-poster.jpg

-an drops the audio track, which both shrinks the file and removes any doubt about muted autoplay. +faststart moves the index to the front so playback can begin before the file finishes downloading. -pix_fmt yuv420p keeps the MP4 playable in every browser. Our MP4 vs MOV vs WebM guide explains the codec choices in more depth.

If you would rather not use a terminal, our free video compressor re-encodes a file in your browser with three presets (full size at about 4 Mbps, 75% size at about 2 Mbps, half size at about 1 Mbps). It runs in real time on your machine, so a 60-second video takes about 60 seconds, and it outputs MP4 where your browser can encode it, otherwise WebM. It does not trim or remove audio, so do those in your editor first.

7. Embed it

The hero loop (above the fold)

<video autoplay muted loop playsinline
       width="1280" height="800"
       poster="/video/demo-poster.jpg">
  <source src="/video/demo.webm" type="video/webm">
  <source src="/video/demo.mp4" type="video/mp4">
</video>
  • muted and playsinline are what allow autoplay: Chrome allows muted autoplay (Chrome's autoplay policy), and Safari on iPhone autoplays only muted or silent video and needs playsinline to play inside the page (WebKit's video policies).
  • width and height reserve the space before the video loads, so the page doesn't jump (a layout shift).
  • The browser plays the first <source> it supports, so put the smaller WebM first and the MP4 second as the fallback. If you only ship one file, ship the MP4.
  • Autoplay causes the browser to fetch the video regardless of preload, which is why the hero loop should be the smallest file you can make.

Feature clips (below the fold): lazy-load and play when visible

loading="lazy" works on images and iframes but not on <video>. Use preload="none" without autoplay, and start playback when the clip scrolls into view:

<video muted loop playsinline preload="none"
       width="1280" height="800"
       poster="/video/feature-poster.jpg"
       data-play-in-view>
  <source src="/video/feature.webm" type="video/webm">
  <source src="/video/feature.mp4" type="video/mp4">
</video>

<script>
  const reduce = matchMedia("(prefers-reduced-motion: reduce)").matches;
  const io = new IntersectionObserver((entries) => {
    for (const e of entries) {
      if (e.isIntersecting && !reduce) e.target.play().catch(() => {});
      else e.target.pause();
    }
  }, { rootMargin: "200px" });
  document.querySelectorAll("video[data-play-in-view]")
    .forEach((v) => io.observe(v));
</script>

With preload="none" the browser downloads only the poster until play() is called. Visitors who never scroll that far never download the clip, and visitors who ask for reduced motion see the poster instead of a moving loop.

The full demo: click to play

For the narrated 60–90 second demo, don't autoplay. Show the poster with a play button and start on click, with controls and preload="none" (or "metadata" if you want the duration shown). If you host it on YouTube or Vimeo, load the embed only when the visitor clicks the thumbnail (often called a facade); a standard YouTube iframe loads a large player script up front, even for visitors who never press play.

A note for React and Next.js

React has historically set muted as a property rather than writing it into server-rendered HTML, so a video can fail to autoplay on iPhone until the page hydrates, or at all. If your hero loop doesn't autoplay in production, view the page source and check that the muted attribute is actually there.

8. Page-speed and accessibility checks

  • Check the network tab on a throttled mobile connection. The hero loop should be the only video that downloads on load.
  • Serve from a CDN with long cache headers, and make sure your server supports range requests so the browser can fetch the start of the file first.
  • Use a poster so the slot is never blank, and keep it small.
  • Consider a still image on small screens if the loop is purely decorative.
  • Give moving video a pause control. WCAG's “Pause, Stop, Hide” criterion asks for a way to pause auto-playing motion that lasts more than five seconds (W3C's explanation). A small pause button over the loop is enough.
  • Add text alternatives. An aria-label describing what the loop shows, and captions or a transcript for the narrated demo.
  • Never autoplay with sound. Browsers block it anyway, and visitors who hear it leave.

Tools for website demo videos

What a dedicated demo recorder saves is the time spent on zooms, cursor, captions and framing. We recommend ZoomCap for website demos, and we make it.

Why ZoomCap

The free browser recorder captures a tab, window or screen in Chrome or Edge on any OS; because a browser only sees clicks inside its own tab, you place zooms by hand there. The CLI (npx zoomcap record, macOS and Linux X11, paid) records clicks and typing so the editor zooms automatically. The editor adds backgrounds, padding, rounded corners, captions generated in your browser with Whisper, and exports H.264 MP4 from 720p to 4K, or GIF, which is the master you cut the web files from in step 6. It costs $29 once (or $12.49/month); the free plan includes 2 watermarked exports a month. It doesn't host video or export WebM, so you run the ffmpeg step above for a WebM version.

The other tools below were not hands-on tested by us; their details come from the vendors' own sites, checked in September 2026.

ToolPrice (checked Sep 2026)Free finished exportPlatformsLocal vs cloudAuto-zoom triggerMain tradeoff
ZoomCap$29 once (or $12.49/month)2 exports a month with a small watermarkBrowser recorder on any OS (Chrome or Edge); CLI on macOS and Linux (X11)Local; nothing uploadedClicks and typing bursts, CLI recordings onlyNo hosting or share links; no motion blur
Screen Studio$29/mo · $108/yr ($9/mo billed yearly) · No longer sold to new buyersFree download to try; exporting needs a planmacOS only (Ventura 13.1+); no Windows plansLocal, with optional share linksYes, from clicksThe most mature Mac app (motion blur, share links, iOS recording), but a subscription and Mac-only
Cursorful$79 once (Pro, commercial use)Free for non-commercial use, browser-tab recordingChrome, Edge or Brave extension on any OSLocal, rendered in the browserYes, after 2+ clicks within 3 secondsNothing to install, but records browser tabs only on the free plan
TellaPro $26/user/mo · Pro $156/yrNo free plan (7-day trial)macOS, Windows, Chrome extensionCloudYes, from clicks and cursor dataStrong hosted editing and sharing, but cloud-based and a subscription
OpenScreenFreeFree for personal and commercial use, no watermark, no account (MIT)macOS, Windows, Linux; also a CLI for scripts and CILocal, GPU export; optional AI editing with your own API keyYes, follows the cursorFree, open source, with motion blur and per-segment speed; self-described as under active development with occasional breaking changes

If you need something ZoomCap doesn't do: if you want the demo to live on a hosted page you can link to and edit after publishing, Tella is built for that (Pro $26/user/mo, cloud-based). If you need motion blur on a Mac, Screen Studio has it according to its site. If the budget is strictly zero, OpenScreen is free and open source. Our best screen recorder for product demos roundup compares nine options by use case.

Recording inside your product often means recording things you would not want on someone else's server. ZoomCap edits and encodes in the browser and never uploads the recording; the security page describes the data flow. Payments go through Dodo Payments, and there is a 14-day refund if it doesn't work for you (refund terms).

Frequently asked questions

How long should a demo video on a website be?

A muted hero loop should run 10 to 20 seconds and restart without a visible jump. A full product demo behind a play button should run 60 to 90 seconds. Short feature clips further down the page work best at 5 to 15 seconds each, one feature per clip.

Should I self-host a website demo video or use YouTube?

Self-host short muted loops as MP4 files on your own site or CDN, because a YouTube embed loads a heavy player and shows YouTube branding. For a long narrated demo, a YouTube or Vimeo embed behind a click-to-load thumbnail is fine and saves you bandwidth. A hosted video platform sits in between if you need adaptive streaming or analytics.

Why won't my background video autoplay on iPhone?

Safari on iOS only autoplays video that is muted or has no audio track, and it needs the playsinline attribute to play inside the page. Add muted, playsinline and autoplay, and consider removing the audio track entirely with ffmpeg's -an flag. In React apps, also check that the muted attribute is actually present in the server-rendered HTML.

How big should a website demo video file be?

As a rule of thumb, keep a 10 to 20 second hero loop at roughly 1 to 3 MB and treat 5 MB as a ceiling. Scale to 1280 pixels wide, drop the audio track, encode H.264 with a CRF around 26, and add a WebM version if you want smaller files in browsers that support it.

Does ZoomCap upload my website recording?

No. ZoomCap records, edits and encodes the video in your browser, and the file never goes to its servers. There is no hosting either: you export an MP4 and put it on your own site or CDN. The free plan includes 2 watermarked exports a month; paid plans cost $29 once or $12.49 a month.

Launching on Product Hunt too? See how to make a Product Hunt launch video. If your demo looks soft after export, these 12 fixes cover the usual causes, and the pricing page lists what each ZoomCap plan includes.

Make your website demo

Record your demo free in the browser, with nothing to install, and export a master to cut your hero loop from. For automatic zoom from your clicks and typing, unlimited exports and no watermark, it's $29 once on the pricing page.

What ZoomCap costs

Checked September 29, 2026

Free

$0

Browser recorder and editor, 2 exports a month with a small watermark.

Lifetime

$29

One payment. Unlimited exports, no watermark, the CLI, 4K export.

Pro

$12.49/mo

Same features as Lifetime, cancel anytime.

Over three years, ZoomCap Lifetime costs $29 and Screen Studio's yearly plan costs $324 ($108 a year), a difference of $295. Of the 18 recorders we price-checked, ZoomCap is the only one at $29 one-time that records in the browser with nothing to install, zooms on both clicks and typing, and runs from the terminal on macOS and Linux. Start free, and pay once only if it earns it.

14-day refund window on paid plans · refund terms · pricing page

Is ZoomCap safe?

Your recordings
Recorded, edited and encoded on your own computer. Video never goes to our servers: the CLI hands the file to the editor over localhost. See the data flow
Keystrokes
Only the timing of key presses, to drive typing zoom. Which keys you pressed is never captured or stored.
Account and payments
Sign-in and licence records are held by Google Firebase. Payments are processed by Dodo Payments, so we never see your card. Privacy policy
Refunds and support
If ZoomCap doesn't work for you and we can't fix it, email us within 14 days for a refund. Commercial use is allowed on every plan. Contact us · About ZoomCap

What ZoomCap doesn't do

  • No Windows CLI yet. On Windows, use the free browser recorder in Chrome or Edge.
  • No motion blur.
  • Speed changes apply to the whole video (1×, 1.5× or 2×), not per section.
  • Automatic zoom needs the CLI's click data. On browser recordings and imported videos you place zooms by hand.
  • On Linux the CLI records video only (X11 sessions, no Wayland, no system audio yet).
  • No hosted share links, comments or viewer analytics. You export a file and share it yourself.