n8n ile Fatura PDF'lerini AI ile Otomatik Oku ve Tabloya Yaz
Finans ekiplerindeki el ile veri girişinin büyük bir kısmı tek bir kaynaktan gelir: gelen kutusu. Tedarikçi faturaları e-posta ekinde PDF olarak gelir, biri açar, tutar ve tarihi muhasebe tablosuna yazar, bazen hata yapar. Bu döngü gereksiz — n8n ve bir LLM düğümü birlikte bu işi sizin yerinize yapabilir.
Bu rehberde, e-postalardan fatura PDF'ini alan, AI ile yapılandırılmış veriye dönüştüren ve Google Sheets'e yazan bir n8n akışını adım adım inşa ediyoruz. Gerçek düğüm adları, örnek prompt ve bir JSON parçasıyla.
Akışın Mantığı
Üç aşama var:
- Tetikleme — yeni fatura e-postası geldiğinde akış başlar.
- Çıkarım — PDF eki okunur, AI düğümü metni parse ederek tutar, tarih, KDV ve tedarikçi adını yapılandırılmış JSON'a dönüştürür.
- Yazma — çıkan veri muhasebe tablonuza (Google Sheets, Airtable veya bir HTTP endpoint) eklenir.
Adım Adım Kurulum
1. E-posta Tetikleyici: Gmail Trigger
n8n'de yeni bir akış açın. İlk düğüm olarak Gmail Trigger ekleyin.
- Event:
Message Received - Filters → Label:
Gelen Kutusuveya faturalar için etiketlediğiniz bir klasör (örneğininvoices) - Poll Interval: 5 dakika yeterlidir; kritik süreçlerde 1 dakikaya indirebilirsiniz.
İpucu: Gmail hesabını n8n'e OAuth ile bağlayın. Bağlantı kurulduğunda filtre, sadece ilgili e-postalar için tetiklenebilir.
2. Eki İndirme: Gmail → Get Attachment
Tetikleyici mesaj verisini aldıktan sonra bir Gmail: Get Attachment düğümü ekleyin.
- Message ID:
{{ $json.id }} - Attachment Index:
0(ilk eki al; birden fazla ek varsa bir IF düğümüyle ek adına göre.pdffiltresi koyun)
Bu düğüm eki base64 binary olarak çıkarır.
3. PDF'i Metne Çevirme: Extract From File
Binary PDF'ten metin almak için Extract From File düğümü kullanın.
- Operation:
PDF to Text - Binary Property:
data
Çıktı, faturanın ham metin içeriğidir. Düzgün biçimlendirilmemiş olabilir — boşluklar, satır kırıkları. Önemli değil; LLM bunu halledecek.
4. AI ile Veri Çıkarımı: Basic LLM Chain
İşin zekası burada. Bir Basic LLM Chain (veya AI Agent) düğümü ekleyin.
System Prompt:
Sen bir muhasebe asistanısın. Sana verilen fatura metninden aşağıdaki alanları çıkar ve SADECE geçerli bir JSON nesnesi döndür. Başka hiçbir şey yazma.
Alanlar:
- supplier_name: string (tedarikçi / fatura kesilen firma adı)
- invoice_number: string
- invoice_date: string (YYYY-MM-DD formatında)
- due_date: string (YYYY-MM-DD veya null)
- subtotal: number (KDV hariç tutar, sayı olarak)
- vat_amount: number (KDV tutarı, sayı olarak)
- total_amount: number (genel toplam, sayı olarak)
- currency: string (TRY, EUR, USD vb.)
Eğer bir alan bulunamazsa null döndür.
User Message:
{{ $json.text }}
Model: Desteklenen herhangi bir model seçilebilir. Küçük modeller bu tür yapılandırılmış çıkarım için genellikle yeterli olup maliyet açısından da avantajlıdır.
5. JSON'u Parse Etme: Code Düğümü
LLM bazen yanıta markdown kod bloğu (```json) ekler. Küçük bir Code düğümüyle bunu temizleyin:
const raw = $input.first().json.text || $input.first().json.output;
const cleaned = raw.replace(/```json\n?/g, '').replace(/```/g, '').trim();
return [{ json: JSON.parse(cleaned) }];
Bu adım, aşağı akış düğümlerinin temiz alanlarla çalışmasını sağlar.
6. Tabloya Yazma: Google Sheets
Son düğüm olarak Google Sheets: Append or Update Row ekleyin.
- Spreadsheet ID: muhasebe tablonuzun ID'si
- Sheet Name:
Faturalar - Column Mapping:
| Tablo Sütunu | n8n Değeri |
|---|---|
| Tedarikçi | {{ $json.supplier_name }} |
| Fatura No | {{ $json.invoice_number }} |
| Tarih | {{ $json.invoice_date }} |
| Vade | {{ $json.due_date }} |
| KDV Hariç | {{ $json.subtotal }} |
| KDV | {{ $json.vat_amount }} |
| Genel Toplam | {{ $json.total_amount }} |
| Para Birimi | {{ $json.currency }} |
7. Hata Yönetimi: IF + Slack/E-posta Bildirimi
AI çıkarımı her zaman eksiksiz olmayabilir — özellikle taranmış (scan) PDF'lerde OCR kalitesi düşük olabilir. Akışa bir IF düğümü ekleyin:
- Koşul:
{{ $json.total_amount }}is empty → True yoluna bir Slack: Send Message veya Send Email düğümü bağlayın, ekip uyarılsın. - False yoluna Google Sheets düğümünü bağlayın.
Bu sayede kayıplar gözden kaçmaz.
Gerçek Bir Senaryo
Diyelim ki tedarikçiniz her ay sonu PDF fatura gönderiyor. Akış şöyle işler:
- E-posta gelir, Gmail Trigger 5 dakika içinde yakalar.
- PDF eki indirilir, metne çevrilir.
- LLM şunu döndürür:
{
"supplier_name": "Tekno Yazılım A.Ş.",
"invoice_number": "2024-1187",
"invoice_date": "2024-11-30",
"due_date": "2024-12-15",
"subtotal": 42372.88,
"vat_amount": 7627.12,
"total_amount": 50000.00,
"currency": "TRY"
}
- Bu veri Google Sheets'e yeni satır olarak eklenir.
- Muhasebeci sabah tabloyu açtığında fatura zaten orada.
El ile giriş: sıfır.
Yaygın Sorunlar ve Çözümleri
Taranmış PDF'ler okunmuyor: "Extract From File" düğümü yalnızca metin tabanlı PDF'lerde çalışır. Görüntü tabanlı (taranmış) faturaları için önce bir OCR servisi (örneğin Google Document AI veya Adobe PDF Services) eklemeniz gerekir — bunlara n8n'deki HTTP Request düğümüyle istek gönderebilirsiniz.
Birden fazla ekli e-posta: IF düğümüyle attachmentName.endsWith('.pdf') kontrolü ekleyin; sadece PDF eklerini işleyin.
Aynı fatura iki kez girilebilir: Google Sheets'e yazmadan önce fatura numarasına göre bir Google Sheets: Lookup Row yapın; kayıt varsa IF düğümüyle bu yolu atlayın.
Para birimi dönüşümü: Tablonuza bir "TRY Karşılığı" sütunu eklemek istiyorsanız bir HTTP Request düğümüyle güncel kur çekebilirsiniz (örneğin api.exchangerate-api.com).
AgentRoost'ta Bu Akışı Çalıştırmak
Yukarıdaki akışı kendi bilgisayarınızda çalıştırırsanız bilgisayarın kapalı olduğu anlarda tetikleyici çalışmaz. Sunucu kurarsanız Docker, SSL, yedekleme, güncelleme meselesi başlar.
AgentRoost ile kendi n8n instance'ınızı alırsınız — siz sahipsiniz, verileriniz sizin, ama altyapı derdiniz yok.
Nasıl başlanır:
- agentroost.app adresinde hesap açın (e-posta, Google, Microsoft veya Discord ile).
- Framework olarak n8n seçin, instance'ınıza bir ad verin.
- Yaklaşık 2 dakika içinde
https://<sizin-id>.agentroost.appadresinde n8n editörünüz açılır. - Yukarıdaki akışı içe aktarın veya sıfırdan kurun.
- AI/LLM düğümüne API anahtarı girmenize gerek yok — AI kredisi aboneliklere dahildir. Birçok model arasından seçin; hepsi kutudan çıktığı gibi çalışır.
- Webhooklar için
https://<sizin-id>.agentroost.app/webhook/...adresiniz anında aktif ve HTTPS'li.
Fiyatlandırma $19.99/ay'dan başlar, aylık faturalama, istediğinizde iptal, 14 gün para iade garantisi.
Özet
Bu akışla yaptığınız şey basit: e-posta kutunuzu bir veri hattına dönüştürmek. Faturalar gelir, AI parse eder, tablo dolar. Boyut büyüdükçe — daha fazla tedarikçi, farklı diller, birden fazla para birimi — akışı genişletmek de n8n'de nispeten kolaydır; yeni bir düğüm ekler, yeni bir dal açarsınız.
Tek değişmez: 7/24 açık, güvenilir bir n8n instance'ı. Onu AgentRoost üstünde tutun, geri kalanını siz yönetin.
Sıkça sorulan sorular
Bu akış için OpenAI veya başka bir LLM API anahtarı girmem gerekiyor mu?
AgentRoost'ta hayır. AI/LLM düğümleri, aboneliğe dahil kredilerle çalışır. Kendi n8n instance'ınızı kendi sunucunuzda çalıştırıyorsanız evet, kendi API anahtarınızı girmeniz gerekir.
Taranmış (görüntü tabanlı) fatura PDF'leri de işlenebilir mi?
n8n'in yerleşik 'Extract From File' düğümü yalnızca metin katmanı olan PDF'lerde çalışır. Görüntü tabanlı (taranmış) belgeler için akışa bir OCR adımı eklemeniz gerekir — örneğin Google Document AI veya Adobe PDF Services'e HTTP Request düğümüyle istek gönderebilirsiniz.
Aynı fatura iki kez tabloya yazılır mı?
Varsayılan akış bunu kontrol etmez. Bunu önlemek için Google Sheets'e yazmadan önce bir 'Google Sheets: Lookup Row' düğümü ekleyip fatura numarasına göre arama yapın; kayıt mevcutsa IF düğümüyle bu yolu atlayın.
AgentRoost'taki n8n instance'ımdaki veriler ve akışlarım bana mı ait?
Evet. Aldığınız instance size özeldir (single-tenant). Akışlarınızı, kimlik bilgilerinizi ve verilerinizi dilediğiniz zaman export edebilirsiniz. AgentRoost sadece altyapıyı yönetir; içerik tamamen sizindir.
Aboneliği istediğimde iptal edebilir miyim?
Evet. Abonelikler aylıktır ve istediğiniz zaman iptal edilebilir. Ayrıca satın alma tarihinden itibaren 14 gün içinde iade garantisi mevcuttur.