The situation
Creators reached Oolka through agencies, seven in August and twelve by October, each with its own sheet. When I audited them in August, there were 8 sheets, 48 tabs and 4,810 rows, covering 2,019 different creators.
Nobody could see the whole picture. 294 creators sat in two or more agency sheets. 71 got a yes from one agency and a no from another. And agencies kept pitching creators we had already turned down: in one September queue, 168 of 462 pitches were creators rejected before.
The diagnosis
The problem was that the team had no memory.
A master list goes stale the day after you make it. So the fix had to read every agency’s sheet on its own, every day, and forget nothing, including what agencies deleted.
What I built
- One memory. The Vault reads every agency’s sheet twice a day, and adding a new agency takes one line. It matches creators by handle, then phone, then name.
- Nothing forgotten. Rows agencies delete stay in the Vault. A re-pitch shows up greyed out, marked “Rejected by you” with the date, and it can still be unlocked.
- A first screen. Every new pitch gets a call from Must do to Never. The team decides in the Vault, and the decision is written into the agency’s sheet under that person’s name.
- Metrics on demand. The Vault measures a creator through an API only when someone needs it: videos only, the latest 10, median next to mean, pinned posts left out.
- Results flow back. Every morning it reads how each creator’s ads did and adds that to their record.
- Agencies see their own. Each agency gets a read-only page with its own decisions and nothing else.


Deciding what goes in
I tested every metric the team believed in, against our own ad results.
Profile metrics, including composite scores I put together, predicted a winner no better than a coin flip. One signal did better, cost per follower, and I still dropped it:
“I can just quote a super high price for a hit creator, that would make it flawed, no?”
What did predict a winner was a creator’s own track record. So a creator who has already won on our ads is Must do, automatically. When one of my own rules did no better than chance, I retired it, even though it was flagging 41% of the queue.
Built for the people using it
Most of the design came from watching how the team actually worked. In my own words, from the build:
- “Sometimes they just want to search whether they have collaborated with the creator before or not.” So looking a creator up is instant and free. Measuring them is a separate button.
- “Maybe I am just testing how it works and I am not actually taking a call on it.” So every decision can be undone.
- “We keep the deleted stuff in our vault, it gives us more context.” So nothing an agency deletes is lost, and a re-pitch is caught.
- “Not all ads can be hits realistically.” So there is no “never book again” label for one bad ad.
- “This acts as a first screening of the creators, my team will go further.” So the Vault triages, and people decide.
The result
- Speed
- 42 in 15 minOne teammate cleared 61 pitches in an afternoon, 42 of them in 15 minutes
- Track record
- 665creators now carry their own ad results
- Checks
- 143automated checks run every morning before anyone opens it
- First version
- One eveningfrom the first audit to a working lookup
How it was built
I built the Vault and Ads Radar, below, with Claude Code. I wrote the requirements, set the rules, tested them against our results and decided what shipped. The code was written with AI. The judgement about what the team needed was mine.
Also built: Ads Radar
A second tool, kept separate on purpose.
Ads Radar follows the ads of 15 competitors every day. It shows what changed, what is working, and what to make next: hooks, formats and scripts, with a library of every brand’s ads behind it.
When it got too dense to read, I cut it from 32 pages to 18, and the words on screen by 43%.

