Skip to content

OFFER · Any sales page above $1, OTO page, sales-VSL outline, evergreen funnel landing page.

Hook-Story-Offer page template

The Hook-Story-Offer page is the minimum-viable Brunson sales surface. Three sections — Hook, Story, Offer — with six blocks total. Every Brunson sales page collapses to this template; longer formats add layers on top, but the core structure is fixed.

Verified · editorial policy

The 6 blocks

  1. Block 1

    Hook — H1

    Purpose: Above-the-fold outcome + time + buyer specificity.

    [OUTCOME] in [TIME], for [SPECIFIC AUDIENCE].

    Slot guidance: Same shape as the outcome-time-headline swipe file. The whole page hinges on this sentence.

  2. Block 2

    Hook — Sub-headline + CTA

    Purpose: One sub-sentence of positioning + one outcome-CTA button.

    [POSITIONING SENTENCE]. [OUTCOME VERB] [SPECIFIC NEXT STEP].

    Slot guidance: Sub-headline is positioning, not a feature list. Outcome verb on CTA, not 'Get started'.

  3. Block 3

    Story — Founder bridge

    Purpose: Three-paragraph Epiphany Bridge collapsed to landing-page length.

    [BACKSTORY]. [DESIRE]. [PROBLEM]. Then [EPIPHANY]. I now believe [NEW BELIEF]. [PRODUCT NAME] is what I built around that belief.

    Slot guidance: See /template/epiphany-bridge-story-template for the full structure. On a landing page, compress to 150-300 words.

  4. Block 4

    Story — Social proof

    Purpose: One real testimonial or one stated absence ('we do not publish testimonials before they are verified').

    [ONE TESTIMONIAL with verifiable detail] OR [HONEST EMPTY STATE].

    Slot guidance: Honest empty state is a strong move pre-revenue. See /swipe-file/single-testimonial-block-swipe-file for honest social-proof patterns.

  5. Block 5

    Offer — Stack and price

    Purpose: 3-7 component stack slide with honest anchors, sum, and offer price.

    [COMPONENT 1] (value [$X]) + [COMPONENT 2] (value [$X]) + ... = [$SUM]. Today: [$OFFER PRICE].

    Slot guidance: See /template/stack-slide-script-template for the full block. Inflated anchors are the most common Hook-Story-Offer failure.

  6. Block 6

    Offer — Guarantee + CTA

    Purpose: Specific guarantee (trigger, window, verifier, refund mechanism) + repeated outcome CTA.

    [SPECIFIC OUTCOME] in [TIME WINDOW], verified by [VERIFIER], or [REFUND PROMISE]. [OUTCOME VERB] [SPECIFIC NEXT STEP].

    Slot guidance: Same shape as the Dollar Objection script's guarantee block. The CTA must repeat the Hook's CTA exactly.

Worked example

Hook: 'First paying customer in 60 days, for post-launch pre-revenue founders.' Sub: 'The Brunson Hard-Rule playbook for non-engineer founders who shipped with AI tools. Start the diagnostic.' Story: '(see the founder block on the live homepage)' Offer: 'Seven-Step Playbook (value $X) + Weekly Office Hour (value $X) + Diagnostic Database (value $X) = $X real value. Today: $49 / month. First paying customer in 60 days, verified by Stripe, or full refund. Start the diagnostic.'

Common failure modes

  • Skipping the Founder Bridge block. The page reads as a feature page instead of a sales surface.
  • Hiding the price. The Offer section's job is to make the math believable; obscuring price breaks the math.
  • Inflated anchors. Quality raters and savvy buyers spot inflated stacks immediately.
  • Generic CTA. The same outcome verb must repeat on every CTA on the page.

Frequently asked

How long should a Hook-Story-Offer page be?
600-1,500 words for a $1-$49 offer; 1,500-3,000 words for a $49-$497 offer; 3,000-8,000 words for above $497. Length scales with price band; structure does not change.

Which template does your page need first?

The free 90-second Launch Diagnostic labels which Brunson failure mode your page hits — Wrong Person, Weak Offer, or Weak Belief — and tells you which template to fill in first.

🚀 Explore Our Network

Full disclosure: UnlockSaaS is one of ten small products built and run by one independent operator. These are the other nine.

60 days
To First Paying Customer
7 steps
Proven Playbook
100%
Money-Back Guarantee
$49
Founding Price /mo

You shipped. Nobody paid. The playbook breaks the pattern or the code refunds you automatically.

Get Free Diagnosis

Refund runs from your dashboard, not a support ticket — the server re-checks eligibility and issues it through Stripe automatically.