Meet TrackPlay at Affiliate Grand Slam in Rome, 2 to 5 November
Pricing Blog Partners Contact

How does a VSL work? From play to purchase

One viewer, followed from the ad click to the order confirmation. What happens at each stage, what gets recorded, and where the sale usually goes missing.

By Sam, Founder of TrackPlay05 Aug 20269 min read
Summarize with:
Illustration: an ad card, a video frame, a pitch flag and a cart in a row, with a dotted arrow looping from the cart back to the video
The short answer

A VSL works in a fixed order. An ad click lands a viewer on a page. The video starts and has five seconds to earn a minute. The story carries them to the pitch. The buy button appears when the offer lands. They click through to a checkout that knows which session sent them, and the cart confirms the order back to the video. Each step leaves a record, and joined together those records say which ad, which video, which second, and which viewer produced each sale.

Rather than list features, this article follows one viewer through that order, in the present tense, and stops at each point where the sale is usually lost.

Before the video exists: the click

Someone is scrolling and stops on your ad. They tap. The link they are carrying has more on it than a destination: a click id from the platform, a Meta fbclid or a Google gclid or a TikTok ttclid, plus the UTM parameters and the affiliate sub-ids the media buyer added. They land on the page, and for a moment nothing has happened yet.

Something has, though. The player reads those parameters once and decides where this session came from, in a strict order: click id first, then UTM, then affiliate id, then referrer. If none of them settle it, the session is filed as Unknown. It is never rounded up to Direct. Bot and datacenter traffic is flagged at the same instant, before it can inflate anything later. From here on, every event this viewer produces carries that click identity with it.

Zero seconds: the load

The one embed on the page resolves everything for this particular view. The billing gate is checked. If the video is running a split test, this viewer is assigned an arm and will keep it for 30 days, so they never see two different hooks on two visits. The poster is painted into a space that was reserved before anything loaded, so the page does not jump.

Then the stream itself asks permission. Every playlist request passes the billing check, the domain allowlist, and content protection before a single frame is served. On a stranger's domain, or from a download tool, the request gets nothing or a decoy. The viewer notices none of this. They notice the first frame, and how long it took to arrive, which is why startup time is measured on every view.

Still zero seconds: the play

The video tries to start with sound. It almost certainly cannot, because every modern browser blocks autoplay with sound until the visitor has interacted with the page (Chrome, Safari). So it starts muted, and Smart Autoplay waits. The viewer scrolls a little, or taps anywhere on the page, and the sound comes on without the video restarting. Unmute Rate records whether that happened.

This is also the moment the play is counted, and the counting is stricter than it sounds. A play is one session in which the viewer genuinely played the video. A muted autoplay nobody watched is not a play. A reload is not a second play. A bot is not a play at all. TrackPlay publishes that definition, and the reason to care is that the same number appears on the invoice and in every report that follows.

Five seconds to earn a minute: the hook

The viewer is now watching and listening, and has not decided anything. The opening has about five seconds to give them a reason to stay. Hook Rate is the share of plays still watching past that point, and it is the first number to read on any VSL, because every number after it is multiplied by it. A hook that loses a third of the audience has lost a third of the sales before the pitch was ever heard.

From here the player reports progress every ten seconds, along with every seek, so the record of this session has the resolution of seconds rather than one average at the end.

The long middle: the story

Problem, mechanism, proof. This is most of the video and most of the places to leave. Each session keeps one row holding the furthest second reached, and thousands of those rows become the retention curve: for every five seconds of the video, what share of viewers were still there. A slope is people drifting. A cliff is one sentence.

Our viewer does something at 4:10 that turns out to matter. They scrub back twenty seconds and watch a claim again. The rewind is recorded, and later, if they do not buy, it will count in their favour when non-buyers are scored. Hold Rate, the share of plays that reached the midpoint, is the checkpoint for this stretch, and they pass it.

The pitch, and everything that moves with it

At 11:40 the offer and the price are revealed. That second is read from the transcript automatically, so it becomes the Pitch marker on the retention graph, and "how many people reached the pitch" is a count rather than an estimate. Our viewer is one of them.

Three things happen on the page at once, and the viewer sees only the first. A timed CTA appears, or a watch gate releases the order box and the guarantee that were hidden until now. A pixel fires at this watch milestone, from the browser and from the server, so the ad platform learns from someone who listened rather than someone who loaded a page. And if the timed event carries a CRM tag, and the viewer has already been identified by a lead form, they are tagged as having reached the pitch in GoHighLevel or ActiveCampaign.

The click that carries the key

At 12:05 they click the button. This is where most video hosts lose the thread, because the viewer is leaving the player. The fix is small and it is the hinge of the whole system. As the checkout link opens, the player writes the session key into it, using the cart's own passthrough parameter. Sixteen carts' link formats are supported. Nothing else about the link changes. The viewer lands on exactly the checkout they would have reached anyway. The only difference is that the cart now knows which session sent them.

Illustration: a key travelling along a dotted path from a video frame to a checkout card with a cart
The checkout link carries a key from the session, so the order can find its way back to the play that earned it.

The cart calls back

