---
name: Sole Search
slug: sole-search
category: Automation
description: An AI agent that crawls official Korean government databases to find small business support programs, evaluates eligibility based on the user’s business profile, and generates a tailored report sorted by urgency and relevance.
github: "https://github.com/djfksjd/sole-search"
language: Python
stars: 45
forks: 12
install: "npx degit https://github.com/djfksjd/sole-search ~/.claude/skills/sole-search"
installs_to: ~/.claude/skills/sole-search
source_path: SKILL.md
collection_size: 2
category_size: 1523
collection_url: "https://dirskills.com/collections/djfksjd/sole-search"
added: 2026-08-11T07:21:26.092Z
last_synced: 2026-08-11T07:21:26.092Z
canonical_url: "https://dirskills.com/skills/sole-search"
---

# Sole Search

An AI agent that crawls official Korean government databases to find small business support programs, evaluates eligibility based on the user’s business profile, and generates a tailored report sorted by urgency and relevance.

**Install:**

```bash
npx degit https://github.com/djfksjd/sole-search ~/.claude/skills/sole-search
```

## README

# sole-search — 소상공인 지원사업 조사 스킬

> 치킨집·카페·미용실·온라인셀러… **이미 장사하고 있는 사장님**을 위한 정부·지자체 지원사업
> 조사 AI 스킬. 소상공인24·기업마당의 모집중 공고를 전수 수집하고, 가게 프로필(업종·지역·업력·
> 직원수·매출)로 자격을 판정해 **"오늘 신청할 것"** 부터 마감순으로 보고서를 만든다.

