Documentation Integrações

Exporte Leads para planilhas

Este guia leva você de "tenho Leads no meu Node" a "minha planilha se atualiza sozinha", no Excel (Power Query) e no Google Sheets (Apps Script).

Ele é escrito para dois leitores: o operador, que cria a fonte no Console, e o analista, que monta a planilha. Você não precisa saber HTTP, nem como um CSV funciona por dentro, nem programar em Apps Script: o script está pronto, mais abaixo.

O que é a exportação

  • Um arquivo CSV no seu Node. Cada fonte publica um arquivo numa URL do seu próprio Node, protegido por um usuário e uma senha só dela.
  • A planilha é quem vem buscar. O Node não envia o arquivo para lugar nenhum: o Excel ou o Google Sheets busca a URL quando atualiza.
  • Uma linha por Lead, só da Propriedade em que a fonte foi criada. Leads de teste (sandbox) nunca entram.
  • Nada passa pelos servidores da Supreme. O Excel busca o arquivo direto do seu Node. No Google Sheets, são os servidores do Google que buscam a URL do seu Node pela internet.

Você precisa de duas coisas:

  • o power-up Leads no seu plano, para criar uma fonte e editar as colunas dela;
  • o módulo Spreadsheet/CSV Export instalado no seu Node, em Integrações. Veja como instalar módulos em Visão geral de integrações.

Crie a fonte

  1. No Console, abra Leads e escolha a Propriedade no seletor Propriedade.
  2. Clique em Como capturar Leads e abra a aba Planilha. Enquanto a Propriedade não tem nenhum Lead, os caminhos de captura já aparecem na tela, sem esse botão.
  3. Leia o aviso acima do painel: a planilha traz nome, e-mail e telefone dos seus Leads.
  4. Clique em Nova fonte (na primeira vez, Criar planilha).
  5. Marque as colunas e escolha os filtros: a próxima seção explica cada um. O nome é opcional e serve só para você distinguir as fontes.
  6. Clique em Criar fonte.
  7. Copie a URL da fonte, o Usuário e a Senha.

Copie a URL exatamente como o Console mostra; não monte o endereço à mão. A senha pode ser vista de novo depois, em Mostrar senha. Se o Node não conseguir mais ler a senha guardada, o Console avisa, e o caminho é gerar uma Nova senha.

Se o módulo não estiver instalado, a aba Planilha mostra "Módulo Spreadsheet/CSV Export não instalado." e o botão Abrir Integrações.

Sem o power-up Leads, Nova fonte fica desabilitada, com o caminho para Ver planos. Para quem não é dono do Node, o botão fica desabilitado com a linha "Peça ao dono do Node para ativar o Leads." Uma fonte que já existe continua servindo o arquivo normalmente, e o Console a mantém com a URL, Pausar, Nova senha e Excluir.

Colunas e filtros

As colunas saem sempre nesta ordem, com estes nomes no cabeçalho, em inglês. O Power Query e o script do Google Sheets se apoiam neles, por isso eles não mudam.

Coluna no arquivo Campo no Console Padrão
lead_id sempre sai, não dá para desmarcar sempre
first_name, last_name Nome marcado
email E-mail marcado
phone Telefone marcado
status Status marcado
source Origem marcado
source_lead_id ID do lead na origem desmarcado
value, currency Valor e moeda desmarcado
created_at Criado em marcado
updated_at Atualizado em marcado
utm_source, utm_medium, utm_campaign, utm_content, utm_term UTMs marcado
custom_fields Campos personalizados desmarcado

Os nomes dos campos vêm do próprio módulo. Em alguns deles, o texto ao lado da caixa diz quais colunas ela liga, como "Colunas first_name e last_name" em Nome.

  • lead_id é o identificador do Lead no seu Node.
  • source_lead_id é só uma referência ao sistema de onde o Lead veio, como o id dele num CRM. Nunca é a identidade da pessoa.
  • created_at é o momento em que o Lead foi criado no seu Node; updated_at, a última vez que ele mudou.
  • As UTMs são as do primeiro toque, gravadas uma vez, quando o Lead foi criado.

