TL;DR
- 5 modules Make : Toggl Report → Aggregator → Set Variables → List Customers → Create Invoice
- Toggl calcule déjà le montant facturable — pas besoin de multiplier heures × taux manuellement
- Le filtre Make natif fait le matching client Toggl ↔ client Stripe
- Setup réel testé : 35 minutes, zéro ligne de code
On arrive à la fin de mois. Tu ouvres Toggl, tu exportes tes heures, tu calcules, tu crées la facture Stripe à la main. Encore. Ce workflow fait ça à ta place. Setup : 35 minutes.
Make se connecte à Toggl via son module “Get a Detailed Report”, récupère toutes tes heures du mois, les regroupe par client, identifie les clients correspondants dans Stripe et crée les factures automatiquement. Toi, tu ne touches à rien.
Le problème : facturation manuelle = temps et argent perdus
Marie gère 3 clients au temps passé. Chaque fin de mois, c’est le même rituel :
- Ouvrir Toggl, filtrer par client, exporter les entrées
- Coller dans un tableur, sommer les heures par projet
- Multiplier par le taux horaire, vérifier le calcul
- Ouvrir Stripe, créer la facture à la main, renseigner la description
- Envoyer, attendre la confirmation, recommencer pour le client suivant
Durée réelle : 45 minutes par client. Sur 3 clients, ça fait 2h15 perdues chaque mois. Sur 12 mois, c’est 27 heures de travail non facturé. Du temps qu’elle aurait pû passer à bosser sur d’autres sujets ou le consacrer à ses loisirs/sa famille.
À 60€/h, ça représente 1 620€ de temps perdu par an — juste pour faire des factures.
La facturation manuelle, c’est aussi des oublis d’entrées Toggl non exportées, des erreurs de calcul sur des mois chargés, et des factures envoyées avec 5 jours de retard quand tu es débordé.
Ce qu’on va construire : 5 modules
Le scenario Make se déclenche automatiquement le 1er de chaque mois à 8h. Il enchaîne 5 modules :
Logique du workflow :
- Toggl > Get a Detailed Report — récupère toutes les heures facturables du mois précédent
- Array Aggregator — regroupe les entrées par client Toggl et cumule les montants
- Set Variables — formate le nom du client et calcule le total facturable
- Stripe > List Customers — charge tous tes clients Stripe (+ filtre Make pour matcher le bon client)
- Stripe > Create Invoice — crée la facture en brouillon avec description et échéance
Nombre de crédits Make consommés par exécution : ~5 crédits par client. Pour 3 clients, ça fait 15 crédits/mois — largement dans le plan gratuit (1 000 crédits/mois).
Prérequis avant de commencer
Toggl Track configuré :
- Chaque client est bien renseigné dans le champ Client de chaque projet Toggl (
Projects > [Projet] > Client) - Le taux horaire est défini dans chaque projet (
Settings > Workspace > Projects > [Projet] > Hourly rate) - Les entrées de temps sont marquées comme facturables (toggle Billable activé dans chaque entrée)
Ce workflow groupe par le champ Client dans Toggl, pas par le nom du projet. Si tu n’as pas assigné de client à tes projets dans Toggl, toutes tes entrées seront regroupées sous null et tu n’auras qu’un seul groupe. Va dans Projects > [Projet] > Edit et assigne un client à chaque projet.
Stripe configuré :
- Chaque client existe dans Stripe (
Customers) avec son nom identique (ou inclus) dans le nom de client Toggl — le filtre fait une correspondance partielle insensible à la casse - La clé API Stripe est disponible (
Dashboard > Developers > API keys > Secret key)
Make configuré :
- Compte Make créé — le plan gratuit suffit pour commencer
- Connexion Toggl ajoutée dans Make (
Connections > Add > Toggl Track— API token dans ton profil Toggl) - Connexion Stripe ajoutée dans Make (
Connections > Add > Stripe— coller la clé secrète)
Module 1 : Toggl > Get a Detailed Report
Le scenario utilise le Scheduling natif de Make, pas un module Scheduler séparé.
Dans les paramètres du scenario (Scenario settings > Scheduling), configure :
- Type :
Monthly - Day :
1(premier du mois) - Time :
08:00 - Timezone :
Europe/Paris
Le scenario se déclenche automatiquement le 1er de chaque mois à 8h.

