Naar inhoud
lightbulb Welkom op de nieuwe kennisbank | We hebben de docs volledig vernieuwd met meer dan 160 features. Bekijk wat nieuw isarrow_forward

Properties Service voor configuratie

Sla persistente configuratie en gebruikersinstellingen op met de Properties Service in Apps Script, van API-sleutels tot voortgang over triggerlopen.

Properties Service typen

De Properties Service bewaart configuratiedata persistent tussen script-uitvoeringen. In tegenstelling tot de Cache Service gaan Properties nooit verloren, tenzij je ze expliciet verwijdert.

Drie typen:

  • Script Properties: gedeeld door alle gebruikers, persisteert zolang het script bestaat.
  • Document Properties: gedeeld door alle gebruikers in het huidige document.
  • User Properties: privé per gebruiker, persisteert over sessies.
const scriptProps = PropertiesService.getScriptProperties();
const docProps = PropertiesService.getDocumentProperties();
const userProps = PropertiesService.getUserProperties();

Eigenschappen lezen en schrijven

function beheerProperties() {
  const props = PropertiesService.getScriptProperties();

  props.setProperty('VERSIE', '1.2.0');
  props.setProperty('ADMIN_EMAIL', 'admin@bedrijf.nl');

  props.setProperties({
    DB_HOST: 'db.bedrijf.nl',
    DB_PORT: '3306',
    MAX_RIJEN: '500',
    DEBUG_MODE: 'false',
  });

  const versie = props.getProperty('VERSIE');
  Logger.log(`Versie: ${versie}`);

  const alleProps = props.getProperties();
  Logger.log(JSON.stringify(alleProps));
}
lightbulb

Schrijf gebundeld weg met setProperties

Elke setProperty() is een aparte schrijfactie die telt voor je dagquotum. Gebruik setProperties() met een object om meerdere waarden in één keer weg te schrijven. Dat is sneller en zuiniger met je quotum.

Configuratiepatroon

Een veelgebruikt patroon is één toegangsfunctie met standaardwaarden als fallback. Zo werkt je script ook als een property nog niet is gezet.

const CONFIG_DEFAULTS = {
  MAX_RIJEN: '500',
  TIMEOUT_SEC: '30',
  NOTIFICATIE_EMAIL: 'beheer@bedrijf.nl',
  DEBUG: 'false',
};

function getConfig(sleutel) {
  const props = PropertiesService.getScriptProperties();
  const waarde = props.getProperty(sleutel);
  return waarde !== null ? waarde : (CONFIG_DEFAULTS[sleutel] || null);
}

function isDebug() {
  return getConfig('DEBUG') === 'true';
}

function setConfig(sleutel, waarde) {
  PropertiesService.getScriptProperties().setProperty(sleutel, String(waarde));
}
info

Properties zijn altijd strings

Elke waarde wordt als string opgeslagen, ook getallen en booleans. Converteer bij het ophalen met parseInt(), parseFloat(), === 'true' of JSON.parse().

Gebruikersvoorkeursinstellingen

Voor instellingen die per gebruiker verschillen gebruik je User Properties. Met JSON.stringify() en JSON.parse() bewaar je ook objecten en getallen in het juiste type.

function slaVoorkeurOp(instelling, waarde) {
  PropertiesService.getUserProperties().setProperty(instelling, JSON.stringify(waarde));
}

function getVoorkeur(instelling, standaard = null) {
  const opgeslagen = PropertiesService.getUserProperties().getProperty(instelling);
  return opgeslagen !== null ? JSON.parse(opgeslagen) : standaard;
}

function laadGebruikersInstellingen() {
  const taal = getVoorkeur('taal', 'nl');
  const itemsPerPagina = getVoorkeur('items_per_pagina', 25);
  const donkerModus = getVoorkeur('donker_modus', false);

  Logger.log(`Taal: ${taal}, Items: ${itemsPerPagina}, Donker: ${donkerModus}`);
}

API-sleutels en credentials

Script Properties zijn de standaardplek om API-sleutels buiten je broncode te houden. Zo staan er geen geheimen in je code wanneer je het script deelt of in versiebeheer zet.

function slaApiSleutelsOp() {
  const props = PropertiesService.getScriptProperties();
  props.setProperties({
    OPENAI_API_KEY: 'sk-...',
    SLACK_WEBHOOK_URL: 'https://hooks.slack.com/...',
    SENDGRID_API_KEY: 'SG...',
  });
  Logger.log('API-sleutels opgeslagen');
}

