Writing · Agency

LinkedIn ghostwriting

RecommendedAgency scale, multi-client

Run a one-person LinkedIn ghostwriting agency for a busy founder. Voice interviews → drafted posts in their voice → carousels → analytics, all on one Sunday a month.

WRITINGAGENCYINTERMEDIATEIntermediateFrom $77/mo
The stack
Granola
Voice + idea capture

30-min monthly interview with the client recorded as background audio. Granola produces structured notes you can feed straight into Claude.

Free · $18/mo ProAlts:
Claude
Drafting + voice match

Claude is the LLM with the most consistent voice match for editorial-grade prose. Use a project with the client's last 30 high-performing posts as context.

$20/mo Pro · API $3/M tokensAlts: ChatGPT, Gemini
Taplio
Scheduling + viral search

Where the posts actually go out. Their viral post search seeds hooks; analytics close the loop.

$39/mo Standard · $55/mo ProAlts: Typefully
Canva
Carousel + image posts

Templates do the heavy lifting. The bottleneck is the writing, not the design.

Free · $15/mo ProAlts: Figma
Real monthly cost
small
$77/mo
1 client · 4 posts/wk
  • granola$0
  • claude$20
  • taplio$39
  • canva$15
  • + misc$3
medium
$129/mo
3 clients · 12 posts/wk
  • granola$18
  • claude$20
  • taplio$55
  • canva$15
  • + misc$21
heavy
$420/mo
8 clients · 30 posts/wk
  • granola$18
  • claude$200 API
  • taplio$155 multi-acct
  • canva$15
  • + misc$32
Workflow
  1. 1
    Monthly voice interviewGranola

    Record a 30-min open-ended call with the client. Granola captures it.

  2. 2
    Pull post anglesClaude

    Feed the notes into Claude with the brand voice doc; ask for 20 hooks then narrow to 12.

    Prompt · 20 angles from interview notes
    You are a LinkedIn ghostwriter for {{client_name}}, a {{role}} writing for a {{audience}} audience.
    
    Here are the notes from a 30-min interview with them this month:
    """
    {{paste granola notes}}
    """
    
    Here are 10 of their best-performing posts (for voice and topic anchoring):
    """
    {{paste 10 posts}}
    """
    
    Generate 20 LinkedIn post angles that:
    - come directly from the interview notes (no invented stories)
    - match their voice (specific, opinionated, no warm-up phrasing)
    - mix formats: 1 hot take, 1 contrarian, 1 framework, 1 personal story, 1 mini case study, etc.
    
    Output as a numbered list. For each: a 1-line hook, the post format, and the source quote from the interview.
  3. 3
    Draft postsClaude

    One prompt per post. Maintain a voice library of past posts in the project.

    Prompt · Draft one post in voice
    Write 1 LinkedIn post in {{client_name}}'s voice.
    
    Voice library (their last 30 high-performing posts):
    """
    {{paste voice library}}
    """
    
    Today's angle:
    {{paste one angle}}
    
    Constraints:
    - Hook in the first line, no warm-up
    - 5 to 8 short paragraphs separated by blank lines
    - One concrete number, name, or example
    - No emoji unless the voice library uses them
    - No "in today's world" phrasing, no "let me ask you this"
    - End on a sharp statement, not a question
    
    Output the post only, no commentary.
  4. 4
    Design carouselsCanva

    Slot copy into a Canva template; export at 1080×1350.

  5. 5
    Schedule + shipTaplio

    Stage in Taplio; auto-comment with a hook variant; review analytics weekly.

What it produced
Founder with 18k followers, 4 months in

Average post 1,400 impressions before, 11,200 impressions after. Booked 9 inbound leads in month 4 from a single 'lessons learned' post. Total writer time: ~6 hours/week per client.

Common pitfalls
Voice drift after model updates

Re-anchor every 6 weeks by feeding the most recent 10 high-performers back into the project context.

Auto-commenting at scale flags spam

Cap auto-comments at 1/post on Taplio; vary the comment so it doesn't look templated.

One client owns the relationship

If your client churns, the LinkedIn account goes too. Diversify with at least 3 clients.

Other ways to do LinkedIn ghostwriting
Curated by @alex-w
Updated weekly · last refresh: just now