리서치
재고를 확보하기 전에 제품 니치 조사하기
카테고리 맥락을 모으고, 명시한 날짜에 경쟁사 페이지를 캡처하고, X에서 구매자 불만을 읽은 뒤 증거와 메모를 하나의 LiveDoc에 남겨 주문 전에 다시 볼 수 있게 합니다.
프롬프트 복사
대괄호 항목을 바꾼 뒤 Claude Code, Codex 또는 터미널에 접근할 수 있는 AI에 붙여넣으세요. Felo 스킬을 설치하고 크레딧을 쓰기 전에 확인한 뒤 워크플로를 실행합니다.
재고를 확보하거나 출시하기 전에 이 제품 니치를 조사해 주세요: [제품 또는 카테고리]. 시장: [국가 또는 지역]. 채널: [마켓플레이스 / DTC / 리테일]. 구매자 게시물 기간: 최근 [30]일. 비교 제품 또는 경쟁사 URL: [URL]. 예산과 마진 제약: [제약]. 독자: [팀]. Markdown 메모에 다음을 포함해 주세요. 1. 한 문단 판단: 더 조사할 가치가 있는지, 무엇이 바뀌면 판단이 바뀌는지. 2. 수요 신호: 관심, 계절성, 대체품에 대해 출처가 뭐라고 하는지. 3. 경쟁 제품: 각 제품의 주장, 페이지에서 확인한 가격, 구매자가 부족하다고 말하는 점. 4. 가격 포지셔닝: 페이지에서 실제로 발견한 가격대와 각각의 확인 날짜. 5. 구매자 불만과 충족되지 않은 니즈, 인용, 계정, 날짜 포함. 6. 재고 구매 전에 해결해야 할 위험과 열린 질문. 7. 출처: 사용한 모든 페이지와 게시물의 URL과 날짜. 규칙: - API가 반환한 것만 사용하세요. 시장 규모, 판매 추정, 리뷰 수, 경쟁사 가격을 지어내지 마세요. - 가격은 확인한 그대로, 페이지 URL과 확인 날짜를 붙여 보고하세요. 평균을 내거나 정규화하지 마세요. - X 게시물은 시장 데이터가 아니라 일화로 다루고, 표본이 얇으면 그렇다고 밝혀 주세요. - 벤더의 주장과 구매자의 보고를 구분해 주세요. - 크레딧을 쓰기 전에 실행할 추출과 검색을 보여 주고 제 승인을 기다려 주세요. - 공급업체에 연락하거나 주문하거나 X에서 누구에게도 메시지를 보내지 마세요. - 결과를 ./product-research.md에 쓰고 채팅에서 요약해 주세요.
복사 내용에는 설치 단계와 안전 규칙도 포함됩니다.
완성되는 것
실행 시 예제 출력입니다. 실시간 생성이 아닙니다.
제품 조사 — 예시 카테고리
판단
더 볼 가치는 있지만 공개 증거만으로 재고 결정을 내리기엔 부족하다. 아래 열린 질문이 다음 단계다.
카테고리 맥락
구매자는 압력보다 카운터 공간과 청소 난이도로 비교한다. 시장 규모 추정을 뒷받침하는 공개 출처는 없다.
경쟁 페이지
- Example A — 제품 페이지(2026-10-30 캡처)
- Example B — 제품 페이지(2026-10-30 캡처)
구매자 보고
- @example_buyer: “1년에 세 번째 교체. 씰이 망가진다.” — 2026-10-19
- @example_home: “청소에 몇 분 걸리는데 아무도 말하지 않는다.” — 2026-10-24
가격 포지셔닝
가격은 2026-10-30에 링크된 페이지에서 캡처했다. 두 단계로 나뉘며 각 페이지를 직접 인용하고 평균을 내지 않았다.
위험과 열린 질문
- 씰 내구성이 가장 반복되는 불만.
- 반품률을 다루는 출처가 없다.
- 주문 전에 공급업체 리드타임과 도착 원가를 확인한다.
출처
- https://example.com/product-a — 2026-10-30
- https://x.com/example_buyer/status/... — 2026-10-19
실제 호출
개발자용: 같은 워크플로를 실행 순서대로 담은 복사 가능한 코드.
실제 API 호출 보기
Chat에 카테고리 그림 요청하기
빈 페이지가 아니라 출처 있는 답변에서 시작합니다. Chat은 공개 웹을 검색하고 페이지 순위를 매기고 사용한 리소스를 반환합니다. 수요 맥락, 대안, 흔한 불만을 한 질문으로 묻고 상위 리소스를 증거 목록으로 남깁니다.
product-research.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 niche = "portable espresso maker"; // replace with the category you are judging const context = await felo<ChatData>("/v2/chat", { query: `Demand, price bands, and buyer complaints for ${niche} in the US`, }); const sources = context.data.resources.slice(0, 5);예제 출력
{ "answer": "Buyers compare on counter space and cleanup …", "sources": [ { "link": "https://example.com/category-guide", "title": "…", "snippet": "…" } ] }경쟁사 페이지 캡처하기
readability를 켜고 경쟁사 제품 페이지 2~3개를 Markdown으로 추출합니다. 목표는 오늘 페이지의 주장과 가격이지 바꿔 쓴 스펙 표가 아닙니다. URL과 내용을 함께 두고 메모에 캡처 날짜를 기록합니다. 날짜 없는 가격은 소문입니다.
product-research.ts const PRODUCT_PAGES = [ { url: "https://example.com/product-a", title: "Example A — product page" }, { url: "https://example.com/product-b", title: "Example B — product page" }, ]; type ExtractData = { data: { content: string } }; const listings = await Promise.all( PRODUCT_PAGES.map((page) => felo<ExtractData>("/v2/web/extract", { url: page.url, output_format: "markdown", with_readability: true, }).then((extracted) => ({ ...page, content: extracted.data.content })), ), );예제 출력
[ { "url": "https://example.com/product-a", "title": "Example A — product page", "content": "# Example A\n\nSpecs and price as displayed…" } ]X에서 구매자 보고 읽기
공급업체 페이지는 기능을 나열하고 구매자는 실패를 말합니다. 니치와 배송, 품질, 환불 같은 마찰 단어를 조합해 최근 30일을 검색하고 핸들, 날짜, 게시물 링크를 남깁니다. 이 게시물은 일화이며 수요 데이터가 아니라고 메모에 명시합니다.
product-research.ts type XData = { data: { tweets: { content: string; author: { username: string }; created_at: string; metrics: { retweet_count: number; favorite_count: number; reply_count: number }; url: string; }[]; }; }; const since = Math.floor((Date.now() - 30 * 24 * 60 * 60 * 1000) / 1000); const search = await felo<XData>("/v2/x/tweet/search", { query: `"${niche}" (shipping OR quality OR refund)`, limit: 50, since_time: since, }); const complaints = search.data.tweets;예제 출력
{ "data": { "tweets": [ { "content": "Third replacement in a year; the seal fails.", "author": { "username": "example_buyer" }, "created_at": "2026-10-19T15:02:00Z", "metrics": { "retweet_count": 1, "favorite_count": 12, "reply_count": 3 }, "url": "https://x.com/example_buyer/status/..." } ] } }메모 작성하기
이 단계는 일반 코드입니다. 카테고리 답변, 캡처 날짜, 구매자 인용, 출처 목록을 하나의 Markdown으로 묶습니다. 열린 질문을 정직하게 남깁니다. 페이지가 증명하는 것과 공급업체에 확인할 것을 나누기 때문에 메모가 유용합니다.
product-research.ts const capturedOn = new Date().toISOString().slice(0, 10); const memo = [ `# Product research — ${niche}`, "", "## Category context", context.data.answer, "", "## Competitor pages", ...listings.map( (page) => `- [${page.title}](${page.url}) — captured ${capturedOn}`, ), "", "## What buyers report", ...complaints.slice(0, 10).map( (post) => `- @${post.author.username} (${post.created_at.slice(0, 10)}): ${post.content}`, ), "", "## Sources", ...sources.map((source) => `- [${source.title}](${source.link})`), ].join("\n"); console.log(memo);증거를 LiveDoc에 저장하기
니치마다 한 번 실행합니다. LiveDoc을 만들고
short_id를 설정에 저장합니다. 경쟁사 페이지와 Chat 출처를 URL 리소스로 추가해 아카이브에서 중복 제거하고 메모를 문서 리소스로 추가합니다. 주문 전에 캡처를 검색해 메모 작성 후 움직인 가격을 확인할 수 있습니다.product-research.ts type LiveDocData = { data: { short_id: string } }; const research = await felo<LiveDocData>("/v2/livedocs", { name: `Product research: ${niche}`, description: "Competitor pages, buyer posts, and the memo", }); await felo(`/v2/livedocs/${research.data.short_id}/resources/urls`, { urls: [ ...listings.map((page) => ({ url: page.url, title: page.title })), ...sources.map((source) => ({ url: source.link, title: source.title })), ].slice(0, 10), }); await felo(`/v2/livedocs/${research.data.short_id}/resources/doc`, { title: `Product memo — ${capturedOn}`, content: memo, });예제 출력
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
포함되는 것
- Chat의 출처 있는 카테고리 그림과 근거 페이지
- 명시한 날짜에 캡처한 경쟁사 제품 페이지 Markdown
- 핸들, 날짜, 링크가 있는 X 구매자 불만
- 이 입력으로 만든 Markdown 메모
- 증거와 메모를 함께 보관하는 LiveDoc
하지 않는 것
- 공개 출처만. 유료 시장 보고서, 공급업체 견적, 내부 판매 데이터는 제외
- 시장 규모, 판매량, 마진을 추정하지 않음
- 가격은 캡처한 그대로 기록하고 정규화하거나 평균내지 않음
- X 게시물은 일화이며 수요 데이터가 아님
- 공급업체 연락, 주문, 리스팅 변경은 하지 않음
자주 묻는 질문
시장 맥락은 어디서 오나요?
Chat API가 출처 있는 답변과 사용한 공개 페이지를 반환합니다. 경쟁사 페이지는 제공한 URL에서 Web Fetch로 추출하고 구매자 게시물은 X Search에서 가져옵니다. 비공개 판매 데이터는 쓰지 않습니다.
제품이 잘 팔릴지 알려주나요?
아니요. 공개 증거(카테고리 맥락, 캡처 가격, 구매자 불만)를 정리하고 모르는 것을 씁니다. 수요 검증에는 광고, 사전 판매, 공급업체 대화 같은 자체 데이터가 필요합니다.
마켓플레이스가 추출을 막으면?
Web Fetch는 URL마다 공개 페이지를 가져오고 일부 사이트는 막습니다. 접근 가능한 제품이나 공급업체 페이지를 쓰고 메모에 캡처하지 못한 것을 표시하세요. 가격을 추측하지 않습니다.
경쟁사 가격이 오래되지 않게 하려면?
메모의 모든 가격은 페이지 URL과 캡처 날짜에 묶입니다. 구매 결정 직전에 추출을 다시 실행하세요. 아카이브에 이전 캡처가 남아 가격이 움직였는지 볼 수 있습니다.
공급업체나 판매자에게 연락하나요?
아니요. 읽기 전용 워크플로입니다. 페이지를 추출하고 공개 게시물을 검색하고 로컬 메모를 쓰며 메시지 전송, 주문, 리스팅 편집은 하지 않습니다.
리서치 한 번 비용은?
Chat, 페이지 추출, X 검색은 사용량 기반 크레딧을 씁니다. 현재 요금은 가격 페이지에 있고 프롬프트는 실행 전에 승인을 요청합니다.
관련 워크플로
질문 하나를 출처 있는 리서치 브리프로 바꾸기
웹에 질문을 던지고, 답변의 근거 페이지를 Markdown으로 가져오고, X의 실무자 의견을 더한 뒤 증거를 나중에도 검색할 수 있는 LiveDoc에 남깁니다.
워크플로 열기콘텐츠소셜 대화를 주간 리스닝 브리프로 바꾸기
지난주 브랜드와 경쟁사 관련 X 게시물을 검색하고 출처 있는 웹 맥락을 더하고 배경 페이지를 읽은 뒤 매호를 아카이브해 다음 주는 아는 것에서 시작합니다.
워크플로 열기오피스리서치 페이지를 슬라이드 덱으로 바꾸기
페이지를 추출해 LiveDoc 맥락으로 저장하고 PPT Task API가 deck을 만드는 동안 완료 링크를 폴링합니다.
워크플로 열기내 방식으로 바꾸기
같은 레시피를 실제 배포 방식에 맞게 조정합니다.
리뷰 영상 자막 추가하기
카테고리에 리뷰 영상이 있으면 YouTube Subtitling으로 자막을 가져와 구매자 섹션에 타임스탬프 인용을 2~3개 더합니다. 영상 리뷰도 한 사람의 경험이므로 X 게시물과 같은 일화 라벨을 붙입니다.
두 후보 나란히 비교하기
후보마다 같은 단계를 실행하고 메모를 나란히 둡니다. 주장된 기능, 캡처 가격, 반복되는 불만, 열린 질문입니다. 자체 판매나 반품 데이터가 생기기 전까지 비교는 정성적으로 유지합니다.
주문 전에 갱신하기
주문 전날 페이지 추출을 다시 실행합니다. 같은 LiveDoc을 쓰고 새 메모를 추가해 데스크 리서치와 구매 사이에 무엇이 바뀌었는지(예산을 넘은 가격 포함) 남깁니다.
더 알아보기
이 레시피의 배경이 되는 참고 페이지와 다음에 볼 곳.