하루 만에 Invoice Parser API를 만들고 RapidAPI에 등록했습니다 (21일 중 1일)

발행: (2026년 4월 5일 AM 01:02 GMT+9)
7 분 소요
원문: Dev.to

Source: Dev.to

Cover image for I Built an Invoice Parser API in One Day and Listed it on RapidAPI (Day 1 of 21)

Ruan Muller

저는 남아프리카공화국 출신의 독학 개발자이며 현재 회계학 학사 과정을 공부하고 있습니다. 오늘 저는 21일 연속 매일 새로운 API를 만들고 공개하는 도전을 시작했습니다.
Day 1이 완료되었습니다. 아래에는 제가 만든 내용, 작동 방식, 그리고 이를 어떻게 사용할 수 있는지 정확히 설명합니다.

문제

모든 회계 앱, 비용 추적기, 그리고 장부 관리 도구는 동일한 고충을 가지고 있습니다: 청구서가 PDF, 이미지, 혹은 일반 텍스트 형태로 도착하고, 누군가가 그 안에서 구조화된 데이터를 추출해야 합니다.

  • 공급업체 이름
  • 청구서 번호
  • 항목 내역
  • 세금
  • 총액
  • 마감일

반복적이고 오류가 발생하기 쉬운 작업입니다. 그리고 재무 도구를 만드는 모든 개발자는 이를 해결하기 위해 같은 복잡한 정규식 로직을 작성하게 됩니다.

그래서 저는 이를 대신해주는 API를 만들었습니다.

내가 만든 것

Invoice & Receipt Parser API – 원본 청구서 텍스트를 보내면 정리된 구조화된 JSON을 반환합니다.

입력

{
  "text": "Acme Corp\nInvoice No: INV-2024-0042\nDate: 15/03/2024\nDue: 15/04/2024\n\nWeb Design Services  2  $1500.00  $3000.00\nSEO Optimization     1   $800.00   $800.00\n\nSubtotal: $3800.00\nVAT 15%:   $570.00\nTotal Due: $4370.00"
}

출력

{
  "success": true,
  "data": {
    "document_type": "invoice",
    "vendor_name": "Acme Corp",
    "invoice_number": "INV-2024-0042",
    "dates": {
      "invoice_date": "15/03/2024",
      "due_date": "15/04/2024"
    },
    "currency": "USD",
    "totals": {
      "subtotal": 3800,
      "tax_rate": 15,
      "tax_amount": 570,
      "discount": null,
      "shipping": null,
      "total": 4370
    },
    "line_items": [
      {
        "description": "Web Design Services",
        "quantity": 2,
        "unit_price": 1500,
        "amount": 3000
      },
      {
        "description": "SEO Optimization",
        "quantity": 1,
        "unit_price": 800,
        "amount": 800
      }
    ],
    "confidence": {
      "score": 100,
      "level": "high"
    }
  }
}

AI 비용이 없습니다. 타사 종속성이 없습니다. 순수 Node.js이며, 이는 거의 제로에 가까운 운영 비용과 100 ms 미만의 응답 시간을 의미합니다.

6개의 엔드포인트

MethodEndpointDescription
GET/healthAPI가 온라인 상태인지 확인
POST/parse전체 추출 – 모든 필드
POST/parse/totals재무 총계만
POST/parse/line-items라인 아이템만
POST/parse/vendor공급업체 세부 정보만
POST/validate완전성 점수 + 누락된 필드

경량 엔드포인트는 한 번에 하나의 데이터만 필요하고 매번 전체 파싱에 비용을 지불하고 싶지 않은 고볼륨 파이프라인에 유용합니다.

How It Works

핵심 로직은 정규식 기반 추출기들의 체인으로, 각각은 단일 정보 조각에 초점을 맞춥니다.

function fullParse(text) {
  return {
    document_type:  detectDocType(text),
    vendor_name:    extractVendor(text),
    invoice_number: extractInvoiceNumber(text),
    dates:          extractDates(text),
    currency:       extractCurrency(text),
    totals:         extractTotals(text),
    line_items:     extractLineItems(text),
    payment_info:   extractPaymentInfo(text),
    contact:        extractContact(text),
    confidence:     calculateConfidence(data),
  };
}

Currency Detection

const CURRENCY_CODES = ["USD","EUR","GBP","ZAR","INR", /* … */];

function extractCurrency(text) {
  for (const code of CURRENCY_CODES) {
    if (new RegExp(`\\b${code}\\b`).test(text)) return code;
  }
  if (text.includes("$")) return "USD";
}

Bug Fix Example (Tax Amount)

// BROKEN — matches "15" from "VAT 15%"
/(?:vat|tax)[\s:$]*([0-9,. ]+)/i

// FIXED — requires decimal format, skips percentages
/(?:vat|tax)[\s:%\d]*?[\s:$£€]+([0-9,]+\.[0-9]{2})/i

Tip: 실제로 복잡하고 지저분한 청구서 텍스트로 반드시 테스트한 후에 배포하세요.

기술 스택

  • 런타임: Node.js + Express
  • 호스팅: Railway (무료 티어)
  • 마켓플레이스: RapidAPI
  • 의존성: express, cors, helmet, morgan, express-rate-limit

유료 API가 없습니다. AI 비용이 없습니다. 전체 비용은 월 $5 이하로 실행됩니다.

RapidAPI 요금제

플랜가격요청 수
Free$010 /월
Basic$9.99/mo500 /월
Pro$29.99/mo5 000 /월

이 빌드에서 추출한 내용

제 회계 배경이 실제로 도움이 되었습니다. 실제 인보이스에서 어떤 필드가 중요한지 정확히 알고 있었습니다—결제 조건, VAT율, SWIFT 코드, IBAN 번호 등. 이러한 도메인 지식 덕분에 추출기가 일반적인 솔루션보다 더 정확해졌습니다.

이는 여러분의 배경이 무엇이든, 올바른 분야에서 구축할 때 장점이 된다는 점을 상기시켜 줍니다.

Try It

The API is live on RapidAPI. Search for Invoice Receipt Parser or visit my profile.
The free tier gives you 10 requests/month to test with your own invoices.

다음 단계

내일은 Day 2 — Password Strength & Security Scorer API.

21일 빌드 챌린지를 따라하고 싶다면 dev.to에서 저를 팔로우하세요. 매일 다음 API와 함께 포스팅할 예정입니다.

원본 기사는 dev.to에 Ruan Muller가 게시했습니다.

전체 분석

제가 만든 것, 그 이유, 그리고 방법에 대한 전체 분석을 제공합니다.

API를 구축하고 있다면 댓글을 남겨 주세요—같은 일을 하는 다른 개발자들과 연결되는 것을 항상 환영합니다. 🇿🇦

남아프리카공화국에서 제작되었습니다. 전 세계에 판매됩니다.

0 조회
Back to Blog

관련 글

더 보기 »