리서치
시장 질문을 go-to-market 브리프로 바꾸기
시장에 정확한 질문을 던지고, 답변의 배경이 되는 카테고리와 가격 페이지를 읽고, X에서 구매자가 문제를 어떻게 말하는지 모아 출처 있는 주장과 열린 질문을 담은 GTM 브리프로 저장합니다.
프롬프트 복사
대괄호 항목을 바꾼 뒤 Claude Code, Codex 또는 터미널에 접근할 수 있는 AI에 붙여넣으세요. Felo 스킬을 설치하고 크레딧을 쓰기 전에 확인한 뒤 워크플로를 실행합니다.
[제품]이 [지역]의 [세그먼트 또는 ICP]에 진입하기 위한 go-to-market 리서치 브리프를 [언어]로 작성해 주세요. 모션: [셀프서브 / 영업 주도 / 파트너]. 이 분석이 지원하는 결정: [출시 / 가격 / 리포지셔닝]. 기간: [최근 90일 / 최근 12개월]. Markdown 브리프에 다음을 포함해 주세요. 1. 세그먼트 정의: 누구인지, 지금 무엇을 쓰는지, 출처가 규모에 대해 뭐라고 하는지 — 출처를 인용하거나 "데이터 없음"이라고 쓰세요. 2. 구매자 언어: 문제를 어떻게 표현하는지, 링크와 날짜를 붙여서. 3. 대안: 무엇에서 전환하는지, 스프레드시트와 "아무것도 하지 않음"도 포함. 4. 반론과 구매자가 요구하는 증거. 5. 공개 출처로는 답할 수 없는 열린 질문. 6. 전체 출처 목록. 규칙: - 모든 시장 주장에는 링크와 날짜가 필요합니다. 시장 규모, 성장률, 예산을 감으로 추정하지 마세요. - 독립 출처, 벤더 페이지, 당신의 추론을 구분해 주세요. - X는 언어와 반론에만 사용하고 시장 규모의 증거로 쓰지 마세요. - 기간과 지역을 명시적인 값으로 확정해 주세요. - 크레딧을 쓰기 전에 실행할 API 호출을 보여 주고 제 승인을 기다려 주세요. - 게시, 전송, 예약, CRM 쓰기를 하지 마세요. - 결과를 ./gtm-brief.md에 쓰고 채팅에서 요약해 주세요.
복사 내용에는 설치 단계와 안전 규칙도 포함됩니다.
완성되는 것
실행 시 예제 출력입니다. 실시간 생성이 아닙니다.
GTM 브리프 — [지역]의 [세그먼트]
세그먼트 정의
스프레드시트로 일정을 관리하는 소규모 운영 팀. 규모: 검토한 공개 출처에서 데이터 없음 — 숫자 없이 브리프에 숫자를 넣지 말 것.
구매자 언어
- “우리는 아직 스프레드시트로 한다” — X 게시물, 2026-10-18
- “설정이 가장 어렵다” — X 게시물, 2026-10-02
언어로 표시하며 보급률의 증거로 쓰지 않는다.
구매자가 언급한 대안
스프레드시트, 기존 스위트, 아무것도 하지 않기. 출처: https://example.com/thread (2026-10-18).
반론과 필요한 증명
보안 검토와 마이그레이션 경로. 구매자는 이름이 있는 레퍼런스를 요구하지만 공개된 것이 없어 열린 질문으로 남는다.
열린 질문
- 이 세그먼트 중 얼마나 전용 예산 항목을 갖고 있나?
- 반론은 회사 규모에 따라 달라지나?
출처
- https://example.com/category-page
- https://example.com/pricing-page
- https://example.com/thread
실제 호출
개발자용: 같은 워크플로를 실행 순서대로 담은 복사 가능한 코드.
실제 API 호출 보기
시장 질문 틀 잡기
Chat은 답변과 사용한 페이지를 반환하므로 답할 수 있을 만큼 좁은 질문부터 시작합니다. 누가 사는지, 오늘 무엇을 쓰는지, 어떤 반론이 나오는지. 리소스는 단서 링크로 남깁니다. 답변은 단서, 링크는 증거이며 마지막 출처 목록이 됩니다.
gtm.ts const BASE = "https://openapi.felo.ai"; const headers = { Authorization: `Bearer ${process.env.FELO_API_KEY}`, "Content-Type": "application/json", }; async function felo<T>(path: string, body?: unknown): Promise<T> { const res = await fetch(`${BASE}${path}`, { method: body ? "POST" : "GET", headers, body: body ? JSON.stringify(body) : undefined, }); if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`); return res.json() as Promise<T>; } type ChatData = { data: { answer: string; resources: { link: string; title: string; snippet: string }[]; }; }; const product = "scheduling tool"; // replace with your product const segment = "operations teams at 50-200 person companies"; const region = "DACH"; const market = await felo<ChatData>("/v2/chat", { query: `Who buys ${product} for ${segment} in ${region}, what do they use today, and what objections come up?`, }); const seedSources = market.data.resources.slice(0, 5);예제 출력
{ "answer": "Buyers in this segment usually start from spreadsheets and …", "sources": [ { "link": "https://example.com/category-page", "title": "…", "snippet": "…" } ] }카테고리 페이지 자체 읽기
시장을 틀 잡는 페이지를 가져옵니다. 카테고리 개요, 비교 페이지, 가격 페이지입니다. readability를 켜 Markdown으로 만들고 가져온 날짜를 붙입니다. 시장 읽기의 품질은 배경 페이지에 달려 있습니다.
gtm.ts type ExtractData = { data: { content: string } }; const marketPages = [ { url: "https://example.com/category", title: "Category overview" }, { url: "https://example.com/comparison", title: "Comparison page" }, { url: "https://example.com/pricing", title: "Pricing page" }, ]; const pages = await Promise.all( marketPages.map(async (page) => { const res = await felo<ExtractData>("/v2/web/extract", { url: page.url, output_format: "markdown", with_readability: true, with_cache: true, }); const checkedAt = new Date().toISOString().slice(0, 10); return { ...page, checkedAt, content: res.data.content }; }), );예제 출력
{ "url": "https://example.com/category", "checkedAt": "2026-10-30", "content": "# Category overview\n\nExtracted page text…" }구매자가 문제를 어떻게 말하는지 모으기
X에서는 제품명이 아니라 구매자가 문제를 겪을 때 쓰는 말을 검색합니다. 핸들과 날짜를 남깁니다. 브리프는 언어와 반론에 쓰고 시장 규모나 반론 빈도의 지표로 쓰지 않습니다.
gtm.ts type XData = { data: { tweets: { content: string; author: { username: string }; created_at: string; metrics: { retweet_count: number; favorite_count: number }; }[]; }; }; const since = Math.floor((Date.now() - 90 * 24 * 60 * 60 * 1000) / 1000); const language = await felo<XData>("/v2/x/tweet/search", { query: `(spreadsheet OR "scheduling tool") (alternative OR "looking for")`, limit: 25, since_time: since, }); const quotes = language.data.tweets.slice(0, 5);예제 출력
{ "data": { "tweets": [ { "content": "we are still doing this in a spreadsheet", "author": { "username": "example_ops" }, "created_at": "2026-10-18T11:05:00Z", "metrics": { "retweet_count": 1, "favorite_count": 18 } } ] } }결정을 중심으로 브리프 쓰기
세그먼트 정의, 구매자 언어, 대안, 반론, 열린 질문을 하나의 Markdown으로 묶습니다. 모든 주장은 출처와 날짜를 유지하고 시장 규모는 출처가 있을 때만 쓰며 공개 출처로 답할 수 없는 것은 추론 대신 열린 질문에 둡니다.
gtm.ts const today = new Date().toISOString().slice(0, 10); const sourceLine = (title: string, url: string, date: string) => `- ${title}: ${url} (checked ${date})`; const brief = [ `# GTM brief — ${segment} in ${region}`, "", "## Segment definition", "See the category page for how the segment is described. Market size: Not available from public sources reviewed.", "", "## Buyer language", ...quotes.map((post) => `- @${post.author.username}, ${post.created_at.slice(0, 10)}: ${post.content}`), "", "## Alternatives buyers mention", "Spreadsheets, an incumbent suite, and doing nothing. Treated as language until a source ranks them.", "", "## Objections and proof required", "Migration path and a named reference. Marked open: whether the objection changes by company size.", "", "## Open questions", "- How much of the segment already has a dedicated budget line?", "- Which objection blocks a pilot most often?", "", "## Sources", ...pages.map((page) => sourceLine(page.title, page.url, page.checkedAt)), ...seedSources.map((source) => `- ${source.title}: ${source.link}`), ].join("\n"); console.log(brief);예제 출력
# GTM brief — operations teams at 50-200 person companies in DACH
다음 시장을 위해 증거 남기기
세그먼트와 지역마다 LiveDoc을 하나 만들고 가져온 페이지를 URL 리소스로, 브리프를 문서 리소스로 추가합니다. 다음 시장은 같은 출처에서 시작하고 카테고리 페이지를 다시 가져오지 않으며 URL 재추가는 중복 제거됩니다.
gtm.ts type LiveDocData = { data: { short_id: string } }; const briefDoc = await felo<LiveDocData>("/v2/livedocs", { name: `GTM: ${segment} — ${region}`, description: `Market evidence checked ${today}`, }); await felo(`/v2/livedocs/${briefDoc.data.short_id}/resources/urls`, { urls: pages.map((page) => ({ url: page.url, title: page.title })), }); await felo(`/v2/livedocs/${briefDoc.data.short_id}/resources/doc`, { title: `GTM brief ${today}`, content: brief, }); console.log(briefDoc.data.short_id); // reuse for the next region예제 출력
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
포함되는 것
- Chat API의 출처 있는 시장 읽기와 그 근거 페이지
- 카테고리, 비교, 가격 페이지의 Markdown 추출
- 핸들과 날짜가 있는 X 구매자 언어와 반론
- 출시 결정을 중심으로 구성한 브리프
- 다음 지역이나 출시에서 증거를 재사용하는 LiveDoc
하지 않는 것
- 공개 출처만. 유료 시장 보고서, 패널, 고객 인터뷰는 다루지 않음
- 시장 규모나 성장률을 추정하지 않음. 데이터가 없으면 “사용 불가”로 표시
- X 게시물은 언어와 신호이며 구매자의 대표 표본이 아님
- 세그먼트나 가격을 대신 고르지 않음
- 브리프를 게시하거나 CRM에 쓰지 않음
자주 묻는 질문
유료 시장 조사 보고서가 필요한가요?
아니요. 공개 출처를 읽고 빈틈을 표시합니다. 이미 보고서가 있다면 LiveDoc에 문서 리소스로 추가하고 다른 출처처럼 인용하세요.
다른 언어 시장도 조사할 수 있나요?
네. 지역과 언어 자리표시자를 설정하세요. 인용은 원문으로 남기고 옆에 번역을 붙여 현지 리뷰어가 표현을 확인할 수 있게 합니다.
시장 규모를 알려주나요?
출처가 명시할 때만 링크와 날짜를 붙여 보여줍니다. 그렇지 않으면 숫자를 만들지 않고 게시물 하나에서 외삽하지 않으며 “사용 불가”라고 씁니다.
고객과 대화할 수 있나요?
아니요. 공개 출처만 읽습니다. 인터뷰 메모는 문서 리소스로 추가하고 내부용으로 표시하세요. 비공개 메모를 공개 증거로 제시하지 않습니다.
리서치 브리프와 무엇이 다른가요?
리서치 브리프는 질문 하나에 답합니다. 이 워크플로는 증거를 go-to-market 결정(세그먼트, 구매자 언어, 대안, 반론, 구매자가 요구하는 증명)에 맞춰 구성해 출시 계획에 넘길 수 있게 합니다.
브리프 비용은 얼마인가요?
각 chat, 추출, X 검색은 사용량 기반 크레딧을 씁니다. 현재 요금은 가격 페이지에 있고 프롬프트는 쓰기 전에 승인을 요청합니다.
관련 워크플로
질문 하나를 출처 있는 리서치 브리프로 바꾸기
웹에 질문을 던지고, 답변의 근거 페이지를 Markdown으로 가져오고, X의 실무자 의견을 더한 뒤 증거를 나중에도 검색할 수 있는 LiveDoc에 남깁니다.
워크플로 열기리서치영업팀이 바로 쓰는 경쟁사 분석 만들기
경쟁사 자체 페이지, 주변 보도, X의 구매자 반응을 모아 모든 주장에 출처, 날짜, 상태를 붙인 분석을 만듭니다.
워크플로 열기오피스리서치 페이지를 슬라이드 덱으로 바꾸기
페이지를 추출해 LiveDoc 맥락으로 저장하고 PPT Task API가 deck을 만드는 동안 완료 링크를 폴링합니다.
워크플로 열기내 방식으로 바꾸기
같은 레시피를 실제 배포 방식에 맞게 조정합니다.
지역별로 실행하기
장 구조는 그대로 두고 지역과 언어 자리표시자만 바꿉니다. 지역마다 LiveDoc 하나와 같은 질문을 써 브리프를 비교 가능하게 합니다.
내 인터뷰 메모 추가하기
고객 통화 메모를 문서 리소스로 붙이고 내부용으로 표시합니다. 브리프는 공개 증거 옆에서 참조할 수 있지만 비공개 메모를 공개 출처로 제시하지 않습니다.
출시 deck에 넘기기
반론과 증명 섹션을 deck 워크플로에 넘기고 출처 목록을 붙여 둡니다. 브리프는 증거 계층이고 deck은 그 표현이며 두 번째 진실이 아닙니다.
더 알아보기
이 레시피의 배경이 되는 참고 페이지와 다음에 볼 곳.