Hey all, happy Friday,

Quick housekeeping up top: I skipped last week for the holiday, but I did write the preamble, so the family report below is from the week of the 4th. A week old, still accurate. The foot you are about to read about is, unfortunately, still broken, but Maddie is an absolute champion.

The Saturday before the 4th, we went to my cousin’s wedding, which was a genuinely lovely day right up until it became an urgent care story. Some context: in my family, we are known for dancing the hardest. People say it out loud at weddings, “the Sartorius family is a fun one,” the way you’d describe a dog that’s friendly but needs to be watched. So, a few specialty cocktails in, all of us are ripping up the dance floor when Maddie jumps, lands wrong, and thinks she broke her foot. She kept telling us “I think my foot’s broken,” and we all said “no way, no way, you’re fine,” which is the kind of instant, unwavering support I bring to a marriage. We went to the after-party. We eventually called it.

The doctor subsequently confirmed that it was a dancer’s fracture, which is apparently extremely common when you’re dancing (shocker), and my brother-in-law pointed out that in some cultures this is basically a badge of honor.

James sat out the wedding at home with Papa and Grandma, who used the time to buy him shoes from a guy who claims to sell shoes to Mick Jagger’s wife (or some other celebrity I can’t remember at the moment). We’re all a little skeptical of the claim, but the man was confident that the shoes he was selling for James would bear fruit (or steps).

I kid you not, the second those shoes went on, the kid started walking everywhere. I guess when you try sometimes, you can get on your feet.

A few days later we migrated to Rhode Island for the summer and moved directly into the heat dome. We bought a kid-sized pool at Costco that is technically advertised for dogs, which is fine, because James thinks he’s a dog. He, Linus, and my in-laws’ dog Scout have been rotating through the pool and the hose all week. Linus loves Rhode Island, but even he can only do two or three rounds of fetch before he’s flat in the shade doing what our household calls steam-engineering, which is nonstop panting with the cadence of a freight train going up a hill.

One piece of actual news before the content: Dara Denney and I are filming two episodes together for her YouTube channel. The first is a proper deep dive on building landing pages with AI. The second is this exact discipline: using AI to figure out which personas, angles, and emotions are actually working in your account, and then finding the net-new ones worth testing. The next two issues will pair with those episodes, with the deeper context and the marketing files to run everything yourself. Keep an eye out, if only to watch me learn what my hands do when a camera is pointed at them.

Anyway,

Two weeks ago I showed you the backward pass: wiring your Meta account into Claude through the Marketing API and letting it grade everything you’ve ever run by persona, angle, and emotion. If you missed it, it’s here: https://www.selfgen.co/p/i-had-an-ai-grade-18-months-of-our-ads-the-gold-wasn-t-the-winner and I need to be annoying about this part: this week does not work without it.

The Meta API setup from that issue is the prerequisite. Do that first. This email will still be here. (The setup is 30 minutes. 25 of them are Meta deciding whether you deserve a token.)

Because that system hands you two maps. A map of what’s proven, and a map of the white space, every persona and angle and emotion you have literally never run. And I ended that issue saying the white space is the gift, the machine showing you exactly where the unexplored edges are.

Here’s the problem that issue didn’t solve: the white-space map is huge. Dozens of combos you’ve never tested, all rendered with the same confidence, and no way to know which empty cell has a crowd standing in it and which one is empty because nobody on earth wants that ad. The map tells you where you’ve never been. It cannot tell you which of those rooms has money in it.

Reddit can.

The thing I had to check

Quick rewind. In that same issue I told you about the 30-minute session where Janet and I closed the dashboard and riffed our way to a coffee-occasion angle for a protein brand (fwiw that angle is now performing quite well), off the plain observation that people already put protein in the coffee they drink every morning. Human forward bet, no data behind it, felt great about it, wrote a whole newsletter about it.

Then a thought started following me around: if that angle was such a good bet, somebody, somewhere, was probably already saying so out loud. So I built the system that checks. I pointed a scraper at the subreddits where this brand’s customers actually live and pulled the threads. The coffee angle was sitting right there. Hundreds of people deep in the comments, trading ratios, complaining about clumping, evangelizing the habit to strangers. The angle Janet and I were proud of inventing in 30 minutes had been sitting on Reddit the entire time, fully formed, in the customers’ own words.

First reaction: mildly insulting. Second reaction: this is the whole missing piece. The humans made the bet, and the internet had already seconded it. Which means you can run that check systematically, before you spend a dollar, across every cell of your white space. That’s this week’s system.

Step 1: pull the threads with Apify

Apify is a marketplace of scrapers. You want the Reddit scraper actor (I use practicaltools/apify-reddit-api). Free account, pay per result, a full pull for one brand runs a few dollars. You feed it either of two things:

The audience’s subreddits. For the protein brand that’s r/mealprep, r/EatCheapAndHealthy, the GLP-1 communities, the gym ones. Sort by top this month. If you don’t know the subreddits, ask Claude where your customer complains on the internet and it will hand you a starter list in ten seconds.

Problem-language searches. This is the one people get wrong, so here’s the rule: search how customers complain, never how marketers pitch. “no time to cook dinner,” not “convenient meal solution.” “whitening strips hurt my teeth,” not “sensitivity-free whitening.” You’re hunting for pain in the wild, and pain doesn’t use brand language.

Export title, subreddit, upvotes, comment count, and the top comments. A handful of runs covers everything. The whole scrape took me less time than the Meta token approval did, which says more about Meta than about Apify.

Step 2: tag the threads with the same taxonomy as your account

