Viktor just announced crossing $50M ARR and paid UA is their primary acquisition engine. The scale and efficiency of their paid acquisition is very impressive.
I studied every creative, campaign, landing page and funnel to create this guide on how to win in paid UA at scale like Viktor. This take is split into 2 parts: their Creative Factory, and their Performance Machine.
Let's see how Viktor is crushing UA while running one of the most aggressive paid social operations in B2B SaaS.
Viktor AI ads: key findings
- 875 active Meta ads analysed
- 215 distinct video assets
- 644 carousel cards
- 263 body-copy variations
- 11 recurring hook archetypes
- 32.5-second median video length
- 75% display captions within 0.3 seconds
- 93% display captions within one second
- 12-day median observed ad lifespan
- Two headlines appear across 228 ads, or 26.1% of the account
Part 1: The Creative Factory
875 live ads, and two thirds of them are video
| Format | Live ads | Share |
|---|---|---|
| Video | 477 | 63% |
| Carousel | 214 | 28% |
| Static image | 68 | 9% |
Behind those 477 video ads sit just 215 actual videos. When something works they clone it across ad sets rather than shoot it again — one file runs under twelve separate ads.
10 new creatives a day
Their biggest week shipped 188. The median ad dies at 12 days and gets replaced.
They are not optimising a winner. They are feeding a machine.
Everything is vertical and nothing is short
Median video is 32.5 seconds. Ninety per cent run 15 seconds or longer. The longest is over three minutes.
Every single file is 9:16. No square cut, no landscape, nothing recut from a YouTube edit.
| Video length | Assets |
|---|---|
| Under 15 seconds | 22 |
| 15 to 30 seconds | 68 |
| 30 to 45 seconds | 65 |
| 45 to 60 seconds | 41 |
| Over 60 seconds | 19 |
The caption lands at 0.3 seconds. Then nobody cuts.
- 75% have a caption on screen by 0.3 seconds. 93% by one second.
- Captions sit at 58% of frame height. Over the face, not the lower third.
- Three words a caption change.
- One cut in six seconds, median. 29% have none at all.
Text beats image. Then the camera stops moving.
Every playbook says cut fast, cut early, buy attention with movement. Viktor buys it with a sentence and then holds dead still while the product does something real.
Here is their most-cloned asset. Eleven ad objects run this one file and it has zero cuts.
11 hooks, all running at once
Ordered by how hard Viktor scaled each one. Tap any cell to watch the ad.
The static ads are a different company
The video account is phone-shot and messy. The static account is art directed to within an inch of its life.
A lock-screen mockup at 7:02am. A 1950s illustrated campaign about picking the right model, five executions deep. Gold objects on a fork: “one less report to build.” The founders shot properly with “Accel. The AI employee just raised $75M” under them.
They never make one look like the other, and they never meet in the middle.
263 body copies. Two headlines.
“Not a Chatbot. A Coworker.” runs on 119 ads. “The AI employee that lives in Slack” runs on 109 more. That is 228 ads, 26.1% of everything live, saying one of two things.
Viktor holds the positioning still and changes the wrapper around it. Hooks, speakers, props, use cases, opening captions, formats — all variable. The claim underneath never moves.
That separates message testing from execution testing. A new video is not a new value proposition, it is another shot at the same one, aimed at a different person.
Most teams have this backwards. They rewrite the positioning every quarter and ship four ads. If you want the general version of this, read our guide to creative analytics or the walkthrough on turning competitor hooks into your own.
Part 2: The Performance Machine
Now the half you cannot see in the feed.
Two account philosophies running side by side
We went deep on a sample of their campaigns and mapped the hierarchy. Every entity in the account is named to a fixed schema, and the schema is the strategy.
At campaign level, seven dimensions:
| Dimension | Remarketing | Scaling |
|---|---|---|
| Business line | Self-serve | Self-serve |
| Channel | Meta | Meta |
| Funnel stage | Retargeting | Cold prospecting |
| Bid family | Volume | Value |
| Optimisation event | Trial start | Purchase, value-optimised |
| Geo | Split at campaign level | Split at campaign level |
| Budget mode | Human holds it | Meta holds it |
Ad sets sit one level down and name the audience: who they are, how recently they visited, which geo, and which iteration of the build it is. Warm ad sets are windowed on site visitors; cold ones are evergreen top-of-funnel.
Warm pool: they keep the wheel. Dense data, cheap event, a human decides what each audience gets.
Cold traffic: they hand it over. Sparse data, expensive event, let the algorithm chase margin instead of count.
Most advertisers pick one of those and run it everywhere. Viktor runs both at once, and the account tells you which is which at a glance.
Every ad carries its own creative record
This is the part worth stealing. Ads carry a creative-level record with eight dimensions on them:
- A sequential creative ID
- Test variant
- Production batch and the cut within it
- Messaging angle, numbered from a library built to hold thousands
- Who produced it, in-house or creator-supplied
- The hook, word for word
- Concept, angle name and funnel stage
- Launch date
Meta tells you which ad won. It cannot tell you whether the ROI angle beats the headcount angle on cold traffic across every campaign you have ever run. This can, and it still works after the campaign is deleted.
The funnel stage tag describes the creative, not the landing page — ads sharing one ad set carry different stages and go to different destinations. So they can read performance by how cold the message is while the audience stays fixed.
Where the clicks actually go
| Destination | Ads | What it is |
|---|---|---|
viktor.com/ | 488 | Homepage. |
getviktor.com/ | 91 | A second domain that 308s to the first, path for path. |
getviktor.com/for/media-buying | 49 | Redirects again to a dedicated media buyer page. |
getviktor.com/me | 47 | Solo operator version of the homepage. |
viktor.com/for/agencies | 27 | Vertical page off a template. |
ref.viktor.com/mina | 18 | A partner's commission link. |
viktor.com/business | 16 | Team page. |
ref.viktor.com/meta-ranking-ab | 10 | A short link they can repoint mid-flight. |
The mirror domain is insurance. One draws a policy restriction, the other keeps serving, and each builds its own verification history.
The short link is the clever one. The destination lives in the redirect, not the ad, so they move the landing page without touching the ad object. No edit, no ID reset, no learning phase again.
And the partner link resolves to viktor.com/?via=mina — running inside the scaling campaign, on prospecting budget. A partner wrote the creative. The partner earns commission on it. Viktor pays to distribute it.
The PLG funnel: three steps, no password
The ad drops you on their signup form. No nav, no footer, no way out but forward.



