Faktury kosztowe, które same trafiają do folderu i arkusza: automatyzacja w Make i Claude krok po kroku
Jestem zwolennikiem małych kroków. Nie budowania rozległych mechanizmów, które przejmują dużą część pracy, ale zaczynania automatyzacji od mniejszych kawałków. Takim kawałkiem było usprawnienie porządkowania faktur kosztowych.
- Zacznij od małego kawałka, a nie od rozległego mechanizmu: tu było to porządkowanie faktur kosztowych.
- Najpierw uporządkuj proces: pracownicy wysyłają wszystkie faktury na jeden adres e-mail (mailhook), który przekazuje je do Make.
- Make zapisuje załącznik na dysku Google, a Claude odczytuje z faktury dane i zwraca je w ustandaryzowanej strukturze. Pole, którego nie da się odczytać jednoznacznie, dostaje wartość null.
- Odczytane dane trafiają do arkusza Google bez przepisywania, a null to sygnał, że fakturę musi obejrzeć człowiek.
Klient zgłosił się do mnie z konkretną potrzebą. Pracownicy wysyłają faktury na różne sposoby, a on chciał, żeby zawsze, automatycznie, trafiały do jednego folderu na dysku. Dodatkowo każda faktura miała zostać przepisana do arkusza Google. Zapytał: czy da się to zrobić? Odpowiedziałem, że tak.
Najpierw proces, potem automatyzacja
Zaczęliśmy od przyjrzenia się obecnemu procesowi. Można było po prostu przenieść go do Make albo n8n, ale to świetna okazja, żeby usprawnić sam proces, zanim trafi do automatyzacji.
Dlatego zasugerowałem, żeby po wdrożeniu pracownicy zapamiętali jedno: od teraz wszystkie faktury wysyłają na wskazany adres e-mail. To tzw. mailhook, czyli unikalny adres, który przekazuje wiadomości do Make. Make je odbiera i dzięki temu możemy na nich pracować.
Jak wyglądała praca nad scenariuszem?
Krok po kroku
1. Przygotuj miejsce na faktury i arkusz
Zanim zaczniesz budować scenariusz, przygotuj:
- folder na dysku, do którego będą trafiać faktury. Dobrze, jeśli w środku są podfoldery z datami, np.
9/2026,10/2026,11/2026,12/2026; - arkusz (Excel lub Google) z nazwanymi kolumnami, których potrzebujesz.
2. Utwórz scenariusz w Make
Wejdź do Make.com, utwórz nowy scenariusz i nadaj mu nazwę. Kliknij plusik, żeby wybrać pierwszy moduł.
3. Dodaj mailhook
W wyszukiwarce wpisz „Mailhook” i wybierz Custom mailhook. Pojawi się okno tworzenia połączenia: kliknij Add, nadaj nazwę i zapisz.
W ten sposób dostajesz unikalny adres e-mail, który będzie odbierał wiadomości z fakturami.
Teraz przetestuj odbiór. Kliknij prawym przyciskiem myszy na moduł i wybierz Run this module once, a w tym samym czasie wyślij na ten adres maila z fakturą w załączniku. Jeśli mailhook odbierze wiadomość, w prawym górnym rogu modułu pojawi się ikonka z numerem 1.
4. Rozdziel scenariusz routerem
Kliknij plusik po prawej stronie mailhooka i wyszukaj Router. Rozdzieli on scenariusz na dwie ścieżki:
- Pierwsza: wiadomość spełnia warunki, więc jej załącznik trafia do wskazanego miejsca na dysku.
- Druga: wiadomość zawiera błędy, więc automat wysyła do nas maila z informacją o problemie.
5. Zapisz załącznik na dysku Google
Wskaż dokładne miejsce, gdzie ma pojawić się pobrana faktura.
6. Odczytaj dane z faktury przez Claude'a
Kliknij plusik obok modułu Google Drive i wybierz moduł Anthropic Claude, akcję Make an API Call. Utwórz połączenie, a następnie wypełnij pola:
- URL:
/v1/messages - Method:
POST - Headers → Header 1:
Content-Type - Value:
application/json - Body: poniższy kod
W body wskazujemy dwie rzeczy: plik faktury (zakodowany w base64) i polecenie dla Claude'a. Dzięki narzędziu zapisz_dane_faktury odpowiedź wraca w ustandaryzowanej strukturze, a nie jako luźny tekst. Pole, którego nie da się jednoznacznie odczytać, dostaje wartość null, więc Claude nie zgaduje.
Numery modułów w {{7.mimeType}} i {{base64(6.data)}} zależą od Twojego scenariusza. Wybierz właściwe pola z listy zamiast przepisywać numery.
{
"model": "claude-sonnet-5",
"max_tokens": 2048,
"messages": [
{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "base64",
"media_type": "{{7.mimeType}}",
"data": "{{base64(6.data)}}"
}
},
{
"type": "text",
"text": "Jesteś asystentem księgowym. Z załączonej faktury wyodrębnij dane i zapisz je za pomocą dostępnego narzędzia. Jeśli jakiegoś pola nie da się jednoznacznie odczytać, wstaw null."
}
]
}
],
"tools": [
{
"name": "zapisz_dane_faktury",
"description": "Zapisuje wyodrębnione dane faktury w ustandaryzowanej strukturze.",
"input_schema": {
"type": "object",
"properties": {
"numer_faktury": { "type": ["string", "null"] },
"data_wystawienia": { "type": ["string", "null"], "description": "Format YYYY-MM-DD" },
"data_sprzedazy": { "type": ["string", "null"], "description": "Format YYYY-MM-DD" },
"sprzedawca": {
"type": "object",
"properties": {
"nazwa_firmy": { "type": ["string", "null"] },
"siedziba": { "type": ["string", "null"], "description": "Ulica i numer budynku, bez kodu pocztowego i miasta" },
"kod_pocztowy": { "type": ["string", "null"], "description": "Format XX-XXX" },
"miasto": { "type": ["string", "null"] },
"nip": { "type": ["string", "null"], "description": "Same cyfry, bez prefiksu PL, bez spacji i myślników" }
},
"required": ["nazwa_firmy", "siedziba", "kod_pocztowy", "miasto", "nip"]
},
"nabywca": { "type": ["string", "null"] },
"pozycje": {
"type": "array",
"items": {
"type": "object",
"properties": {
"nazwa_towaru_uslugi": { "type": ["string", "null"] },
"pkwiu": { "type": ["string", "null"] },
"ilosc": { "type": ["number", "null"] },
"jednostka": { "type": ["string", "null"] },
"cena_netto_jedn": { "type": ["number", "null"] },
"wartosc_netto": { "type": ["number", "null"] },
"stawka_vat": { "type": ["string", "null"] }
}
}
}
},
"required": ["numer_faktury", "data_wystawienia", "sprzedawca", "nabywca", "pozycje"]
}
}
],
"tool_choice": { "type": "tool", "name": "zapisz_dane_faktury" }
}
Jesteśmy już blisko końca.
7. Sprawdź, czy Claude coś odczytał
Przy module z odpowiedzią (JSON) kliknij plusik po prawej stronie i dodaj kolejny Router.
8. Rozbij odpowiedź iteratorem
Wróć do routera, kliknij plusik i znajdź Iterator. W polu Array kliknij puste miejsce i wybierz fioletowe pole Content.
9. Zapisz wiersz w arkuszu
Po iteratorze kliknij plusik i wybierz Google Sheets. Utwórz połączenie. W polu Method wskaż Search by path, a potem wybierz plik, do którego mają trafiać odczytane faktury.
Niżej przypisujesz dane do kolumn. Jeśli w arkuszu masz kolumnę „NIP”, kliknij w jej pole i wybierz z listy zielony tekst nip. Tak samo postępujesz z pozostałymi kolumnami.
Na co uważać
- Format pliku. Dokumentacja Anthropic opisuje obsługę plików typu
documentdla PDF-ów (PDF support). Jeśli pracownicy wysyłają faktury jako zdjęcia, będzie potrzebny osobny wariant z obrazem. - Kontrola wyników. Pole oznaczone
nullto sygnał, że faktura wymaga spojrzenia człowieka. Warto na początku porównać kilka wierszy z oryginałami. - Dane. Faktury zawierają dane firm i osób. Sprawdź, czy ich przekazywanie do zewnętrznych narzędzi jest zgodne z Twoimi zasadami i umowami. To informacja ogólna, nie porada prawna.
Co dalej
To nadal mały kawałek, ale już działa: faktury wysyłane z różnych miejsc trafiają w jedno, a dane lądują w arkuszu bez przepisywania. Kolejne kawałki można dokładać stopniowo, np. by pracownik po wysłaniu faktury i odpowiednim zaksięgowaniu jej w systemie, otrzymywał mejlowe powiadomienie o tym, że faktura została poprawnie przyjęta. Faktury możemy też przypisywać do odpowiedniego projektu, dzięki czemu łatwiej będzie przypisać koszty jednemu zleceniu.