Gidsen

Google Sheets koppelen aan je app

Om Google Sheets aan je app te koppelen schakel je de Google Sheets API in een Google Cloud-project in, maak je een serviceaccount aan, deel je de spreadsheet met het e-mailadres van het serviceaccount, en sla je de sleutel op als geheim aan serverkant. Je server leest daarna rijen met spreadsheets.values.get en voegt rijen toe met spreadsheets.values.append. Als gebruikers hun eigen sheets moeten koppelen, gebruik je OAuth. Als de sheet volledig openbaar is, is een eenvoudige API-sleutel genoeg om te lezen.

Deze gids behandelt welke methode bij je past, de aanroepen die je nodig hebt, de quota en valkuilen, en prompts voor een AI-appbouwer. De Google-details komen uit de ontwikkelaarsdocumentatie van Google, stand september 2026.

Waarom überhaupt een sheet koppelen

Veelvoorkomende redenen:

  • De werkwijze van het team behouden. Medewerkers bewerken een prijslijst of rooster in Sheets; de app toont het.
  • Gegevens verzamelen waar mensen al kijken. Nieuwe aanmeldingen, bestellingen of formulierreacties komen als rijen binnen.
  • Rapportage. Exporteer appgegevens naar een sheet voor mensen die in spreadsheets werken.
  • Een opstap. Begin met de sheet en stap daarna over naar een echte database. Zie hoe je een spreadsheet in een app verandert.

Kies hoe je app zich bij Google aanmeldt

De handleiding voor credentials van Google beschrijft drie typen:

CredentialWat het kan openenHet beste voor
API-sleutelAlleen openbaar beschikbare gegevens, zoals bestanden die met "Iedereen met de link" zijn gedeeldEen openbare sheet lezen
ServiceaccountGegevens van je app, of specifieke bestanden die met het serviceaccount zijn gedeeldJe app laten lezen en schrijven naar jouw sheets
OAuth-client-IDHet eigen bestanden van een gebruiker, na toestemmingElke gebruiker zijn eigen sheets laten koppelen

Voor de meeste apps is een serviceaccount de juiste keuze: één set credentials, van jou, met toegang alleen tot de sheets die je expliciet ermee deelt.

Stap voor stap met een serviceaccount

  1. Maak of kies een Google Cloud-project en schakel de Google Sheets API in.
  2. Maak een serviceaccount en een sleutel ervoor aan. De sleutel is een JSON-bestand; behandel het als een wachtwoord.
  3. Deel de spreadsheet met het e-mailadres van het serviceaccount, als Viewer voor alleen lezen of Editor om te schrijven. Volgens de handleiding van Google doe je dat via het gewone deelscherm.
  4. Sla de sleutel op als geheim op je server, bijvoorbeeld GOOGLE_SERVICE_ACCOUNT_JSON, plus het spreadsheet-ID (de lange reeks in de URL van de sheet) als SHEET_ID.
  5. Roep de API aan vanaf de server met de clientbibliotheek van Google voor jouw taal.
  6. Cache de leesacties als veel bezoekers dezelfde gegevens zien, zodat je het quota niet raakt.

De aanroepen die je gebruikt

Uit de handleiding van Google voor het lezen en schrijven van waarden:

MethodeWat het doet
spreadsheets.values.getLeest één bereik, zoals Leads!A1:E
spreadsheets.values.batchGetLeest meerdere bereiken in één verzoek
spreadsheets.values.updateSchrijft naar een specifiek bereik
spreadsheets.values.appendVoegt rijen toe na de bestaande gegevens in een tabel

Bereiken gebruiken A1-notatie. Google merkt op dat een bereik zonder tabbladnaam, zoals A1:B2, op het eerste tabblad van toepassing is. Noem het tabblad daarom expliciet, zodat je niet verrast wordt als iemand de tabbladen herschikt.

RAW vs USER_ENTERED

Schrijfacties hebben een valueInputOption nodig:

  • RAW slaat precies op wat je stuurt, als tekst. =1+2 wordt opgeslagen als de tekst =1+2.
  • USER_ENTERED behandelt invoer alsof die in Sheets is getypt: datums worden datums en =1+2 wordt een formule.

Als je tekst schrijft die gebruikers in je app hebben ingevoerd, gebruik dan RAW. Met USER_ENTERED kan iemand een formule indienen die draait zodra een collega de sheet opent.

Quota en fouten

Vanaf september 2026 vermeldt de limietpagina van de Sheets API van Google:

LimietLeesverzoekenSchrijfverzoeken
Per minuut per project300300
Per minuut per gebruiker per project6060

Er is geen dagelijkse limiet zolang je binnen de limieten per minuut blijft. Als je erboven gaat, krijg je 429: Too many requests. Google raadt truncated exponential backoff aan: wacht na elke mislukte poging langer, met een willekeurige vertraging, tot een maximum. Een enkel verzoek dat langer dan 180 seconden duurt, time-out.

In de praktijk: roep de API niet bij elke paginaweergave aan. Cache de gegevens van de sheet minstens een minuut, combineer leesacties met batchGet, en bundel schrijfacties waar mogelijk.

Opties en afwegingen

AanpakVoordelenNadelen
Sheet als live gegevensbronMedewerkers bewerken in een vertrouwd hulpmiddel; geen beheerschermen nodigQuota, geen rechten per rij, makkelijk kapot te maken door een kolom te hernoemen
Sheet synchroniseren naar een databaseSnelle, betrouwbare leesacties; de app blijft werken als Sheets uitvaltJe hebt een synchronisatietaak nodig en een regel voor welke kant wint
Eerst database, export naar sheetDe app beheert de gegevens; de sheet is een rapportWijzigingen in de sheet komen niet terug
Automatiseringstool ertussenGeen code voor eenvoudige flowsNog een abonnement; lastiger te debuggen

