Turn Granola interviews into a themed customer research repository
Tag quotes from every interview against your own themes, see which ones show up across three or more customers, and file the real patterns to Linear.
Build me a customer research repository app that I work out of whenever I synthesize customer interviews. My interview notes live in Granola. Granola is read only, so the app reads notes from Granola but stores every theme, tag, quote, and synthesis in the app's own database. The app is the system of record for my research rather than a copy of something else. Position this as the browsing and synthesis surface, the place I sit and do the thinking, not another filing pipeline.
Interviews view. This is the browse surface and the default landing view. List my Granola interview notes using the Granola List Notes operation, filtered by a date range I control at the top of the screen, defaulting to the last 90 days. Show each note as a row with its title, date, and attendees, plus a badge showing how many excerpts I have already tagged from it so I can see at a glance which interviews I have mined and which are untouched. Granola pagination is cursor based with a maximum page_size of 30, so page through with the returned cursor while hasMore is true. Note IDs look like not_1d3tmYTlCICgjy and folder IDs look like fol_ followed by 14 characters. They are not UUIDs, so store them as plain strings.
Interview detail. Clicking a row opens the note using the Granola Get Note operation. Show the AI summary and the full transcript side by side. Get Note returns the summary as both summary_text and summary_markdown, so render summary_markdown. Transcripts are excluded by default, so pass include=transcript to fetch the transcript.
Tagging excerpts. From either the summary or the transcript I can select a passage and tag it against a theme. I create, rename, and delete themes myself inside the app, each with a name and a short description. When I tag an excerpt, store the quote text, the theme, the Granola note ID, the meeting title, and the meeting date in the app's own database. Nothing about tagging writes back to Granola.
Themes view. Show every theme with the number of distinct interviews that mention it, not the number of quotes, so five quotes from one loud customer still counts as a single interview. Under each theme, list the supporting quotes, and make every quote link back to its source meeting in the app so I can jump straight to the interview it came from. Visually highlight any theme that has reached three or more separate interviews, since that is the point where a pattern is real rather than one customer talking loudly. Let me sort the view by interview count so the strongest patterns sit at the top.
Auto-tag new interviews button. This starts a background agent that reads recent notes using List Notes and pulls each transcript with Get Note and include=transcript. The agent proposes theme tags against my existing theme list only. It must not invent new themes. Every proposal it makes, including the quote it selected and the theme it matched, lands in a pending state that I review in a queue where I confirm or reject each one individually. Nothing the agent proposes counts toward a theme's interview count until I confirm it, because I do not want the app silently mislabeling my research. Show me which interviews were already scanned so repeat runs do not re-propose the same excerpts.
Synthesize button on a theme. This starts a background agent that works across every interview tagged with that theme, reading the summaries and transcripts through Get Note, and writes an evidence backed summary into the theme page. The synthesis should cover what customers are actually saying, the representative quotes with the meeting each came from, the number of distinct customers affected, and any places where customers disagree with each other. Store the synthesis and the date it was generated on the theme so the page shows the written summary alongside the raw quotes, and so I can tell when a synthesis has gone stale because new interviews were tagged after it ran.
File to Linear button on a synthesized theme. Using the Linear Create Issue operation, open a product issue where the title is the theme and the description carries the synthesis, the supporting quote evidence with the meeting each quote came from, and the number of customers affected. Let me pick the Linear team before it files. After it files, store the resulting issue URL on the theme and show the theme as already filed with a link to the issue, so the same theme does not get filed twice by accident.
What does this prompt do?
- Browse every customer interview from Granola in one place, filtered by date, with the AI summary and the full transcript side by side.
- Highlight any passage and tag it to a theme you created. Your themes, quotes, and synthesis live inside the app, so the repository becomes the real record instead of a copy of your notes.
- See each theme with the number of separate customers who raised it and every supporting quote linking back to the meeting it came from. Themes that reach three or more interviews get flagged as real patterns.
- Kick off an assistant to propose tags on recent interviews for you to confirm, write an evidence backed summary of any theme, then open a Linear issue carrying the quotes and the customer count.
What do I need to use this?
- A Granola account on a Business or Enterprise plan, which is what allows you to create a personal API key from the desktop app
- A Linear workspace where you can create issues, and a team for product work to file them into
- A handful of customer interviews already recorded in Granola to tag against
How can I customize it?
- Change the pattern threshold from three interviews to whatever number your team treats as a real signal
- Set the date range the browse view opens with, such as the last 90 days or the current quarter
- Choose which Linear team issues land in and reword the issue template to match how your product team writes tickets
FAQs
Does this change anything in my Granola notes?
Why three interviews?
Will it tag my interviews automatically without me seeing it?
Do I need a paid Granola plan?
Can my team work in the same repository?
Related templates
A board that ranks the people who opened three or more separate support conversations this month, reads their threads, and files the real fix.
Open one desk each morning to see every account still in a trial, ranked by how much money is at stake against how little they have actually used.
See every page's translation status at a glance, edit translations side by side with the English, and publish only what your team has actually approved.
One place for sales and ops to request an NDA or vendor agreement, watch its status, and let legal launch the contract in a single click.
A board of the questions your buyers ask, showing where your pages land, which competitors show up instead, and what you lost since the last check.
A board your product marketer opens on every ship day to turn finished engineering tickets into announcements customers actually read in your Messenger.
Stop letting customer interviews die one note at a time.
Build the repository where every interview compounds into evidence you can actually point at.