Os filtros:

  • Filtro de status: Todos, ou um status só: new, contacted, qualified, won ou lost.
  • Criado a partir de (UTC, inclusivo) e Criado antes de (UTC, exclusivo): uma data no formato AAAA-MM-DD, o modelo que o campo mostra (por exemplo, 2026-07-01). Vazio quer dizer sem limite. Cada data começa às 00:00 em UTC.

Um filtro fora desses formatos faz a fonte responder com erro (código 500) em toda leitura, até ser corrigido no Console.

Editar colunas, no cartão da fonte, muda só a seleção de colunas e filtros: ajuste e clique em Salvar colunas. A URL, o usuário e a senha continuam os mesmos, e a planilha segue funcionando. Depois de salvar:

  • No Google Sheets, nada a fazer: o script reescreve a aba inteira a cada atualização. Só lembre que uma fórmula em outra aba que aponta para uma coluna da aba Leads pela letra passa a ler o que estiver naquela letra.
  • No Excel, a consulta sugerida na seção do Excel continua funcionando. Se a sua consulta tiver uma etapa que cita uma coluna pelo nome, como uma etapa de tipos, remover essa coluna faz a próxima atualização falhar com um erro de coluna não encontrada: apague ou ajuste essa etapa.

O formato do arquivo

O arquivo é um CSV no padrão RFC 4180:

  • campos separados por vírgula e linhas terminadas em CRLF (\r\n);
  • um valor com vírgula, aspas ou quebra de linha vem entre aspas, com as aspas internas dobradas;
  • codificação UTF-8, sem BOM;
  • datas e horas em ISO-8601, em UTC: 2026-09-23T12:00:00Z;
  • value com ponto decimal e duas casas (150.50), e a moeda na coluna ao lado, currency (BRL);
  • custom_fields inteiro numa célula só, como um objeto JSON;
  • célula vazia quer dizer que o Lead não tem aquele valor.

Nome e e-mail chegam em letras minúsculas, e o telefone chega só com dígitos (5511987654321, sem o +): é assim que o seu Node guarda a identidade da pessoa, para reconhecê-la na próxima captura.

Um arquivo com as colunas padrão começa assim:

lead_id,first_name,last_name,email,phone,status,source,created_at,updated_at,utm_source,utm_medium,utm_campaign,utm_content,utm_term
ld_7f3a9c2e5b1d4f6a8c0e2b4d,maria,silva,maria@example.com,5511987654321,qualified,landing-page,2026-09-23T12:00:00Z,2026-09-24T09:30:00Z,instagram,social,lancamento,'@perfil-parceiro,
ld_1b2c3d4e5f60718293a4b5c6,joão,"souza, filho",joao@example.com,,new,website,2026-09-24T15:42:10Z,2026-09-24T15:42:10Z,,,,,

Proteção contra fórmula. Todo texto que começa com =, +, -, @, TAB ou CR chega com um ' na frente. No exemplo acima, a UTM @perfil-parceiro chegou como '@perfil-parceiro. É proteção, não defeito: sem ela, um valor digitado num formulário do seu site poderia virar uma fórmula dentro da sua planilha. value nunca recebe o '.

O que você vê em cada planilha:

  • Excel (Power Query): o ' aparece na célula, como um caractere do texto ('@perfil-parceiro).
  • Google Sheets: o ' faz a célula guardar o valor como texto e não aparece nela (@perfil-parceiro).

Tetos e como dividir uma base grande

Cada leitura da fonte tem três tetos, e vale o que vier primeiro:

  • 10.000 linhas contando o cabeçalho, ou seja, até 9.999 Leads;
  • 16 MB;
  • 20 segundos para montar o arquivo.

