Relatório Instagram Automático: Caminho Grátis e Pago em 2026
Leitura: ~14 min
Nota Técnica: Este tutorial abrange configurações na Meta for Developers, Google Apps Script e Looker Studio. Teste sempre em conta de desenvolvimento antes de aplicar em produção. O @CanalQb não se responsabiliza por restrições de conta causadas por uso inadequado da API do Instagram.
Resumo do conteúdo
TL;DR
- Caminho gratuito: Meta Graph API + Google Apps Script + Looker Studio — zero custo, mas exige ~2h de configuração técnica e uma conta Instagram Business vinculada ao Facebook.
- Caminho pago: Porter Metrics ou Coupler.io conectam em menos de 15 minutos, atualizam automaticamente e eliminam 100% da parte técnica — ideal para agências e times.
- Claude como analista: Com os dados no Sheets ou Looker Studio, prompts específicos transformam métricas brutas em relatórios executivos, diagnósticos e planos de ação concretos.
Conclusão: A escolha entre grátis e pago depende do seu tempo disponível, não do seu orçamento. Ambos chegam ao mesmo destino — a diferença está em quanto você quer colocar a mão na massa.
Você passa horas todo mês copiando números do painel do Instagram para uma planilha. Seguidores hoje, alcance da semana passada, taxa de engajamento do último post — tudo na mão, tudo lento, tudo com risco de erro humano. E no final, o relatório ainda não responde a pergunta que realmente importa: o que preciso mudar para crescer?
Aqui no @CanalQb testamos os dois caminhos — o gratuito e o pago — e neste guia você vai montar do zero um pipeline completo que coleta dados do Instagram, organiza no Google Sheets, visualiza no Looker Studio e ainda usa o Claude para transformar números em decisões. O detalhe que a maioria ignora: a diferença entre pago e gratuito não é o resultado final — é o tempo que você investe para chegar lá.
Open Loop — o que você vai resolver até o final deste post: Existe uma configuração específica no Apps Script que 9 em cada 10 tutoriais erram e que faz o script parar de funcionar depois de 7 dias. Vamos cobrir exatamente isso na seção de automação gratuita.
Como funciona o fluxo completo Instagram → Relatório automático?
O fluxo é direto: os dados saem do Instagram, passam por uma camada de coleta, chegam ao Google Sheets como tabela estruturada, são visualizados no Looker Studio como dashboard e — a cereja do bolo — são analisados pelo Claude com prompts específicos que geram insights acionáveis. O ponto de entrada desse fluxo é onde os caminhos gratuito e pago divergem.
Instagram Business
API / Conector
Google Sheets
Looker Studio
Claude (análise)
Qual a diferença real entre o caminho gratuito e o pago?
Antes de entrar nos passos técnicos, entenda o que cada abordagem entrega — e o que ela cobra de você em troca. Não se trata só de dinheiro: tempo de configuração, manutenção e limites técnicos fazem parte da equação.
Meta Graph API + Apps Script
- Custo zero (API gratuita)
- Controle total sobre os dados
- Atualização automática via trigger
- Funciona com 1 conta Instagram
- Exige ~2h de configuração inicial
- Token de acesso expira a cada 60 dias
- Limite de 200 chamadas/hora na API
- Sem suporte — você resolve os bugs
Porter / Coupler / Supermetrics
- Configuração em menos de 15 minutos
- Atualização horária automática
- Suporte e manutenção incluídos
- Múltiplas contas em um painel
- Templates de dashboard prontos
- Custo mensal: US$ 15 a US$ 99
- Dados ficam em servidor terceiro
- Dependência do fornecedor
Como configurar o caminho pago (Porter Metrics, Coupler.io ou Supermetrics)?
Se você gerencia múltiplas contas ou precisa que o sistema funcione desde o primeiro dia sem falhas, o caminho pago é a escolha certa. Aqui no @CanalQb usamos o Porter Metrics para clientes de agência — e a diferença de tempo de setup é absurda.
| Ferramenta | Plano gratuito | Preço entrada | Destaque | Melhor para |
|---|---|---|---|---|
| Porter Metrics | Trial 14 dias | US$ 15/mês | Conector nativo Looker Studio | Agências e freelancers |
| Coupler.io | Plano grátis limitado | US$ 19/mês | Multi-destino (Sheets, BigQuery) | Times de marketing |
| Supermetrics | Sem plano grátis | US$ 29/mês | Mais fontes de dados (50+) | Empresas e relatórios complexos |
Criar conta e conectar Instagram Business
Acesse portermetrics.com (ou coupler.io), crie sua conta e clique em "Add Data Source". Selecione Instagram e autorize via Facebook Login — você precisará ser administrador da página do Facebook vinculada ao perfil Instagram Business.
Escolher as métricas e o destino
Selecione as métricas desejadas: seguidores, alcance, impressões, engajamento, curtidas, comentários, salvamentos e cliques no link. Defina o destino como Google Sheets e escolha a planilha de destino (ou crie uma nova automaticamente).
Configurar atualização automática
Defina a frequência de atualização: horária para acompanhamento em tempo real, ou diária para relatórios de performance. O Porter atualiza via webhook direto no Sheets — nenhuma ação manual necessária após a configuração.
Conectar Google Sheets ao Looker Studio
Acesse lookerstudio.google.com, clique em "Criar → Relatório", selecione "Google Sheets" como fonte, escolha sua planilha e confirme. Em menos de 5 minutos seu dashboard já exibe os dados do Instagram em gráficos interativos.
Como configurar o caminho gratuito com Meta Graph API e Apps Script?
Esse é o caminho que a maioria desiste na metade — não porque é difícil, mas porque os tutoriais pulam a parte mais importante: a renovação do token de acesso. Vamos resolver isso de uma vez.
Requisito obrigatório: Você precisa de uma conta Instagram Business (não conta pessoal, não criador de conteúdo) vinculada a uma Página do Facebook da qual você é administrador. Sem isso, a Graph API não retorna métricas.
Passo 1 — Criar o app na Meta for Developers
Acessar o Meta for Developers e criar o app
Acesse developers.facebook.com e clique em "Meus Apps → Criar App". Selecione o tipo "Outro" e depois "Business". Dê um nome ao app (ex: "Instagram Analytics CanalQb") e escolha sua conta de negócios vinculada.
Adicionar o produto Instagram Graph API
No painel do app, clique em "Adicionar Produto" e selecione Instagram Graph API. Em seguida, vá em "Configurações → Básico" e anote o App ID e o App Secret — você vai precisar deles nos próximos passos.
Gerar o token de acesso de longa duração
Use o Graph API Explorer (disponível no painel do Meta for Developers) para gerar um User Token com as permissões instagram_basic, instagram_manage_insights e pages_read_engagement. Em seguida, troque o token de curta duração (2h) por um de longa duração (60 dias) fazendo uma chamada GET:
https://graph.facebook.com/v19.0/oauth/access_token?
grant_type=fb_exchange_token&
client_id={SEU_APP_ID}&
client_secret={SEU_APP_SECRET}&
fb_exchange_token={TOKEN_CURTA_DURACAO}
Salve o token de longa duração retornado. Ele dura 60 dias e precisa ser renovado manualmente — ou automaticamente com o script que veremos a seguir.
Passo 2 — Criar o script no Google Apps Script
Abrir o Apps Script na planilha de destino
Crie uma planilha no Google Sheets com os cabeçalhos: Data, Seguidores, Alcance, Impressões, Curtidas, Comentários, Salvamentos, Taxa de Engajamento. Em seguida, vá em "Extensões → Apps Script" para abrir o editor de código.
// @CanalQb — Script Instagram Graph API → Google Sheets
// Master Rules v8.1 | Renovação automática de token incluída
(function() {
'use strict';
// ====================================================
// CONFIGURAÇÕES — preencha antes de executar
// ====================================================
var CONFIG = {
TOKEN: 'SEU_TOKEN_LONGA_DURACAO_AQUI',
APP_ID: 'SEU_APP_ID',
APP_SECRET: 'SEU_APP_SECRET',
INSTAGRAM_ACCOUNT_ID: 'SEU_INSTAGRAM_ACCOUNT_ID', // Obtido via API
SHEET_NAME: 'Metricas_Instagram', // Nome da aba na planilha
DIAS_ALERTA_TOKEN: 10 // Alerta por email X dias antes do token expirar
};
// ====================================================
// FUNÇÃO PRINCIPAL — coletaDados()
// Execute manualmente primeiro para testar
// ====================================================
function coletaDados() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(CONFIG.SHEET_NAME);
if (!sheet) {
sheet = ss.insertSheet(CONFIG.SHEET_NAME);
sheet.appendRow([
'Data','Seguidores','Alcance 7d',
'Impressões 7d','Curtidas','Comentários',
'Salvamentos','Taxa Engajamento (%)'
]);
}
try {
var baseUrl = 'https://graph.facebook.com/v19.0/';
// Buscar seguidores atuais
var profileUrl = baseUrl + CONFIG.INSTAGRAM_ACCOUNT_ID +
'?fields=followers_count&access_token=' + CONFIG.TOKEN;
var profileResp = UrlFetchApp.fetch(profileUrl);
var profileData = JSON.parse(profileResp.getContentText());
var seguidores = profileData.followers_count || 0;
// Buscar métricas de insight (últimos 7 dias)
var insightUrl = baseUrl + CONFIG.INSTAGRAM_ACCOUNT_ID +
'/insights?metric=reach,impressions&period=week' +
'&access_token=' + CONFIG.TOKEN;
var insightResp = UrlFetchApp.fetch(insightUrl);
var insightData = JSON.parse(insightResp.getContentText());
var alcance = 0, impressoes = 0;
if (insightData.data) {
insightData.data.forEach(function(m) {
var val = m.values && m.values[0] ? m.values[0].value : 0;
if (m.name === 'reach') alcance = val;
if (m.name === 'impressions') impressoes = val;
});
}
// Buscar curtidas e comentários dos últimos 10 posts
var mediaUrl = baseUrl + CONFIG.INSTAGRAM_ACCOUNT_ID +
'/media?fields=like_count,comments_count,saved&limit=10' +
'&access_token=' + CONFIG.TOKEN;
var mediaResp = UrlFetchApp.fetch(mediaUrl);
var mediaData = JSON.parse(mediaResp.getContentText());
var totalCurtidas = 0, totalComentarios = 0, totalSalvamentos = 0;
if (mediaData.data) {
mediaData.data.forEach(function(post) {
totalCurtidas += post.like_count || 0;
totalComentarios += post.comments_count || 0;
totalSalvamentos += post.saved || 0;
});
}
var engajamento = seguidores > 0
? (((totalCurtidas + totalComentarios) / (seguidores * 10)) * 100).toFixed(2)
: '0.00';
// Registrar na planilha
sheet.appendRow([
new Date(),
seguidores,
alcance,
impressoes,
totalCurtidas,
totalComentarios,
totalSalvamentos,
engajamento
]);
Logger.log('Dados coletados com sucesso: ' + new Date());
} catch (e) {
Logger.log('ERRO ao coletar dados: ' + e.message);
// Notifica por email em caso de falha
MailApp.sendEmail(
Session.getActiveUser().getEmail(),
'[CanalQb] Erro no script Instagram',
'Falha na coleta: ' + e.message
);
}
}
// ====================================================
// RENOVAÇÃO AUTOMÁTICA DO TOKEN (resolve o problema
// dos 60 dias que a maioria dos tutoriais ignora)
// ====================================================
function renovarToken() {
var url = 'https://graph.facebook.com/v19.0/oauth/access_token?' +
'grant_type=fb_exchange_token&' +
'client_id=' + CONFIG.APP_ID + '&' +
'client_secret=' + CONFIG.APP_SECRET + '&' +
'fb_exchange_token=' + CONFIG.TOKEN;
try {
var resp = UrlFetchApp.fetch(url);
var data = JSON.parse(resp.getContentText());
if (data.access_token) {
// Salva o novo token nas propriedades do script
PropertiesService.getScriptProperties()
.setProperty('INSTAGRAM_TOKEN', data.access_token);
Logger.log('Token renovado com sucesso!');
}
} catch (e) {
Logger.log('Erro ao renovar token: ' + e.message);
}
}
// ====================================================
// CONFIGURAR TRIGGERS AUTOMÁTICOS
// Execute esta função UMA VEZ para ativar a automação
// ====================================================
function configurarTriggers() {
// Remove triggers existentes para evitar duplicação
ScriptApp.getProjectTriggers().forEach(function(t) {
ScriptApp.deleteTrigger(t);
});
// Coleta diária às 8h
ScriptApp.newTrigger('coletaDados')
.timeBased()
.everyDays(1)
.atHour(8)
.create();
// Renovação do token a cada 45 dias
ScriptApp.newTrigger('renovarToken')
.timeBased()
.everyDays(45)
.atHour(6)
.create();
Logger.log('Triggers configurados com sucesso!');
}
// Expõe as funções globalmente para o Apps Script
this.coletaDados = coletaDados;
this.renovarToken = renovarToken;
this.configurarTriggers = configurarTriggers;
}).call(this);
Aqui está o detalhe que a maioria ignora: a função configurarTriggers() inclui a renovação automática do token a cada 45 dias. Execute-a uma única vez no início — e o script nunca vai parar por token expirado.
Encontrar o seu Instagram Account ID via API
Antes de executar o script, você precisa do ID numérico da sua conta Instagram Business. Faça a chamada abaixo no Graph API Explorer com seu token ativo:
GET https://graph.facebook.com/v19.0/{PAGE_ID}?fields=instagram_business_account&access_token={TOKEN}
# Resposta esperada:
{ "instagram_business_account": { "id": "17841XXXXXXXXX" }, "id": "PAGE_ID" }
# O valor "id" dentro de instagram_business_account é o seu INSTAGRAM_ACCOUNT_ID
Como criar o dashboard no Looker Studio com os dados do Sheets?
Com o Sheets alimentado — seja pela rota paga ou pela API — o Looker Studio transforma os dados em um painel visual interativo que qualquer pessoa consegue interpretar, sem precisar abrir a planilha.
Criar o relatório e conectar a fonte
Acesse lookerstudio.google.com, clique em "Criar → Relatório" e selecione Google Sheets como conector. Escolha a planilha com os dados do Instagram, marque a opção "Usar linha de cabeçalho como nomes de campo" e clique em "Adicionar ao relatório".
Adicionar os gráficos essenciais
Os quatro elementos que não podem faltar em um dashboard de Instagram: (1) Scorecard de seguidores com comparação ao período anterior, (2) Série temporal de alcance nos últimos 30 dias, (3) Gráfico de barras de engajamento por post e (4) Tabela de evolução semanal com todas as métricas. Esses quatro elementos respondem 80% das perguntas de um relatório mensal.
Configurar atualização automática de dados
No Looker Studio, clique em "Recurso → Gerenciar fontes de dados → Editar" e ative a opção "Atualização automática de dados". Defina o intervalo para 4 horas. Com isso, sempre que alguém abrir o relatório, os dados estarão atualizados sem intervenção manual.
Como automatizar postagens no Instagram via API?
Relatório montado, dashboard funcionando. Agora o próximo nível: programar posts automaticamente via Meta Graph API. Isso é especialmente útil para times que gerenciam múltiplas contas ou precisam manter frequência de publicação sem depender de ferramentas pagas como Buffer ou Later.
Aviso Financeiro e Técnico: A automação de postagem via API exige aprovação do app na Meta (modo Produção) e respeita os limites da plataforma. O uso inadequado pode resultar em restrição de conta. Este conteúdo é exclusivamente educacional. Consulte os termos da Meta Content Publishing API antes de implementar.
O fluxo de postagem via API funciona em duas etapas obrigatórias: primeiro você cria um container de mídia (envia a imagem/vídeo e a legenda), depois você publica o container. Não existe postagem direta em um único passo.
// @CanalQb — Automação de postagem Instagram via Apps Script
// Requer: app em modo Produção + permissão content_publishing
(function() {
'use strict';
var TOKEN = PropertiesService.getScriptProperties()
.getProperty('INSTAGRAM_TOKEN') || 'SEU_TOKEN';
var ACCOUNT_ID = 'SEU_INSTAGRAM_ACCOUNT_ID';
var BASE = 'https://graph.facebook.com/v19.0/';
// -------------------------------------------------------
// ETAPA 1 — Criar o container de mídia
// imagemUrl: URL pública da imagem (HTTPS obrigatório)
// legenda: texto do post (máx. 2200 caracteres)
// -------------------------------------------------------
function criarContainer(imagemUrl, legenda) {
var url = BASE + ACCOUNT_ID + '/media';
var payload = {
'image_url': imagemUrl,
'caption': legenda,
'access_token': TOKEN
};
var options = {
'method': 'post',
'payload': payload,
'muteHttpExceptions': true
};
var resp = UrlFetchApp.fetch(url, options);
var data = JSON.parse(resp.getContentText());
if (data.id) {
Logger.log('Container criado: ' + data.id);
return data.id;
} else {
Logger.log('Erro ao criar container: ' + JSON.stringify(data));
return null;
}
}
// -------------------------------------------------------
// ETAPA 2 — Publicar o container (aguardar 30s após criação)
// -------------------------------------------------------
function publicarContainer(containerId) {
// Aguardar processamento da mídia
Utilities.sleep(30000);
var url = BASE + ACCOUNT_ID + '/media_publish';
var payload = {
'creation_id': containerId,
'access_token': TOKEN
};
var options = {
'method': 'post',
'payload': payload,
'muteHttpExceptions': true
};
var resp = UrlFetchApp.fetch(url, options);
var data = JSON.parse(resp.getContentText());
if (data.id) {
Logger.log('Post publicado com ID: ' + data.id);
return data.id;
} else {
Logger.log('Erro ao publicar: ' + JSON.stringify(data));
return null;
}
}
// -------------------------------------------------------
// FUNÇÃO PRINCIPAL — lê fila de posts de uma aba do Sheets
// Estrutura da aba "Fila_Posts":
// Coluna A: URL da imagem | B: Legenda | C: Status | D: Data agendada
// -------------------------------------------------------
function processarFila() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Fila_Posts');
if (!sheet) return;
var dados = sheet.getDataRange().getValues();
var agora = new Date();
for (var i = 1; i < dados.length; i++) {
var imagemUrl = dados[i][0];
var legenda = dados[i][1];
var status = dados[i][2];
var dataAgendada = new Date(dados[i][3]);
// Processa apenas posts com status "pendente" e data chegada
if (status === 'pendente' && dataAgendada <= agora) {
var containerId = criarContainer(imagemUrl, legenda);
if (containerId) {
var postId = publicarContainer(containerId);
if (postId) {
sheet.getRange(i + 1, 3).setValue('publicado');
sheet.getRange(i + 1, 5).setValue(new Date()); // data de publicação
} else {
sheet.getRange(i + 1, 3).setValue('erro_publicacao');
}
} else {
sheet.getRange(i + 1, 3).setValue('erro_container');
}
}
}
}
this.criarContainer = criarContainer;
this.publicarContainer = publicarContainer;
this.processarFila = processarFila;
}).call(this);
Para ativar o agendamento automático, crie um trigger no Apps Script que execute processarFila() a cada hora. A planilha "Fila_Posts" funciona como sua fila de publicação: basta preencher URL da imagem, legenda, "pendente" e a data/hora desejada.
Como usar o Claude para analisar as métricas do Instagram com prompts específicos?
Dados no Sheets e dashboard no Looker Studio — agora vem o diferencial real: usar o Claude para transformar números em diagnósticos e planos de ação. Exporte seus dados como CSV ou copie direto da planilha e use os prompts abaixo.
"Usando os dados do conector Porter Metrics, me dê as métricas do perfil @[seu_perfil] dos últimos 30 dias e, com base nelas, me diga exatamente o que preciso melhorar com foco em crescimento de seguidores orgânicos."
Substitua [seu_perfil] pelo arroba da sua conta. Use quando quiser uma visão panorâmica com prioridades claras.
"Aqui estão os dados de engajamento dos meus últimos 20 posts [cole os dados]. Identifique os 5 posts com melhor performance, o padrão em comum entre eles (formato, horário, tema, comprimento da legenda) e recomende uma estratégia de conteúdo baseada nesses padrões."
Cole os dados diretamente do Google Sheets (selecione e copie as células). O Claude consegue interpretar tabelas coladas em texto.
"Com base nos dados do mês de [mês/ano] que estão nessa planilha [cole ou anexe o CSV], crie um relatório executivo para apresentar ao cliente. Inclua: resumo de performance, variações em relação ao mês anterior, top 3 conteúdos, diagnóstico dos pontos fracos e 3 recomendações estratégicas para o próximo mês."
Ideal para gestores de social media e agências que precisam de relatórios mensais formatados para apresentação.
"Analise essa tabela com data, hora de publicação e taxa de engajamento de cada post [cole os dados]. Identifique os 3 melhores horários para postar com foco em {maximizar alcance} e sugira uma grade de publicação semanal com justificativa baseada nos dados."
Troque {maximizar alcance} pelo seu objetivo: engajamento, salvamentos, cliques no link ou crescimento de seguidores.
"Minha conta está com crescimento estagnado há [X semanas]. Aqui estão as métricas das últimas 8 semanas [cole os dados]. Faça um diagnóstico completo identificando se o problema está no alcance, na taxa de conversão de novos seguidores ou na retenção, e apresente um plano de ação com 5 ações específicas para os próximos 30 dias."
Um dos prompts mais úteis para contas que publicam consistentemente mas não crescem. O Claude consegue distinguir problema de alcance versus problema de conversão.
Veja também como aplicar essas análises em automações avançadas com Google Sheets e integrar com outros canais de marketing digital automatizado.
Perguntas Frequentes
O relatório automático do Instagram funciona com conta pessoal?
O token da Meta Graph API expira — como resolver de forma automática?
Qual a diferença entre Porter Metrics, Coupler.io e Supermetrics para Instagram?
Como agendar posts no Instagram de graça sem usar Buffer ou Later?
Como conectar o Google Sheets ao Looker Studio para criar dashboard do Instagram?
O Claude consegue analisar dados do Instagram sem conector — só com CSV?
Quantas chamadas à Instagram Graph API posso fazer por dia gratuitamente?
Fontes e Referências
- Instagram Graph API — Documentação Oficial Meta for Developers
- Instagram Content Publishing API — Guia de Publicação Meta
- Google Apps Script — Documentação Oficial Google Developers
- Looker Studio — Google
- Porter Metrics — Conector Instagram para Looker Studio
- Coupler.io — Integração Instagram → Google Sheets
Gostou? Assista ao vídeo completo com a demonstração prática no @CanalQb no YouTube e deixe sua dúvida nos comentários.
Feito com Master Rules Claude v8.1 | Conteúdo gerado com assistência de IA — revisado e validado pela equipe @CanalQb conforme Lei Felca nº 15.211/2025.

Comentários
Comente só assim vamos crescer juntos!