function getApiSleutel(service) {
  const sleutel = PropertiesService.getScriptProperties().getProperty(`${service}_API_KEY`);
  if (!sleutel) {
    throw new Error(`API-sleutel voor ${service} niet gevonden. Roep slaApiSleutelsOp() aan.`);
  }
  return sleutel;
}
warning

Script Properties zijn niet versleuteld

Iedereen met bewerkrechten op het script kan Script Properties uitlezen, en ze zijn niet versleuteld in rust. Deel een script met API-sleutels dus nooit met mensen die je het geheim niet toevertrouwt. Roep slaApiSleutelsOp() met de echte sleutels eenmalig zelf aan en bewaar de waarden niet in je broncode. Voor strengere eisen gebruik je een Google Cloud-project met Secret Manager.

Voortgang bijhouden over triggerlopen

Apps Script kapt lange uitvoeringen af (ongeveer 6 minuten voor consumentenaccounts, 30 minuten voor Workspace). Door je voortgang in een property te bewaren kun je in batches verder werken bij de volgende triggerloop.

function hervattabareVerwerking() {
  const props = PropertiesService.getScriptProperties();
  const startRij = parseInt(props.getProperty('LAATSTE_VERWERKTE_RIJ') || '1');

  const blad = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = blad.getDataRange().getValues();
  const batchGrootte = 50;

  const eindRij = Math.min(startRij + batchGrootte, data.length);

  for (let i = startRij; i < eindRij; i++) {
    verwerkRij(data[i]);
  }

  if (eindRij < data.length) {
    props.setProperty('LAATSTE_VERWERKTE_RIJ', String(eindRij));
    Logger.log(`Voortgang opgeslagen: rij ${eindRij}`);
  } else {
    props.deleteProperty('LAATSTE_VERWERKTE_RIJ');
    Logger.log('Alle rijen verwerkt');
  }
}

function verwerkRij(rij) {
  Logger.log(rij[0]);
}

Properties verwijderen

function verwijderProperties() {
  const props = PropertiesService.getScriptProperties();

  props.deleteProperty('TIJDELIJKE_WAARDE');

  props.deleteAllProperties();
  Logger.log('Alle script-properties verwijderd');
}

Limieten in één oogopslag

Limiet Waarde
Maximale grootte per waarde 9 KB
Maximale totale opslag per store 500 KB
Lees- of schrijfacties per dag (consument) 50.000
Lees- of schrijfacties per dag (Workspace) 500.000

Deze limieten gelden voor juni 2026. Controleer bij twijfel de actuele quota-pagina van Apps Script.

Hoe groot mogen Properties zijn?

Maximaal 9 KB per waarde en maximaal 500 KB totaal per Properties-store. Voor grotere data gebruik je de Cache Service of een bestand in Drive.

Zijn Script Properties zichtbaar voor andere gebruikers van het script?

Ja, Script Properties worden gedeeld en zijn leesbaar voor iedereen met bewerkrechten op het project. Gebruik User Properties voor privédata per gebruiker.

Kan ik Properties bekijken zonder code te schrijven?

Ja. Open in de Apps Script-editor het tandwiel Projectinstellingen en scroll naar Scripteigenschappen. Daar zie je alle script-eigenschappen en kun je ze handmatig toevoegen of bewerken.

Wat gebeurt er met Properties als ik het script verwijder?

Properties worden samen met het project verwijderd. Maak een exportfunctie die Properties naar een sheet schrijft als je een back-up wilt.

Wat is het verschil met de Cache Service?

De Cache Service is bedoeld voor tijdelijke data die na maximaal zes uur verloopt, terwijl Properties persistent blijven tot je ze verwijdert. Gebruik Cache voor snelheidswinst en Properties voor configuratie die moet blijven bestaan.

Tellen lees- en schrijfacties tegen een quotum?

Ja. Er geldt een dagquotum van 50.000 acties voor consumentenaccounts en 500.000 voor Workspace-accounts. Bundel daarom waar mogelijk met getProperties() en setProperties() in plaats van losse aanroepen.

Script configureren zonder code te wijzigen

  1. Maak een setup-functie die standaardwaarden met setProperties() in Script Properties zet.
  2. Voer de setup-functie eenmalig uit via de editor.
  3. Gebruik getConfig(sleutel) als enige toegangspunt tot configuratie in je script.
  4. Pas waarden later aan via het tandwiel Projectinstellingen en Scripteigenschappen.
  5. Gebruik User Properties voor configuratie die per gebruiker verschilt, zoals een taalvoorkeur.

Properties Service maakt scripts configureerbaar zonder codeveranderingen. Sla API-sleutels, drempelwaarden en gebruikersvoorkeuren op als properties en maak je scripts flexibel inzetbaar in verschillende omgevingen.