Acima disso, o arquivo chega cortado. Ele termina numa linha inteira, então a planilha não percebe nada. Como o arquivo vai do Lead mais antigo para o mais novo, o que fica de fora são os Leads mais recentes. Quem avisa é o Console: o cartão da fonte mostra Servido com corte e o aviso "Arquivo cortado no teto da lane — divida a fonte por status ou período." Um arquivo cortado nunca é um export completo.

Divida sem sobreposição

Escolha uma data D e crie duas fontes:

  • uma com Criado antes de = D;
  • outra com Criado a partir de = D.

Juntas, elas cobrem todos os Leads sem repetir nenhum: a primeira para às 00:00 UTC de D, e a segunda começa exatamente aí. Para mais partes, repita com outras datas. created_at não muda depois que o Lead é criado, então cada Lead fica sempre na mesma parte.

Outra saída é uma fonte por status. Nesse caso, a divisão segue o status do momento da leitura: um Lead que muda de status sai de uma fonte e entra na outra.

Janela de leituras

Cada fonte aceita 60 leituras a cada 5 minutos. A 61ª é recusada com o código 429, com a indicação de quantos segundos esperar até a janela reabrir. A janela é da fonte, não de cada computador: todas as planilhas e pessoas que leem a mesma fonte dividem as mesmas 60 leituras. Atualizar de hora em hora fica muito longe disso.

Excel (Power Query) no Windows

Os passos são do Excel do Microsoft 365 para Windows. Os nomes de menu estão em português, com o nome da interface em inglês entre parênteses.

  1. Em Dados → Obter Dados → De Outras Fontes → Da Web (Data → Get Data → From Other Sources → From Web), deixe marcado Básico (Basic), cole a URL da fonte e clique em OK.
  2. Na janela de credenciais, escolha Básico (Basic) à esquerda. Em Nome de usuário (User name), cole o Usuário do Console; em Senha (Password), a Senha. No nível ao qual aplicar essas configurações, escolha a URL completa da fonte, não a raiz do site: cada fonte tem usuário e senha próprios. Clique em Conectar (Connect).
  3. Na visualização, confira Origem do Arquivo (File Origin) = 65001: Unicode (UTF-8) e Delimitador (Delimiter) = Vírgula (Comma). Clique em Transformar Dados (Transform Data), confira que a primeira linha virou o cabeçalho (lead_id, first_name…) e clique em Fechar e Carregar (Close & Load).
  4. Ou, no lugar dos passos 1 e 3, use esta consulta. Ela é o caminho recomendado quando Valor e moeda está marcado. Crie uma Consulta Nula (Blank Query) em Dados → Obter Dados → De Outras Fontes, abra o Editor Avançado (Advanced Editor) e cole o texto abaixo, trocando o endereço de exemplo pela URL da fonte copiada do Console, inteira. Na primeira atualização, o Excel pede a credencial: siga o passo 2.
let
    Fonte = Csv.Document(
        Web.Contents("https://SEU-NODE/public/data/spreadsheet_export/<USUARIO>/leads.csv"),
        [Delimiter = ",", Encoding = 65001, QuoteStyle = QuoteStyle.Csv]
    ),
    Cabecalhos = Table.PromoteHeaders(Fonte, [PromoteAllScalars = true]),
    Leads = if List.Contains(Table.ColumnNames(Cabecalhos), "value")
        then Table.TransformColumnTypes(Cabecalhos, {{"value", type number}}, "en-US")
        else Cabecalhos
in
    Leads

