| 2026 | WilowProduct & Growth | Creative analytics for Meta advertisers. | ProductGrowthMeta AdsAI |
| 2025 | FramerGrowth | Managed a multi-six-figure ad spend across Google, Meta, YouTube, LinkedIn and Reddit. | Google AdsMeta AdsYouTubeLinkedIn Ads |
| 2024 | Hoxton CircleMarketing Director | Website migration, SEO and outbound email. | SEOSite migrationOutbound |
| 2023 | Kits.aiGrowth | Rebuilt Google Search ads and scaled the budget 10x. Later acquired. | Google AdsSearch |
| 2022 to 2024 | General AssemblyLecturer | Taught 10-week digital marketing courses in New York. NPS in the top 5% of courses. | TeachingPaid media |
| 2022 | WPPContractor | Worked on the Nestlé Meta and Twitter accounts. | Meta AdsX Ads |
| 2014 to 2021 | CroudInternPaid Search ManagerClient Strategy ManagerSenior Biddable ManagerAssociate Director, BiddableClient Strategy Director | Helped grow the US team from 4 to 50, winning DKNY, The Athletic and AMC Networks. | Google AdsSEOStrategyTeam lead |

Wilow
trywilow.comCreative analytics for Meta ads. See what is working in your own account and your competitors'.
Clerk
Meta
OpenAI
PolarMeta Ads Library tool
trywilow.com/meta-ads-librarySearch any brand and see the Meta ads it is running. One dataset, four surfaces.
Meta
VercelAd Index
trywilow.com/ad-indexMeta ads benchmarks by industry, rebuilt from live ads each week.
Meta
Vercel
Webflow
Schema.org
SlackAd Studio
trywilow.com/ad-studioPick an ad worth learning from and it makes your own version of it.
OpenAI
Meta
Polar
The Keyword
thekeyword.coA marketing newsletter and site. Agents do the mechanical work, people make the calls.
Beehiiv
Webflow
LinkedIn
ClaudeLark
github.com/bkoleo/larkFree Mac dictation app that also records and transcribes meetings, entirely on your machine.
Tauri
Rust
NVIDIA ParakeetOutbound email
A brand's public ads become a personal report, then the system finds the right person and sends it.
Pull the adsA company's ads from Meta's public Ad Library.
A second call checks each label; a person settles what it cannot.
Build the reportOne deck per company, stamped NOT FOR SEND until reviewed.
Make sample adsWhere the opening is a creative one.
Find the ownerA research agent proposes named owners, in priority order.
Find the addressA finder; an unverified address is stored as a guess.
Nothing mails anybody until I approve it.
Send and watchA reply, a bounce or an out-of-office stops the follow-up.
Meta
Claude
OpenAI
Hermes Agent
Kitt
AgentMailWhat went into it
- A pull is a floor, never a total, so no report says it covers a company's whole library.
- Ads are labelled on six dimensions, and a second call is told to refute each label. What it cannot settle goes to a person.
- A tokenised link per prospect joins the email to the visit.
- Ten inboxes across three domains warm each other on an eight-week ramp from five sends a day to thirty.
- The follow-up is armed as a one-shot job that reads the thread first and halts if it cannot read it. Sends log themselves, and a missed send raises an alarm.
Internal knowledge base
An agent keeps Wilow's product knowledge base true to what actually shipped.
Read what shippedMerges to main across the three Wilow repos.
Match to the specEach merge matched to its task by branch name.
Meeting notes explain why a change was made.
Scan team chatThe team channel since the last run adds context.
Rewrite the KBOne product-doc section per user-facing feature.
Publish team wikiA write deploys the team wiki in minutes.
Correct the websiteKeeps trywilow.com honest about what the product does.
GitHub
ClickUp
Slack
Claude
Vercel
WebflowWhat went into it
- Shipped code is the spine of the run. A closed task is not treated as proof that something shipped.
- Decisions are filed separately to a team wiki from four sources: meetings, sessions, Slack and task comments.
- A guard against false success: an early run delegated its work, was killed at ten minutes, and still reported success, so the agent now does the work in its own loop.
- The website sync exists because a 2026-07-26 audit found 9 live pages denying shipped features, on pages carrying about 65% of organic clicks.
Agent fleet
More than 30 scheduled agents across three runtimes, with a check that stops them failing silently.
Nothing scheduled starts while I am working.
Headless Claude runsScheduled Claude Code agents run unattended.
Hermes jobsA second runtime with its own scheduled jobs.
Reversible work ships; one-way actions stop and ask.
Post under own nameHeadless agents post as Claude Operator, never as Hermes.
Docs checked against the runtimes; defects should read zero.
Claude
Hermes Agent
SlackWhat went into it
- Three runtimes, Hermes, launchd and Cowork, each read directly by the drift script.
- The drift script also flags an agent still firing into an instruction file that no longer exists.
- Since 2026-07-26 it asserts rather than reports, and its defect count sits on the operating dashboard.
- The ladder is cut by blast radius and undo cost, not by topic.
- Design rule one: silence is not success. "Nothing needed doing" and "I am broken" must look different.
SEO and AEO
A content standard a page must clear before it publishes, and a checker that reads pages like a crawler.
Source the keywordStart from real queries ranking in positions 5 to 15.
Decide the page is worth writing before writing a word.
Fan out the queryAbout 50 sub-queries, consolidated to 20 to 25 targets.
At least one thing no top-10 result has.
Structured dataA site-wide graph plus page-level and per-item schema.
Weekly markup sweepFridays, both sitemaps checked as one link graph.
Google Search Console
Claude
Schema.org
WebflowWhat went into it
- The checker has 20 rules, from heading structure to canonicals, robots directives, structured data and inbound links. It exits non-zero on a failure, so it works as a deploy gate, not just a report.
- It was built after a page family passed a QA script that only counted headings. Deliberately broken fixture pages prove each rule can fail.
- The standard covers the templates that generate whole families of pages, from the moment the template is written.
- For AI answers, Wilow runs an MCP server that puts Ad Library data inside Claude, ChatGPT and Cursor, plus a noindex page written for agents.