Hoppa till huvudinnehållet

Google Apps Script och Gemini API-handledning: Smart datautvinning

Lär dig att automatisera datautvinning från e-post och PDF:er med Google Apps Script och Gemini API. Bygg en serverlös pipeline till Google Kalkylark redan idag.
Uppdaterad 17 juli 2026  · 11 min läsa

Manuell datainmatning är produktivitetens fiende. Om ditt team förlitar sig på att extrahera data från operativa e-postmeddelanden, som fakturor, bokningsbekräftelser eller formulär för kundfeedback, känner du troligen igen mardrömmen med traditionella parseringsmetoder. 

Historiskt har utvecklare förlitat sig på Regular Expressions (Regex) för att extrahera detaljer som fakturanummer eller fakturabelopp. Men Regex är extremt skört; i samma ögonblick som en leverantör ändrar sin e-postmall eller lägger till ett slumpmässigt radbryt blir hela parsern tyst obrukbar.

I den här handledningen visar jag hur du bygger en helt automatiserad, headless pipeline som löser detta problem med generativ AI. Vi skriver ett lättviktsskript som läser olästa Gmail-meddelanden, skickar ostrukturerad text till Gemini API för intelligent extraktion och loggar perfekt strukturerad JSON-data direkt i ett Google-kalkylark.

Förkunskaper:

  • Ett Google-konto
  • Grundläggande bekantskap med JavaScript (Google Apps Script)
  • En Gemini API-nyckel

Vad är Google Apps Script?

Google Apps Script är en molnbaserad plattform för snabb applikationsutveckling development platform baserad på JavaScript som låter dig automatisera, anpassa och utöka Google Workspace-appar som Google Dokument, Kalkylark, Presentationer med mera. 

Eftersom plattformen körs direkt på Googles servrar behöver du inte installera programvara, konfigurera lokala miljöer eller hantera infrastruktur. 

Apps Script ger utvecklare/lågkodsutvecklare möjlighet att interagera programmatiskt med Google Workspace-verktyg som Dokument, Kalkylark, Presentationer, Drive med flera. Du kan bygga och köra automatiseringar via anpassade menyer, knapptryckningar eller tidsbaserade scheman, eller använda tjänsten för att bygga och publicera tillägg för Google Workspace Marketplace.

Hur Google Apps Script fungerar

Google Apps Script abstragerar bort det tunga arbetet med backend-konfiguration och API-autentisering så att du kan fokusera direkt på logik och data. Det görs med flera funktioner:

  • Moln-native redigerare: Du skriver, felsöker och distribuerar din JavaScript-kod helt i en webbaserad IDE direkt i webbläsaren.
  • Inbyggda tjänster: I stället för att brottas med OAuth och komplexa API-anrop använder du färdiga globala objekt (som SpreadsheetApp, MailApp eller DriveApp) för att interagera inbyggt med Googles tjänster.
  • Händelsedrivna triggers: Skript kan köras manuellt via anpassade menyknappar, eller schemaläggas att köras automatiskt med tidsstyrda triggers (t.ex. varje midnatt) och händelsedrivna triggers (t.ex. när en användare skickar in ett Google Formulär).

Arkitekturen för Google Apps Script: Pipeline från Gmail till Kalkylark

Innan vi skriver skriptet kartlägger vi hur data rör sig genom denna pipeline. Arkitekturen bygger på fyra separata komponenter som arbetar tillsammans:

  • Gmail (källa): Processen börjar med att söka i inkorgen med standardoperatorer (som is:unread label:invoices). Skriptet isolerar rätt e-posttrådar och extraherar både den oformaterade textkroppen och eventuella bifogade PDF-filer.
  • Apps Script (beräkning): Detta fungerar som orkestreringslagret. Det itererar genom de olästa trådarna, formaterar bilagorna till base64-data och hanterar logiken för felrapportering och batchbearbetning.
  • Gemini API (transformationsmotor): Apps Script skickar en multimodal payload (e-posttexten plus PDF:erna) till modellen Gemini 2.5 Flash. Genom att ange ett strikt JSON-svarschema i API-anropet tvingar vi modellen att plocka ut exakta värden som leverantör, totalbelopp och valuta, i stället för att generera konverserande text.
  • Google Kalkylark (mål): När Gemini returnerar den strukturerade JSON:en tolkar Apps Script resultaten, buntar dem till en enda array och batchinfogar datan i nästa tomma rad i ditt aktiva kalkylark med setValues().

