---
title: "n8n ile Fatura PDF'lerini AI ile Otomatik Oku ve Tabloya Yaz"
description: "E-posta ekindeki fatura PDF'inden AI ile tutar, tarih, KDV çıkarıp Google Sheets'e yazan n8n akışını adım adım kurun. AI kredisi dahil, BYOK yok."
canonical: https://agentroost.app/tr/blog/finans-fatura-okuma-otomasyon-n8n
date: 2026-05-02T12:00:00Z
---

[Canonical URL](https://agentroost.app/tr/blog/finans-fatura-okuma-otomasyon-n8n)

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:

1. **Tetikleme** — yeni fatura e-postası geldiğinde akış başlar.
2. **Çı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.
3. **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 Kutusu` veya faturalar için etiketlediğiniz bir klasör (örneğin `invoices`)
- **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 `.pdf` filtresi 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:

```javascript
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:

1. E-posta gelir, Gmail Trigger 5 dakika içinde yakalar.
2. PDF eki indirilir, metne çevrilir.
3. LLM şunu döndürür:
```json
{
  "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"
}
```
4. Bu veri Google Sheets'e yeni satır olarak eklenir.
5. 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:**

1. [agentroost.app](/tr/agents/n8n) adresinde hesap açın (e-posta, Google, Microsoft veya Discord ile).
2. Framework olarak **n8n** seçin, instance'ınıza bir ad verin.
3. Yaklaşık 2 dakika içinde `https://<sizin-id>.agentroost.app` adresinde n8n editörünüz açılır.
4. Yukarıdaki akışı içe aktarın veya sıfırdan kurun.
5. **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.
6. 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.

[Planları karşılaştır →](/tr/pricing)

---

## Ö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.