QuoteStyle.Csv é o que preserva uma quebra de linha dentro de um valor entre aspas. A etapa Leads converte value com a localidade Inglês (Estados Unidos) (English (United States)): num Excel em português, 150.50 lido sem essa localidade vira outro número. A consulta só cita value pelo nome, e só quando a coluna existe, então ela continua funcionando quando você liga ou desliga colunas em Editar colunas.

  1. Para atualizar sozinho: em Dados → Consultas e Conexões (Data → Queries & Connections), clique com o botão direito na consulta, abra Propriedades (Properties) e marque "Atualizar a cada N minutos" ("Refresh every N minutes") e "Atualizar dados ao abrir o arquivo" ("Refresh data when opening the file"). De hora em hora são 60 minutos. O Excel só atualiza enquanto o arquivo está aberto.
  2. A senha fica nas configurações de fonte de dados daquele computador, não dentro da pasta de trabalho: quem abrir o arquivo em outro computador informa usuário e senha de novo. Para trocar a senha, vá em Dados → Obter Dados → Configurações da Fonte de Dados (Data → Get Data → Data Source Settings), selecione a URL, clique em Editar Permissões (Edit Permissions) e, em Credenciais (Credentials), clique em Editar (Edit).

Excel para Mac e Excel na Web não foram verificados nesta página.

Google Sheets (Apps Script)

Uma fórmula do Google Sheets não consegue buscar a fonte: o porquê está no fim desta página. Um script curto, que você cola uma vez na planilha, faz a busca com usuário e senha e reescreve uma aba chamada Leads.

  1. Na planilha, abra Extensões → Apps Script (Extensions → Apps Script).
  2. Apague o conteúdo de Código.gs (Code.gs), cole o script abaixo inteiro e salve.
  3. Recarregue a planilha: aparece o menu Supreme.
  4. Em Supreme → Configurar fonte / Set up source, cole a URL, o usuário e a senha do Console. O campo de senha não esconde o que você digita.
  5. Na primeira vez, o Google pede autorização. O aviso de app não verificado é normal para um script seu: clique em Avançado (Advanced) e depois em Acessar… (Go to…). Se o item do menu não rodar depois de autorizar, clique nele de novo.
  6. Supreme → Atualizar agora / Refresh now cria ou reescreve a aba Leads com o arquivo.
  7. Supreme → Atualizar a cada hora / Refresh every hour instala o gatilho de tempo. Supreme → Parar atualização / Stop refreshing remove esse gatilho.
// Supreme Tracking — Leads no Google Sheets / Leads in Google Sheets
// Cole o arquivo inteiro em Extensões > Apps Script e recarregue a planilha.
// Paste the whole file into Extensions > Apps Script and reload the spreadsheet.
// Nenhuma URL, usuário ou senha fica no código: use Supreme > Configurar fonte.
// No URL, username or password lives in the code: use Supreme > Set up source.

var SHEET_NAME = 'Leads';
// Horas entre atualizações: 1, 2, 4, 6, 8 ou 12. / Hours between refreshes: 1, 2, 4, 6, 8 or 12.
var REFRESH_HOURS = 1;

var KEY_URL = 'SUPREME_LEADS_URL';
var KEY_USER = 'SUPREME_LEADS_USER';
var KEY_PASSWORD = 'SUPREME_LEADS_PASSWORD';

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Supreme')
    .addItem('Configurar fonte / Set up source', 'supremeSetup')
    .addItem('Atualizar agora / Refresh now', 'supremeRefreshLeads')
    .addItem('Atualizar a cada hora / Refresh every hour', 'supremeInstallTrigger')
    .addItem('Parar atualização / Stop refreshing', 'supremeRemoveTriggers')
    .addToUi();
}

// Guarda URL, usuário e senha só para você. / Stores URL, username and password for you only.
function supremeSetup() {
  var ui = SpreadsheetApp.getUi();
  var url = supremeAsk_(ui, 'URL da fonte / Source URL',
    'Cole a URL da fonte copiada do Console. / Paste the source URL copied from the Console.');
  if (url === null) return;
  if (url.indexOf('https://') !== 0) {
    ui.alert('A URL precisa começar com https://. Nada foi salvo. / The URL must start with https://. Nothing was saved.');
    return;
  }
  var user = supremeAsk_(ui, 'Usuário / Username',
    'Cole o usuário da fonte. / Paste the source username.');
  if (user === null) return;
  var password = supremeAsk_(ui, 'Senha / Password',
    'Cole a senha da fonte. Atenção: este campo não esconde o texto. / Paste the source password. Note: this field does not hide the text.');
  if (password === null) return;

  var values = {};
  values[KEY_URL] = url;
  values[KEY_USER] = user;
  values[KEY_PASSWORD] = password;
  PropertiesService.getUserProperties().setProperties(values);
  ui.alert('Fonte salva só para você. Agora use Supreme > Atualizar agora. / Source saved for you only. Now use Supreme > Refresh now.');
}