workflow-diagram

Varför använda Google Apps Script som beräkningslager för detta bygge? 

Den främsta fördelen är att all infrastruktur-överhead försvinner. Ingen serveretablering krävs och du behöver inte konfigurera Docker-containrar eller sätta upp komplicerade OAuth-flöden bara för att läsa din e-post eller skriva till ett kalkylark. 

Eftersom Apps Script integrerar inbyggt med tjänster som GmailApp och SpreadsheetApp hanterar Google autentiseringen internt. Du skriver bara koden och kopplar samman ändpunkterna.

Steg 1: Förbered din Google Apps Script-miljö

Innan vi skriver någon kod behöver vi förbereda våra externa beroenden. Det innebär att säkra åtkomst till Gemini API, skapa vårt destinationskalkylark och konfigurera vår Gmail-inkorg för att korrekt tagga inkommande fakturor.

Generera Gemini API-nyckeln

För att driva vår intelligenta datautvinning behöver vi åtkomst till Gemini API.

  1. Navigera till Google AI Studio och logga in med ditt Google-konto.
  2. Klicka på Get API key i navigationsmenyn till vänster.
  3. Klicka på knappen Create API key. Du kan välja att skapa denna nyckel i ett befintligt Google Cloud-projekt eller låta AI Studio skapa ett nytt åt dig.
  4. Kopiera den genererade strängen. 

Bästa säkerhetspraxis: Tappa inte bort nyckeln, men framför allt: planera inte att hårdkoda den i klartext i din kod. Behåll den i urklipp eller en säker anteckning för tillfället; vi låser in den säkert i vår Apps Script-miljö i nästa steg.

AIStudio-Dashboard

Förbered Google Kalkylark och säkra nyckeln

Vi behöver en plats att lagra den extraherade datan. Detta kalkylark fungerar också som startplatta för vårt automationsskript.

1. Ställ in databasrubrikerna Skapa ett nytt tomt Google-kalkylark. I första raden skapar du följande kolumnrubriker för att matcha JSON-schemat vi definierar i vårt skript:

  • Date
  • Vendor
  • Invoice Number
  • Total Amount
  • Currency
  • Items Summary
  • Email Link

Frys översta raden så att rubrikerna förblir synliga när din data växer.

GoogleSheet

2. Öppna Apps Script och lagra API-nyckeln Nu när kalkylarket finns kan vi öppna Apps Script-redigeraren direkt därifrån. Detta länkar automatiskt vår kod till just detta kalkylark.

  1. I ditt Google-kalkylark klickar du på Tillägg > Apps Script i toppmenyn.launch-script-editor
  2. När redigeraren öppnas tittar du i sidofältet till vänster och klickar på kugghjulet för att öppna Projektinställningar.

appsscript-editor

  1. Rulla längst ned för att hitta avsnittet Script Properties.
  2. Klicka på Add script property.
  3. Under Property skriver du exakt GEMINI_API_KEY.
  4. Under Value klistrar du in API-nyckeln du kopierade från AI Studio tidigare.
  5. Klicka på Save script properties.

store-the-gemini-api-key

Koden vi skriver senare kommer nu på ett säkert sätt att hämta detta värde vid körning utan att exponera dina referenser.

Steg 2: Skriv koden för Google Apps Script

När du är i Apps Script-redigeraren kan du ta bort eventuell standardkod. Vi bygger vår automationsmotor block för block.

1. Konfiguration och UI-uppsättning

Vi börjar med att definiera ett globalt konfigurationsobjekt. Detta är en best practice för ren kod som samlar alla hårdkodade variabler på ett ställe, så att du bara behöver redigera detta toppblock.

Vi lägger också till en onOpen()-funktion. Denna inbyggda Apps Script-trigger skapar automatiskt en anpassad meny i ditt Google-kalkylark, vilket låter icke-tekniska användare köra skriptet manuellt utan att någonsin öppna kodredigeraren.

