LlamaParse + GPT-4o로 청구서 데이터 추출 및 자동 기록

최종 업데이트: 2/21/2026읽는 시간: 2
#문서 파싱#청구서 처리#OCR#JSON 추출#재무 운영#Google Sheets#Telegram

LlamaParse로 PDF를 파싱한 뒤 GPT-4o로 엄격한 청구서 JSON을 생성합니다. 결과를 Google Sheets에 기록하고 원본은 Google Drive에 보관, Telegram으로 검토 알림을 보냅니다.

누구에게 적합한가요?

재무 운영팀스타트업 운영자회계 담당자청구서를 다루는 세일즈 오퍼레이션구매를 다루는 PM

어떤 문제를 해결하나요?

과제

  • 청구서 수기 입력은 약 12분/건, 시급 $50 기준 약 $10.00/건.

  • 복사/붙여넣기 오류로 세금/총액/공급사명이 약 1-3% 불일치해 재작업.

  • 원시 OCR 텍스트는 노이즈가 많아 다페이지 PDF에서 20,000-60,000 토큰이 흔함.

솔루션

  • 파싱+추출을 약 45초/건으로 줄여 인건비를 약 $0.63/건(약 94% 절감).

  • 스키마 검증 JSON으로 불일치율을 약 0.2%까지 낮춤.

  • 구조화 파싱+타깃 프롬프트로 약 2,000-6,000 토큰(약 70-95% 감소).

이 툴킷으로 달성할 수 있는 결과

청구서/업무 PDF를 원장화하고, 원본 아카이브와 빠른 인적 검토까지 한 번에 만듭니다.

청구서를 단일 JSON 계약으로 표준화

스키마 검증으로 총액 누락/날짜 오류/통화 불일치를 원장 반영 전에 차단.

감사 가능한 운영(첨부 분실 방지)

각 JSON 행을 원본 파일과 연결해, 감사 대응을 30분 찾기에서 30초 조회로 전환.

워크플로우 개요

1문서 유입(이메일/업로드)
2LlamaParse 텍스트+레이아웃 파싱
3GPT-4o 스키마 준수 JSON 추출
4Sheets 원장 + Drive 아카이브
5Telegram 검토 알림
1

Step 1: 원본 문서 수집하기

이메일 첨부(벤더에 적합) 또는 수동 업로드 폴더로 청구서 PDF를 수집하고, 최소 수신 메타데이터를 기록합니다.

실전 프롬프트/코드:

System: You are an operations assistant. Capture invoice intake metadata.
Return ONLY JSON: {"source":"email|upload","received_at":"ISO-8601","sender":"string","filename":"string","notes":"string"}.
Unknown fields must be null.

전문가 팁: 추출 전에 원본을 먼저 저장하면 실패 시에도 감사 추적이 보장됩니다.

청구서 PDF 수신 및 저장

추천 이유:

메일 스레드 기반 첨부 수집으로 발신자/타임스탬프를 보존해 감사 수준의 인입 기록을 만들 수 있어 선택.

Gmail

Gmail

4.8FreemiumEN

AI 기반 커뮤니케이션 허브 및 워크플로우 자동화

2

Step 2: 문서를 정제 텍스트로 파싱하기

저장된 PDF를 LlamaParse에 보내 레이아웃을 최대한 유지한 출력(markdown/text)을 받아, 라인아이템과 총액이 읽히도록 합니다.

실전 프롬프트/코드:

import os
from llama_parse import LlamaParse

parser = LlamaParse(
    api_key=os.environ.get("LLAMA_CLOUD_API_KEY"),
    result_type="markdown",
    verbose=False,
)

# file_path = "/path/to/invoice.pdf"
# documents = parser.load_data(file_path)
# parsed_markdown = "

".join([d.text for d in documents])

전문가 팁: 다페이지 문서는 페이지 구분자를 유지해 검토 시 원문 페이지로 빠르게 추적하세요.

레이아웃이 보존된 청구서 파싱 텍스트

추천 이유:

표/라인아이템 가독성을 유지하는 레이아웃 파싱으로 후속 LLM 혼동과 재작업을 줄일 수 있어 선택.

3

Step 3: 청구서 필드를 유효 JSON으로 추출하기

파싱된 텍스트를 GPT-4o에 제공하고 스키마 준수 JSON만 허용해 총액/세금/라인아이템을 정규화합니다.

실전 프롬프트/코드:

System: You are a finance data extraction engine.
Return ONLY valid JSON matching the schema exactly. No markdown, no commentary.

Normalization rules:
- Dates: ISO-8601 (YYYY-MM-DD).
- Amounts: numbers only (no symbols).
- Currency: ISO 4217 when possible (USD, JPY, EUR).
- Line items: include quantity/unit_price when present; else null.

