Turn Granola interviews into a themed customer research repository

By General Input

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.

Integrations

  • Granola
  • Linear
  • General Input Database

Type

App

Categories

  • Product

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.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesLiveKit live operations console for room moderationChat quality review board for LiveChat support leadsCompetitor LinkedIn ad watchlist with a permanent archiveLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsA searchable RFP answer library your bid team drafts fromSee which target accounts just started advertising on LinkedInChase the paperwork every new client and vendor still owesLinkedIn creator sourcing and vetting workbench for B2B