const CONFIG = {
 searchQuery: "is:unread label:invoices",
 model: "gemini-2.5-flash",
 adminEmail: Session.getActiveUser().getEmail() // Automatically emails the script owner if it crashes
};

/**
* Creates a custom menu in Google Sheets so non-technical users can run the script manually.
*/
function onOpen() {
 const ui = SpreadsheetApp.getUi();
 ui.createMenu('🤖 AI Automations')
   .addItem('Fetch New Invoices', 'processInvoices')
   .addToUi();
}

2. Orkestreringsuppsättningen

Funktionen processInvoices() fungerar som huvudorkestrerare. Den börjar med att säkert hämta din API-nyckel från Script Properties som vi ställde in tidigare. 

Sedan använder den den inbyggda tjänsten GmailApp för att söka i inkorgen.

Genom att anropa GmailApp.search(CONFIG.searchQuery) hämtar skriptet en array med e-posttrådar som matchar vår regel is:unread label:invoices

Om den hittar träffar loopar den igenom varje tråd, hämtar det senaste meddelandet, extraherar den oformaterade textkroppen och isolerar eventuella bifogade PDF-filer.

function processInvoices() {
  const apiKey = PropertiesService.getScriptProperties().getProperty("GEMINI_API_KEY");
  if (!apiKey) {
    throw new Error("GEMINI_API_KEY is missing! Please set it in Script Properties.");
  }

  const threads = GmailApp.search(CONFIG.searchQuery);
  if (threads.length === 0) return;

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const batchData = [];
  const processedThreads = [];

3. Bearbeta e-post och multimodala PDF:er

När vi loopar igenom e-posttrådarna hämtar vi det senaste meddelandet. Fakturor kommer dock sällan som ren text; de är nästan alltid bifogade som PDF-filer. 

Genom att använda Gemini 2.5 Flash, som är multimodalt i grunden, loopar vårt skript genom latestMessage.getAttachments(), hämtar eventuella PDF:er, konverterar dem till en Base64-sträng och skickar dem direkt till API-payloaden som inlineData. 

Gemini ”läser” PDF:en visuellt och extraherar data lika enkelt som den läser text.

for (let i = 0; i < threads.length; i++) {
   const thread = threads[i];
   const latestMessage = thread.getMessages().pop();
  
   const emailBody = latestMessage.getPlainBody();
   const emailDate = latestMessage.getDate();
   const emailLink = https://mail.google.com/mail/u/0/#inbox/${thread.getId()};
   const attachments = latestMessage.getAttachments();
   try {
     const geminiParts = [];
     geminiParts.push({ text: "Extract invoice details from this email and any attached documents:\n\n" + emailBody });
    
     // Add PDF attachments as base64 to the prompt
     for (const attachment of attachments) {
       if (attachment.getContentType() === "application/pdf") {
         geminiParts.push({
           inlineData: {
             mimeType: "application/pdf",
             data: Utilities.base64Encode(attachment.getBytes())
           }
         });
       }
     }
     // Invoke Gemini API
     const extractedData = callGeminiAPI(apiKey, geminiParts);

4. Batchinfogning och felhantering

För att optimera prestandan skriver vi inte till kalkylarket rad för rad. 

I stället lägger vi in den extraherade JSON-datan i en array (batchData) och skriver allt på en gång allra sist med setValues().

Observera try...catch-blocket. 

Om Gemini hallucinerar eller misslyckas på ett specifikt e-postmeddelande kraschar inte skriptet helt. I stället fångar det felet snyggt och använder MailApp.sendEmail() för att omedelbart varna administratören, vilket säkerställer hög observabilitet.

 // Push to batch array instead of writing one-by-one
     batchData.push([
       emailDate,
       extractedData.vendor || "Unknown Vendor",
       extractedData.invoiceNumber || "N/A",
       extractedData.totalAmount || 0.00,
       extractedData.currency || "USD",
       extractedData.itemsSummary || "N/A",
       emailLink
     ]);
     processedThreads.push(thread);
   } catch (error) {
     MailApp.sendEmail(CONFIG.adminEmail, "🚨 Invoice Pipeline Error", error.toString());
   }
 }
 // Batch Write to Sheets
 if (batchData.length > 0) {
   const lastRow = Math.max(sheet.getLastRow(), 1);
   sheet.getRange(lastRow + 1, 1, batchData.length, batchData[0].length).setValues(batchData);
 }
 // Mark all processed threads as read so they aren't parsed again
 processedThreads.forEach(t => t.markRead());
}