JSON Schema (strict):
{
  "invoice_number": "string|null",
  "invoice_date": "string|null",
  "vendor_name": "string|null",
  "vendor_tax_id": "string|null",
  "bill_to": "string|null",
  "currency": "string|null",
  "subtotal": "number|null",
  "tax": "number|null",
  "total": "number|null",
  "due_date": "string|null",
  "payment_terms": "string|null",
  "line_items": [
    {"description":"string|null","quantity":"number|null","unit_price":"number|null","amount":"number|null"}
  ]
}

전문가 팁: subtotal + tax와 total 차이가 0.5%를 넘으면 실패 처리해 파싱 드리프트를 조기에 잡으세요.

JSON으로 추출된 청구서 필드

추천 이유:

반구조 텍스트에서 안정적으로 추론해 스키마 채우기/정규화를 수행하므로 취약한 정규식 없이 구현 가능해 선택.

GPT-4o

GPT-4o

4.9FreemiumEN

텍스트, 오디오, 시각 기능을 통합한 실시간 옴니 모델

4

Step 4: 원장에 기록하고 원본을 아카이브하기

Google Sheets에 “청구서 1건=행 1개”로 JSON을 기록하고, 원본 PDF는 Google Drive에 저장한 뒤 파일 URL을 시트에 남깁니다.

실전 프롬프트/코드:

// Pseudo-code (any Sheets/Drive SDK)
const row = [
  data.invoice_number,
  data.invoice_date,
  data.vendor_name,
  data.currency,
  data.subtotal,
  data.tax,
  data.total,
  data.due_date,
  drive_file_url
];
// sheets.appendRow("Invoices", row)

전문가 팁: vendor_name + invoice_number + total 같은 결정적 키로 중복 기록을 막으세요.

스프레드시트 원장 행과 아카이브 링크

추천 이유:

원장 데이터를 행 단위로 관리해 필터/피벗/감사를 커스텀 앱 없이 수행할 수 있어 선택.

구글 스프레드시트

구글 스프레드시트

4.8FreemiumEN

Gemini AI가 탑재된 스마트 협업 스프레드시트

추천 이유:

원본 PDF를 안정적으로 저장하고 공유 URL을 제공해 원장 행에서 감사 증적까지 연결할 수 있어 선택.

구글 드라이브

구글 드라이브

4.8FreemiumEN

자동화된 문서 워크플로우와 스마트 스토리지를 위한 AI 기반 클라우드 OS

5

Step 5: 승인자에게 검토 알림 보내기

Telegram으로 공급사/총액/만기일/Drive 링크를 간단히 보내 사람이 약 10초 안에 승인/반려할 수 있게 합니다.

실전 프롬프트/코드:

Message template:
New invoice ready for review
- Vendor: {vendor_name}
- Total: {currency} {total}
- Due: {due_date}
- Link: {drive_file_url}
Reply with: APPROVE or REJECT:{reason}

전문가 팁: 시트에 상태 컬럼(Pending/Approved/Rejected)을 두면 정산/대사가 결정적으로 됩니다.

청구서 요약이 포함된 검토 알림

추천 이유:

무거운 티켓 시스템 없이도 낮은 마찰로 사람 승인을 넣을 수 있어 선택.

텔레그램

텔레그램

4.9FreemiumEN

AI 봇, 미니 앱 및 자동화된 커뮤니티를 위한 개방형 OS

유사 워크플로우

다른 툴을 찾으시나요? 대체 워크플로우를 살펴보세요.

자주 묻는 질문

청구서/영수증/명세서에 가장 적합하며, 표·다단 PDF일수록 효과가 큽니다. 보고서/계약/스캔 이미지에도 적용 가능하지만 300DPI 수준의 스캔 품질을 권장합니다.

소규모 기준으로 파싱+LLM 추출은 건당 약 $0.01-$0.05가 현실적인 범위이며 저장 비용은 거의 0에 가깝습니다. 핵심 절감은 인건비를 $10.00/건(12분, $50/시간)에서 $0.63/건(45초)로 낮추는 것입니다.

5-15페이지 청구서 묶음의 원시 OCR 텍스트는 보통 20,000-60,000 토큰이지만, 레이아웃 파싱+타깃 추출은 대개 2,000-6,000 토큰으로 70-95% 절감되어 API 비용과 응답 시간을 함께 줄입니다.

손글씨/저해상도 스캔은 정확도를 낮출 수 있습니다. 또한 공급사별 라인아이템 형식이 들쭉날쭉하면 line_items 일관성을 위해 더 엄격한 스키마와 정규화 룰북이 필요합니다.

가능합니다: PDF 업로드→파싱→추출 프롬프트 실행→JSON을 시트 행에 기록→검토 메시지 전송. 자동화는 복붙 제거와 대량 처리 일관성에 가치가 있습니다.

알림은 이메일/Slack으로, 원장은 Airtable 또는 DB 테이블로 대체할 수 있습니다. 핵심 계약은 파싱→스키마 JSON→원장 기록→원본 링크입니다.