Utiliser l'API depuis Google Sheets
Importe une ligne par livre — royalties, dépenses pub, bénéfice net — dans une feuille Google Sheets avec un court script Apps Script, sans jamais mettre ta clé d'API dans la feuille.
Ce script remplit un onglet nommé Books avec une ligne par livre sur les 30 derniers jours : titre, ASIN, format, marketplace, unités, royalties, dépenses pub, bénéfice net et TACOS.
1. Crée une clé
Réglages → API → Créer une clé. Nomme-la « Google Sheets » et copie-la. Comment marchent les clés : Authentification et clés d'API.
2. Range la clé dans les propriétés du script
- Dans ta feuille Google Sheets, ouvre Extensions → Apps Script.
- Clique sur Paramètres du projet (la roue dentée), puis sur Ajouter une propriété de script.
- Propriété :
TRUEROYALTIES_API_KEY. Valeur : ta clé. Enregistre.
Ne colle jamais la clé dans une cellule : toute personne avec qui la feuille est partagée pourrait la lire. Ne la mets pas non plus dans l'URL — l'API refuse la requête.
3. Colle le script
Dans l'Éditeur, remplace le contenu de Code.gs par :
const API_URL = "https://author.trueroyalties.com/api/v1/reports/books";
function importBooks() {
const key = PropertiesService.getScriptProperties().getProperty(
"TRUEROYALTIES_API_KEY",
);
if (!key) {
throw new Error("Add TRUEROYALTIES_API_KEY in Project Settings.");
}
const rows = [];
let cursor = null;
let currency = "";
while (true) {
let url = API_URL + "?range=last_30_days&limit=100";
if (cursor) url += "&cursor=" + encodeURIComponent(cursor);
const response = UrlFetchApp.fetch(url, {
headers: { Authorization: "Bearer " + key },
muteHttpExceptions: true,
});
const status = response.getResponseCode();
// Limit reached: wait as long as the API asks, then retry the same page.
if (status === 429) {
const headers = response.getHeaders();
const wait = Number(headers["Retry-After"] || headers["retry-after"] || 1);
Utilities.sleep(wait * 1000);
continue;
}
const body = JSON.parse(response.getContentText());
if (status !== 200) {
throw new Error(body.code + ": " + body.detail + " (" + body.request_id + ")");
}
currency = body.currency;
for (const line of body.data) {
rows.push([
line.book.title,
line.book.asin,
line.book.format,
line.book.marketplace,
line.units,
line.revenue,
line.ad_spend,
line.net_profit,
line.tacos === null ? "" : line.tacos,
]);
}
if (!body.has_more) break;
cursor = body.next_cursor;
}
const spreadsheet = SpreadsheetApp.getActive();
const sheet =
spreadsheet.getSheetByName("Books") || spreadsheet.insertSheet("Books");
sheet.clearContents();
sheet.getRange(1, 1, 1, 9).setValues([[
"Title", "ASIN", "Format", "Marketplace", "Units",
"Royalties (" + currency + ")", "Ad spend", "Net profit", "TACOS",
]]);
if (rows.length > 0) {
sheet.getRange(2, 1, rows.length, 9).setValues(rows);
}
}4. Lance-le
- Choisis
importBooksdans la barre d'outils et clique sur Exécuter. - La première fois, Google te demande d'autoriser le script à joindre un service externe et à modifier ta feuille. Accepte.
- Reviens à la feuille : l'onglet Books est rempli.
Pour qu'il se mette à jour tout seul, ouvre Déclencheurs (l'horloge),
Ajouter un déclencheur, choisis importBooks et un déclenchement horaire,
une fois par jour.
Changer ce que tu importes
Modifie la requête sur la ligne url :
| Tu veux | Ajoute ou change |
|---|---|
| Une autre période | range=last_month, ou start_date=2026-01-01&end_date=2026-06-30 |
| Toutes les ventes depuis le début | range=all_time |
| Une autre devise | ¤cy=EUR |
| Un autre ordre | &sort=revenue (aussi ad_spend, units, title ; net_profit par défaut) |
Bon à savoir :
- Les livres sans activité sur la période sont listés aussi, avec des zéros, comme sur la page Livres.
- Chaque page de 100 livres est une requête. Le script attend tout seul quand il atteint la limite de 60 requêtes par minute : un gros catalogue prend juste un peu plus de temps.
- Le script ne vérifie pas
meta.truncated. S'il vauttrue, certaines lignes n'ont pas pu être lues : importe une période plus courte.