How I Built a Searchable Customer Advocacy Library Using Claude AI and Notion: Step-by-Step Guide and Lessons Learned
Sharing this in case it's helpful for my fellow customer marketers: I (a total n00b) built a searchable Customer Advocacy Library using Claude Cowork. Here's exactly how (and what went wrong). One of the biggest pain points in customer marketing is content sprawl—quotes buried in old slide decks, case studies dumped on the website with no structure, and sales pinging you asking "do we have any customer quotes from fintech?" Meanwhile, when someone pulls a quote from a deck last quarter, they don't know if that customer is even still a customer. I wanted to solve both problems: make customer evidence easy to find, and make sure only current, approved content gets used. I used Claude to build a structured, searchable library of customer quotes and stories—organized by industry, segment, geo, theme, channel, and buyer stage—all living in Notion with a custom AI skill that lets anyone on my team search it conversationally. Here's how to do it yourself, and the pitfalls I hit so you don't have to. Step-by-step:
- 1.
Design your schema first. I built two linked Notion databases: Customer Stories (company-level metadata like vertical, segment, hero metric, challenge/solution/impact) and Customer Quotes (the actual quotes with speaker, title, theme, stage, and a relation back to the story). The relation between them is what makes the library powerful—you can go from a quote to the full narrative and back.
- 2.
Upload your case study PDFs and let AI extract the quotes. This is important: AI couldn't reliably scrape my published case study webpages (403 errors). Download the PDFs and upload them directly. Claude reads them natively and extracts every quote with speaker attribution, then structures them into your database schema.
- 3.
Embed the full case study narrative into each Customer Story page. Don't just store metadata—paste the complete text into the page body. This makes the entire narrative searchable and gives AI full context when someone asks a nuanced question like "how long did their rollout take?"
- 4.
Add a Context field to every quote. For each quote, include 2-3 sentences of surrounding narrative from the case study. This lets anyone understand why something was said, not just what was said, without reading the whole case study.
- 5.
Build a skill file that teaches AI how to search both databases, what each field means, and how to present results for different use cases (sales vs. marketing vs. leadership). This is essentially a detailed instruction manual—it includes company-to-industry mappings, segmentation breakdowns, geo groupings, and presentation guidelines.
Things to look out for: Quote misattribution. This was the biggest risk. When case studies have multiple speakers, AI can attribute a quote to the wrong person—especially when quotes appeared close together in the PDF with minimal formatting cues. The fix: always verify extracted quotes against the original PDF before publishing. I did a full audit of all case studies and caught several errors. Manually review the skill file for AI assumptions. The skill file is your source of truth for how AI categorizes and retrieves everything, so errors there silently corrupt every search result. Claude categorized Indigo—the Canadian retail giant—under Airlines & Travel because it confused it with IndiGo, the Indian airline. That kind of mistake doesn't throw an error; it just means anyone searching for retail case studies would never see Indigo, and anyone searching for airline stories would get a wrong result. Be sure to read through the mappings yourself. AI is confident even when it's wrong. The skill file needs manual updates. The skill file contains hardcoded counts, company lists, and mappings that AI uses as a reference to know what to search for. Every time you add a new customer or one churns, you need to update the file. I explored making this fully dynamic (having AI query the databases in real-time to stay current), but each Notion API call takes 1-3 seconds. Building a full index dynamically would add 20-60 seconds of latency before answering any question. For a tool that's supposed to give people quick answers, that's a dealbreaker. The tradeoff is worth it—customer additions and churns are infrequent enough that a manual update takes 5 minutes vs. penalizing every single query with a long wait time. The result: Any teammate can now ask "find me enterprise APAC quotes about automation" or "what do fintech customers say about cost savings?" and get curated, attributed, stage-appropriate quotes in seconds—with full context and case study links. And because it all flows from one maintained library, you know what's being shared is current and approved. A shout-out to Kimberly Groat (aka Kimberly GOAT) for walking me though her advocacy GPT and for the inspiration. Happy to chat if you want to learn more.
