Customer story studio: turn closed won deals into case studies

A board that surfaces the customers ready for a case study, keeps the proof in one place, and builds a shareable story page when you say go.

App
GammaHubSpotSlackMarketingSalesContent GenerationAI Reports
PromptCreate

Build me a customer story studio app for our customer marketing team. It is a board with four columns, Candidate, Approved, Drafting and Published, and every card is one potential customer story. A person moves every card by hand. Nothing in this app drafts or publishes on its own.

The Candidate column fills itself from HubSpot. Use Search Deals to pull closed won deals whose amount is at or above a minimum deal size I set in settings and whose close date is at least 60 days in the past, because results take time to show up and a story written the week after signature has nothing to prove. For each of those deals, use Search Companies to pull the associated company's name, domain, industry and headcount, and Search Contacts to pull the champion on the deal, meaning their first and last name and their job title. Every card shows the company, industry, headcount, deal amount, close date, days since close, champion name and title, and the deal owner.

Each card also holds three story inputs that the app stores itself rather than writing back to the CRM: the problem before, meaning what was broken before they bought, the quantified results after, meaning the actual numbers such as 40 percent faster onboarding or 12 hours saved per week, and a customer quote with the name and title of whoever said it. These are editable directly on the card and saved by the app, and they are deliberately the single place those details live. Any card missing the quantified results is flagged loudly, a red badge on the card in the board view and a banner at the top of the card detail, because a story without numbers is not a story. A card cannot be moved into Drafting until the quantified results field has something in it.

The columns mean: Candidate is sourced from the CRM but nobody has vetted it, Approved is a human confirming the customer will go on record, Drafting means the story page is being produced, and Published means the link is live and shared. Moving a card between columns is drag and drop, the column is persisted by the app, and the app remembers who moved it and when.

When someone drags a card into Drafting, kick off a background agent for that one card. The agent takes the CRM facts already on the card, company name, industry, headcount, deal amount, close date, champion name and title, plus the three story inputs typed into the app, and writes a customer story in the classic structure of context, problem, what changed, quantified results and the quote. It then calls Gamma's Generate a Gamma to produce a shareable webpage from that outline, not a slide deck, since a page is easier to send to a customer for approval. Gamma generation is asynchronous, so the agent polls the generation until it completes, then saves the resulting Gamma document URL onto the card. Save the document URL rather than an export link, because Gamma export links expire after about a week. Each generation costs a few Gamma credits, so the agent should run once per card and never re-run on its own.

Once the page exists, the agent uses HubSpot Create Note to write a note associated with that company record saying a customer story was produced, with the Gamma link and the headline result, so anyone looking at the account in the CRM can find it. Then it uses Slack Send a Message to post the story into our customer marketing channel with the company name, industry, the headline number and the link. When the agent finishes, the card shows the Gamma link, confirmation that the CRM note was filed, and a link to the Slack message. The card stays in Drafting until a person reviews the page and moves it to Published themselves.

Important constraint for the agent: it must not go looking for narrative material inside the CRM. The only CRM data it uses is deal, company and contact properties already loaded onto the card. Everything about the story itself comes from the three inputs captured in the app.

The board also doubles as a coverage view, and this is the reason people keep opening it. Above the columns, show a coverage panel breaking down our published and in progress stories by industry and by deal size band, for example under 25k, 25k to 100k, and over 100k, set against the closed won deals we actually have in those same buckets. Empty cells get highlighted so it is immediately obvious which segments we have zero proof for. Add a second small summary showing how many candidates are missing quantified results, since that is the real bottleneck.

Settings should let me choose the HubSpot deal pipeline and the stage that counts as closed won, the minimum deal size, the number of days a deal must have been closed before it becomes a candidate with a default of 60, the Slack channel that receives the story link, and the deal size bands used in the coverage panel. Give me a refresh button that re-pulls candidates from HubSpot on demand. Refreshing must never create a duplicate card for a deal that already has one, and it must never overwrite story inputs someone has already typed.

What does this prompt do?

  • Fills a candidate column with customers worth a story: closed won deals above the size you set that closed at least 60 days ago, with industry, headcount and the champion's name and title pulled in for you.
  • Keeps the three things a story actually needs on every card, the problem before, the quantified results after, and a customer quote, with any card missing numbers flagged loudly.
  • Moving a card into drafting builds a shareable customer story page, saves the link on the card, files it on the company record in your CRM, and posts it to your customer marketing channel.
  • Doubles as a coverage view, so you can see at a glance which industries and deal sizes you have proof for and which ones you have none.

What do I need to use this?

  • A HubSpot account with your closed won deals, companies and contacts in it.
  • A Gamma account on a paid plan (Pro, Ultra, Teams or Business), since the story pages are generated in Gamma.
  • A Slack workspace and the channel your customer marketing team works in.
  • About ten minutes to set your minimum deal size and how long after closing a customer becomes eligible.

How can I customize it?

  • Change the minimum deal size and the waiting period, 60 days by default, that decides who shows up as a candidate.
  • Pick the Slack channel that gets the story link, or turn the post off entirely.
  • Adjust the structure and tone of the story page, or change the deal size bands used in the coverage view.

FAQs

Does anything get written or published without me?
No. A person moves every card. Candidates show up on the board on their own, but nothing is drafted or shared until you drag a card into the drafting column yourself.
Where do the problem, results and quote come from?
You type them onto the card and the app stores them. That is deliberate. Those details usually live in someone's inbox or head, so the board becomes the one reliable place they sit. Your CRM only supplies the facts about the deal, the company and the contact.
Do I need a paid Gamma plan?
Yes. Generating story pages through Gamma requires a Pro, Ultra, Teams or Business plan, and each story uses a small number of Gamma credits.
Do we get a slide deck or a web page?
A shareable web page by default, which is easier to send to a customer for approval and easier to link from your CRM record. You can switch the format if your team would rather have a deck.
Will this work with our custom deal pipeline?
Yes. You choose which pipeline and which closed won stage counts as a win, and the candidate list follows that setting.

Related templates

Look up any GetResponse contact beside their HubSpot deals

Type an email and see every list someone is on, what they opened and clicked, and their open deals, without anyone opening GetResponse.

GetResponse
HubSpot
App
Build every client's monthly marketing report in one click

See every client's traffic, ad spend and search numbers on one screen, then let an agent write and design this month's report for you to approve.

Gamma
Google Analytics
Google Ads
+2
App
Investor update studio that builds your board deck monthly

Open one screen each month to see your real numbers, write the commentary yourself, and generate a board deck you can send to investors.

Gamma
Stripe
HubSpot
+1
App
See which deals went dark before you commit the forecast

Open one board before every forecast call to see how long each deal has been silent, who has actually joined the calls, and where the risk really sits.

Gong
HubSpot
Slack
App
A weekly 1:1 coaching board built on Gong scorecard trends

See every rep's scorecard average, call stats and direction of travel on one screen, then prep the 1:1 with a brief you can send them.

Gong
Slack
Google Sheets
App
Recognition wall of custom kudos cards, plus who gets missed

Every kudos your team has ever sent, as illustrated cards in one grid, with a quiet this quarter list so praise stops landing on the same five people.

Generate Image
Slack
Google Drive
App

Stop letting good customer stories go cold.

Set the board up once and your team always knows which customers are ready and exactly what proof is still missing.