Gemini Advanced 부동산 시장 분석 자동화 – 매물 보고서 작성 시간 83% 단축 사례
개요: 부동산 중개업체의 보고서 작성 병목 해소
서울 소재 중소 부동산 중개업체 ‘한빛부동산’은 매주 약 40건의 매물 시장분석 보고서를 수작업으로 작성하고 있었습니다. 실거래가 조회, 주변 인프라 분석, 경쟁 매물 비교까지 한 건당 평균 18분, 주 12시간 이상이 보고서 작성에 소요되었습니다. Gemini Advanced와 Google Sheets 연동, 그리고 멀티모달 분석 기능을 도입한 뒤 이 시간을 주 2시간 이내로 단축했습니다.
도입 전 문제점
- KB부동산, 국토교통부 실거래가 등 여러 출처에서 데이터를 수동 복사- 주변 학군·교통·상권 정보를 개별 검색 후 텍스트로 정리- 매물 사진을 보며 장단점을 직접 텍스트화- 보고서 포맷이 담당자마다 달라 품질 편차 발생
솔루션 아키텍처
| 구성 요소 | 역할 |
|---|---|
| Google Sheets | 매물 데이터 허브 (입력·저장·출력) |
| Gemini Advanced (1.5 Pro) | 시장 분석, 텍스트 생성, 이미지 분석 |
| Google Apps Script | 자동화 트리거 및 API 호출 |
| Google Docs | 최종 보고서 출력 |
| 매물ID | 주소 | 면적(㎡) | 매매가(만원) | 층수 | 방향 | 등록일 | 분석상태 |
| P001 | 서울 강남구 역삼동 123 | 84.5 | 135000 | 12/20 | 남향 | 2026-03-10 | 대기 |
| P002 | 서울 마포구 합정동 45 | 59.8 | 78000 | 5/15 | 동향 | 2026-03-11 | 대기 |
## Step 2: Gemini API 연동을 위한 Apps Script 설정
Google Sheets에서 **확장 프로그램 → Apps Script**를 열고 아래 코드를 추가합니다.
// Apps Script - Gemini API 호출 함수
const GEMINI_API_KEY = 'YOUR_API_KEY';
const GEMINI_ENDPOINT = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro:generateContent';
function analyzeProperty(address, area, price, floor, direction) {
const prompt = `당신은 부동산 시장 분석 전문가입니다.
다음 매물에 대해 아래 항목을 분석해 주세요:
[매물 정보]
- 주소: ${address}
- 면적: ${area}㎡
- 매매가: ${price}만원
- 층수: ${floor}
- 방향: ${direction}
[분석 항목]
- 주변 시세 대비 가격 적정성 (상/중/하)
- 입지 분석 (교통, 학군, 상권)
- 투자 포인트 및 리스크
- 추천 고객 유형
- 한줄 요약
JSON 형식으로 응답해 주세요.`;
const payload = {
contents: [{ parts: [{ text: prompt }] }],
generationConfig: {
temperature: 0.3,
maxOutputTokens: 2048
}
};
const options = {
method: ‘post’,
contentType: ‘application/json’,
payload: JSON.stringify(payload),
muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(
${GEMINI_ENDPOINT}?key=${GEMINI_API_KEY}, options
);
const json = JSON.parse(response.getContentText());
return json.candidates[0].content.parts[0].text;
}
Step 3: 시트 자동화 트리거 설정
새로운 매물이 등록되면 자동으로 분석을 실행하는 트리거를 추가합니다.
function onEditTrigger(e) {
const sheet = e.source.getActiveSheet();
if (sheet.getName() !== '매물목록') return;
const row = e.range.getRow();
const statusCol = 8; // 분석상태 컬럼
const status = sheet.getRange(row, statusCol).getValue();
if (status === ‘대기’) {
const address = sheet.getRange(row, 2).getValue();
const area = sheet.getRange(row, 3).getValue();
const price = sheet.getRange(row, 4).getValue();
const floor = sheet.getRange(row, 5).getValue();
const direction = sheet.getRange(row, 6).getValue();
const result = analyzeProperty(address, area, price, floor, direction);
// 결과를 분석결과 시트에 기록
const resultSheet = e.source.getSheetByName('분석결과');
resultSheet.appendRow([address, new Date(), result]);
sheet.getRange(row, statusCol).setValue('완료');
}
}
// 트리거 등록 (최초 1회 실행)
function createTrigger() {
ScriptApp.newTrigger(‘onEditTrigger’)
.forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
.onEdit()
.create();
}
Step 4: 멀티모달 분석 – 매물 사진 자동 분석
Gemini의 멀티모달 기능을 활용해 매물 사진에서 인테리어 상태, 채광, 전망 등을 자동 분석합니다.
function analyzePropertyImage(imageUrl) {
const prompt = `이 부동산 매물 사진을 분석해 주세요:
1. 인테리어 상태 (최신/보통/노후)
2. 채광 상태
3. 공간 활용도
4. 수리 필요 예상 항목
5. 고객 어필 포인트
JSON 형식으로 응답해 주세요.`;
const imageData = UrlFetchApp.fetch(imageUrl).getBlob().getBytes();
const base64Image = Utilities.base64Encode(imageData);
const payload = {
contents: [{
parts: [
{ text: prompt },
{ inlineData: { mimeType: ‘image/jpeg’, data: base64Image } }
]
}]
};
const options = {
method: ‘post’,
contentType: ‘application/json’,
payload: JSON.stringify(payload),
muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(
${GEMINI_ENDPOINT}?key=${GEMINI_API_KEY}, options
);
return JSON.parse(response.getContentText())
.candidates[0].content.parts[0].text;
}
Step 5: Google Docs 보고서 자동 생성
function generateReport(propertyId) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const data = ss.getSheetByName('분석결과');
// 분석 데이터를 읽어 Docs 보고서로 변환
const doc = DocumentApp.create(`매물분석_${propertyId}_${new Date().toISOString().slice(0,10)}`);
const body = doc.getBody();
body.appendParagraph('매물 시장 분석 보고서')
.setHeading(DocumentApp.ParagraphHeading.HEADING1);
body.appendParagraph(`생성일: ${new Date().toLocaleDateString('ko-KR')}`);
body.appendParagraph(`매물 ID: ${propertyId}`);
// 분석 결과 JSON을 파싱하여 섹션별 삽입
// ...(분석 데이터 삽입 로직)
return doc.getUrl();
}
도입 성과
| 지표 | 도입 전 | 도입 후 | 개선율 |
|---|---|---|---|
| 주간 보고서 작성 시간 | 12시간 | 2시간 | 83% 단축 |
| 보고서 1건 소요 시간 | 18분 | 3분 | 83% 단축 |
| 보고서 품질 일관성 | 담당자별 편차 큼 | 표준화된 포맷 | 품질 균일화 |
| 고객 만족도 (NPS) | 62 | 81 | +19p |
systemInstruction 파라미터에 "당신은 서울 부동산 시장 10년 경력 분석가입니다"와 같은 역할을 지정하면 전문성 있는 응답을 얻습니다.- **배치 처리:** 여러 매물을 한 번에 분석할 때는 Apps Script의 UrlFetchApp.fetchAll()을 사용해 병렬 호출하면 처리 속도가 3~5배 향상됩니다.- **캐싱 전략:** 같은 동네 매물은 주변 인프라 분석 결과를 CacheService에 저장해 API 호출 비용을 절감하세요.- **구조화된 출력:** responseMimeType: "application/json"과 responseSchema를 지정하면 파싱 오류 없이 안정적으로 JSON 응답을 받을 수 있습니다.
## Troubleshooting: 자주 발생하는 오류와 해결법
| 오류 | 원인 | 해결 방법 |
|---|---|---|
429 RESOURCE_EXHAUSTED | 분당 API 호출 한도 초과 | Utilities.sleep(2000)으로 호출 간격 조절. 무료 티어는 분당 15회, 유료는 분당 360회 |
400 INVALID_ARGUMENT | 이미지 크기 초과 또는 형식 불일치 | 이미지를 4MB 이하로 리사이즈, JPEG/PNG/WEBP만 지원 |
| JSON 파싱 오류 | Gemini 응답에 마크다운 코드블록 포함 | 응답에서 ```json과 ```을 제거하는 정규식 추가: text.replace(/```json\n?|```/g, '') |
| Apps Script 실행 시간 초과 | 6분 제한 초과 | 매물을 10건씩 배치로 나누고 Time-based Trigger로 순차 실행 |
| 빈 응답 또는 중단 | 안전 필터에 의한 차단 | safetySettings에서 HARM_CATEGORY 임계값을 BLOCK_ONLY_HIGH로 조정 |
Q1. Gemini Advanced 구독 없이 무료로 사용할 수 있나요?
Gemini API는 무료 티어를 제공하며, 분당 15회 호출과 일일 1,500회 호출이 가능합니다. 소규모 중개업체(일 10~20건 분석)라면 무료 티어로 충분합니다. 다만 멀티모달 분석과 대용량 컨텍스트(100만 토큰)를 활용하려면 유료 플랜(Google AI Studio 또는 Vertex AI)을 권장합니다. 월 비용은 사용량에 따라 다르지만 일반적으로 월 5~15달러 수준입니다.
Q2. 실거래가 데이터를 자동으로 Google Sheets에 가져올 수 있나요?
국토교통부 공공데이터 포털의 실거래가 API를 Apps Script의 UrlFetchApp으로 호출하면 자동 수집이 가능합니다. 공공데이터 포털에서 API 키를 발급받은 뒤, 매일 정해진 시간에 Time-based Trigger로 실행하면 최신 실거래가가 시트에 자동 갱신됩니다. 이 데이터를 Gemini 분석의 입력 컨텍스트로 함께 전달하면 더욱 정확한 시세 분석이 가능합니다.
Q3. 분석 결과의 정확도는 어느 정도인가요?
Gemini의 분석은 입력된 데이터와 학습된 일반 지식을 기반으로 하므로, 최신 지역 특수 요인(재개발 계획, 학교 신설 등)은 프롬프트에 추가 컨텍스트로 제공해야 합니다. 한빛부동산 사례에서는 분석가의 최종 검토를 거치되, 초안 작성 시간을 대폭 줄이는 방식으로 운영하고 있습니다. 정확도를 높이기 위해 실거래가 데이터, 인근 인프라 목록 등 구조화된 데이터를 프롬프트에 함께 포함하는 것을 권장합니다.