Suivi des dépenses via Google Sheets

VérifiéPrudence

Enregistrez vos dépenses dans Google Sheets en les décrivant naturellement. L'assistant extrait les détails et met à jour la feuille automatiquement.

Spar Skills Guide Bot
ProductiviteDébutant
27/07/2026
Claude Code
#expense-tracking#google-sheets#apps-script#natural-language#logging

Recommandé pour

Synthèse automatique

Enregistre une dépense décrite en langage naturel dans une Google Sheet personnelle via une web app Google Apps Script, après avoir extrait la date, le montant, la catégorie, la description et le moyen de paiement.

Points forts

  • Extraction en langage naturel vers des champs fixes, avec des valeurs par défaut raisonnables (date du jour, paiement par carte).
  • Confirmation sur une seule ligne avant l'écriture, ce qui évite d'enregistrer silencieusement une dépense erronée.
  • Configuration autonome en une fois : en-têtes de la feuille et code Apps Script doPost/doGet fournis intégralement.
  • En cas d'échec, l'erreur est citée mot pour mot au lieu d'être reformulée ou masquée par un faux succès.

Limites

  • Nécessite de déployer manuellement une web app Apps Script accessible à « Anyone » et d'en stocker l'URL comme secret.
  • Repose sur un outil `run_js` et sur la gestion des secrets de l'environnement cible, donc ne fonctionne pas tel quel ailleurs.
  • Listes de catégories et de moyens de paiement figées, ajout ligne par ligne uniquement : pas de modification, de suppression, de rapport ni de gestion multi-devises.
Quand l'utiliser

À utiliser quand vous voulez noter une dépense dans votre Google Sheet sans l'ouvrir, simplement en la décrivant.

Quand l'éviter

À éviter si vous avez besoin de modifier ou supprimer des lignes, de gérer plusieurs devises, ou si vous ne pouvez pas déployer un Apps Script Google.

Analyse de sécurité

Prudence
Score qualité88/100

The skill is not malicious: it does not exfiltrate secrets to an attacker, run destructive commands, or obfuscate actions. However, it handles a sensitive user secret and instructs deploying a publicly writable Google Apps Script webhook, so it warrants caution rather than being classified safe.

Points d'attention
  • •The user's Google Apps Script Web App URL is used as a bearer-style secret; because the deployment instructions require access set to 'Anyone', anyone who obtains the URL can append rows to the sheet.
  • •Expense details are sent to an external Google Apps Script endpoint controlled by the user; this is legitimate but still external network data flow.
  • •The Apps Script `doPost` handler performs no authentication or payload validation beyond JSON parsing, so any request to the URL can write arbitrary row data.
  • •The skill instructs calling `run_js` even though no allowed-tools are declared, which may rely on host-specific tool permissions.
Comment cette analyse est faite

Exemples

Lunch expense
Log €12.50 for lunch at the ramen place, paid by card.
Cash purchase with explicit date
Add an expense of 40 to my sheet: Health, pharmacy, yesterday, cash.
Quick log without confirmation
Track 9.99 for a streaming subscription under Bills — just log it, no need to confirm.

name: expense-tracker description: Log an expense to your Google Sheet by describing it naturally. metadata: require-secret: true require-secret-description: Paste your Google Apps Script Web App URL here. See the skill instructions for setup steps. homepage: https://github.com/Sprayer115/expense-tracker-skill

Expense Tracker

Log expenses to your personal Google Sheet just by describing them. The skill extracts the relevant details and appends a new row automatically.

Secret

The secret is your Google Apps Script Web App URL. See the setup section below for how to get it.

Instructions

You are an expense logging assistant. When the user describes an expense (or asks to log one), extract the following fields:

  • date: The expense date in YYYY-MM-DD format. Default to today's date if not mentioned.
  • amount: A numeric value (e.g. 12.50). Ask if unclear.
  • category: One of: Food, Transport, Shopping, Health, Entertainment, Bills, Other. Infer from context.
  • description: A short description of what was purchased/spent on.
  • payment_method: One of: Cash, Card, PayPal, Bank Transfer, Other. Default to Card if not mentioned.

Before submitting, briefly confirm the details with the user in a single line (e.g. "Logging: 2026-04-08 | €12.50 | Food | Groceries at Rewe | Card — correct?").

Once confirmed (or if the user says to just log it), call run_js with:

  • script_name: index.html
  • data: a JSON string with the fields above, e.g.: {"date":"2026-04-08","amount":12.50,"category":"Food","description":"Groceries at Rewe","payment_method":"Card"}

After the tool returns:

  • If result is present: tell the user the expense was logged successfully, showing the logged details.
  • If error is present: tell the user exactly what the error says, word for word. Do not paraphrase or suggest setup steps — just quote the error directly.

Setup

You need to do a one-time setup to connect this skill to your Google Sheet.

Step 1 — Prepare your Google Sheet

Open your Google Sheet and make sure the first row has these headers (in this order):

| Date | Amount | Category | Description | Payment Method | Logged At |

Step 2 — Deploy the Apps Script

  1. In your Google Sheet: Extensions → Apps Script
  2. Delete any existing code and paste in the following:
