Usar a API no Google Sheets
Importe uma linha por livro — royalties, gastos com anúncios, lucro líquido — para uma planilha do Google Sheets com um Apps Script curto, sem nunca colocar sua chave de API na planilha.
Este script preenche uma aba chamada Books com uma linha por livro dos últimos 30 dias: título, ASIN, formato, marketplace, unidades, royalties, gastos com anúncios, lucro líquido e TACOS.
1. Crie uma chave
Configurações → API → Criar uma chave. Chame-a de "Google Sheets" e copie-a. Como as chaves funcionam: Autenticação e chaves de API.
2. Guarde a chave nas propriedades do script
- Na sua planilha do Google Sheets, abra Extensões → Apps Script.
- Clique em Configurações do projeto (a engrenagem) e depois em Adicionar propriedade do script.
- Propriedade:
TRUEROYALTIES_API_KEY. Valor: sua chave. Salve.
Nunca cole a chave em uma célula: qualquer pessoa com acesso à planilha poderia lê-la. E nunca na URL: a API recusa a requisição.
3. Cole o script
No Editor, substitua o conteúdo de Code.gs por:
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. Execute
- Escolha
importBooksna barra de ferramentas e clique em Executar. - Na primeira vez, o Google pede para autorizar o script a acessar um serviço externo e a editar sua planilha. Aceite.
- Volte à planilha: a aba Books está preenchida.
Para atualizar sozinho, abra Acionadores (o relógio), Adicionar acionador,
escolha importBooks e um acionador baseado em tempo, uma vez por dia.
Mudar o que você importa
Edite a consulta na linha url:
| Você quer | Adicione ou mude |
|---|---|
| Outro período | range=last_month, ou start_date=2026-01-01&end_date=2026-06-30 |
| Todas as vendas desde o início | range=all_time |
| Outra moeda | ¤cy=EUR |
| Outra ordem | &sort=revenue (também ad_spend, units, title; net_profit por padrão) |
Bom saber:
- Livros sem atividade no período também aparecem, com zeros, como na página Livros.
- Cada página de 100 livros é uma requisição. O script espera sozinho quando atinge o limite de 60 requisições por minuto: um catálogo grande só demora um pouco mais.
- O script não verifica
meta.truncated. Se fortrue, algumas linhas não puderam ser lidas: importe um período menor.