[English](README.en.md) · 형제 스킬: [ir-search](https://github.com/djfksjd/ir-search) (아이템·창업팀용)

## 무엇이 다른가

| | 네이버 검색 | sole-search |
|---|---|---|
| 커버리지 | 유명한 사업 위주 | 정의된 공식 소스(소상공인24·기업마당 + 판판대로·서울신보·보조금24) **모집중 전수** + 수집·검토 카운트 공개 |
| 자격 판정 | 직접 공고 읽어야 함 | 업종·업력·직원수·매출·지역 기준 5단계 판정 (`확인됨`/`조건부`/`확인 필요`/`신청 불가`/`사업전환 후보`) |
| 첨부파일 | PDF·HWP 직접 열람 | PDF/HWPX 자동 추출 검증 — 못 읽은 첨부는 "확인 필요"로 정직하게 보고 |
| 정책자금 | 흩어진 정보 | 융자계획 공고 원문 기반 + "갚아야 하는 돈" 명시, 회차 상태 확인처 안내 |
| 재조사 | 처음부터 다시 | diff 모드 — 신규·변경(금리·마감)·소멸만 증분 보고 |

세 가지 원칙: **조용한 누락 금지** (coverage_manifest 필수) · **추정 금지** (원문에 없으면 '불명') ·
**허위신청 유도 금지** ("변형하면 가능" 프레이밍 없음).

## 설치

```bash
curl -fsSL https://raw.githubusercontent.com/djfksjd/sole-search/main/install.sh | bash
```

Claude Code / Codex / agy(Antigravity) / Gemini CLI를 자동 감지해 설치하고, 없으면
`~/.agents/skills/sole-search`로 클론한다(Cursor·Grok Build 등 파일 기반 호스트용).

수동 설치 (Claude Code):

```bash
claude plugin marketplace add djfksjd/sole-search
claude plugin install sole-search@djfksjd
```

## 빠른 시작 — 5분 안에 첫 조사 돌리기

**1. 조사 전용 폴더에서 새 세션을 연다** (보고서·수집 데이터가 이 폴더에 쌓인다):

```bash
mkdir -p ~/my-shop && cd ~/my-shop && claude
```

**2. 이렇게 말한다** — 아무거나 한 마디면 스킬이 자동으로 잡힌다:

> "우리 가게에 맞는 지원사업 찾아줘"

**3. 첫 사용이면 쉬운 말 인터뷰**(6~9문항)가 나온다. 관공서 용어 없이 아는 대로만 답하면 된다:

> **AI**: 무슨 장사 하세요? 어느 동네예요? 사업자등록은 언제? 직원은 몇 명? …
>
> **사장님**: 마포구에서 치킨집 해요. 개인사업자고 2022년 3월에 등록했어요.
> 4대보험 직원 1명, 알바까지 3명. 소상공인확인서는 없고 작년 매출은 1억~5억 사이.
> 필요한 건 지원금이랑 가게 시설, 온라인 판매요.

인터뷰를 건너뛰고 싶으면 첫 메시지에 가게 정보를 같이 적어도 된다:

```
우리 가게 지원사업 찾아줘. 마포구 치킨집, 개인사업자, 2022년 3월 등록,
4대보험 직원 1명(알바 포함 3명), 소상공인확인서 없음, 작년 매출 1억~5억,
필요한 건 지원금·시설·온라인 판매.
```

**4. 기다린다.** 크롤링 2~3분(소상공인24 약 1,700건 + 기업마당 약 1,400건) 후
전 건 선별·판정을 거쳐 `survey-YYYYMMDD/report.md`가 만들어진다. 첫 전수조사는
수집보다 선별·상세검증에 시간이 더 걸린다.

**5. 다음부터는 즉시 시작.** 프로필이 `sole-profile.md`로 저장돼 있어
"바뀐 것 있나요?" 확인 한 번이면 바로 조사에 들어간다.

## 이런 걸 물어보면 된다

| 이렇게 말하면 | 스킬이 하는 일 |
|---|---|
| "우리 가게에 맞는 지원사업 찾아줘" | 전 범위 전수조사 (지원금·정책자금·교육 전부) |
| "소상공인 정책자금 알아봐줘" | 대출·보증 중심 조사 — 한도·금리·거치기간까지 |
| "가게 시설개선 지원 뭐 있어?" | 프로필 needs에 맞춰 조사 |
| "지난번 이후 새로 나온 거 있어?" | **diff 모드** — 신규·변경·소멸만 증분 보고 |
| "이 공고 나 되는 거야?" + 링크 | 해당 공고 원문·첨부 검증 후 판정 |

단, "예비창업", "K-Startup", "R&D 과제", "우리 아이템" 같은 **창업·아이템 기반** 탐색은
이 스킬이 아니라 [ir-search](https://github.com/djfksjd/ir-search)가 맡는다.

## 조사 범위 선택

사용자가 원하는 범위만 조사할 수 있습니다. `scope_plan.py`는 실제 수집 전에
자동·수동·후보 소스를 구분한 실행계획과 안정적인 `scope_fingerprint`를 만듭니다.
네트워크·API·LLM을 호출하지 않으므로 토큰이나 외부 쿼터를 소모하지 않습니다.

| 프리셋 | 용도 |
|---|---|
| `quick` | 소상공인24·기업마당 핵심 공고만 빠르게 |
| `focused` | 사용자가 고른 소스 한 곳만 |
| `recommended` | 자동화된 핵심 소스 전체(권장) |
| `all_registered` | 현재 등록·검증된 모든 소스 |
| `all_known` | 정책자금·보증·지역·여성·사회적기업 등 수동·후보 소스까지 계획 |
| `custom` | `--include`로 지정한 소스만 선택 |

```bash
python3 skills/sole-search/scripts/scope_plan.py \
  --preset recommended --need grant --need facility --need online_sales \
  --out survey-20260730/scope-plan.json

# 소상공인24만 확인
python3 skills/sole-search/scripts/scope_plan.py \
  --preset custom --source sbiz24 --out /tmp/sole-scope.json
```

`all_known`은 정책자금 회차, 지역신보·KOREG, 고용24, 여성기업종합정보포털,
사회적기업진흥원, 수출바우처, 관광기업지원센터, 중진공·기보 등도 누락 없이
계획하지만, 자동 수집이 검증되지 않은 소스는 `manual` 또는 `candidate`로 표시합니다.
부분 수집이나 범위 변경은 종료 공고로 단정하지 않습니다.

## 보고서는 이렇게 나온다

`survey-YYYYMMDD/report.md` 예시 (발췌):

```markdown
# 우리 가게 지원사업 조사 보고서 (2026-07-20)

## 1. 오늘 신청할 것
| 사업명 | 혜택 | 마감 | 판정 근거 |
|---|---|---|---|
| 서울시 소상공인 스마트기기 지원 | 키오스크 최대 500만원 (자부담 30%) | D-4 | 공고 3p: 서울 소재 개인사업자, 상시근로자 5인 미만 충족 |
| 온라인 판로 진출 바우처 | 스토어 입점·촬영 지원 300만원 | D-11 | 첨부 PDF 신청자격 전 항목 충족 |

## 2. coverage_manifest
| 소스 | 수집 | 선별 | 상태 |
|---|---|---|---|
| 소상공인24(소진공) | 493/493 | 493 | success |
| 소상공인24 통합(지자체 포함) | 1,291/1,291 (중복 94) | 1,197 | success |
| 기업마당 | 1,435/1,435 (96페이지) | 1,435 | success |
| 소진공 정책자금 회차 접수상태 | — | — | manual (ols 유선·사이트 확인 필요) |

## 3. 💰 받는 돈 (갚지 않는 지원금)
### 확인됨 (2건) …
### 확인 필요 (3건) — ○○지원사업: 첨부가 HWP라 자동 추출 불가, 창구 확인 필요 …

## 4. 🏦 빌리는 돈 — ⚠️ 갚아야 하는 돈입니다
| 상품 | 한도 | 금리(2026-07-20 기준) | 기간 | 취급 |
|---|---|---|---|---|
| 소상공인 일반경영안정자금 | 7천만원 | 정책자금 기준금리+0.6%p | 5년(2년 거치) | 소진공 |
```

핵심 규칙:
- **coverage_manifest가 반드시 들어간다** — 몇 건을 수집해서 몇 건을 검토했는지 숨기지 않는다
- **`확인됨`은 공고 원문(첨부 포함)에서 신청자격을 확인했다는 뜻**이지 선정 보장이 아니다
- 읽지 못한 첨부(HWP 등)가 있으면 그 후보는 절대 `확인됨`이 되지 않는다

## 재조사 (diff 모드)

한 달 뒤 같은 폴더에서:

> "지난번 이후 새로 나온 지원사업 있어?"

직전 조사와 비교해 이것만 보고한다:

```
🆕 신규 12건 — 그중 자격 확인됨 3건
🔄 변경 2건 — 청년몰 임대지원: 마감 연장(8/1→8/15) · 경영안정자금: 금리 변경(2.0→2.3%)
❌ 소멸 1건 — 지난번 '확인됨'이던 △△바우처가 마감됨 (기회 소멸)
✅ 승계 1,240건 — 변동 없음, 직전 판정 유지
```

가게 정보가 바뀌었으면(이사·직원 증가 등) 승계 없이 전체를 다시 판정한다.
정책자금과 직전 `확인됨` 항목은 변동이 없어 보여도 접수상태를 재확인한다.

## sole-profile.md — 저장되는 것과 안 되는 것

인터뷰 결과는 현재 폴더의 `sole-profile.md`에 저장된다 (직접 열어 수정해도 된다):

```yaml
---
entity_type: individual          # 개인사업자
business_status: active
industry_text: 치킨집 (호프 겸업)
registration_date: 2022-03
regular_employee_count: 1        # 4대보험 기준
headcount: 3                     # 알바 포함
sales_band: 100m_500m
province: 서울
district: 마포구
needs: [grant, facility, online_sales]
---
```

**저장하지 않는 것**: 세금 체납 여부, 대출 잔액, 신용점수, 출생연월.
정책자금 후보가 나오면 그때 "이 요건 해당되세요?"로만 묻고 답을 기록하지 않는다.

## 선택 소스: 보조금24 (API 키 등록 시 활성화)

소상공인24·기업마당이 잡는 "모집 공고"와 달리, 보조금24는 **공고 형태가 아닌 상시 혜택**
(공공요금 감면, 소규모 수당, 지자체 개별 혜택 등 1만여 건)을 커버한다. 정부24 사이트는
크롤링이 허용되지 않아 공공데이터포털 오픈 API로만 접근하며, **무료 API 키를 등록하면
자동으로 켜지는 선택 소스**다. 키가 없어도 나머지 조사는 전부 정상 동작하고, 보고서에
"보조금24: 미활성"으로만 표시된다.

### API 키 받는 법 (5분, 무료, 자동승인)

1. **공공데이터포털 가입**: https://www.data.go.kr 접속 → 우측 상단 회원가입
   (네이버·카카오 간편가입 가능) → 로그인
2. **데이터 찾기**: 검색창에 **"대한민국 공공서비스(혜택) 정보"** 검색, 또는 바로
   https://www.data.go.kr/data/15113968/openapi.do 접속
3. **활용신청**: 페이지의 **[활용신청]** 버튼 클릭 → 활용목적에 "소상공인 지원사업 조회"
   등 간단히 작성 → 라이선스 동의 후 신청. **자동승인**이라 제출 즉시 사용 가능
   (개발계정 트래픽 일 10,000건 — 조사 1회에 약 22건이므로 충분)
4. **키 확인**: 마이페이지 → 데이터 활용 → Open API → 활용신청 현황 → 해당 API 클릭 →
   **일반 인증키(Encoding 또는 Decoding 어느 쪽이든)** 복사
5. **키 등록** — 둘 중 하나:

   ```bash
   # 방법 A: 리포 루트 .env (권장 — ir-search와 같은 키를 공유)
   #   .env 파일에  DATA_GO_KR_KEY=발급받은_인증키  한 줄. (.gitignore로 커밋 차단)

   # 방법 B: 공용 설정 파일 (ir-search·sole-search 공통)
   echo "발급받은_인증키" > ~/.config/data_go_kr_key && chmod 600 ~/.config/data_go_kr_key

   # 방법 C: 환경변수 (DATA_GO_KR_KEY 권장, DATA_GO_KR_API_KEY 도 인식)
   export DATA_GO_KR_KEY="발급받은_인증키"
   ```

   > 같은 data.go.kr 서비스키가 sole-search(gov24)와 ir-search(K-Startup) 양쪽에 재사용됩니다. 키는 스크립트가 직접 읽으며 **로그·에러·명령행에 절대 출력되지 않습니다**. `~/.config/sole-search/api_key` 도 여전히 인식됩니다.

6. 끝. 다음 조사부터 보조금24가 자동 포함된다. 확인하려면:

   ```bash
   python3 <스킬경로>/scripts/gov24_crawl.py list -o /tmp/gov24.jsonl --filter-target 소상공인
   # 정상이면 마지막 줄: TOTAL 10979 COLLECTED 250 MATCHED 250 (건수는 시점에 따라 다름)
   ```

**주의**: 인증키는 비밀번호처럼 다뤄라 — 프로필(`sole-profile.md`)·보고서 폴더·git 리포에
넣지 않는다(스킬이 자동으로 넣지 않으며, `.gitignore`에도 키 패턴이 등록돼 있다).
키가 만료·차단되면 조사 시 "키 확인 필요" 경고가 나온다 — 포털에서 키를 재발급하면 된다.

## 커버리지와 한계

- **자동(필수)**: 소상공인24(소진공 공고+통합조회), 기업마당 모집중 전체. "전수조사"는 이
  정의된 소스 범위 안에서의 전수이며, 모든 보고서에 소스별 수집·검토 상태가 명시된다
- **자동(권장)**: 판판대로(온라인판로 세부·수시 모집), 서울신용보증재단(서울 가게 한정 —
  고용보험료·산재보험료 지원 등 서울시 사업 원출처)
- **자동(선택)**: 보조금24 상시 혜택 — 위의 API 키 등록 시
- **수동 안내**: 소진공 정책자금 회차별 실시간 접수상태(ols), 지역신용보증재단 보증상품,
  미등록 지자체 포털 — `skills/sole-search/references/region-registry.md` 참조
- **HWP 첨부는 자동 추출이 안 된다** (HWPX·PDF는 된다). 해당 후보는 '확인 필요'로 표기되고
  원문 링크가 첨부된다 — 정직한 실패가 조용한 오판보다 낫다
- 크롤링이 차단(403·CAPTCHA)되면 우회하지 않고 해당 소스를 수동확인 절차로 전환한다
- 이 스킬은 **신청자격 확인**까지만 한다. 선정 가능성·대출 심사 통과를 예측하지 않으며,
  최종 확인은 접수기관 유선확인을 권장한다

## 자주 묻는 것

**Q. 시간이 얼마나 걸리나?** 첫 전수조사는 크롤링 2~3분 + 선별·상세검증 (전체 십수 분 수준,
후보 수에 따라 다름). diff 재조사는 변경분만 검증하므로 훨씬 빠르다.

**Q. 어느 지역이든 되나?** 전국 공고 + 소상공인24 통합조회에 연계된 지자체 공고까지 자동.
연계 안 된 지자체 포털은 보고서에 수동확인 안내로 나온다.

**Q. 폐업했는데 재기 지원도 찾아주나?** 된다 — 인터뷰에서 영업상태를 물으며,
폐업·재기(희망리턴패키지 등) 트랙도 조사 범위다.

**Q. 왜 어떤 사업은 '확인 필요'인가?** ① 첨부를 못 읽었거나(HWP) ② 프로필 정보로는
판정이 안 되거나(예: 소상공인확인서 없이 매출 근사치만 있는 경우) ③ 공고 원문이 모호한
경우다. 각 항목에 "무엇이 부족한지"가 같이 적힌다.

## 동작 원리 (요약)

```
0. 프로필     쉬운 말 인터뷰 → sole-profile.md (원자 필드 스키마)
1. 수집       sbiz_crawl.py    소상공인24 소진공 공고 + 통합조회(지자체 포함)
              sources_crawl.py 기업마당 모집중 전체 전 페이지
              region_crawl.py  판판대로 + 서울신보(서울 프로필)
              gov24_crawl.py   보조금24 상시 혜택 (API 키 등록 시)
1.5 선별      LLM이 전 건 검토 → screening.jsonl (감사 가능)
2. 판정       상세 원문 + 첨부(attach_download.py 다운로드 → attach_extract.py 추출) 검증 → 5단계 판정 + 근거 인용
3. 보고서     ① 오늘 신청할 것 ② coverage_manifest ③ 💰받는 돈/🏦빌리는 돈/🎓배우고 돕기 ④ 사업전환 후보
재조사        diff_surveys.py  필드·해시 비교, 프로필 변경 시 전체 재판정
```

크롤러는 Python 표준 라이브러리만 사용하며 요청 간 최소 0.5초 딜레이를 강제한다.
판단 로직은 스크립트에 없다 — **수집은 룰베이스, 판정은 LLM.**

## License

MIT