The payment goes through. The cart posts back. Cart postbacks are live for ClickBank, BuyGoods, Digistore24, WarriorPlus, JVZoo, and Kiwify, and because the postback carries the session key, the conversion inherits everything the session already knew: the video, the watch depth at the click, the split-test arm, the affiliate id, and the ad ids captured before the video existed. Refunds, rebills, and chargebacks post back the same way and land on the same session.

Three guards keep this honest. A postback with no key is recorded as organic rather than guessed onto someone. A key that matches nothing is dropped rather than misattributed. If the analytics store is briefly unavailable, the sale is still recorded, just without the enrichment. An affiliate who does not own the cart gets the same join from the network's postback, with the commission recorded as the value, so their reports price traffic in what they were actually paid.

A thank-you-page script fires on a declined card and never fires on a rebill. The cart's own confirmation is the only sale worth counting.

What the data does afterwards

The sale now lives on the session, and everything reads from it. Meta, TikTok, and GA4 receive the conversion server-side, on real revenue. The retention graph can draw buyers as their own curve, and the buyers' curve holding through minute eleven while the non-buyers' curve dies at minute six is the most useful picture a VSL owner ever gets. The split test scores arm B on revenue per play, not clicks. The Sources tab prices the Meta campaign by conversion rate. And on the viewer's profile page, the session reads as a sentence.

Session storyIllustrative

Arrived from a Meta ad. Turned the sound on at 0:02. Rewound 20 seconds at 4:10 and watched the claim again. Reached the pitch at 11:40. Saw the CTA. Clicked it at 12:05. Converted.

An example of the readable session story on a viewer's profile, with made-up timestamps. Real stories are built from the events recorded at each stage above.

The viewers who did not buy are not discarded. Their sessions are scored from 0 to 100 on what they did: whether they reached the offer, clicked the CTA, rewatched, returned, and how deep they watched, with bot traffic penalised. The high scorers are the hot leads worth retargeting or calling. And if any of them come back within 90 days, on any device, they are offered Continue or Restart instead of the beginning.

What each stage leaves behind

The same journey as a ledger. The right-hand column is the number each record feeds, so you can see which report to open when a stage looks wrong.

StageWhat is recordedThe number it feeds
The clickSession, device, country, click id, sub-ids, bot flagSources report, traffic quality
The loadSplit-test arm, billing check, startup timeTime to Play, Video Ready Time
The playOne genuine play per session, unmute eventPlays, Play Rate, Unmute Rate
The hookStill watching at 0:05, ten-second ticks beginHook Rate
The storyFurthest second reached, seeks and rewindsRetention curve, Hold Rate
The pitchPitch reached, CTA shown, milestone pixel, CRM tagPitch marker, CTA markers, Click Rate
The click-throughCTA click, checkout link with session keyClick Rate
The orderPurchase, refund, rebill, with session, arm, ad idsConversions, Conversion Rate, Revenue per Play
AfterwardsServer-side conversion, lead score, resume positionBuyers' curve, split-test result, Hot Leads

Where the sale usually goes missing

Read the journey backwards and the losses line up with the stages.

Illustration: a chain of pastel links with one link broken in the middle
One broken link is enough: a sale that loses its key at any stage arrives as organic.
  • A sources report that guesses. If it says Meta without a Meta click id, it is telling you a channel works when it may not.
  • A slow first frame. Every second between the click and the video is paid-for silence, and some of the people you paid for leave inside it.
  • A hook played to silence. If Unmute Rate is low, the script has not been heard yet, so it cannot be the problem yet.
  • A button visible from the first second. It invites the viewer to skip the argument. A pixel fired on page load does the same damage on the ad side.
  • A checkout link with no key. The sale still happens. It just arrives as organic, and from then on the video and the cart are strangers.

Capture the click, protect the play, record every second, put the key in the checkout link, let the cart post the sale back. Do those five things and every question a VSL owner asks has a number. If you want to watch the sequence run on your own video, the free plan gives you 3,000 plays a month, free forever, with no card, and the VSL hosting page shows each stage as the product does it.

FAQ

Questions people ask about how a VSL works

Does a viewer have to finish the VSL to buy?

No. Most buyers act at or shortly after the pitch, which is why Hold Rate and pitch reach matter more than Completion Rate for a sales video. Completion, defined as reaching 90% of the video, tells you whether the close is being heard, not whether the offer sold.

What happens if the checkout link has no session key?

The sale is still recorded, but as organic. It is never guessed onto a session, and a key that matches nothing is dropped rather than misattributed. That rule is what makes an attributed conversion mean something: the cart confirmed that session.

What if the viewer leaves and comes back tomorrow?

They get a Continue or Restart choice instead of starting from zero, and the saved position follows them for 90 days, including onto another device. Meanwhile their first session is scored as a hot lead on what they did: reached the offer, clicked, rewatched, returned.

Where does the sale show up once it is attributed?

On the session and the viewer's profile, and in every report that reads from them: the buyers' curve on the retention graph, revenue per play on each split-test arm, conversion rate per ad platform in Sources, and Revenue per Play on the video card.

Does the viewer notice any of this?

No. They see a video that starts, a sound that comes on when they touch the page, a buy button that appears when the offer is made, and the same checkout they would have reached anyway. Everything else happens between the player, the events service, and the cart.

See which second sells

Retention, watch-time pixels and sales attributed to the play, on your own VSL. Free forever: 3,000 plays a month, no card.