Ajoute le module Toggl Track > Get a Detailed Report comme premier module du scenario.
Configure les champs suivants :
| Champ | Valeur |
|---|---|
| Connection | Ton compte Toggl Track |
| Workspace ID | Sélectionne ton workspace |
| Since | {{addMonths(now; -1)}} |
| Until | {{addHours(now; -8)}} |
| Billable | Yes |
| Distinct Rates | On |
| Rounding | Off |
La formule Until: {{addHours(now; -8)}} est la clé : le workflow tourne à 8h le 1er du mois, donc on soustrait 8h pour capturer toutes les entrées jusqu’à minuit la veille.

Ce module renvoie toutes les entrées facturables du mois précédent, avec pour chaque entrée : le client, le projet, et le montant facturable déjà calculé par Toggl (heures × taux horaire configuré dans le projet). Tu n’as pas besoin de faire ce calcul toi-même.
Module 2 : Array Aggregator
Ajoute le module Flow Control > Array Aggregator directement après le module Toggl (sans Iterator intermédiaire).
Configure :
- Source Module :
Toggl Track - Get a Detailed Report [1] - Target structure type :
Custom - Group by :
{{1.client}}(le champ Client renvoyé par Toggl) - Dans la section de mapping, ajoute trois champs :
| Champ | Valeur |
|---|---|
client | {{1.client}} |
project | {{1.project}} |
billable | {{1.billable}} |

En sortie, tu obtiens un bundle par client. En gros, chaque bundle contient un tableau array avec toutes les entrées de ce client, et __IMTKEY__ correspond au nom du client (ou null pour tes projets sans client assigné).
Module 3 — Set Variables
Ajoute le module Tools > Set Variables après l’Aggregator.
Configure Variable lifetime sur One cycle, puis crée deux variables :
Variable 1 :
Name → client_name
Value → {{ifempty(4.`__IMTKEY__`; "No name")}}
Variable 2 :
Name → total_billable
Value → {{sum(map(4.array; "billable"))}} client_name récupère le nom du client depuis __IMTKEY__ (la clé de groupement de l’Aggregator). Si le client est null (projet sans client assigné dans Toggl), il renvoie "No name".
total_billable additionne tous les montants facturables du tableau — Toggl ayant déjà calculé heures × taux, tu obtiens directement le montant en euros.

Contrairement à ce qu’on voit dans d’autres tutos, il n’y a pas besoin de multiplier total_heures × taux_horaire dans Make. Le module “Get a Detailed Report” de Toggl renvoie directement le champ billable en euros (ou dans ta devise), à condition que le taux horaire soit configuré dans chaque projet Toggl. sum(map(array; "billable")) suffit.
Module 4 : Stripe > List Customers + filtre
Ajoute le module Stripe > List Customers.
Configure :
- Connection : ton compte Stripe
- Limit :
1000(pour charger tous tes clients en une fois) - Laisse tous les autres champs vides
Ce module renvoie la liste complète de tes clients Stripe. La correspondance avec le client Toggl se fait à l’étape suivante via un filtre Make.
Entre le module Stripe List Customers et le module Create Invoice, ajoute un filtre Make natif (clic sur l’icône clé entre les deux modules).
Configure le filtre :
- Label :
Get right customer - Condition :
{{11.client_name}}Contains (case insensitive){{6.name}}

Ce filtre fait passer uniquement les clients Stripe dont le nom est contenu dans le client_name Toggl, sans distinction majuscules/minuscules. Si tu as “Client A” dans Toggl et “Client A” dans Stripe, ça match. Si tu as “Client A & Co” dans Toggl et “Client A Comp” dans Stripe, ça match aussi.
Le module List Customers renvoie N bundles (un par client Stripe). Le filtre les évalue un par un et laisse passer seulement celui qui correspond au client_name Toggl courant. Le module Create Invoice est donc appelé une fois par client Toggl, avec le bon client Stripe.
Module 5 : Stripe > Create Invoice
Ajoute le module Stripe > Create Invoice.
Configure :
| Champ | Valeur |
|---|---|
| Connection | Ton compte Stripe |
| Customer ID | {{6.id}} — l’ID du client Stripe filtré |
| Auto Advance | Off (false) — la facture reste en brouillon |
| Collection Method | Send Invoice |
| Days Until Due | 10 |
| Description | Prestations {{formatDate(addMonths(now; -1); "MMMM YYYY")}} — {{11.client_name}} |