Voor alles met veel gebruikers of gevoelige gegevens is een database de betere bron van waarheid. Zie wat een database is.

Prompts voor je AI-appbouwer

Een sheet lezen:

Toon het tabblad "Menu" van onze Google Sheet op de menupagina. Gebruik de Google Sheets API vanaf de server met een serviceaccount waarvan de JSON-sleutel in het geheim GOOGLE_SERVICE_ACCOUNT_JSON staat, en het spreadsheet-ID in SHEET_ID. Lees het bereik Menu!A2:D (naam, beschrijving, prijs, categorie). Cache het resultaat 5 minuten. Als de API faalt, toon de laatst gecachte versie. Stuur de sleutel nooit naar de browser.

Rijen schrijven:

Wanneer iemand het contactformulier invult, sla het op in onze database en voeg ook een rij toe aan het tabblad "Leads" (datum, naam, e-mail, bericht) met spreadsheets.values.append en valueInputOption RAW. Als Google een 429 teruggeeft, probeer het opnieuw met exponential backoff; blijft het falen, bewaar de lead dan in de database en probeer later opnieuw.

Veelgemaakte fouten

  • Vergeten de sheet te delen met het e-mailadres van het serviceaccount. De API geeft dan een rechtenfout, ook al klopt de sleutel.
  • De sleutel in de frontend of de repository. Het JSON-bestand geeft toegang tot elke sheet die ermee is gedeeld. Zie hoe je API-sleutels veilig houdt.
  • USER_ENTERED gebruiken voor gebruikersinvoer, wat formule-injectie mogelijk maakt.
  • De API bij elk verzoek aanroepen en bij de eerste verkeerspiek het quota per minuut raken.
  • Afhankelijk zijn van kolomposities. Iemand voegt een kolom in en de app leest de verkeerde gegevens. Lees de kopregel en koppel op naam, of vergrendel de kopregel.
  • De sheet te ruim delen. "Iedereen met de link" maakt hem openbaar.
  • Een sheet gebruiken als database voor meerdere gebruikers. Gelijktijdige schrijfacties en ontbrekende rechten leiden tot verloren of gelekte gegevens.

Checklist

  • Sheets API ingeschakeld; serviceaccount aangemaakt
  • Sheet gedeeld met het e-mailadres van het serviceaccount, met de laagste benodigde rol
  • Sleutel en sheet-ID opgeslagen als geheimen aan serverkant
  • Alle aanroepen gedaan vanaf de server
  • Tabbladnamen gebruikt in bereiken
  • RAW gebruikt voor tekst van gebruikers
  • Leesacties gecachet; 429 afgehandeld met backoff
  • De app werkt degelijk als Sheets niet beschikbaar is
  • Bepaald welke kant de bron van waarheid is

Google Sheets in Mythex

Mythex heeft twee verschillende manieren om met Sheets te werken. Connectors koppelen je Google-account aan Mythex, zodat de agent het kan gebruiken terwijl je bouwt, bijvoorbeeld om een sheet te lezen en er een dashboard van te maken. De docs zeggen dat de credential bij de verbindingsdienst van Mythex blijft en nooit in je code terechtkomt (zie Connectors, en keur elke rechtenvraag van Google goed). Voor de gepubliceerde app die zelfstandig een sheet moet lezen of schrijven, is de betrouwbare route die uit deze gids: een serviceaccount-sleutel opgeslagen als projectgeheim en Sheets API-aanroepen vanaf je server, zoals in Elke API integreren. Als je de sheet ontgroeit, vraag de agent dan de gegevens naar de database van het project te verplaatsen en een dashboard erop te bouwen.

Veelgestelde vragen

Hoe kan mijn app een privé Google Sheet lezen?

De gebruikelijke manier is een Google Cloud-serviceaccount: schakel de Sheets API in, maak het serviceaccount en de sleutel ervoor aan, en deel daarna de spreadsheet met het e-mailadres van het serviceaccount als Viewer of Editor. Je server gebruikt de sleutel, opgeslagen als geheim, om de Sheets API aan te roepen.

Kan ik een Google API-sleutel gebruiken voor toegang tot een spreadsheet?

Alleen voor openbare gegevens. De handleiding voor credentials van Google zegt dat API-sleutels bedoeld zijn voor anonieme toegang tot openbaar beschikbare gegevens, zoals bestanden die met iedereen met de link zijn gedeeld. Privé-sheets hebben een serviceaccount of OAuth nodig.

Wat zijn de limieten van de Google Sheets API?

Vanaf september 2026 vermeldt Google 300 lees- en 300 schrijfverzoeken per minuut per project, en 60 van elk per minuut per gebruiker per project, zonder dagelijkse limiet. Overschrijding geeft een 429-fout; Google raadt truncated exponential backoff aan.

Moet ik Google Sheets als database voor mijn app gebruiken?

Het werkt voor kleine apps met weinig verkeer waarbij mensen de gegevens ook in de sheet bewerken. Voor veel gebruikers, frequente schrijfacties, relaties tussen records of rechten per gebruiker is een echte database betrouwbaarder. Je kunt nog steeds naar een sheet exporteren.

Mythex · Pricing · Bouw alles met AI · Website- en app-templates · Mythex vergeleken · Woordenlijst voor apps bouwen met AI · Gratis tools voor apps bouwen met AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)