토론

영업 리서치 스킬: 잠재 고객 리서치 방법론

Wikiprompt, 무료 프롬프트 백과사전에서

TomsTools

2026년 2월 6일

영업 리서치 스킬: 잠재 고객 리서치 방법론 완전한 영업 리서치 스킬로, 방법론, 체크리스트, 신호 점수화, 그리고 회사 보강, LinkedIn 파싱, 잠재 고객 우선순위화를 위한 Python 스크립트를 포함합니다.

프롬프트 내용저장

🌐
--- name: sales-research description: 이 스킬은 영업 잠재 고객 조사를 위한 방법론과 모범 사례를 제공합니다. --- # 영업 조사 ## 개요 이 스킬은 영업 잠재 고객 조사를 위한 방법론과 모범 사례를 제공합니다. 회사 조사, 연락처 프로파일링, 신호 탐지를 다루어 실행 가능한 인텔리전스를 표면화합니다. ## 사용법 company-researcher 및 contact-researcher 하위 에이전트는 다음 상황에서 이 스킬을 참조합니다: - 새 잠재 고객 조사 - 회사 정보 찾기 - 개별 연락처 프로파일링 - 구매 신호 탐지 ## 조사 방법론 ### 회사 조사 체크리스트 1. **기본 프로필** - 회사명, 업종, 규모(직원 수, 매출) - 본사 및 주요 지사 위치 - 설립일, 성장 단계 2. **최근 동향** - 자금 조달 발표(최근 12개월) - M&A 활동 - 리더십 변경 - 제품 출시 3. **기술 스택** - 알려진 기술(BuiltWith, StackShare) - 도구를 언급하는 채용 공고 - 통합 파트너십 4. **신호** - 채용 공고(확장 = 기회) - Glassdoor 리뷰(고충 지점) - 뉴스 언급(맥락) - 소셜 미디어 활동 ### 연락처 조사 체크리스트 1. **전문 배경** - 현재 역할 및 재임 기간 - 이전 회사 및 역할 - 교육 2. **영향력 지표** - 보고 구조 - 의사 결정 권한 - 예산 소유권 3. **참여 유도 포인트** - 최근 LinkedIn 게시물 - 게재된 기사 - 연설 활동 - 공통 연결 ## 리소스 - `resources/signal-indicators.md` - 구매 신호 분류 체계 - `resources/research-checklist.md` - 전체 조사 체크리스트 ## 스크립트 - `scripts/company-enricher.py` - 여러 소스에서 회사 데이터 집계 - `scripts/linkedin-parser.py` - LinkedIn 프로필 데이터 구조화 FILE:company-enricher.py #!/usr/bin/env python3 """ company-enricher.py - 여러 소스에서 회사 데이터 집계 입력: - company_name: 문자열 - domain: 문자열 (선택) 출력: - profile: name: 문자열 industry: 문자열 size: 문자열 funding: 문자열 tech_stack: [문자열] recent_news: [뉴스 항목] 의존성: - requests, beautifulsoup4 """ # 요구 사항: requests, beautifulsoup4 import json from typing import Any from dataclasses import dataclass, asdict from datetime import datetime @dataclass class NewsItem: title: str date: str source: str url: str summary: str @dataclass class CompanyProfile: name: str domain: str industry: str size: str location: str founded: str funding: str tech_stack: list[str] recent_news: list[dict] competitors: list[str] description: str def search_company_info(company_name: str, domain: str = None) -> dict: """ 기본 회사 정보 검색. 프로덕션에서는 Clearbit, Crunchbase 등의 API를 호출할 것. """ # TODO: 실제 API 호출 구현 # 임시 반환 구조 return { "name": company_name, "domain": domain or f"{company_name.lower().replace(' ', '')}.com", "industry": "Technology", # API에서 가져올 것 "size": "Unknown", "location": "Unknown", "founded": "Unknown", "description": f"Information about {company_name}" } def search_funding_info(company_name: str) -> dict: """ 자금 조달 정보 검색. 프로덕션에서는 Crunchbase, PitchBook 등을 호출할 것. """ # TODO: 실제 API 호출 구현 return { "total_funding": "Unknown", "last_round": "Unknown", "last_round_date": "Unknown", "investors": [] } def search_tech_stack(domain: str) -> list[str]: """ 기술 스택 탐지. 프로덕션에서는 BuiltWith, Wappalyzer 등을 호출할 것. """ # TODO: 실제 API 호출 구현 return [] def search_recent_news(company_name: str, days: int = 90) -> list[dict]: """ 회사에 대한 최근 뉴스 검색. 프로덕션에서는 뉴스 API를 호출할 것. """ # TODO: 실제 API 호출 구현 return [] def main( company_name: str, domain: str = None ) -> dict[str, Any]: """ 여러 소스에서 회사 데이터 집계. Args: company_name: 조사할 회사 이름 domain: 회사 도메인 (선택, 추론됨) Returns: 업종, 규모, 자금 조달, 기술 스택, 뉴스를 포함한 회사 프로필 dict """ # 기본 회사 정보 가져오기 basic_info = search_company_info(company_name, domain) # 자금 조달 정보 가져오기 funding_info = search_funding_info(company_name) # 기술 스택 탐지 company_domain = basic_info.get("domain", domain) tech_stack = search_tech_stack(company_domain) if company_domain else [] # 최근 뉴스 가져오기 news = search_recent_news(company_name) # 프로필 컴파일 profile = CompanyProfile( name=basic_info["name"], domain=basic_info["domain"], industry=basic_info["industry"], size=basic_info["size"], location=basic_info["location"], founded=basic_info["founded"], funding=funding_info.get("total_funding", "Unknown"), tech_stack=tech_stack, recent_news=news, competitors=[], # 업종 분석에서 강화될 것 description=basic_info["description"] ) return { "profile": asdict(profile), "funding_details": funding_info, "enriched_at": datetime.now().isoformat(), "sources_checked": ["company_info", "funding", "tech_stack", "news"] } if __name__ == "__main__": import sys # 예제 사용 result = main( company_name="DataFlow Systems", domain="dataflow.io" ) print(json.dumps(result, indent=2)) FILE:linkedin-parser.py #!/usr/bin/env python3 """ linkedin-parser.py - LinkedIn 프로필 데이터 구조화 입력: - profile_url: 문자열 - 또는 name + company: 문자열 출력: - contact: name: 문자열 title: 문자열 tenure: 문자열 previous_roles: [역할 객체] mutual_connections: [문자열] recent_activity: [게시물 요약] 의존성: - requests """ # 요구 사항: requests import json from typing import Any from dataclasses import dataclass, asdict from datetime import datetime @dataclass class PreviousRole: title: str company: str duration: str description: str @dataclass class RecentPost: date: str content_preview: str engagement: int topic: str @dataclass class ContactProfile: name: str title: str company: str location: str tenure: str previous_roles: list[dict] education: list[str] mutual_connections: list[str] recent_activity: list[dict] profile_url: str headline: str def search_linkedin_profile(name: str = None, company: str = None, profile_url: str = None) -> dict: """ LinkedIn 프로필 정보 검색. 프로덕션에서는 LinkedIn API 또는 Sales Navigator를 사용할 것. """ # TODO: 실제 LinkedIn API 통합 구현 # 참고: LinkedIn API는 엄격한 서비스 약관이 있음 return { "found": False, "name": name or "Unknown", "title": "Unknown", "company": company or "Unknown", "location": "Unknown", "headline": "", "tenure": "Unknown", "profile_url": profile_url or "" } def get_career_history(profile_data: dict) -> list[dict]: """ 프로필에서 경력 이력 추출. """ # TODO: 경력 추출 구현 return [] def get_mutual_connections(profile_data: dict, user_network: list = None) -> list[str]: """ 공통 연결 찾기. """ # TODO: 공통 연결 탐지 구현 return [] def get_recent_activity(profile_data: dict, days: int = 30) -> list[dict]: """ 최근 게시물 및 활동 가져오기. """ # TODO: 활동 추출 구현 return [] def main( name: str = None, company: str = None, profile_url: str = None ) -> dict[str, Any]: """ 영업 준비를 위해 LinkedIn 프로필 데이터 구조화. Args: name: 개인 이름 company: 근무 회사 profile_url: 직접 LinkedIn 프로필 URL Returns: 구조화된 연락처 프로필 dict """ if not profile_url and not (name and company): return {"error": "Provide either profile_url or name + company"} # 프로필 검색 profile_data = search_linkedin_profile( name=name, company=company, profile_url=profile_url ) if not profile_data.get("found"): return { "found": False, "name": name or "Unknown", "company": company or "Unknown", "message": "Profile not found or limited access", "suggestions": [ "Try searching directly on LinkedIn", "Check for alternative spellings", "Verify the person still works at this company" ] } # 경력 이력 가져오기 previous_roles = get_career_history(profile_data) # 공통 연결 찾기 mutual_connections = get_mutual_connections(profile_data) # 최근 활동 가져오기 recent_activity = get_recent_activity(profile_data) # 연락처 프로필 컴파일 contact = ContactProfile( name=profile_data["name"], title=profile_data["title"], company=profile_data["company"], location=profile_data["location"], tenure=profile_data["tenure"], previous_roles=previous_roles, education=[], # 프로필에서 추출될 것 mutual_connections=mutual_connections, recent_activity=recent_activity, profile_url=profile_data["profile_url"], headline=profile_data["headline"] ) return { "found": True, "contact": asdict(contact), "research_date": datetime.now().isoformat(), "data_completeness": calculate_completeness(contact) } def calculate_completeness(contact: ContactProfile) -> dict: """프로필 데이터가 얼마나 완전한지 계산.""" fields = { "basic_info": bool(contact.name and contact.title and contact.company), "career_history": len(contact.previous_roles) > 0, "mutual_connections": len(contact.mutual_connections) > 0, "recent_activity": len(contact.recent_activity) > 0, "education": len(contact.education) > 0 } complete_count = sum(fields.values()) return { "fields": fields, "score": f"{complete_count}/{len(fields)}", "percentage": int((complete_count / len(fields)) * 100) } if __name__ == "__main__": import sys # 예제 사용 result = main( name="Sarah Chen", company="DataFlow Systems" ) print(json.dumps(result, indent=2)) FILE:priority-scorer.py #!/usr/bin/env python3 """ priority-scorer.py - 잠재 고객 우선순위 계산 및 순위 지정 입력: - prospects: [신호가 있는 잠재 고객 객체] - weights: {deal_size, timing, warmth, signals} 출력: - ranked: [점수 및 근거가 있는 잠재 고객] 의존성: - (없음 - 순수 Python) """ import json from typing import Any from dataclasses import dataclass # 기본 점수 가중치 DEFAULT_WEIGHTS = { "deal_size": 0.25, "timing": 0.30, "warmth": 0.20, "signals": 0.25 } # 신호 점수 매핑 SIGNAL_SCORES = { # 높은 의도 신호 "recent_funding": 10, "leadership_change": 8, "job_postings_relevant": 9, "expansion_news": 7, "competitor_mention": 6, # 중간 의도 신호 "general_hiring": 4, "industry_event": 3, "content_engagement": 3, # 관계 신호 "mutual_connection": 5, "previous_contact": 6, "referred_lead": 8, # 부정 신호 "recent_layoffs": -3, "budget_freeze_mentioned": -5, "competitor_selected": -7, } @dataclass class ScoredProspect: company: str contact: str call_time: str raw_score: float normalized_score: int priority_rank: int score_breakdown: dict reasoning: str is_followup: bool def score_deal_size(prospect: dict) -> tuple[float, str]: """추정 거래 규모 기반 점수.""" size_indicators = prospect.get("size_indicators", {}) employee_count = size_indicators.get("employees", 0) revenue_estimate = size_indicators.get("revenue", 0) # 회사 규모 기반 간단한 점수 if employee_count > 1000 or revenue_estimate > 100_000_000: return 10.0, "Enterprise-scale opportunity" elif employee_count > 200 or revenue_estimate > 20_000_000: return 7.0, "Mid-market opportunity" elif employee_count > 50: return 5.0, "SMB opportunity" else: return 3.0, "Small business" def score_timing(prospect: dict) -> tuple[float, str]: """타이밍 신호 기반 점수.""" timing_signals = prospect.get("timing_signals", []) score = 5.0 # 기본 점수 reasons = [] for signal in timing_signals: if signal == "budget_cycle_q4": score += 3 reasons.append("Q4 budget planning") elif signal == "contract_expiring": score += 4 reasons.append("Contract expiring soon") elif signal == "active_evaluation": score += 5 reasons.append("Actively evaluating") elif signal == "just_funded": score += 3 reasons.append("Recently funded") return min(score, 10.0), "; ".join(reasons) if reasons else "Standard timing" def score_warmth(prospect: dict) -> tuple[float, str]: """관계 온도 기반 점수.""" relationship = prospect.get("relationship", {}) if relationship.get("is_followup"): last_outcome = relationship.get("last_outcome", "neutral") if last_outcome == "positive": return 9.0, "Warm follow-up (positive last contact)" elif last_outcome == "neutral": return 7.0, "Follow-up (neutral last contact)" else: return 5.0, "Follow-up (needs re-engagement)" if relationship.get("referred"): return 8.0, "Referred lead" if relationship.get("mutual_connections", 0) > 0: return 6.0, f"{relationship['mutual_connections']} mutual connections" if relationship.get("inbound"): return 7.0, "Inbound interest" return 4.0, "Cold outreach" def score_signals(prospect: dict) -> tuple[float, str]: """탐지된 구매 신호 기반 점수.""" signals = prospect.get("signals", []) total_score = 0 signal_reasons = [] for signal in signals: signal_score = SIGNAL_SCORES.get(signal, 0) total_score += signal_score if signal_score > 0: signal_reasons.append(signal.replace("_", " ")) # 0-10 척도로 정규화 normalized = min(max(total_score / 2, 0), 10) reason = f"Signals: {', '.join(signal_reasons)}" if signal_reasons else "No strong signals" return normalized, reason def calculate_priority_score( prospect: dict, weights: dict = None ) -> ScoredProspect: """잠재 고객의 전체 우선순위 점수 계산.""" weights = weights or DEFAULT_WEIGHTS # 구성 점수 계산 deal_score, deal_reason = score_deal_size(prospect) timing_score, timing_reason = score_timing(prospect) warmth_score, warmth_reason = score_warmth(prospect) signal_score, signal_reason = score_signals(prospect) # 가중 총점 raw_score = ( deal_score * weights["deal_size"] + timing_score * weights["timing"] + warmth_score * weights["warmth"] + signal_score * weights["signals"] ) # 근거 컴파일 reasons = [] if timing_score >= 8: reasons.append(timing_reason) if signal_score >= 7: reasons.append(signal_reason) if warmth_score >= 7: reasons.append(warmth_reason) if deal_score >= 8: reasons.append(deal_reason) return ScoredProspect( company=prospect.get("company", "Unknown"), contact=prospect.get("contact", "Unknown"), call_time=prospect.get("call_time", "Unknown"), raw_score=round(raw_score, 2), normalized_score=int(raw_score * 10), priority_rank=0, # 정렬 후 설정될 것 score_breakdown={ "deal_size": {"score": deal_score, "reason": deal_reason}, "timing": {"score": timing_score, "reason": timing_reason}, "warmth": {"score": warmth_score, "reason": warmth_reason}, "signals": {"score": signal_score, "reason": signal_reason} }, reasoning="; ".join(reasons) if reasons else "Standard priority", is_followup=prospect.get("relationship", {}).get("is_followup", False) ) def main( prospects: list[dict], weights: dict = None ) -> dict[str, Any]: """ 잠재 고객 우선순위 계산 및 순위 지정. Args: prospects: 신호가 있는 잠재 고객 객체 목록 weights: 점수 구성 요소에 대한 선택적 사용자 정의 가중치 Returns: 순위가 매겨진 잠재 고객 및 점수 세부 정보가 포함된 dict """ weights = weights or DEFAULT_WEIGHTS # 모든 잠재 고객 점수 계산 scored = [calculate_priority_score(p, weights) for p in prospects] # 원시 점수 내림차순 정렬 scored.sort(key=lambda x: x.raw_score, reverse=True) # 순위 할당 for i, prospect in enumerate(scored, 1): prospect.priority_rank = i # JSON 직렬화를 위해 dict로 변환 ranked = [] for s in scored: ranked.append({ "company": s.company, "contact": s.contact, "call_time": s.call_time, "priority_rank": s.priority_rank, "score": s.normalized_score, "reasoning": s.reasoning, "is_followup": s.is_followup, "breakdown": s.score_breakdown }) return { "ranked": ranked, "weights_used": weights, "total_prospects": len(prospects) } if __name__ == "__main__": import sys # 예제 사용 example_prospects = [ { "company": "DataFlow Systems", "contact": "Sarah Chen", "call_time": "2pm", "size_indicators": {"employees": 200, "revenue": 25_000_000}, "timing_signals": ["just_funded", "active_evaluation"], "signals": ["recent_funding", "job_postings_relevant"], "relationship": {"is_followup": False, "mutual_connections": 2} }, { "company": "Acme Manufacturing", "contact": "Tom Bradley", "call_time": "10am", "size_indicators": {"employees": 500}, "timing_signals": ["contract_expiring"], "signals": [], "relationship": {"is_followup": True, "last_outcome": "neutral"} }, { "company": "FirstRate Financial", "contact": "Linda Thompson", "call_time": "4pm", "size_indicators": {"employees": 300}, "timing_signals": [], "signals": [], "relationship": {"is_followup": False} } ] result = main(prospects=example_prospects) print(json.dumps(result, indent=2)) FILE:research-checklist.md # 잠재 고객 조사 체크리스트 ## 회사 조사 ### 기본 정보 - [ ] 회사명 (철자 확인) - [ ] 업종/버티컬 - [ ] 본사 위치 - [ ] 직원 수 (LinkedIn, 웹사이트) - [ ] 매출 추정치 (가능한 경우) - [ ] 설립일 - [ ] 자금 조달 단계/이력 ### 최근 뉴스 (최근 90일) - [ ] 자금 조달 발표 - [ ] 인수 또는 합병 - [ ] 리더십 변경 - [ ] 제품 출시 - [ ] 주요 고객 확보 - [ ] 언론 보도 - [ ] 실적/재무 뉴스 ### 디지털 발자국 - [ ] 웹사이트 검토 - [ ] 블로그/콘텐츠 주제 - [ ] 소셜 미디어 존재감 - [ ] 채용 공고 (채용 페이지 + LinkedIn) - [ ] 기술 스택 (BuiltWith, 채용 공고) ### 경쟁 구도 - [ ] 알려진 경쟁사 - [ ] 시장 위치 - [ ] 주장하는 차별점 - [ ] 최근 경쟁 움직임 ### 고충 지점 지표 - [ ] Glassdoor 리뷰 (테마) - [ ] G2/Capterra 리뷰 (B2B인 경우) - [ ] 소셜 미디어 불만 - [ ] 채용 공고 패턴 ## 연락처 조사 ### 전문 프로필 - [ ] 현재 직함 - [ ] 역할 재임 기간 - [ ] 회사 재직 기간 - [ ] 이전 회사 - [ ] 이전 역할 - [ ] 교육 ### 의사 결정 권한 - [ ] 보고 대상 - [ ] 팀 규모 (관리자인 경우) - [ ] 예산 권한 (추론) - [ ] 구매 참여 이력 ### 참여 유도 포인트 - [ ] 최근 LinkedIn 게시물 - [ ] 게재된 기사 - [ ] 팟캐스트 출연 - [ ] 컨퍼런스 발표 - [ ] 공통 연결 - [ ] 공유 관심사/그룹 ### 커뮤니케이션 스타일 - [ ] 게시물 톤 (격식/비격식) - [ ] 참여하는 주제 - [ ] 응답 패턴 ## CRM 확인 (가능한 경우) - [ ] 이전 접촉 포인트 - [ ] 이전 기회 - [ ] 회사 내 관련 연락처 - [ ] 동료 메모 - [ ] 이메일 참여 이력 ## 시간 기반 조사 깊이 | 사용 가능 시간 | 조사 깊이 | |----------------|----------------| | 5분 | 회사 기본 + 연락처 직함만 | | 15분 | + 최근 뉴스 + LinkedIn 프로필 | | 30분 | + 고충 지점 신호 + 참여 유도 포인트 | | 60분 | 전체 체크리스트 + 경쟁 분석 | FILE:signal-indicators.md # 신호 지표 참조 ## 높은 의도 신호 ### 채용 공고 - **관련 역할 3개 이상 게시** = 적극적인 이니셔티브, 예산 할당됨 - **귀하의 도메인에서 시니어 채용** = 전략적 우선순위 - **긴급 언어 ("ASAP", "immediate")** = 고충이 심각함 - **특정 도구 언급** = 경쟁사 또는 카테고리 인지도 ### 재무 이벤트 - **시리즈 B+ 자금 조달** = 성장 자본, 구매력 - **IPO 준비** = 운영 성숙도 필요 - **인수 발표** = 통합 과제 도래 - **매출 이정표 PR** = 예산 가용 ### 리더십 변경 - **귀하의 도메인에서 새 CXO** = 90일 우선순위 설정 - **새 CRO/CMO** = 기술 스택 평가 가능성 - **창업자 CEO 전환** = 운영 전문성 확립 ## 중간 의도 신호 ### 확장 신호 - **새 사무실 개설** = 인프라 필요 - **국제 확장** = 현지화, 규정 준수 - **새 제품 출시** = 확장 과제 - **주요 고객 확보** = 전달 압박 ### 기술 신호 - **RFP 게시** = 적극적인 구매 프로세스 - **벤더 검토 언급** = 비교 쇼핑 - **기술 스택 변경** = 통합 기회 - **레거시 시스템 불만** = 현대화 필요 ### 콘텐츠 신호 - **귀하의 주제에 대한 블로그 게시물** = 스스로 교육 중 - **웨비나 참석** = 관심 확인됨 - **백서 다운로드** = 문제 인지 - **컨퍼런스 발표** = 사고 리더십, 가시성 ## 낮은 의도 신호 (육성) ### 일반 활동 - **업계 이벤트 참석** = 시장 참여자 - **일반 채용** = 회사 성장 중 - **긍정적 언론** = 건강한 회사 - **소셜 미디어 활동** = 참여하는 리더십 ## 신호 점수 | 신호 유형 | 점수 | 조치 | |-------------|-------|--------| | 채용 공고 (관련) | +3 | 아웃리치 우선순위 | | 최근 자금 조달 | +3 | 대화에서 언급 | | 리더십 변경 | +2 | 시기 민감 기회 | | 확장 뉴스 | +2 | 성장 각도 | | 부정적 리뷰 | +2 | 고충 지점 각도 | | 콘텐츠 참여 | +1 | 육성 트랙 | | 신호 없음 | 0 | 발견 중심 |

전체 프롬프트를 보려면 로그인하세요

Continue with:

By logging in, you agree to our Terms of Use and Privacy Policy

사용법

이 프롬프트는 business와 함께 사용하도록 설계되었습니다. 위의 프롬프트 내용을 복사하여 원하는 AI 도구에 붙여넣으세요.

최상의 결과를 얻으려면 자리 표시자(대괄호 또는 대문자로 표시)를 특정 요구 사항으로 사용자 지정할 수 있습니다.

참고 자료

분류:business| prompts.chat| sales-research| prospecting

토론