- “How many people work at your company?” Four buttons, G2 and Trustpilot scores under them, GDPR and SOC 2 badges in the footer.
- “What's your work email?” One field. “Complete signup to unlock up to $100 in free credits — no credit card needed.”
- A six character code. There is no password anywhere in this product.
All four answers give an identical step two. The company size question changes nothing — it is a data field dressed as personalisation, asked at the exact moment you will answer anything.
Steal that. A trivial first question buys a micro-commitment and people finish what they start. Bounce at the email and they still have a firmographic on you.
After the code, onboarding pushes hard on installing into Slack or Teams. The product does not work until it is inside one, so the install is the real activation event, not the signup.
“No credit card” is a $1 hold
The pricing page says “No credit card” three times. It also says “up to $100 credits for free.” The “up to” is doing the work.
Inside the product sits a starter credit unlock:
Places a temporary $1 hold and voids it immediately — it's not a purchase.
Viktor AI, in-product, on unlocking the rest of your free creditsNext to it: “Card verification required.” “Verify card to continue.” “Paid plans open up once your workspace has a verified card.”
Two gates. Email gets you in. A card unlocks the full hundred dollars and every paid plan above it.
It is genuinely not a charge. It is also a card on file, taken at peak investment, dressed as security.
The second wall is credits exhausted. Free credits never expire, so nothing pushes you until you have burned $100 of real model work — by which point Viktor is in your team's Slack doing jobs in front of your colleagues.
| Gate | What it costs you | What it gets them |
|---|---|---|
| Work email | An address | A lead, welded to the anonymous session that preceded it |
| $1 card hold | A card on file, not a charge | Payment method captured at peak investment |
| Credits exhausted | $100 of real model work | An ask made after the product already proved itself |
Why the order matters: a 14-day trial fires whether or not the product proved anything. A usage wall can only fire after it did.
24 rungs, one price
$50/month for 20,000 credits at the bottom. $45,000/month for 18 million at the top.
Every rung is $2.50 per 1,000 credits. No volume discount anywhere in self-serve. The customer spending $45,000 pays the same unit price as the one spending $50.
One rung breaks it — 125,000 credits for $300 works out at $2.40. Someone wanted a round number.
Annual billing is gone: “We've discontinued annual plans.” When your cost of goods is metered inference, annual prepay is a bet against your own model costs.
And the cancel flow is a save funnel with fixed reasons: too expensive, missing feature, not using enough credits, switching tools, technical issues, temporary need. Churn reasons as enum values, not a text box nobody reads.
11 things watching you land
| System | Doing what |
|---|---|
| Meta Pixel | Fires on the marketing site and the app subdomain with the same cookie. One stitched click. |
| LinkedIn Insight | Collection plus audience sync on every page. |
| GA4 and GTM | Standard. |
| OpenAI Ads pixel | The conversion pixel for ads inside ChatGPT. They are already buying it. |
| PostHog | Reverse-proxied through their own domain so blocklists miss it. |
| Dub | Attribution for every affiliate and creator link. |
| beehiiv and SparkLoop | Newsletter placements and newsletter referrals. |
| Identity and device checks | Anonymous visitor resolution, and device verification at the signup door. |
The OpenAI pixel is the one I keep thinking about. A company running 875 Meta ads has already instrumented ChatGPT ads.
But the field that matters most is boring. When you submit your email, their anonymous analytics ID goes to the backend in the same request. Everything before the email and everything after it become one record, server side, in a system they own.
They buy distribution with credits, not cash
Eight partner programmes on two payout rails. The headline one pays creators up to $10,000 for a single post. No follower minimum, no approvals.
| Post impressions | Cash | Or credits |
|---|---|---|
| 1,000 - 4,999 | $200 | $300 |
| 5,000 - 14,999 | $600 | $900 |
| 15,000 - 29,999 | $1,500 | $2,250 |
| 30,000 - 99,999 | $5,000 | $7,500 |
| 100,000+ | $10,000 | $15,000 |
Credits pay 50% more than cash at every tier.
A $15,000 credit payout costs them inference. A $10,000 cash payout costs them $10,000. The uplift makes the cheaper option look like the generous one.
And it pays twice, because a creator who takes credits goes back into the product as a heavy user and generates the output their next post needs.
The rest: 15% recurring affiliate commission for a year, rising to 20% after fifteen conversions. An in-product referral paying 15% to 30% of referred spend, back as credits. An implementation track where agencies keep 100% of their setup fees plus 20% of referred revenue. And 5% lifetime on any partner you recruit.
Which explains their LinkedIn account completely.
| On LinkedIn | Ads |
|---|---|
| Promoted personal posts | 48 |
| Ads from the company page | 0 |
| Distinct named bylines | 13 |
Their co-founder, their growth lead, and outside creators with B2B audiences. Not one ad from the brand account.
A company page reads as an advertiser. A person reads as a peer.
What actually makes this work
The Creative Factory is the half you can see, and it is genuinely impressive. Ten a day, eleven hooks, two separate art directions.
But it only compounds because of the Performance Machine. The taxonomy makes every one of those creatives readable a year from now. The redirect makes a landing page test free. The credits rail means distribution comes out of gross margin instead of cash.
Volume is copyable. Anyone can shoot ten a day.
The machine underneath is the moat.
Break down your own market
Everything above came from public ad activity read at scale. The Sprites ads library does this for any advertiser, and creative analytics does it for your own account — every live ad, the hooks, the landing pages and what changed this month.
More: the best Facebook ad spy tools and Facebook Ad Library alternatives.