Slutligen anropar skriptet thread.markRead() på varje bearbetat e-postmeddelande. Detta säkerställer att nästa gång skriptet körs ignoreras dessa e-postmeddelanden helt och letar bara efter nya.

5. Hjälpfunktionen för Gemini API (JSON-läge)

När de anropar LLM:er använder utvecklare ofta prompt engineering som ”Return a JSON block”. Men modeller svarar ofta med konverserande utfyllnad (t.ex. ”Sure, here is your data: [JSON]”), vilket gör att efterföljande kodparser kraschar.

Genom att sätta responseMimeType: "application/json" och ange ett strikt responseSchema tvingar vi Gemini REST API att endast svara med ett garanterat JSON-objekt som innehåller våra exakta kalkylarkskolumnrubriker.

function callGeminiAPI(apiKey, partsArray) {
 const url = https://generativelanguage.googleapis.com/v1beta/models/${CONFIG.model}:generateContent?key=${apiKey};
  const responseSchema = {
   type: "OBJECT",
   properties: {
     vendor: { type: "STRING" },
     invoiceNumber: { type: "STRING" },
     totalAmount: { type: "NUMBER" },
     currency: { type: "STRING" },
     itemsSummary: { type: "STRING" }
   },
   required: ["vendor", "totalAmount"]
 };
  const payload = {
   contents: [{ parts: partsArray }],
   generationConfig: {
     responseMimeType: "application/json",
     responseSchema: responseSchema
   }
 };
  const options = {
   method: "POST",
   contentType: "application/json",
   payload: JSON.stringify(payload),
   muteHttpExceptions: true
 };
  const response = UrlFetchApp.fetch(url, options);
 const jsonResponse = JSON.parse(response.getContentText());
  return JSON.parse(jsonResponse.candidates[0].content.parts[0].text);
}

Steg 3: Automatisera din Google Apps Script-pipeline

Kod är bara värdefull om den gör ditt liv enklare. 

Google Apps Script erbjuder kraftfulla körningsmiljöer som sträcker sig från interaktiva, användarvända knappar till helt headless, bakgrundskronjobb.

Metod 1: Utlös via kalkylarkets UI

Om du bygger detta verktyg för ett icke-tekniskt ekonomi-team vill de förmodligen inte öppna Apps Script-kodredigeraren bara för att behandla dagens fakturor. 

Eftersom vi inkluderade onOpen() i vår kod binder Apps Script automatiskt en anpassad meny direkt i Google Kalkylarks gränssnitt varje gång kalkylarket öppnas.

  1. Gå tillbaka till ditt Google-kalkylark och uppdatera sidan.
  2. Vänta några sekunder och titta i den övre menyraden. Du ser en ny rullgardinsmeny som heter 🤖 AI Automations.
  3. Klicka på den och välj Fetch New Invoices.

running-the-automation

  1. Första gången du kör detta kommer Google att be dig auktorisera skriptet (för att läsa din Gmail och skicka e-post i ditt namn). När det är auktoriserat körs skriptet i realtid. Du kan se hur den extraherade JSON-datan fyller raderna mitt framför ögonen på dig!

Metod 2: Headless-automation via tidsstyrda triggers

Om du vill ha riktig set it and forget it-automation kan du använda inbyggda tidsstyrda triggers för att köra pipelinen autonomt i bakgrunden.

  1. I Apps Script-redigeraren klickar du på Triggers (klockikonen) i sidofältet till vänster.

Trigger-button

  1. Klicka på Add Trigger längst ned till höger.

configuring-the-trigger

  1. Ställ in funktionen på processInvoices.
  2. Ändra händelsekällan till Time-driven och ställ in den att köras på en timertakt (t.ex. var 6:e timme).
  3. Klicka på Spara.