This is the step that makes the whole thing work, and it’s one sentence: tag the Reddit threads with the exact same persona, angle, and emotion labels you used to tag your ad account. Same tags, or the maps can’t talk to each other. If your account tagging says “busy professional, convenience, relief,” the thread tagging has to speak that dialect too, otherwise you’re diffing apples against a support group for oranges.

Paste your export into Claude with this:

You are tagging Reddit threads for an ad account. Use this exact taxonomy (the same one used to tag the ad account’s history):

PERSONAS: [paste your persona list from the persona-tagging output]

ANGLES: [paste your angle list]

EMOTIONS: [paste your emotion list]

For each thread below (title, subreddit, upvotes, comment count, top comments):

  1. Tag persona, angle, emotion. If a thread clearly expresses something that is NOT in the taxonomy, do not force a bad match. Add it as NEW: <name>.

  2. Score demand intensity 1 to 5. High comment volume, recency, and first-person pain language score high. Upvotes alone do not.

  3. Pull the single best verbatim quote, under 25 words, with subreddit attribution.

  4. Output a markdown table sorted by intensity, then a separate list of every NEW tag with the threads behind it.

Two details in there that matter. The NEW tag escape hatch is where the best stuff shows up, because the most interesting demand is usually the demand your taxonomy didn’t have a word for yet. And intensity is scored on comments, not upvotes. Upvotes are a drive-by. Comments are people who cared enough to type, and the comments are where the customer language lives.

Step 3: the diff

Now you have two maps in the same language. Your account map: everything you’ve run, proven or not. The Reddit map: everything the audience is loud about, ranked by intensity.

One more prompt:

Here are two maps built with the same taxonomy.

MAP A (my account): every persona x angle x emotion combo we have ever run, flagged proven or unproven. [paste from the persona-tagging output]

MAP B (Reddit): the demand map from the thread tagging, with intensity scores and quotes.

Compare them and give me three lists:

LOUD AND PROVEN: strong in both maps. Keep scaling, rotate executions.

TESTED AND QUIET: we keep running it, Reddit barely mentions it. Question these.

LOUD AND NEVER RUN: intensity 4+ on Reddit, zero history in the account. This is the test list. Rank by intensity. For each: the persona, the angle in the customer’s own words, the emotion, and the best verbatim quote as a starting hook.

Rules: nothing makes the never-run list without at least 3 separate threads behind it. Flag anything loud on Reddit that is non-compliant or off-brand before I fall in love with it.

That never-run list is the entire reason this newsletter exists. It’s your white space, but ranked by how loudly the internet is already asking for it. Not “you’ve never tested a coffee occasion” as a shrug, but “you’ve never tested a coffee occasion and here are 40 threads of people describing it to each other in first person.”

What it actually returned

On the protein account, the never-run list came back with 23 combos the account had never touched, and the diff did three things. (Same rules as always: real account, anonymous, no performance numbers, the research slice only.)

First, it validated the human bets. The coffee occasion came back at the top of the list, which it should have, because we’d already found it the artisanal way. Same for the sensitive-stomach identity cohort, except the diff ranked it higher than we had it, because the thread volume was bigger than our gut feel.

Second, the number one angle on the list was one we’d flat-out missed entirely: flavor burnout. People three years into a protein habit who are so tired of chocolate and vanilla they’re writing recipes in the comments like prisoners passing notes. Nobody on this account, human or machine, had ever briefed an ad about boredom. It was loud, it was everywhere, and every one of us, me very much included, had scrolled right past it on our own personal feeds for years. Hence the subject line.

Third, the tested-and-quiet list stung. A couple of combos we kept running because they were “safe” barely exist in the audience’s actual conversation. The dashboard never would have flagged them, because they’re not failing hard enough to fire anyone. They’re just quietly beside the point. I have defended at least one of them in a meeting. Confidently.

And the quotes riding along with each angle are half the value. You’re not just getting “test flavor burnout,” you’re getting the hook already written in customer language, with a receipt. Keep the thread URLs with your briefs. When a client asks why you want to run an ad about being bored of chocolate, you show them 300 comments.

What this won’t do

Honest limits, as always. Reddit skews. It over-represents power users, complainers, and people with time to post, so intensity is a signal, not a census, and you still have to be the adult in the room about whether 400 angry comments represent your buyer or just Reddit being Reddit. Some categories barely live there (if you sell to 55-year-old QVC shoppers, the threads are thin and you’ll want reviews and Facebook groups instead, same recipe, different pond). Verbatim quotes are research, not ad copy, and definitely not claims, so let compliance meet the receipts before the receipts become headlines. And the diff is only as good as the taxonomy discipline: if you tag the account one way and the threads another, you’ll get a very confident comparison of two things that don’t match. The machine will not warn you. It never does.

TLDR

• The last issue’s Meta API system hands you a white-space map, every persona, angle, and emotion you’ve never run. This week ranks it. The setup from that issue is required homework.

• Scrape Reddit with Apify (practicaltools/apify-reddit-api): the audience’s subreddits plus problem-language searches. Search how customers complain, never how marketers pitch.

• Tag the threads with the exact same taxonomy as your ad account, score intensity on comments not upvotes, and keep an escape hatch for NEW tags. Both prompts above, paste-ready.

• Diff the maps. Loud and proven: scale. Tested and quiet: question. Loud and never run: your ranked test list, each angle arriving with a verbatim customer quote as the starting hook.

• The forward bet is still yours to make. Reddit just tells you which empty rooms already have a crowd in them.

Reply and tell me the subreddit where your customers actually complain. Not the one about your category, the weird adjacent one. I’m collecting these too, and the replies to the last issue about untested angles were genuinely great, so you’re building quite the dataset for me.

Have a great weekend,

Will

Recommended for you

View all
caret-right