function supremeAsk_(ui, title, message) {
  var response = ui.prompt(title, message, ui.ButtonSet.OK_CANCEL);
  var value = response.getResponseText().trim();
  if (response.getSelectedButton() != ui.Button.OK || value === '') {
    ui.alert('Cancelado. Nada foi salvo. / Cancelled. Nothing was saved.');
    return null;
  }
  return value;
}

// Busca o CSV com Basic e reescreve a aba; em erro, a aba fica como estava.
// Fetches the CSV with Basic auth and rewrites the tab; on error, the tab stays as it was.
function supremeRefreshLeads() {
  var props = PropertiesService.getUserProperties();
  var url = props.getProperty(KEY_URL);
  var user = props.getProperty(KEY_USER);
  var password = props.getProperty(KEY_PASSWORD);
  if (!url || !user || !password) {
    throw new Error('Rode Supreme > Configurar fonte primeiro. / Run Supreme > Set up source first.');
  }

  var response = UrlFetchApp.fetch(url, {
    method: 'get',
    headers: {
      Authorization: 'Basic ' + Utilities.base64Encode(user + ':' + password, Utilities.Charset.UTF_8)
    },
    muteHttpExceptions: true,
    followRedirects: false
  });

  var code = response.getResponseCode();
  if (code !== 200) {
    throw new Error(supremeErrorMessage_(code, response.getHeaders()));
  }

  var rows = Utilities.parseCsv(response.getContentText('UTF-8')).filter(function (row) {
    return row.join('') !== '';
  });
  if (rows.length === 0) {
    throw new Error('A fonte devolveu uma resposta vazia. / The source returned an empty response.');
  }
  var width = rows[0].length;
  if (rows.some(function (row) { return row.length !== width; })) {
    throw new Error('Resposta inesperada do Node: linhas de tamanhos diferentes. / Unexpected response from the Node: rows of different lengths.');
  }

  // Só a coluna value vira número. / Only the value column becomes a number.
  var valueColumn = rows[0].indexOf('value');
  if (valueColumn !== -1) {
    for (var r = 1; r < rows.length; r++) {
      if (/^\d+\.\d{2}$/.test(rows[r][valueColumn])) {
        rows[r][valueColumn] = Number(rows[r][valueColumn]);
      }
    }
  }

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName(SHEET_NAME) || spreadsheet.insertSheet(SHEET_NAME);
  sheet.clearContents();
  sheet.getRange(1, 1, rows.length, width).setValues(rows);
}

function supremeErrorMessage_(code, headers) {
  if (code === 401) {
    return 'Usuário ou senha recusados (401). A senha foi trocada ou a fonte foi excluída? Rode Supreme > Configurar fonte com os dados atuais do Console. / Username or password refused (401). Was the password changed or the source deleted? Run Supreme > Set up source with the current details from the Console.';
  }
  if (code === 429) {
    var wait = headers['Retry-After'] || headers['retry-after'] || '?';
    return 'Limite de leituras da fonte atingido (429). Tente de novo em ' + wait + ' s. / Source read limit reached (429). Try again in ' + wait + ' s.';
  }
  if (code === 503) {
    return 'Fonte pausada ou Propriedade inativa (503). Retome a fonte ou ative a Propriedade no Console. / Source paused or Property inactive (503). Resume the source or activate the Property in the Console.';
  }
  if (code === 404) {
    return 'URL errada ou módulo desativado no Node (404). Copie a URL de novo do Console. / Wrong URL or module turned off on the Node (404). Copy the URL again from the Console.';
  }
  if (code === 500) {
    return 'Erro no Node (500): a configuração da fonte pode estar inválida. Revise colunas e filtros no Console. / Node error (500): the source configuration may be invalid. Review columns and filters in the Console.';
  }
  if (code >= 300 && code < 400) {
    return 'A URL redireciona (' + code + '). Cole a URL https final, como o Console mostra. / The URL redirects (' + code + '). Paste the final https URL, as the Console shows it.';
  }
  return 'Resposta inesperada do Node (' + code + '). / Unexpected response from the Node (' + code + ').';
}

