Writing ·
20 minutes, one terminal: from a blank prompt to 12 ranked dinner invites
A Clay Cup run in Berlin, end to end: a 20 minute timer, a terminal and the Clay API, 48 accounts down to 12 ranked invites, and everything that broke.
In April I took part in the Clay Cup qualifiers in Berlin. The format is a 20 minute timer against a live brief: rank accounts, pick the right contact at each one, draft a personalized message, push the result into Clay.
I went in with one goal. Finish with something I would actually send, using only a terminal and the Clay API. I am rusty on the Clay UI, so the real question was how far the agent layer alone could carry me.
Further than I expected. I pasted the brief into my setup, said go, and came out with 12 ranked accounts, 11 verified senior contacts, one flagged edge case and 12 personalized invitations. I touched exactly one thing by hand. Everything else shipped the way the pipeline produced it.
The winner, Alketas Mourtzopoulos, deserved it. He ran a hybrid setup mixing Claude Code with manual work in the Clay UI and a browser extension that let him change settings on the fly. Cleaner output than mine, and clearly the work of someone who knows Clay properly.
The prep
Around two hours, scattered between meetings the day before. The goal was never to memorize Clay. It was to build something that could read any reasonable brief, pull a scoring rubric out of it, and produce a respectable result without me touching anything between “go” and submit.
What came out of that was five stages: read the brief and extract the rubric, pause for one human sanity check, run three divergent scoring passes in parallel, judge the winners, write the copy, push to Clay. Every stage in that sentence exists because something broke in prep.
Test against the brief you fear, not the one you have. I built the first version against a prior year’s brief shape, which targeted people with a fixed rubric. Every artifact quietly absorbed assumptions from that shape: hardcoded scoring weights, hardcoded field names. Three separate passes to get them out, and what finally caught the last ones was running the whole thing against a deliberately off-distribution mock, an account-targeting brief with a completely different entity type. That run surfaced two bugs at once, both of which would have shipped into the live competition. “It works on the happy path” tells you close to nothing.
Under a timer the human gets two jobs. Reading the brief, and working the browser. That is the entire budget. No pasting templates, no editing config files, no picking strategies mid-run. So the trigger is a phrase. I paste a message containing “CLAY CUP”, the agent reads the tournament template on demand and starts stage zero immediately. I wrote that contract into four different places, so pruning any one of them still leaves the trigger alive. Belt and suspenders.
The webhook was append-only. In April the practical way into Clay from a terminal was a webhook that accepts POST, returns 200 for everything including async failures, and offers no read-back at all. Clay infers column types from the first row and locks them. So the first POST has to be right, and a schema seed row is cheap insurance against a column that types itself as a URL when you needed text.
The 20 minutes
The brief: a fictional Berlin sales automation startup wants 12 of 48 conference attendees at an invite-only dinner. Theme, AI agents in sales, hype versus reality. Deliverable, a ranked top 12 with one contact each and a personalized invitation per contact.
The first cut was the interesting part. Of 48 companies in the sheet, 14 were actually B2B SaaS scale-ups matching the stated ICP. The rest were funds, banks, mega-corps, consultancies, a couple of off-vertical names, and one entry that was HubSpot itself. So 14 candidates fighting for 12 slots, which is a much smaller game than 48 rows suggests.
Then three passes over the same pool with different weightings. Textbook ICP fit. Dinner magnetism, meaning who makes the table sharper. Warm signal, meaning who is at peak pain right now. Eleven candidates showed up in all three passes. When the overlap is that strong the judge call is trivial, and you learn something a single ranked list would have hidden: which picks hold no matter which strategy is right, and which only hold if one of them is.
Twelve contact enrichments fired in parallel came back in about 15 seconds. Eleven returned real CROs or VPs of Sales with verifiable profiles. The twelfth was an M&A led rollup with no such role in the org, so the agent flagged it as the weak link and I kept the flag in the submission instead of quietly swapping in a lower ranked account.
Total agent time was around 12 minutes of the 20 minute window, at roughly 240 Clay credits. The other 8 minutes were me reading the brief, reviewing output, and cleaning up a duplicate push by hand.
The subject lines
The message bodies were good on the first pass. The subjects were not. “12 revenue leaders, one dinner at ARRtist”. “You, 11 other CROs, one dinner”. Marketing voice, not dinner-invitation voice.
I said so, and 30 seconds later I had 12 rewritten subjects that read like a person inviting a peer to dinner. Real invitations do not sell the event in the subject line. They name it and stop. Those 30 seconds are what I point at when people ask what actually changes.
What I would fix
The push script appends rather than replaces, so pushing twice left me deduping rows by hand in the UI. Email enrichment fired but was never polled back, so the export carried blank email columns. And I should have biased the ranking toward DACH based contacts, because the dinner was in Germany and several of my winners sat in New York, London and Boston. That one was a prompting miss. Easy to fix next time, hard to catch inside the timer.
Why the shape matters outside a competition
Outbound testing used to work like this: write two variants, wait two weeks, pick the winner, ship. Four to six tests a quarter if you are disciplined about it.
A scored tournament at 12 minutes a run means twenty divergent strategies against the same pool in one afternoon, each one ranked, with a clear read on which picks survive every strategy and which depend on one being correct. My three passes cost about 90 seconds of wall clock. Ten passes would have cost four minutes.
The same applies to copy. Writing the variant is no longer the bottleneck. Having enough traffic to test what you wrote is. That is a far better problem to own.
If you are building something similar on your own stack, or you want to compare notes on the tournament shape, reach out.