Trigger-Settings

Din headless AI-pipeline är nu helt autonom.

Även om din dator är helt avstängd kommer Googles servrar att vakna var sjätte timme, skanna din inkorg, parsa fakturorna via Gemini, logga datan i Kalkylark och gå tillbaka till vila. 

Du kan övervaka dessa bakgrundskörningars framgång eller fel genom att klicka på fliken Executions i Apps Script-redigeraren för att visa loggarna.

Steg 4: Testa AI-datautvinningen

Nu när koden är på plats behöver vi testa för att säkerställa att extraktionspipen fungerar som förväntat.

Låt oss titta på två praktiska scenarier för att se hur Gemini API hanterar olika dataformat och hur de faktiska svaren ser ut.

Test 1: Extrahera från e-post i ren text

Först testar vi en faktura som är inbäddad direkt i e-postkroppen.

  1. Skicka ett e-postmeddelande till dig själv med ämnet ”Invoice INV-2023-88493”.
  2. Skriv i kroppen ostrukturerad text som: ”Hi Team, please pay Acme Corp $450.00 USD for the Q3 software license.
  3. Applicera etiketten invoices på e-postmeddelandet och se till att det förblir oläst.

final-email-output

  1. Kör skriptet via den anpassade menyn.

Bakom kulisserna tar Gemini emot denna ostrukturerade text och följer strikt vårt JSON-schema. 

I stället för att svara med konverserande utfyllnad returnerar den en rå payload. 

Eftersom svaret är perfekt strukturerad JSON kan vår batchData.push()-array sömlöst läsa extractedData.totalAmount och logga 6550 rakt in i Google-kalkylarket utan att behöva någon komplex Regex-logik.

final-response

Test 2: Extrahera från en PDF-bilaga

Därefter testar vi den verkliga styrkan i Gemini 2.5 Flash genom att skicka in ett PDF-dokument.

  1. Generera eller ladda ner en exempelfaktura som PDF (t.ex. på $20,700.00 från ProTech Cloud Services).
  2. Mejla PDF-dokumentet till dig själv. Du kan lämna e-postkroppen helt tom!
  3. Applicera etiketten invoices och markera det som oläst.

email-attachment

  1. Kör skriptet. Pipen kommer att upptäcka bilagan, konvertera den till Base64 och Gemini kommer att läsa dokumentet visuellt för att extrahera leverantör och totalbelopp.

final-response

Det är här arkitekturen visar sitt värde. 

Du behövde inte skriva egen OCR-logik (Optical Character Recognition), hantera ett separat PDF-parsningsbibliotek eller skriva reguljära uttryck för att hitta totalbeloppet. 

LLM:en hanterade den ostrukturerade visuella datan inbyggt.

Slutsats

Att automatisera affärsarbetsflöden kräver inte att du hanterar tung infrastruktur eller slåss med komplexa auktoriseringsloopar. 

Genom att para ihop Google Apps Script med Gemini API byggde vi en intelligent, serverlös datapipeline som körs helt inom det molnekosystem du redan använder varje dag.

Styrkan i denna arkitektur ligger i dess enkelhet. I stället för att etablera servrar, konfigurera webhooks eller hantera säkra autentiseringsfiler på en extern server, hanterar Apps Script kontext, autentisering och körning inbyggt. 

Samtidigt eliminerar Gemini behovet av sköra reguljära uttryck eller dyr OCR-programvara, och förvandlar röriga e-postkroppar och ostrukturerade PDF:er till förutsägbara databasrader med ett enda API-anrop.

För att ta dina färdigheter vidare och utforska vad mer du kan bygga med programmatisk åtkomst till LLM:er rekommenderar jag att du kollar in DataCamps Introduction to APIs in Python eller fördjupa dig i att utforma intelligenta arbetsflöden med kursen AI Agent Fundamentals .

Ämnen

Populära DataCamp-kurser

course

Building AI Agents with Google ADK

1 timmar
6.8K
Build a customer-support assistant step-by-step with Google’s Agent Development Kit (ADK).
Se detaljerRight Arrow
Starta kursen
Se merRight Arrow