// Instala um gatilho de tempo, sem duplicar. / Installs one time-driven trigger, never two.
function supremeInstallTrigger() {
  supremeDeleteRefreshTriggers_();
  ScriptApp.newTrigger('supremeRefreshLeads').timeBased().everyHours(REFRESH_HOURS).create();
  SpreadsheetApp.getUi().alert('Atualização automática ligada: a cada ' + REFRESH_HOURS + ' h. / Automatic refresh on: every ' + REFRESH_HOURS + ' h.');
}

function supremeRemoveTriggers() {
  var removed = supremeDeleteRefreshTriggers_();
  SpreadsheetApp.getUi().alert('Gatilhos removidos: ' + removed + '. / Triggers removed: ' + removed + '.');
}

// Apaga só os gatilhos de supremeRefreshLeads. / Deletes only the supremeRefreshLeads triggers.
function supremeDeleteRefreshTriggers_() {
  var removed = 0;
  ScriptApp.getProjectTriggers().forEach(function (trigger) {
    if (trigger.getHandlerFunction() === 'supremeRefreshLeads') {
      ScriptApp.deleteTrigger(trigger);
      removed++;
    }
  });
  return removed;
}

O que o script faz, e o que ele não faz:

  • URL, usuário e senha ficam nas propriedades do seu usuário no script: nunca numa célula, nunca no código.
  • A cada atualização a aba Leads é reescrita inteira, igual ao arquivo, então não digite nada nela. Se você já usa uma aba com esse nome, troque SHEET_NAME no topo do script.
  • Em erro, a aba não é tocada: os últimos dados bons ficam, e a mensagem diz o que aconteceu a partir do código da resposta.
  • Só a coluna value vira número, para uma planilha em português não reinterpretar o ponto de 150.50. O script não converte mais nada.
  • Para outro intervalo, troque REFRESH_HOURS (1, 2, 4, 6, 8 ou 12) e clique de novo em Atualizar a cada hora: o gatilho antigo é trocado pelo novo, nunca somado.
  • O gatilho roda como a pessoa que o instalou: é a credencial dela que é usada, e as falhas do gatilho chegam a ela por e-mail do Google. Outra pessoa que clicar em Atualizar agora precisa fazer o próprio Configurar fonte, e Parar atualização só remove o gatilho de quem clica.

Confira se funcionou

  1. Atualize a planilha.
  2. No Console, olhe o cartão da fonte: Última leitura mostra quando o arquivo foi lido pela última vez, Arquivo servido confirma que o arquivo não foi cortado e Linhas servidas diz quantas linhas saíram, contando o cabeçalho.
  3. A planilha deve ter o mesmo número de linhas: Linhas servidas 101 são o cabeçalho e 100 Leads.

Isso prova que o seu Node serviu o arquivo inteiro e que a planilha recebeu todas as linhas. O Console não sabe o que a planilha fez com o arquivo depois: fórmulas, filtros e tabelas dinâmicas são do lado da planilha. Um Lead de teste (sandbox) nunca aparece; para ver uma linha nova, envie um formulário real e atualize.