Avec Auto Advance: Off, la facture est créée en brouillon dans Stripe. Elle n’est pas encore envoyée au client, tu peux la vérifier dans le Dashboard Stripe avant de l’envoyer manuellement, ou ajouter un module “Send Invoice” après pour l’envoi automatique. Je te conseil de toujours garder une vérification humaine, prendre un peu de temps pourra te permettre d’éviter d’envoyer une facture erronée et surtout éviter d’ébranler la confiance de ton client.
La description générée ressemble à : Prestations avril 2026 — Client.
Ajoute le module Stripe > Create Invoice Item.
Configure :
| Champ | Valeur |
|---|---|
| Connection | Ton compte Stripe |
| Customer ID | {{6.id}} l’ID du client Stripe filtré |
| Input an Amount | By a total amount |
| Amount | {{11.total_billable * 100}} le montant de la variable définie plus tôt |
| Currency | eur |
| Description | Prestations {{formatDate(addMonths(now; -1); "MMMM YYYY")}} — {{11.client_name}} |
| Invoice ID | {{20.id}} ajoute l’invoice ID du module précédent |

Avec Auto Advance: Off, la facture est créée en brouillon dans Stripe. Elle n’est pas encore envoyée au client, tu peux la vérifier dans le Dashboard Stripe avant de l’envoyer manuellement, ou ajouter un module “Send Invoice” après pour l’envoi automatique. Je te conseil de toujours garder une vérification humaine, prendre un peu de temps pourra te permettre d’éviter d’envoyer une facture erronée et surtout éviter d’ébranler la confiance de ton client.
La description générée ressemble à : Prestations avril 2026 — Client.
Variantes et personnalisation
Envoyer la facture automatiquement
Ajoute un module Stripe > Send Invoice à la fin du scenario :
- Invoice ID :
{{8.id}}(l’ID renvoyé par Create Invoice)
Stripe finalise la facture (elle devient immuable) et envoie un email avec le PDF et un lien de paiement. Si tu préfères garder le contrôle, laisse en draft et envoie manuellement depuis le Dashboard.
Ajouter la TVA
Dans le Dashboard Stripe, crée un Tax Rate (Products > Tax rates > Add, 20%, FR). Dans le module Create Invoice, ajoute le champ Default Tax Rates avec l’ID du taux. Stripe calcule et affiche la TVA automatiquement.
Changer l’échéance
Days Until Due: 10 dans le scenario actuel. Change à 30 pour des conditions de paiement à 30 jours. Tu peux aussi renseigner une Due Date fixe à la place.
Plusieurs projets par client
Le workflow gère déjà ce cas : l’Aggregator groupe par client Toggl (pas par projet). Si un client a 3 projets, tous sont agrégés dans le même bundle et le total_billable est la somme des 3. La facture Stripe aura une seule ligne avec le total consolidé.
Pour avoir une ligne par projet sur la facture, crée un Invoice Item par entrée du tableau 4.array[] en itérant dessus avant la création de la facture.
Le plan gratuit Make inclut 1 000 crédits/mois et 2 scénarios actifs. Ce workflow consomme environ 5 crédits par client (avec la correction Invoice Item : ~6 crédits). Pour 3 clients, ça fait 18 crédits/mois — largement dans les limites gratuites. Au-delà de ~166 clients/mois, passe au plan Core (~10€/mois, 10 000 crédits).
37 minutes de setup. Le mois suivant, les factures Toggl → Stripe se créent toutes seules le 1er du mois à 8h, pendant que tu prends ton café.
27 heures par an récupérées. 1 620€ de temps facturables récupérés. Pour 10€/mois de Make Core.
La question qui reste : est-ce que tu veux aussi automatiser les relances client quand la facture n’est pas payée à 10 jours ? C’est le workflow suivant — système de relance automatique sans CRM →.
Lance ton essai Make gratuit et construis ton premier scenario →