// Health check — open the Web App URL in a browser to verify it's deployed
function doGet(e) {
  return ContentService
    .createTextOutput(JSON.stringify({ status: "Expense Tracker is running" }))
    .setMimeType(ContentService.MimeType.JSON);
}

function doPost(e) {
  try {
    var raw = e.postData.contents;
    var data = JSON.parse(raw);
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    sheet.appendRow([
      data.date,
      data.amount,
      data.category,
      data.description,
      data.payment_method,
      new Date().toISOString()
    ]);
    return ContentService
      .createTextOutput(JSON.stringify({ result: "ok" }))
      .setMimeType(ContentService.MimeType.JSON);
  } catch (err) {
    return ContentService
      .createTextOutput(JSON.stringify({ error: err.message }))
      .setMimeType(ContentService.MimeType.JSON);
  }
}
  1. Click Deploy → New deployment
  2. Type: Web app
  3. Execute as: Me
  4. Who has access: Anyone
  5. Click Deploy and copy the Web App URL

Step 3 — Set the secret in Google AI Edge Gallery

When prompted for the secret in the app, paste the Web App URL you copied above.

Testing the webhook

Step 1 — Browser health check

Open your Web App URL directly in a browser. You should see:

{"status":"Expense Tracker is running"}

If you see a Google login page or 403, re-check the deployment settings (Access must be Anyone).

Step 2 — POST test with curl

curl -s -L 'YOUR_WEB_APP_URL' -H 'Content-Type: application/json' -d '{"date":"2026-04-08","amount":9.99,"category":"Food","description":"Test coffee","payment_method":"Card"}'

Expected response: {"result":"ok"}

Important: Do not add -X POST to the curl command. Apps Script URLs return a 302 redirect; curl handles it correctly when using -d alone (POST on first request, GET on redirect). Adding -X POST forces POST on the redirect too — but without a body — causing a 411 Length Required error.

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/expense-tracker-via-google-sheets-ms2s7coq/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/expense-tracker-via-google-sheets-ms2s7coq' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/expense-tracker-via-google-sheets-ms2s7coq/download' --output '.skill-downloads/expense-tracker-via-google-sheets-ms2s7coq/SKILL.md.part' && mv '.skill-downloads/expense-tracker-via-google-sheets-ms2s7coq/SKILL.md.part' '.skill-downloads/expense-tracker-via-google-sheets-ms2s7coq/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Extrait original : Setup

You need to do a one-time setup to connect this skill to your Google Sheet.

Step 1 — Prepare your Google Sheet

Open your Google Sheet and make sure the first row has these headers (in this order):

| Date | Amount | Category | Description | Payment Method | Logged At |

Step 2 — Deploy the Apps Script

  1. In your Google Sheet: Extensions → Apps Script
  2. Delete any existing code and paste in the following:
// Health check — open the Web App URL in a browser to verify it's deployed
function doGet(e) {
  return ContentService
    .createTextOutput(JSON.stringify({ status: "Expense Tracker is running" }))
    .setMimeType(ContentService.MimeType.JSON);
}

function doPost(e) {
  try {
    var raw = e.postData.contents;
    var data = JSON.parse(raw);
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    sheet.appendRow([
      data.date,
      data.amount,
      data.category,
      data.description,
      data.payment_method,
      new Date().toISOString()
    ]);
    return ContentService
      .createTextOutput(JSON.stringify({ result: "ok" }))
      .setMimeType(ContentService.MimeType.JSON);
  } catch (err) {
    return ContentService
      .createTextOutput(JSON.stringify({ error: err.message }))
      .setMimeType(ContentService.MimeType.JSON);
  }
}
  1. Click Deploy → New deployment
  2. Type: Web app
  3. Execute as: Me
  4. Who has access: Anyone
  5. Click Deploy and copy the Web App URL

Step 3 — Set the secret in Google AI Edge Gallery

When prompted for the secret in the app, paste the Web App URL you copied above.

Testing the webhook

Step 1 — Browser health check

Open your Web App URL directly in a browser. You should see:

{"status":"Expense Tracker is running"}

If you see a Google login page or 403, re-check the deployment settings (Access must be Anyone).

Step 2 — POST test with curl

curl -s -L 'YOUR_WEB_APP_URL' -H 'Content-Type: application/json' -d '{"date":"2026-04-08","amount":9.99,"category":"Food","description":"Test coffee","payment_method":"Card"}'

Expected response: {"result":"ok"}

Important: Do not add -X POST to the curl command. Apps Script URLs return a 302 redirect; curl handles it correctly when using -d alone (POST on first request, GET on redirect). Adding -X POST forces POST on the redirect too — but without a body — causing a 411 Length Required error.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/expense-tracker-via-google-sheets-ms2s7coq/SKILL.md' && test -s '.skill-downloads/expense-tracker-via-google-sheets-ms2s7coq/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/expense-tracker' && cp -R '.skill-downloads/expense-tracker-via-google-sheets-ms2s7coq' '.claude/skills/expense-tracker'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/expense-tracker-via-google-sheets-ms2s7coq'

openskills read 'expense-tracker-via-google-sheets-ms2s7coq'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/expense-tracker-via-google-sheets-ms2s7coq/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires