Skills/How GTM Vault is run / Publish
Episode write-up format
Drafts or audits an episode write-up against one published structure, so sixty episodes read as one library.
Download gtm-vault-episode-format.zip
Needs: A transcript or recording notes. Substack and YouTube. Or run it without installing: connect the GTM Vault MCP and ask Claude to run gtm-vault-episode-format.
Published by GTM Vault (gtmvault.co) as part of How GTM Vault Is Run. Swap the show names, links and templates for your own.
Two shows, two different published structures. Never borrow one show's structure for the other. Derived from the actual published posts: GTM 47 (Mark van Oppen, SecureAuth), SMYS 7 (Angelo Quiambao, Intellistack), and GTM 49 (Hao Sheng, expertise.ai), plus house decisions made on 2026-08-07, 2026-08-14, 2026-08-27, 2026-08-28, and 2026-08-29. Superseded for podcast structure on 2026-09-15: the host reviewed the GTMnow episode post format and adopted it for the podcast show. The GTM 51 test send of 2026-09-16 (Olivier Roth, The Swarm) is the locked reference for podcast section order, links and buttons. GTM 49 remains the reference for voice density only. Coffee Walk 1 is the first Coffee Walk in the same shape.
Universal rules (both shows)
Title. Always prefixed with the episode tag and a pipe: GTM 48 | The Claim, SMYS 7 | The Claim, Coffee Walk 1 | The Claim. This is a standing house rule and it survived the 2026-09-15 switch to the GTMnow layout: the prefix was dropped for one day to match their titles and restored on 2026-09-16. Never drop it again. Title Case. No terminal period, ever. The title makes a structural claim, it does not describe the episode.
Subtitle (Substack subtitle field). Sentence case, no terminal period, ever. Podcast, from 2026-09-15: the guest line, "[Guest Name], [Title] at [Company]", not a claim. SMYS: one clause preferred. The SMYS pattern is "Why X, not Y, is the real constraint, and how [Guest] [does the thing]". The company name normally stays out of the subtitle and lands in the guest paragraph, with one exception: when the episode is a vendor arguing their own architectural bet, name the company so the reader knows whose bet it is before reading 3,000 words of it.
Numbered and bulleted item convention (2026-08-27, GTM 49). Every numbered or bulleted item in Key takeaways, Frameworks from the episode, What to do this week, and any SMYS takeaways block follows one shape: a bold headline ending in a terminal period, with the body prose continuing on the same line, never on a new line below the headline. The period is what separates claim from evidence, and the inline shape is what Substack renders after paste anyway. What varies by section is only the headline form: Key takeaways get a full-sentence argument, Frameworks get the Title Case framework name, What to do this week gets an imperative action. The no-terminal-period rule applies to the post title and subtitle field only, never to these item headlines. Do not leave a bold framework name stranded on its own line above its paragraph. Exception from 2026-09-15: the podcast Key takeaways in the GTMnow-shape format put the bold headline on its own line with the paragraph below, matching the source format; SMYS blocks keep the inline shape.
Standing header, first line of every post (SMYS and essays; retired for podcast posts on 2026-09-16, where the in-body subscribe block carries the positioning line instead, see the podcast structure):
Hi, it's [Host Name]. Welcome to GTM Vault, a breakdown of how high-growth companies design, test, and scale revenue architecture. Read by [your audience proof point] building GTM systems that compound.
Structure set 2026-08-07. Always take the current audience figure from gtm-vault-positioning at draft time, not from this skill or an older post. Older published posts may still show a previous version with a waving-hand emoji; do not copy that, the emoji violates the house rules.
Banned everywhere: em dashes, emojis, exclamation marks.
Names. Never trust an auto-transcript's spelling of a person's name. The recording tool rendered Quiambao as "Kimbau" and Aggarwal as "Agarwal" in the same week. An earlier human-written draft, a LinkedIn URL, or the guest's own signature all outrank the transcript.
No Turkish letters or other diacritics in names, anywhere, on any surface (2026-09-30). Fold every name and place to plain letters: o and u for the umlauted forms, c for c-cedilla, s for s-cedilla, g for g-breve, i for dotted and dotless i, so Karakoy, not the Turkish spelling. This is not a transcription question, it is house style, and it holds in the post title and body, the Substack subtitle and SEO fields, the YouTube title, description, chapters and tags, thumbnails, captions and the transcript PDF. The reason is practical on the surfaces that matter most: almost nobody types the diacritics into a search box, and they render inconsistently across email clients and platform metadata fields. Apply the fold when correcting a mangled transcript spelling, rather than "correcting" it into the diacritic form. Ask the guest how they want their own name written only if they raise it.
Figures. At least one, ideally two branded diagrams per post, in the GTM Vault visual language (bg #0b0b0a, card #141412, line #2a2a26, gold #c8a832, coral #e0663c for the constraint, text #f2f0e9, muted #a3a099, dim #77746d, flat, no gradients). Reference in the draft as:
**Figure N.** *Caption naming what it shows and the structural implication.*
Each figure carries a claim the prose already makes. Include a one-line "What it shows" caption inside the figure itself. The caption under the figure must not repeat that line (added 2026-09-12, after both GTM 50 figures shipped to a test send with the sentence printed twice, once inside the image and once beneath it). The in-figure line states what the reader is looking at; the markdown caption adds the implication in one short sentence and stops.
Branding on figures is fixed and never varies by episode (2026-09-30). Every figure for every show uses the same palette, the same flat treatment with no gradients, the same Lato type, the same FIGURE N label in gold above the headline, and the same "WHAT IT SHOWS" rule and line at the foot. Gold is the asset or the positive encoding, coral marks the constraint, the failure or the number that has not moved, and nothing else takes an accent colour. Build at 2400px wide and keep the SVG source beside the PNG. Do not restyle a figure to suit a particular episode's subject; the figures are a set and they are recognised as one. Reuse one figure build script per episode (cairosvg, Lato, SVG plus 2400px PNG) rather than starting a new one from scratch.
Deliverables with every write-up, always (2026-09-30). A draft is not complete when the markdown exists. Every episode ships these files to the host in the same turn as the write-up, as actual files they can open, not as filenames referenced inside the notes block:
- The write-up markdown.
- The transcript PDF, built with your transcript PDF script from the cleaned transcript, named
GTM-Vault-Podcast-NN-Guest-Name-Transcript.pdf. This is what goes in the "Download the transcript" file block, so it has to exist before the post can be assembled. - Both figure PNGs, rendered so the host can see them before publishing rather than taking the filenames on trust.
This rule exists because the figures and transcript PDF for one episode had been built two weeks earlier, were sitting in the workspace, and were named in the draft but never handed over, so it read as though nothing had been produced. Building an asset and mentioning it is not delivering it. If an asset genuinely cannot be built (no photo for a thumbnail, no published cut for timestamps), say which one and why in the same message, rather than leaving a filename that points at nothing.
Dividers. Use Substack's native divider only. Never decorative divider images: each image divider carries roughly 3.4KB of markup, and nine of them added ~31KB to GTM 49 and triggered the Gmail truncation warning on a 1,800-word post. Swapping them for native dividers halved the post weight.
Timestamps (2026-08-28, GTM 49; SMYS only from 2026-09-15, the podcast uses the Episode highlights layout in its own section). Maximum ten. Parenthesized deep links to YouTube, one per line, single-spaced (no blank lines between entries), and the whole list wrapped in a blockquote so it renders as a grey utility block, visually separate from the prose. First entry at 0:00 with no t parameter, the rest with &t=Ns:
(0:00) Label (5:32) Label (11:17) Label
where each timecode is a link: ([5:32](https://www.youtube.com/watch?v=VIDEOID&t=332s)). This replaces the older bracketed, blank-line-separated format from GTM 47. A timestamp list is navigation, not prose; the tight column of gold timecodes scans in one pass and the grey block signals scan-or-skip. Check the email preview in dark mode, where tinted blocks occasionally go muddy.
Pull timestamps from the final published cut, never from a working transcript, and verify the runtime against the live video. (Hardened 2026-09-12 after GTM 50.) The edit is frequently a restructure, not a trim: the GTM 50 cut opened on a two-minute guest montage that did not exist in the 33:08 raw recording at all, ran 28:42, and every raw timecode after 0:00 was wrong. The last one, 29:52, fell past the end of the video and silently failed to render as a chapter. No linear shift or scaling fixes this, because cuts are not evenly distributed. If the published video has no auto-subtitles yet (scheduled premieres report zero length and generate no caption track until they go live), transcribe the exported cut directly and locate each question in it. Never ship raw-recording timecodes on the assumption that someone will re-point them later.
Previous episodes. A short block at the end. Embedded Substack post cards look better but are markup-heavy and push the email toward Gmail's clipping limit. If Substack warns "Your post may be truncated in some email clients", cut the cards to one or convert them to plain links. Word count is not the problem, embedded cards and image dividers are.
Email length. Always check the email preview before scheduling, not just the web preview. Gmail clips at roughly 102,400 bytes of HTML and shows a "[Message clipped]" banner. When auditing a test send, measure the HTML part in bytes rather than eyeballing it: GTM 50's test came in at 107,919 bytes, 5.5KB over, with only the Restack button, copyright, address and unsubscribe link falling below the cut. Editorial content surviving is not good enough, because the banner looks amateur and it pushes the unsubscribe link behind an extra click on a large send. The heaviest editorial elements are full-width w_1100 images, so the cheapest fix is usually dropping a duplicated cover image from the body rather than cutting prose.
Social preview. Set the File Settings card, or Substack grabs the first in-post image, which is usually a dark diagram. See the Substack card system under Thumbnails. Title and description fall back to the post title and subtitle, which is fine for the card itself but not for the SEO fields; see SEO fields below. Edit the social preview description by hand: Substack pre-fills it with "Listen now (N mins) |" plus the subtitle; replace with a hook under 120 characters.
SEO fields (added 2026-09-12). The Substack SEO title and SEO description are separate from the post title and subtitle, and they do a different job. The post title carries the structural claim; the SEO title carries the phrase someone would actually type. Same logic that makes the YouTube title differ from the Substack title. Keep the SEO title under 60 characters and put the searchable terms in it. For the SEO description, Substack pre-fills podcast posts with "Listen now (N mins) | " followed by the subtitle: replace it. That prefix spends the first twelve characters on boilerplate in the one field where the opening words carry the click, and it says listen when a large share of the audience will watch. Write 150 to 160 characters leading with the hardest number or claim in the episode. Post URL slug: gtm-NN-three-or-four-words (GTM 51: gtm-51-linkedin-audience-not-network).
GTM Vault Podcast (GTM N) structure
One hour, prepped and scripted, distributed to Substack, YouTube, Spotify, and Apple. Canonical structure locked 2026-09-16 from the GTM 51 test send (Olivier Roth, The Swarm; the GTMnow-shape format adopted on 2026-09-15, then edited in the Substack editor until the host called it done). The section order below is the order in that email, not the order in any earlier draft. Target 1,400 to 1,800 words.
Canonical links (use exactly these; never a bare channel link where the subscribe-confirmation form is specified):
- Episode video:
https://www.youtube.com/watch?v=VIDEOID(deep links&t=Ns); until the video is live, the YouTube links point at the channel - YouTube channel:
https://www.youtube.com/@gtmvault; subscribe buttons and the subscribe line usehttps://www.youtube.com/@gtmvault?sub_confirmation=1 - Apple Podcasts show:
https://podcasts.apple.com/us/podcast/gtm-vault/id1752410061(episode link once live) - Spotify show:
https://open.spotify.com/show/5h0ZB5Qx1vv3z1rvf0Jc23(episode link once live) - Host on LinkedIn:
https://www.linkedin.com/in/rickkoleta/(swap in your own) - GTM Vault on LinkedIn:
https://www.linkedin.com/company/gtmvault - Website:
https://gtmvault.co/ - Subscribe:
https://gtmvault.co/subscribe - Guest: LinkedIn profile URL and company site URL, taken from your guest pipeline records or the guest's own signature, never from the transcript
What was kept from the house format on purpose: the GTM N | title prefix, the two branded figures inside Key takeaways, and every rule in gtm-vault-writing (no em dashes, no emojis, no exclamation marks; takeaways as claims, never narration). What was dropped because the format has no slot for it: the restack quote, Frameworks from the episode, What to do this week, Why this matters, and the "This is GTM Vault." sign-off. The standing header line ("Hi, it's [Host Name]...") is retired for podcast posts from 2026-09-16: the in-body subscribe block (item 4) now carries the positioning line in its place. The standing header still applies to SMYS and essays.
Sections in order, exactly as GTM 51 shipped:
-
Substack audio player. Renders automatically above the title once the audio file is attached. Nothing to write in the body. The Apple and Spotify title is set in your podcast host, see Audio metadata below.
-
Title.
GTM N | The Claim, Title Case, no terminal period. Prefer the guest's own sharpest line when it is counterintuitive and specific (GTM 51: "LinkedIn Is Your Audience, Not Your Network"); a parenthetical extension is allowed but never a promise the episode does not keep. The episode number also appears in the Who you'll learn from paragraph ("joins GTM Vault for episode N"). -
Subtitle field. The guest line, not a claim: "[Guest Name], [Title] at [Company]". Sentence case, no terminal period.
-
In-body subscribe block, first thing in the body, set as Heading 4 with the button under it. (Level pinned 2026-09-26. GTM 51 shipped it at H3 and the rule said only "a heading", so the level drifted between episodes; H4 is now the standard for every show. Older posts keep whatever they shipped with.) H4 is deliberate: the section headings below it are H2, so H4 carries weight without entering the outline as their peer. Never set this block in italic. Italic is already the template's signal for the series footer, figure captions and the SMYS line under the embed, so italicising the one CTA above the fold tells the reader to skim the line you most want read. If it ever needs to read lighter, the alternative is normal text set bold, never italic. Copy (trimmed 2026-09-28): "GTM Vault is a breakdown of how high-growth companies design, test, and scale revenue architecture." One sentence. The old tail, which restated the subscriber count and said "Join them.", is retired, because it duplicated the email header. Button: a static button labelled Subscribe on
https://gtmvault.co/subscribe, directly under the line. This block replaces the old standing header. The subscriber count does not appear here at all, so nothing in this block needs updating when the count changes; take the count from gtm-vault-positioning wherever else it appears.Never use
%%checkout_url%%as the button URL, on any show, on any free post. That token is not a static button: Substack renders it as its adaptive SubscribeWidget and picks the label from the reader's own state. GTM 51 and GTM 52 both shipped it. In the GTM 52 send it came through asclass="subscribe-widget is-signed-up"labelled "Upgrade to paid" pointing at checkout, because every email recipient is by definition already a subscriber, so in email the block can never be a subscribe CTA and is structurally always a paid upsell. On the web it renders "Subscribed" to a signed-in reader. Only a static URL gives every reader the same "Subscribe".Why the line was trimmed and the button kept (2026-09-28). The duplication was real but partial. The free-subscriber email header carries the audience number and the subscribe ask. Only the tail of this block echoed it; the first sentence appears nowhere else. The decisive fact is that Substack email headers are email-only and do not render on the web post (verified on the live GTM 52 page). So in email the header carries the number and the ask, and this block carries the positioning; on the web this block is the only thing doing either job, which is why cutting the sentence outright was rejected. Trimming the tail removes the duplicate from the email and costs the web post nothing.
-
Who you'll learn from paragraph, no heading. One paragraph: a hook in the reader's world, then the guest's full name linked to LinkedIn and the company linked to its site, then "joins GTM Vault for episode N to explain why..." naming the structural argument. Roughly 90 to 120 words.
-
### About [Company], as a blockquote. Four sentences sourced from the web, not the transcript: what the company does, founding year and city and founders, scale (profiles, customers, users), funding with lead investors and total raised, and any acquisition. Flag any inferred figure (founding year is the usual one) in the notes block for guest confirmation.
-
Cover image. The YouTube embed (renders as the thumbnail with a play overlay, linked to the video). Set the Substack social card separately in File Settings (see Thumbnails); do not rely on this image for the card.
-
## Watch or listen now across YouTube, Apple Podcasts, and Spotify. An H2 whose three platform names are links, YouTube first, then a Substack Share button directly beneath it. Native divider is optional here; GTM 51 ran without one.
Heading level and alignment are pinned: H2, left aligned, on every show (2026-09-30). Not H4, and not centered. It had drifted to a centered H4 because it sits under the video embed and reads like a caption for it. It is not a caption, it is a section, and every other section in the post is an H2 left: Download the transcript, Episode highlights, What you'll learn, Key takeaways, Previous episodes. Dropping this one to H4 removes it from the heading outline and leaves a hole in the only structure a skimming reader has. It also puts a second H4 in the post at a different alignment from the in-body subscribe block, which is the exact drift that forced the H4 pinning in item 4.
The two H4-looking blocks are doing different jobs and must not be levelled with each other. Item 4 is H4 left because it is not a section, it is the positioning line standing in for the retired standing header, and it sits below the H2 sections rather than beside them. This item is H2 left because it is a section. If the centered look under the embed is wanted, center the Share button only, which is already centered, and leave the heading H2 left. That keeps the outline intact and still reads as anchored to the video.
-
## Download the transcript. An H2, then the transcript PDF attached to the post with Substack's file block (paperclip in the toolbar), which renders a card with a Download button. No emoji in the heading (GTM 51's test send carried one; remove it before the real send). The PDF is the branded build from a cleaned transcript, named
GTM-Vault-Podcast-NN-Guest-Name-Transcript.pdf, produced with your transcript PDF script and a per-episode config, from a cleaned copy of the transcript (speaker labels fixed, proper nouns corrected, pre-edit asides and dead air removed, recording timestamps kept as section markers, speech otherwise as spoken). -
## Episode highlights. Ten timestamps maximum (cap set 2026-09-16; the YouTube chapters are the same ten), one per line, each
(mm:ss) Labelwith the timecode deep-linked, first entry at 0:00 with no t parameter. Highlights come before What you'll learn in this format (GTM 51 order). Pull from the final published cut and verify against the live runtime: GTM 51's raw transcript ran 47:06 and the published cut ran 36:28 with a 1:33 opening montage, so raw timecodes were wrong past 0:00. Optionally one video still directly under the list (GTM 51 used a split-screen frame of host and guest), with a one-line caption; one still in the post is enough, do not add one per takeaway. -
## What you'll learn: (with the colon). Eight to ten one-line bullets, each a self-contained claim leading with the mechanism or the number, no terminal period, fifteen to twenty-five words. Breadth here, depth in Key takeaways; no word-for-word repeats.
-
## Key takeaways. Exactly five, numbered. Bold headline sentence ending in a period, then three sentences, 60 to 90 words (shortened 2026-09-16 from the earlier four-to-seven-sentence paragraphs). Headlines make an argument; the sentences carry the numbers. Two branded figures live here, each directly under the takeaway whose claim it carries (Figure 1 the mechanism, Figure 2 the cost or numbers), with a one-sentence caption that states the implication and never repeats the in-figure What it shows line. Build with your figure script (cairosvg, Lato, SVG plus 2400px PNG) in the house palette.
-
### [Guest Name], two lines: "LinkedIn: URL" and "[Company]: URL", bare URLs as link text.
-
### [Host Name] (Host), two lines: "LinkedIn: [host LinkedIn URL]" and "Newsletter: https://gtmvault.co/" as a plain link (the publication embed card was dropped for email weight on GTM 51).
-
### GTM Vault, three lines: "LinkedIn: https://www.linkedin.com/company/gtmvault", "YouTube: https://www.youtube.com/@gtmvault?sub_confirmation=1", "Website: https://gtmvault.co/".
-
### The GTM Vault Podcast - subscribe on your platform of choice. One paragraph: "Subscribing on YouTube, Apple, or Spotify is what tells each platform to put the next episode in front of more operators, which is how the show keeps booking the guests worth an hour of your week." Then three Substack buttons: Subscribe on YouTube (sub_confirmation URL), Subscribe on Apple (show URL), Subscribe on Spotify (show URL).
-
## Previous episodes include. Up to five embedded Substack post cards of the most recent GTM episodes, then the line "See all previous episodes here" linked to
https://www.gtmvault.co/podcast. Cards are heavy; cut to three or to plain links if the email is over the Gmail limit. -
Italic series footer: "The GTM Vault Podcast is a breakdown of how high-growth companies design, test, and scale revenue architecture. Visit gtmvault.co for more episodes, the GTM Vault newsletter, and Show Me Your Stack."
-
No P.S., no paid upsell in the body. The Substack email header and footer handle the forwarded-reader line and the Pro upsell (see Substack email headers and footers below).
Per-post fields delivered with every draft: SEO title (under 60 characters, the searchable phrase), SEO description (150 to 160 characters, leading with the hardest number or claim), post URL slug, social preview description (under 120 characters), and the YouTube title, description, chapters and tags per the YouTube metadata section.
Email weight on this format. The GTM 51 test send measured 118,463 bytes of HTML, 16KB over Gmail's ~102,400 clip point, with the standard three full-width images plus the publication embed card, the file attachment card, the Share button, twenty deep links and three buttons. Before every send, measure the HTML part of the test email in bytes. Cheapest cuts, in order: replace the publication embed card under "Newsletter:" with the plain URL; cut the Previous episodes cards from five to three; drop the Share button. Do not cut prose or a figure to get under the limit.
Substack email headers and footers. Substack gives six slots: a header and a footer for free subscribers, for paid subscribers on posts sent to everyone, and for paid subscribers on paywalled posts. Each has one job:
- Header, free. The forwarded-reader line: "Forwarded this by a colleague? GTM Vault goes to [your audience figure] every week. Subscribe here." with "Subscribe here" linked to
https://gtmvault.co/subscribe, no button. - Header, paid (posts to everyone). Tell the paid reader what their membership adds and where the paid companion material for this episode lives, then point annual members at their annual-only benefit. One button to book or use that benefit.
- Header, paid on paywalled posts. Frame the post as part of the paid layer and say how to apply it. Same button.
- Footer, free. Name what paid adds, the price as
<your Pro price>(see gtmvault.co/subscribe for the current GTM Vault offer), and the annual-only benefit. Button: upgrade to annual. - Footer, paid (posts to everyone). Remind the member what they have and prompt annual members to use their benefit; tell monthly members they can switch to annual to unlock it.
- Footer, paid on paywalled. One line on who the paid layer is for (operators who install systems, not consume commentary) and the same annual-benefit button.
Never promise an annual-only benefit to all paid readers. Treat the live Substack settings as canonical for all six slots, re-read them whenever the paid offer or price changes, and write any change back here so the skill and the settings do not drift. They drifted once already: a header was edited in Substack and never written back.
Podcast posts require an uploaded audio file. Substack keeps the Continue button disabled until it is attached. The Substack audio feeds the Substack podcast feed and the in-post player; if your Apple and Spotify listings are fed by a separate podcast host, the title and episode number there are a separate pre-publish check (see Audio metadata).
Coffee Walk (test shape, 2026-09-15). Same section order as the podcast with these changes because the show is filmed on location and video-only: the title prefix is Coffee Walk N |; item 8 reads "Watch now on YouTube" with the single link; item 16 is "### Coffee Walk - subscribe on YouTube" with one button; and the italic footer reads "Coffee Walk is a GTM Vault series. One founder who has built at $100M+ scale, one walk from Galata down to Karakoy, one coffee. No script, no prep doc. Season one is Istanbul. Visit gtmvault.co for more episodes, the GTM Vault newsletter, and Show Me Your Stack." The episode number appears as "the first ever Coffee Walk" / "Coffee Walk N" in the Who you'll learn from paragraph. Coffee Walk transcripts arrive as phone-video uploads with broken speaker labels, so attribution is inferred from content and flagged in the notes block. If Coffee Walk later ships as audio, restore the three-platform line and buttons.
Show Me Your Stack (SMYS N) structure
Thirty minutes, screen-share, YouTube and Substack only, no audio platforms. Roughly 1,500 to 2,200 words. Canonical reference (confirmed 2026-08-14): https://www.gtmvault.co/p/your-reps-should-never-meet-your-agents (SMYS 7). SMYS 6 remains a valid earlier example.
SMYS is one operator walking through one system, so it has a spine and the write-up follows it in build order. Do not use the podcast's Who you'll learn from / What you'll learn / Key takeaways shape, and do not fragment it into a numbered insight list as the primary structure. The 2026-09-15 GTMnow-format decision applies to the podcast show only; SMYS is unchanged.
Sections in order:
-
Standing header.
-
Cold open, no heading. State the constraint that moved, in the reader's world before the guest appears.
-
Guest paragraph. Name, link, company, the result, and what they are about to show. SMYS 7 pattern: "In episode [N] of Show Me Your Stack, [Guest] runs the opposite play..." naming the episode number inside the paragraph.
-
Stack sentence. Name the tools, then say the tool list is not the story and name what is.
-
YouTube embed, then a "## Watch now: [Guest Name - Title]" heading linking the published video, then a Share link, then the one-line subscribe CTA (see Routing readers to YouTube).
-
Claim-carrying section headers, four to six of them, in build order. Not topic labels. Examples that work: "The Context Layer: What Gets Built Before Any Agent Exists", "The Live Run: Internal Data Before External Signal", "The Translation Layer: Ten Words or the Build Is Wrong". Place Figure 1 and Figure 2 inside the sections whose claims they carry.
-
A forward-looking section, "Where This Goes by [horizon]", using the guest's own stated expectation.
-
## The Pattern. Three short paragraphs. The reframe, what it changes, and a one-line closing rule. Do not use the podcast's "This is GTM Vault." sign-off here.
-
A named takeaways block after The Pattern, titled "[N] Things Worth Stealing" (count matches content, SMYS 7 used seven), inline convention (bold claim, period, two or three sentences continuing on the same line). Named, never a generic "Takeaways" header. Keep it alongside the narrative, never instead of it.
-
## Timestamps. The blockquoted, single-spaced, parenthesized deep-linked block per the universal timestamps rule. This section is not optional: SMYS 2 through 6 shipped without it and therefore shipped without YouTube chapters, because the chapters are copied from here.
-
## Links. Changed 2026-10-13 from the flat list to the podcast's grouped shape. Three
###subheads, guest first, with a native divider between each group and one labelled line per link:### [Guest Name] LinkedIn: URL [Company]: URL --- ### [Host Name] (Host) LinkedIn: URL --- ### GTM Vault YouTube: https://www.youtube.com/@gtmvault?sub_confirmation=1 Website: https://gtmvault.co/The old flat shape ("Follow [Host] on LinkedIn - URL", "Follow [Guest] on LinkedIn - URL", "Try [Company] - URL", host first) is RETIRED. Two things drove the change and both are the point of it. The flat block carried no YouTube subscribe link, and the Links section is where a reader lands having finished the piece, which is the second-highest-intent moment in the post after the line under the embed; the newsletter list is far larger than the channel, so that slot is not optional. And it put the host above the guest in the one show sold to guests as a public portfolio piece, named and linked throughout.
The label is the company's name, never a verb, and never the domain. Write
Acme: https://tryacme.com/, notTry Acme:. In a grouped block every other line is a label ("LinkedIn:", "YouTube:", "Website:"), so a verb in one slot is an orphan from the retired flat format, and a "Try [Company]" label sitting next to atry[company].comURL reads as though the company is called TryCompany. Carry the verb across formats and you rename the guest's company in the one block whose job is to send people to it. The podcast block already does this correctly ("UserGems: URL").The host's own group stays at one line. "Newsletter: https://gtmvault.co/" is redundant against the GTM Vault Website line in the same block, and an uneven group is cheaper than a duplicated link. The GTM Vault company LinkedIn is left out of the SMYS block as the weakest link on the page; the podcast block keeps it.
This is a deliberate amendment to the rule at the top of the show sections against borrowing one show's structure for the other. It applies to the Links block only. Everything else in the SMYS spine stays as it is.
-
## Previous episodes include. Three embedded Substack post cards (SMYS 7 precedent). If Substack warns about email truncation, cut to one card or plain links. Then the line "If this was useful, hit like and restack at the top of the post." as a small heading before the series footer.
-
Series footer, italic: "Show Me Your Stack is a GTM Vault series. Each episode features one operator walking through the system behind their outbound, their prioritization, or their pipeline motion. No slides. Just the stack." (SMYS 7 wording, no "actual").
Routing readers to YouTube
Added 2026-08-29. The newsletter list is much larger than the YouTube channel. Every episode post already embeds the video and deep-links timestamps into it, but until this rule the post pushed readers to Apple and Spotify and never once asked them to subscribe on YouTube, which is where the video, the clips, and the shorts live.
Always use the subscribe-confirmation URL, never the bare channel link:
https://www.youtube.com/@gtmvault?sub_confirmation=1
The parameter opens the subscribe dialog on arrival instead of dropping the reader on a channel page where they have to find the button. A bare youtube.com/@gtmvault in a subscribe button is a miss, not a variant; check for it explicitly in any pre-send review. (GTM 51's test send had the bare link on the Subscribe on YouTube button; fixed in the draft on 2026-09-16.)
Under the embed (SMYS), one italic line:
The full episode is on YouTube. Subscribe to the channel for the clips and cuts that never make the write-up.
In the podcast's platform line, YouTube goes first. Apple and Spotify subscribers are a list; YouTube subscribers are an algorithm input that improves the next video's cold distribution.
Expect modest numbers and say so. Only a small share of any newsletter list ever clicks a link, so the realistic lift per episode is modest against the existing view baseline. Measure it in Studio under Analytics > Content > Traffic source > External, and watch subscribers gained per episode alongside views. If views rise and subscribers do not, the problem is the video, not the link.
YouTube metadata (both shows)
Title. GTM Vault Podcast pattern, set 2026-08-27, matching every other episode on the channel: [Hook] | [Guest Name], [Company] (EP N). Example: "AI Agents Are Clicking Your Ads | Hao Sheng, Expertise (EP 49)". This replaces the older under-50-character [Hook] | EP N rule. The hook comes first and must stand alone, since narrow mobile surfaces truncate around 48 characters and only the hook survives; keep the hook short and searchable. Lead with the phrasing people search, not the structural claim used on Substack. Substack and YouTube titles should differ on purpose, and the hook should carry what the thumbnail does not (guest name and company already appear on the podcast thumbnail; in the title they serve search, not the click). SMYS pattern, standardised 2026-08-29 across all seven episodes: [Hook] | [Guest Name], [Company] | SMYS N, with the company dropped when the guest is independent. "Show Me Your Stack N" as a title suffix is retired; it is always "SMYS N".
Description. One tight hook paragraph introducing the guest and stacking the three or four strongest beats, then one subscribe line in the house voice (no favor-ask, no exclamation marks), then "Timestamps:" with parenthesized (0:00) Title Case chapter lines, then a Links block with one line per link: "Follow [Guest] on LinkedIn (URL)", "Check out [Company] (URL)", "Follow [Host] on LinkedIn (URL)", "Read GTM Vault (URL)", plus "Read the full breakdown (post URL)" once the Substack post is live. Format confirmed 2026-08-14 against the Ollie Forsyth pattern: only the first two lines show above the fold, so the hook paragraph carries everything.
Audio metadata (Apple and Spotify, rewritten 2026-10-07). The GTM Vault Apple Podcasts and Spotify shows are fed by the podcast host's RSS feed (GTM Vault uses Riverside), not by the Substack audio upload. Set the audio title and episode number in the podcast host. Title pattern: [Search Hook] | [Guest Name], [Company], with no episode number in the title; the number goes in the host's episode number field only and must match the Substack GTM number. The search hook is the phrase a listener would type into Apple or Spotify search, topic keywords first; it is written for audio search and is not copied from the Substack claim or the YouTube hook. Colons are allowed in the hook; no dashes; straight apostrophes; Title Case. Independent guests drop the company; two guests read "Guest A and Guest B, Company". No fixed character cap, since the searchable words come first. The full back catalog was normalised to this pattern on 2026-09-25. The old GTM N: [The Claim] | ... pattern and the 45-character rule are retired. Podcast apps do not render markdown, so links go in as bare URLs on their own lines. Description: same hook-paragraph-then-timestamps-then-links shape as YouTube, minus the subscribe-to-channel line. Use the same chapter set as the video, and upload the audio from the same cut or the two drift apart.
Tags. Up to 500 characters, comma-separated, aim for 25 to 30 tags. Order: brand first (GTM Vault, host name, guest name, company), then the episode's search phrases (the terms someone would type to find this topic), then category terms (go to market, B2B sales, GTM strategy and similar). Added 2026-08-27 after GTM 49.
Chapters. Same list as the post's Episode highlights (ten for the podcast from 2026-09-16; ten for SMYS). Both (0:00) and 00:00 at line start generate chapters, so long as the first entry is zero. When auditing a back catalogue for missing chapters, test for both forms: matching only 0:00 produces a large false-positive count.
Playlists. Added 2026-08-29. Every published episode goes into its show playlist and at least one topic playlist, in the same pass as the upload.
- Show playlists: GTM Vault Podcast, Show Me Your Stack.
- Topic playlists: The AI-Native GTM Stack, Outbound Demand & Distribution, Revenue Playbooks, Founder Lessons You Can't Google, Early-Stage GTM (0 to $1M ARR).
- The Revenue Architecture Map holds solo Foundational Laws videos only and never takes a guest episode.
An episode may sit in two topic playlists where it genuinely spans both, but pick a primary rather than filing everything everywhere. This rule exists because an audit on 2026-08-29 found twenty episodes sitting in a show playlist and no topic playlist. The show playlists were being maintained and the topic playlists were not, which quietly removed seven months of output from the channel's only binge surface.
Shorts. Added 2026-08-29. Title the hook alone. No guest name, no company, no episode number, no "#Shorts" tag in the title. Attribution goes in the description.
Within a same-age cohort on the channel, hook-only shorts averaged roughly 1.7x the views of shorts carrying a "| Guest, Company" or "| SMYS N" tail, and every top-performing short has been hook-only. That is a correlation, not a proven cause, so keep watching it rather than treating it as settled. Counter-examples with attribution exist. The reasoning behind the rule is that a short is a cold-feed object, not a catalogue entry: the viewer has no context that makes a guest name useful, and it costs characters the hook needs.
Publish checklist, YouTube side. These four are what drift. Check them on every upload:
- Assigned to its show playlist and at least one topic playlist.
- Chapters pasted, first entry at zero, every timecode inside the runtime.
- Subscribe line present in the description.
- 25 to 30 tags.
Thumbnails
Five systems: one YouTube layout per show, and one Substack card layout per show, except Coffee Walk, which uses a single image for both. (Expanded 2026-09-25.) Every one is 1280x720 on black, every one carries the series badge, and in every one the gold sits on the asset half of the claim, never on the half being displaced. Coral, not gold, marks anything dying.
GTM Vault Podcast: guest-face layout. Interview thumbnails perform on the face, so use one. Guest photo cut out on the right roughly half the frame, text stack on the left. Headline in Title Case, never all caps, across two or three lines, white on the first half of the claim and gold on the second. (Corrected 2026-09-12. This line previously said sentence case, which contradicted every shipped thumbnail including the GTM 49 example named in this same paragraph. All-caps is the SMYS treatment and is what this rule exists to rule out.) Below it the guest's title in small white text and the company logo. Series badge bottom-left: "GTM VAULT PODCAST" letterspaced in grey with a gold rounded badge holding the episode number. A coral annotation (like an arrow plus a one-word label such as "Dying") may mark the displaced half of the claim; GTM 49 used this on "Brochure to".
A strike-through must be coral, never white. (Added 2026-09-12, after a GTM 50 draft used white.) At YouTube's 210px search size, a white line over white text merges into a smudge and the reader loses both the words and the point. Coral reads cleanly at that size and carries the meaning the palette already assigns it. Test any struck headline by viewing it at 210px wide before shipping.
Show Me Your Stack: tool-to-tool layout. No face. Two stacked lines in heavy all-caps, centered, white on the first and gold on the second, naming recognizable tools wherever possible since tool recognition drives the click. "CLAY TO CLAUDE CODE" and "SALESFORCE TO CLAUDE CODE" both work. Bottom bar lists the stack with small gold dots. Series label with gold episode badge at top, "GTM VAULT" top right.
Coffee Walk: split-panel location layout. One image serves both YouTube and Substack. (Added 2026-09-25.) Coffee Walk is the only show filmed on location, and the still is the proof, so the card is built around it rather than around a cut-out. The frame splits at 37%: a dark #0b0b0a panel on the left with a 3px gold #c8a832 rule down its right edge at x474, and the location still full-bleed on the right, guest in frame with the eyes on the upper third and the city legible behind them. The panel carries, top to bottom, the headline in two lines at 38px bold with the white setup and the gold turn (for example "He sold the company." then "Then he started over."), the guest's name at 26px white bold, the role line at 19px grey ("Founder, [Company] · ex-[Previous Company]"), and at the bottom "COFFEE WALK" at 17px in #77746d with the gold rounded episode badge beside it. The headline break is always setup then turn, never a sentence split for length.
Coffee Walk is the exception to the two-images rule below, and deliberately so. A studio cut-out card would erase the one thing that distinguishes the show from every other founder interview, and the location frame reads as well in a cold YouTube feed as it does in the Substack grid. Do not build a separate gradient card for it.
Keep the Coffee Walk template as one design file with one page per episode. To make the next episode, duplicate the last page, drop the new still on the right, and change five things: the two headline lines, the name, the role line, and the badge number. Two known limits when building these through the Canva API rather than by hand: it cannot assign a font family, so text added programmatically inherits the label font and the display face has to be set once in the editor, and it cannot place an image without an uploaded asset, so the still is always dropped in by hand.
Show Me Your Stack Substack cards: guest-on-black layout. (Added 2026-09-25, recorded from the shipped set.) Separate again from the SMYS YouTube thumbnail. Black field with a warm gold glow behind the guest on the right, "GTM VAULT" in white caps top-left, the guest's full name lower-left across two lines in white, the company and episode under it in gold as "CLARIFY · SMYS 9", and the stack strip along the bottom in grey as "Clarify · Claude Code · Notion · Slack". The guest is cropped head-and-shoulders so the face carries the right third; a full-torso crop lands the head too small and breaks the rhythm of the set. Prefer a photo with no other company's logo on the clothing, since the gold line names a different company. Keep the set as one design file, one page per episode.
Substack cards: gradient-and-guest layout. A separate system from the YouTube thumbnail, on purpose. (Added 2026-09-12.) The podcast index on gtmvault.co reads as a grid, so the cards are built to be recognised as a set rather than individually. Each card is a soft colour gradient carrying "GTM VAULT" in white caps top-left, the guest's full name in large white caps lower-left, and the guest's face cut out on the right. The gradient colour rotates across episodes (red, mint, tan, blue, purple) so no two adjacent cards match. The black-and-gold YouTube thumbnail is NOT used here, and swapping one in breaks the grid.
This means each episode ships two different key images and that is correct. The YouTube thumbnail is a cold-feed object competing against unrelated videos, so it leads with a claim and a struck-through word. The Substack card is a catalogue object sitting next to its own siblings, so it leads with the guest and the series. Do not "fix" the mismatch by unifying them, and do not raise it as a problem in a pre-send review. Set the card in File Settings so Substack does not fall back to grabbing the first in-post image, which is usually a dark diagram.
Badge placement is bottom-left on the podcast layout. Top placement steals the highest-attention area from the headline and pushes the text block down. Nobody clicks because of an episode number, so it reads last. It will be illegible at YouTube's 210px search size, which is fine, its job is series consistency when someone browses the channel at full size.
Channel surfaces
Audited and reset 2026-08-29. Recorded here so the next audit starts from a known state.
Home tab order, twelve sections, shows first and shorts last: GTM Vault Podcast, Show Me Your Stack, Popular videos, The Revenue Architecture Map, The AI-Native GTM Stack, Outbound Demand & Distribution, Revenue Playbooks, Founder Lessons You Can't Google, Early-Stage GTM, GTM Vault (Shorts), Show Me Your Stack (Shorts), GTM Nights. Two Shorts shelves previously outranked Show Me Your Stack.
Section reordering cannot be done by dragging through automation. Remove the section and re-add it; new sections append to the bottom, so removing and re-adding in target order gives full control. Twelve sections is the hard cap.
Banner. Must carry the locked hero line as text. Upload at 2560x1440 and keep every word inside the centred 1546x423 mobile safe area, which is the only region visible on all devices.
Channel trailer. A trailer should be 45 to 75 seconds and purpose-cut, not a full-length episode.
Channel description. Only name a show in the channel description once it has episodes on the channel. A claimed show with nothing behind it is the first thing a sponsor will check.
Editing the video before writing
Cut filler before pulling timestamps, because every cut shifts them. What reliably comes out:
- Screen-share and setup logistics
- Questions the guest never answers, especially pricing asides
- The host restating what the guest just said
- Transition negotiation, "anything else or shall we move on"
- The guest admitting they cannot show something, right after showing something
- Any stretch where the guest asks what to demo next
Watch for orphan references after a cut. Removing a question strands the answer's "these" or "that question" with no antecedent, and the fix is either a text card or a four-second trim of the opening clause. Cut from the end backwards so earlier timecodes stay valid.
Working in the Substack editor
Node-level deletions work: click an embedded card or button to select it, then press Backspace. Text-caret edits are unreliable and can land in the wrong block, so hand any inline text change back to the host as a find-and-replace instruction rather than attempting it. (Exception that works: setting a DOM selection at the start of a paragraph and running document.execCommand('delete') in the same script reliably joins it to the previous block; synthetic Backspace key events do not.) When a post needs three or more inline fixes, re-pasting the whole body from the source file is one action instead of many, and it repairs paste-mangled list formatting at the same time.
ProseMirror transactions are the reliable route for structural edits (verified 2026-09-16 on GTM 51). document.querySelector('.ProseMirror').editor exposes the tiptap editor; build one state.tr and dispatch it via editor.view.dispatch. Working recipes: tr.insert(pos, [schema.nodes.heading.create({level:3}, schema.text('...')), schema.nodes.paragraph.create(null, schema.text('...')), schema.nodes.button.create({url, text, action:null, class:null}), schema.nodes.horizontalRule.create()]) to add a block; tr.replaceWith(from, to, schema.text('...', [schema.marks.link.create({href})])) to swap a link's text and URL or rewrite a caption node's text; tr.setNodeMarkup(pos, undefined, {textAlign:'center', level:2}) to change a heading level; tr.insertText('s', pos) for a one-character fix. Apply edits from the end of the document backwards inside one transaction so earlier positions stay valid. Node names in the Substack schema: heading, paragraph, button, horizontalRule, youtube2 (videoId), pdf (filename), captionedImage containing image2 plus optional caption, digestPostEmbed, bulletList, orderedList, blockquote. Substack autosaves after dispatch; confirm the header reads Saved.
Cover image trap (added 2026-09-16, GTM 51). Substack derives the draft's cover_image from the first YouTube embed at the moment it is pasted. If the body was pasted with the VIDEOID placeholder and the embed was fixed later, the cover stays at substackcdn.com/image/youtube/w_728,c_limit/VIDEOID, a 404, and the post ships with no archive thumbnail. Pre-send check: GET /api/v1/drafts/{id} and confirm cover_image contains the real video ID (or the uploaded thumbnail); fix with PUT /api/v1/drafts/{id} and a JSON body {"cover_image": "https://substackcdn.com/image/youtube/w_728,c_limit/<videoId>"}.
Pre-send checklist on the draft itself (added 2026-09-16; every item below was wrong in the GTM 51 draft after paste).
- cover_image resolves.
- Figure 1 and Figure 2 captions each match their own image, not a duplicate.
- Heading reads "Key takeaways", plural.
- The platform subscribe block with three buttons is present and the YouTube one carries sub_confirmation.
- Every GTM Vault link is
https://www...(the LinkedIn company line is the usual drift, pasted ashttp://linkedin.com/...). - "Download the transcript" is an H2 with no emoji.
- Episode highlights deep-link to the real video ID with published-cut timecodes.
- Any video still carries a one-line caption.
- Substack's "may be truncated in some email clients" banner is absent, or a fresh test send has been measured under 102,400 bytes.
- SEO title, SEO description, slug and social preview are set.
- No
buttonnode anywhere in the body carries%%checkout_url%%(added 2026-09-28; it renders as "Upgrade to paid" for every email recipient, see the in-body subscribe block above), and the in-body block is the trimmed one-sentence H4 with a static Subscribe button onhttps://gtmvault.co/subscribeunder it. - Every
youtube.com/@gtmvaultin the draft is checked against its job: a subscribe button or subscribe line must carry?sub_confirmation=1, and a "Watch now" heading or link must point at the episode video (watch?v=...), never at the channel. SMYS 9 shipped both mistakes at once into a scheduled draft, past item 4, because every one of them renders as identical-looking link text. - "Watch or listen now" is an H2, left aligned, not a centered H4 (added 2026-09-30; see podcast item 8, only the Share button under it is centered).
- For any episode with audio: after the Substack post is live, upload the audio to your podcast host with the title in the audio pattern, or Apple Podcasts and Spotify never get the episode (added 2026-10-07; see Podcast host upload below).
Fastest way to run items 5, 11 and 12: with the editor tab closed, GET /api/v1/drafts/{id}, JSON.parse(draft_body), and grep the content array for %%checkout_url%%, for every youtube.com/@gtmvault (then check each against its job), and for http:// or a bare linkedin.com. Grep the whole serialized doc, not just button nodes: the SMYS 9 channel link was a link mark inside a heading, so a scan of button attrs alone would have missed it.
Autosave will silently revert an API edit (learned the hard way, 2026-09-28). The rule was already "PUT with the editor tab closed", and that is necessary but not sufficient: reopening the editor afterwards to eyeball the result is itself the hazard. Two fixes PUT correctly to SMYS 9, verified by a read-back, were both reverted when the editor was reopened to take a screenshot and then navigated away, because Substack flushed its in-memory buffer over them. The buffer can even render the correct state on screen while holding the stale doc. So: make every API edit in one pass, verify only by GET /api/v1/drafts/{id} and reading the JSON back, and do not open the editor again until you are done editing. If you do open it, re-run the full verification GET afterwards and assume nothing held. Do not probe the truncation banner with delete-then-undo transactions on the doc; that froze the renderer on GTM 51. Measure a test send instead.
Never leave editorial notes or FLAG markers in the body. They publish.
Working in YouTube Studio
Added 2026-08-29 after a session of bulk edits. Studio is a Polymer app and synthetic clicks are unreliable against it.
Typing into title and description fields fails on the first attempt after a page load. The field needs a full round trip after navigation before it accepts focus. Either budget two attempts, or set the value directly: focus the div[contenteditable="true"] (it sits inside shadow DOM, so walk shadowRoot recursively to find it), select its contents with a Range, then document.execCommand('insertText', false, text) and dispatch an input event. That registers with Polymer where assigning textContent does not.
Save the same way. Find the button whose text is exactly "Save" and call .click() on it, then confirm it went disabled. Clicking by screen coordinate breaks whenever the viewport changes size mid-session.
Bulk playlist assignment is far faster from Content than from each video: select rows by checkbox, then "Add to playlist". The bulk bar shifts right when a "Select all matching" link appears, so re-locate the control rather than reusing coordinates. The dropdown often needs a second click to open.
Reading a video's runtime from the Content list. The duration badge sits on each row's thumbnail, but a scheduled premiere shows "PREMIERE" instead of a duration, and a naive text scrape will silently attribute the next row's runtime to it. Read the duration from within the row element, and when the video is an unreleased premiere expect no duration at all: the watch page reports zero length and no caption track until it goes live.
Podcast host upload (every episode that ships with audio)
Added 2026-10-07 after SMYS 9 shipped as a podcast post on Substack and never reached Apple Podcasts or Spotify, because those two listings are fed by the podcast host's RSS feed (GTM Vault uses Riverside), not by Substack. The Substack audio upload feeds the Substack podcast feed and the in-post player only. Until the listings are repointed (a feed migration; see the note at the end), every GTM Vault Podcast, SMYS and Coffee Walk episode with audio needs a second upload to the podcast host after the Substack post is live.
- Source file. Pull the mp3 from your Substack podcast feed: the item's enclosure URL. Episodes recorded in the podcast host can use its own recording file instead.
- Size. Browser-automation upload bridges often cap a file at around 10 MB. A 20-minute 128 kbps file is about 18 MB, so re-encode with
ffmpeg -i in.mp3 -ac 1 -b:a 64k out.mp3before uploading through such a bridge. When uploading by hand, use the original file. - Where. The podcast host's hosting dashboard, new episode. When automating, trigger "Upload new file" from JavaScript so no native picker opens, then put the staged file into the file input. Speakers: 2 for an interview. Wait for the upload to reach 100%.
- Title. The audio pattern from Audio metadata:
[Search Hook] | [Guest Name], [Company]. No episode number in the title. GTM Vault Podcast episodes get the GTM number in the episode number field; SMYS and Coffee Walk leave Season and Episode number blank, since they sit outside the GTM count, and the description's series line identifies the show. - Description. If the host uses a Lexical editor, type the description with the keyboard, once; inserting with JavaScript duplicates it, and the only reliable way to clear the box is
editor.update(() => root.clear())on the element's__lexicalEditor. Content: the post's hook paragraph; a blank line; the series line ("Show Me Your Stack is a GTM Vault series: operators screen-share the GTM stack they run." or "Coffee Walk is a GTM Vault series: one founder who has built at $100M+ scale, one walk, one coffee."); "Timestamps:" with the published-cut chapters as (m:ss) lines; "Links:" with bare URLs on their own lines (full breakdown, YouTube, guest company, gtmvault.co). No markdown, no subscribe-to-channel line. - Publish. Explicit content unchecked. If the host has no back-date field, the episode carries the upload date. Allow up to an hour to appear on platforms. Confirm the row shows Processing or Published, then check the host's RSS feed the next day.
Feed migration (not done). Repointing Apple and Spotify at the Substack feed would remove the double upload, but the Substack feed uses the post titles (no separate audio title field), its episode GUIDs differ from the podcast host's so the platforms would re-ingest the catalog, and it needs a host-side redirect plus Apple Podcasts Connect and Spotify for Creators changes in sequence. Do it in a quiet week with no episode scheduled, after the host's support confirms a permanent redirect, and only once the search-hook titles have a home on the Substack side.
Guest approval
Any number attributed to a guest's former employer gets confirmed with the guest before the email sends. The web post stays editable, the email does not. Guests frequently return a more specific and more interesting version than the one from the transcript, so ask rather than soften unilaterally.
Publishing cadence
GTM Vault publishes Monday, Tuesday, or Wednesday, occasionally Sunday, and never Friday or Saturday. The highest-engagement posts have landed Tuesday and Wednesday. The default is Tuesday, 9am ET, because most of the list is US-based. Set yours by where most of your own list sits.