Nova senha, pausa e exclusão

  • Nova senha: a senha antiga para de funcionar na hora. O Excel recusa a atualização e pede a credencial de novo; o script do Google Sheets falha com a mensagem do código 401. Atualize a senha (no Excel, pelo passo 6 da seção do Excel; no Google Sheets, rodando Configurar fonte de novo) e a próxima atualização volta a funcionar, com a mesma URL e o mesmo usuário. A troca também zera a janela de leituras da fonte.
  • Pausar: a URL e a senha continuam as mesmas. Enquanto a fonte está pausada, ela responde com o código 503 e nada é lido; o script mostra a mensagem de fonte pausada. Retomar volta ao normal.
  • Excluir: a URL deixa de existir para sempre, e quem tentar lê-la recebe o mesmo 401 de uma senha errada. Recriar a fonte gera outra URL, outro usuário e outra senha, e cada planilha precisa ser ligada de novo. Para só parar de servir os dados, use Pausar.

Compartilhe com segurança

A planilha tem PII: nome, e-mail e telefone dos seus Leads. Quem tem a planilha vê esses dados.

  • Compartilhe só com quem precisa, e prefira o acesso de leitor.
  • O histórico de versões do Google Sheets guarda os dados antigos: apagar uma linha hoje não apaga o que ficou no histórico.
  • Uma cópia de um arquivo do Excel leva junto os dados que já foram carregados nele.
  • A senha não fica dentro do arquivo: no Excel, ela fica nas configurações de fonte de dados do computador; no Google Sheets, nas propriedades do usuário que fez o Configurar fonte.
  • No Google Sheets, porém, quem pode editar a planilha pode editar o script, e um script alterado roda com a credencial de quem instalou o gatilho. Dê acesso de edição só a quem você confia.
  • Quando alguém com acesso sair, tire o acesso dessa pessoa à planilha e use Nova senha.

Por que não =IMPORTDATA() e por que a senha não vai na URL

IMPORTDATA() recebe só uma URL. Ela não manda o cabeçalho Authorization: Basic, que é como a fonte recebe o usuário e a senha, então a resposta é 401 e nenhum Lead chega.

A fonte também não aceita usuário e senha como parâmetros da URL (a query string), de propósito. URLs ficam no histórico do navegador, em registros de servidores e proxies, em prints de tela e em links compartilhados: uma senha na URL deixaria o arquivo de PII, na prática, público.

É para mandar esse cabeçalho que o script da seção do Google Sheets existe.

Quando algo não funciona

O que você vê O que fazer
O Excel pede usuário e senha de novo, ou o script fala em 401 A senha foi trocada, a fonte foi excluída ou a credencial está errada. Copie a senha do Console (Mostrar senha) e atualize: no Excel, passo 6; no Google Sheets, Configurar fonte.
"Rode Supreme > Configurar fonte primeiro." Quem clicou ainda não configurou a fonte. Cada pessoa faz o próprio Configurar fonte.
Código 429, limite de leituras Espere os segundos indicados e atualize menos vezes: são 60 leituras por fonte a cada 5 minutos, para todos juntos.
Código 503 A fonte está pausada ou a Propriedade está inativa. Use Retomar, ou ative a Propriedade.
Código 404 A URL está errada ou incompleta, ou o módulo foi desativado no Node. Copie a URL de novo do Console e confira o módulo em Integrações.
Código 500 Um filtro está inválido, em geral uma data fora do formato AAAA-MM-DD. Corrija em Editar colunas.
Menos Leads na planilha do que você esperava Confira os filtros da fonte e se o cartão mostra Servido com corte. Se mostrar, divida a fonte.
value com o número errado no Excel Use a consulta do passo 4 da seção do Excel, que converte value com a localidade Inglês (Estados Unidos).
Um ' antes de um valor É a proteção contra fórmula.
Nome em minúsculas, telefone sem + É como o seu Node guarda a identidade da pessoa.

Próximos passos