Para uma agência web, crescer rápido demais frequentemente se torna um pesadelo. Quando isso leva ao aumento de tarefas repetitivas, os recursos disponíveis se esgotam muito antes da conclusão do trabalho: seus fluxos de trabalho ficam fragmentados, seus processos são ineficientes e sua equipe fica desmotivada.
O crescimento saudável e sustentável exige uma mudança fundamental na mentalidade: trabalhar de forma mais inteligente, não mais difícil. Nesse cenário, a automação não é um luxo; é um requisito estratégico para a sobrevivência e o sucesso.
Mas como transformar a ideia de trabalhar de forma mais inteligente em um fluxo de trabalho funcional? A resposta rápida é: conecte sua infraestrutura às suas ferramentas de gerenciamento.
Neste guia, mostraremos a você como conectar sua infraestrutura de hospedagem Kinsta e seu sistema de gerenciamento de projetos Trello, criando uma camada de sincronização personalizada e automatizada.
Vamos começar.
A lacuna entre infraestrutura e gerenciamento
Se você usa o Trello para gerenciar os projetos da sua agência, já conhece o ritual de onboarding: para cada site que você lança, é necessário criar e configurar manualmente um quadro no Trello e preencher checklists com todas as tarefas envolvidas, desde a configuração de DNS até a otimização de SEO.
Depois vem a manutenção diária, tarefas repetitivas e verificações realizadas regularmente para garantir que os sites dos clientes funcionem corretamente, que o uso de recursos permaneça dentro dos limites do plano e que as atualizações sejam aplicadas sem erros. Em um fluxo de trabalho manual, isso significa acessar vários painéis apenas para verificar se um site não está atingindo o limite de largura de banda ou ficando sem espaço em disco.
Quanto mais projetos de clientes você assume, maior a chance de erro humano e mais provável se torna a “fadiga de monitoramento”. Considere o ciclo de vida padrão de um site de cliente:
- O processo de integração: Provisionamento de ambientes, configuração de DNS, implantação de SSL e configuração de CI/CD.
- A fase operacional: Monitoramento da saúde do servidor e do consumo de recursos para evitar indisponibilidade ou custos inesperados por uso excedente.
Na prática, ambas as fases exigem coordenação organizacional constante. O principal problema é o efeito de silo: hospedagem e gerenciamento são dois ecossistemas isolados. A informação só flui se alguém se lembrar de verificar uma métrica e enviar uma mensagem no Slack.
Se um site atingir seu limite de recursos, mas o desenvolvedor não atualizar o gerente de projetos, as ineficiências e os atrasos serão inevitáveis.
As agências modernas e orientadas para o crescimento não podem depender de coordenação manual. A comunicação deve fluir de forma contínua e automática da infraestrutura (hospedagem Kinsta) diretamente para a ferramenta de gerenciamento (Trello).
É aqui que a API da Kinsta se torna o membro mais valioso da sua equipe, ajudando você a transformar dados brutos de hospedagem em informações úteis para seus gerentes de projeto.
A stack tecnológica: por que Kinsta e Trello
Escolher as ferramentas certas é o primeiro passo para uma automação eficaz. Kinsta e Trello formam uma combinação ideal porque ambas as plataformas oferecem APIs robustas que permitem construir uma ponte automatizada entre os aspectos técnicos e de gerenciamento dos seus fluxos de trabalho.
- A API da Kinsta: a Kinsta fornece uma API RESTful que permite que os desenvolvedores da sua equipe executem ações técnicas e operacionais de forma programática – desde o provisionamento de ambientes até a extração de análises em tempo real e registros do servidor. A Kinsta é uma infraestrutura programável.
- Sistema de gerenciamento de projetos do Trello: o Trello é muito mais do que uma coleção de notas e listas; é uma representação visual dos processos de sua agência com base na lógica do quadro Kanban. A API do Trello ajuda você a transformar um painel estático em um ambiente dinâmico que responde a eventos no seu servidor.
Ao integrar Kinsta e Trello, você transforma os dados brutos do MyKinsta em insights acionáveis para suas equipes. Sem trabalho manual, sem etapas perdidas, sem sobrecarga e sem desperdício do tempo dos seus desenvolvedores.
Dito isso, é hora de preparar o ambiente e reunir suas ferramentas.
Reúna suas ferramentas
Antes de começar a programar, você precisará reunir as ferramentas necessárias:
- Chave API da Kinsta
- Chave API do Trello
- Token do Trello
- Um repositório de código no GitHub
Vamos começar com a chave API da Kinsta.
Etapa 1: gerar uma chave API da Kinsta
A chave API da Kinsta permite que você acesse seu serviço de hospedagem por meio da API. Siga estas etapas para criar uma nova chave API da Kinsta:
- Acesse o painel MyKinsta.
- Navegue até a página Chaves API (Seu nome > Configurações da empresa > Chaves API).
- Clique em Criar chave API.
- Escolha uma data de expiração ou defina uma data de início personalizada e o número de horas até a expiração da chave.
- Dê um nome exclusivo para a chave.
- Clique em Gerar.

Certifique-se de copiar sua chave API e armazená-la em um local seguro. Você não poderá visualizá-la novamente. Caso a perca, será necessário revogá-la e gerar uma nova.
Etapa 2: gerar chave API e token do Trello
Para gerar uma chave API, o Trello exige que você crie um Trello Power-Up, que é essencialmente um aplicativo Trello. Para começar, acesse o portal de administração do Power-Up.

Clique em New e preencha o formulário exibido.

Depois de salvar suas informações, você será redirecionado para o painel do Power-Up. Digite os detalhes necessários e salve suas configurações. Em seguida, clique em API Key no menu à esquerda e, em seguida, em Generate a new API key no meio da página.

Pronto! Agora você já tem sua chave API do Trello. Certifique-se de armazená-la em um local seguro.

No entanto, apenas a chave API não é suficiente para integrar o Trello aos seus aplicativos. Você também precisa gerar um token. Clique no link Token à direita para acessar uma página que lista as permissões que você está concedendo ao seu Power-Up. Revise essas permissões e autorize o Trello a compartilhar os dados.

Copie e cole o token do Trello em um local seguro.
Etapa 3: criar um repositório de código no GitHub
O GitHub não é apenas um repositório de código. Também é um ambiente onde você pode configurar tarefas repetitivas e automações.
No GitHub, você precisará configurar os três itens a seguir:
- O repositório, que hospeda seu código;
- Secrets, usados para armazenar suas chaves API e token;
- O fluxo de trabalho, que contém as instruções de automação.
1. Criar o repositório do GitHub
No GitHub, clique no botão verde New.
- Dê um nome ao seu repositório.
- Adicione uma descrição.
- Defina a visibilidade como Private.
- Marque a opção Add README.
- Clique em Create repository.

2. Configurar seus Action secrets
Em seguida, você precisa configurar seus secrets. Este é um passo importante porque permite evitar a inclusão das suas chaves API diretamente no código.
No seu novo repositório, clique na aba Settings no topo da página. No menu lateral esquerdo, clique em Secrets and variables e depois em Actions.

Clique em New repository secret e adicione suas chaves API e token.

3. Configurar o fluxo de trabalho
Agora você precisa conceder permissões de escrita ao GitHub. Ainda em Settings, acesse Actions > General.
Role até a seção Workflow permissions e marque a opção Read and write permissions. Em seguida, clique em Save.

Automatizando o onboarding com a API da Kinsta e o Trello
Agora você tem suas chaves API e o token do Trello. O próximo passo é integrar sua hospedagem da Kinsta ao seu sistema de gerenciamento de projetos Trello.
Usaremos o GitHub Actions para executar periodicamente um script de sincronização entre a Kinsta e o Trello. Esse processo automatizado consultará a API da Kinsta em intervalos definidos para identificar novos sites e, em seguida, usará a API do Trello para garantir que seu quadro do Trello reflita perfeitamente o portfólio de sites da Kinsta.
No GitHub, você precisa criar um arquivo de configuração YAML para especificar quando o script deve ser executado. Em nosso exemplo, o script será executado a cada 30 minutos.
Volte para a seção Code do seu repositório e clique em Add file > Create new file.
Insira .github/workflows/main.yml no nome do arquivo. O GitHub criará automaticamente as pastas .github e workflows. Em seguida, cole o seguinte código:
name: Kinsta-Trello Integration
on:
schedule:
- cron: '*/30 * * * *' # Run every 30 minutes
workflow_dispatch: # Allows to start it manually for testing
jobs:
run-sync:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Run automation script
env:
KINSTA_API_KEY: ${{ secrets.KINSTA_API_KEY }}
KINSTA_COMPANY_ID: ${{ secrets.KINSTA_COMPANY_ID }}
TRELLO_API_KEY: ${{ secrets.TRELLO_API_KEY }}
TRELLO_TOKEN: ${{ secrets.TRELLO_TOKEN }}
run: node index.js
Depois de concluir, clique no botão verde Commit changes….
A configuração inicial está concluída. Agora você pode seguir para a criação do script.
Etapa 2: criar o script
Você precisará criar um novo arquivo index.js no diretório raiz do seu projeto do GitHub e adicionar o código mostrado nas seções a seguir.
1. Declarar variáveis
O primeiro passo é declarar as variáveis que o script precisa para executar suas tarefas.
const KINSTA_API_URL = 'https://api.kinsta.com/v2';
const TRELLO_API_URL = 'https://api.trello.com/1';
const secrets = {
kinsta: process.env.KINSTA_API_KEY,
company: process.env.KINSTA_COMPANY_ID,
trelloKey: process.env.TRELLO_API_KEY,
trelloToken: process.env.TRELLO_TOKEN
};
2. O próximo passo é definir a função de automação.
A próxima etapa é definir a função de automação.
async function startAutomation() {
try {
console.log("🚀 Starting Kinsta-Trello automation...");
const kinstaUrl = `${KINSTA_API_URL}/sites?company=${secrets.company}`;
const kinstaResponse = await fetch(kinstaUrl, {
method: 'GET',
headers: {
'Authorization': `Bearer ${secrets.kinsta}`
}
});
if (!kinstaResponse.ok) throw new Error(`Kinsta API error: ${kinstaResponse.status}`);
const kinstaData = await kinstaResponse.json();
const sites = kinstaData.company?.sites || [];
console.log(`✅ Successfully fetched ${sites.length} sites from Kinsta.`);
const trelloResponse = await fetch(`${TRELLO_API_URL}/members/me/boards?key=${secrets.trelloKey}&token=${secrets.trelloToken}`);
if (!trelloResponse.ok) throw new Error(`Trello API error: ${trelloResponse.statusText}`);
const trelloBoards = await trelloResponse.json();
for (const site of sites) {
const boardExists = trelloBoards.find(board => board.name === site.name);
if (!boardExists) {
console.log(`✨ New site found: ${site.name}. Provisioning workflow...`);
const createBoardUrl = `${TRELLO_API_URL}/boards/?name=${encodeURIComponent(site.name)}&defaultLists=false&key=${secrets.trelloKey}&token=${secrets.trelloToken}`;
const newBoardResponse = await fetch(createBoardUrl, { method: 'POST' });
const newBoard = await newBoardResponse.json();
if (newBoardResponse.ok) {
console.log(`✅ Board created for ${site.name}. Setting up workflow...`);
const toDoListId = await createWorkflow(newBoard.id);
if (toDoListId) {
await createGoLiveCard(toDoListId);
}
} else {
console.log(`❌ Failed to create board for ${site.name}.`);
}
} else {
console.log(`ℹ️ Site "${site.name}" already has a board. Skipping.`);
}
}
console.log("🏁 Automation workflow finished!");
} catch (error) {
console.error("❌ Critical error during automation:", error.message);
}
}
startAutomation();
Vamos analisar essa função bloco por bloco.
O primeiro console.log indica que o processo foi iniciado:
console.log("🚀 Starting Kinsta-Trello automation...");
O código a seguir recupera sites da sua empresa no MyKinsta:
const kinstaUrl = `${KINSTA_API_URL}/sites?company=${secrets.company}`;
const kinstaResponse = await fetch(kinstaUrl, {
method: 'GET',
headers: {
'Authorization': `Bearer ${secrets.kinsta}`
}
});
if (!kinstaResponse.ok) throw new Error(`Kinsta API error: ${kinstaResponse.status}`);
const kinstaData = await kinstaResponse.json();
const sites = kinstaData.company?.sites || [];
console.log(`✅ Successfully fetched ${sites.length} sites from Kinsta.`);
- Se a resposta não for
kinstaResponse.ok, você receberá uma mensagem de erro. Se a API retornar um resultado válido, a função armazenará a lista de sites no arraysitese exibirá uma mensagem de sucesso.
O próximo passo é recuperar seus quadros existentes no Trello:
const trelloResponse = await fetch(`${TRELLO_API_URL}/members/me/boards?key=${secrets.trelloKey}&token=${secrets.trelloToken}`);
if (!trelloResponse.ok) throw new Error(`Trello API error: ${trelloResponse.statusText}`);
const trelloBoards = await trelloResponse.json();
Em seguida, vamos passar para a lógica de sincronização.
for (const site of sites) {
const boardExists = trelloBoards.find(board => board.name === site.name);
if (!boardExists) {
console.log(`✨ New site found: ${site.name}. Provisioning workflow...`);
const createBoardUrl = `${TRELLO_API_URL}/boards/?name=${encodeURIComponent(site.name)}&defaultLists=false&key=${secrets.trelloKey}&token=${secrets.trelloToken}`;
const newBoardResponse = await fetch(createBoardUrl, { method: 'POST' });
const newBoard = await newBoardResponse.json();
if (newBoardResponse.ok) {
console.log(`✅ Board created for ${site.name}. Setting up workflow...`);
const toDoListId = await createWorkflow(newBoard.id);
if (toDoListId) {
await createGoLiveCard(toDoListId);
}
} else {
console.log(`❌ Failed to create board for ${site.name}.`);
}
} else {
console.log(`ℹ️ Site "${site.name}" already has a board. Skipping.`);
}
}
- O loop
foritera sobre os elementos do arraysites, ou seja, a lista de sites da empresa no MyKinsta, e verifica se existe um quadro para cada site. Se não existir um quadro com o nome do site, ele cria um. - Se o novo quadro tiver sido criado com êxito (
if (newBoardResponse.ok) {...}), chame as funçõescreateWorkflow()ecreateGoLiveCard()descritas abaixo. Observe quecreateGoLiveCard()só é chamada para sua lista de tarefas (To Do).
3. Definir a função createWorkflow()
A função createWorkflow() cria três listas padrão em seu espaço do Trello e retorna o ID da lista de tarefas (To Do).
async function createWorkflow(boardId) {
const lists = ['To Do', 'Doing', 'Done'];
let toDoListId = null;
for (const listName of lists) {
const url = `${TRELLO_API_URL}/boards/${boardId}/lists?name=${encodeURIComponent(listName)}&key=${secrets.trelloKey}&token=${secrets.trelloToken}`;
const response = await fetch(url, { method: 'POST' });
const newList = await response.json();
console.log(` - List "${listName}" created.`);
if (listName === 'To Do') toDoListId = newList.id;
}
return toDoListId;
}
4. Definir a função auxiliar createGoLiveCard()
Agora você precisa definir a função que gera o checklist Go-Live Pipeline.
async function createGoLiveCard(listId) {
const cardUrl = `${TRELLO_API_URL}/cards?idList=${listId}&name=${encodeURIComponent('🚀 Go-Live Pipeline')}&desc=${encodeURIComponent('Standard agency tasks for site launch.')}&key=${secrets.trelloKey}&token=${secrets.trelloToken}`;
const cardResponse = await fetch(cardUrl, { method: 'POST' });
const card = await cardResponse.json();
if (cardResponse.ok) {
const checklistUrl = `${TRELLO_API_URL}/checklists?idCard=${card.id}&name=Launch%20Tasks&key=${secrets.trelloKey}&token=${secrets.trelloToken}`;
const checklistResponse = await fetch(checklistUrl, { method: 'POST' });
const checklist = await checklistResponse.json();
const tasks = [
'Point DNS to Kinsta',
'Install & Force SSL (Let\'s Encrypt)',
'Set up Search Console & Analytics',
'Performance Test (Kinsta APM)',
'Final Backup before Launch'
];
for (const task of tasks) {
await fetch(`${TRELLO_API_URL}/checklists/${checklist.id}/checkItems?name=${encodeURIComponent(task)}&key=${secrets.trelloKey}&token=${secrets.trelloToken}`, {
method: 'POST'
});
}
console.log(` - Go-Live Pipeline card with checklist created.`);
}
}
Essa função faz o seguinte:
- Primeiro, ela usa a API do Trello para criar a lista Go-Live Pipeline.
- Em seguida, se a resposta for
cardResponse.ok, ela adiciona uma lista com 5 itens ao cartãoTarefas (To Do).
5. Executar o fluxo de trabalho
É hora de testar seu código. Primeiro, faça commit das suas alterações e, em seguida, acesse a seção Actions (link no menu superior).

Quando terminar, clique em seu aplicativo no menu à esquerda. Em nosso exemplo, é Kinsta-Trello integration.

Clique no botão Run workflow à direita. Isso iniciará seu workflow. Clique no workflow em execução e depois em Run automation script. Você verá as etapas do processo em andamento, junto com mensagens de sucesso de console.log ou mensagens de erro se o processo falhar.

Conforme mostrado na imagem acima, o script criou um novo quadro do Trello com três listas, incluindo a lista do Pipeline Go-Live. As imagens a seguir mostram o novo quadro do Trello e a checklist do Pipeline Go-Live dentro do cartão To Do.


Monitoramento proativo com a API da Kinsta e o Trello
A integração da hospedagem da Kinsta com o gerenciamento de projetos do Trello vai muito além do onboarding inicial. Ao aproveitar suas respectivas APIs, você pode manter um fluxo contínuo de comunicação entre os dois ambientes, garantindo que sua equipe permaneça informada em tempo real sobre a saúde dos seus sites.
Por exemplo, você pode adicionar automaticamente um cartão do Trello ao quadro da sua equipe sempre que ocorrer um evento crítico, como alto uso de largura de banda ou pouco espaço em disco. O sistema pode gerar automaticamente um cartão no quadro da equipe técnica, completo com um checklist de tarefas.
Usando a mesma lógica e as mesmas ferramentas que usamos para onboarding, você também pode automatizar o monitoramento e o gerenciamento de health checks dos seus sites. Isso exige um novo arquivo de configuração e um script dedicado: volte ao GitHub e crie o arquivo.github/workflows/health-check.yml com o seguinte código:
name: Daily Health Check
on:
schedule:
- cron: '0 9 * * *' # Runs at 09:00
workflow_dispatch: # Start manually
jobs:
health-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Run Health Check
env:
KINSTA_API_KEY: ${{ secrets.KINSTA_API_KEY }}
KINSTA_COMPANY_ID: ${{ secrets.KINSTA_COMPANY_ID }}
TRELLO_API_KEY: ${{ secrets.TRELLO_API_KEY }}
TRELLO_TOKEN: ${{ secrets.TRELLO_TOKEN }}
run: node health-check.js
Estes são os pontos principais deste script de configuração:
- Configuramos um temporizador automático para executar o script todos os dias às 09:00 UTC (
(schedule: - cron: '0 9 * * *'). - O
workflow_dispatchexecuta o script a qualquer momento por meio da aba Actions no GitHub. Isso é especialmente útil durante o desenvolvimento e a depuração. - Em seguida, definimos a sequência de operações: o comando final usa o node para executar o arquivo
health-check.js.
1. Declarar variáveis
Navegue até o diretório raiz do seu repositório, crie um arquivo chamado health-check.js e declare as seguintes variáveis:
const KINSTA_API_URL = 'https://api.kinsta.com/v2';
const TRELLO_API_URL = 'https://api.trello.com/1';
const secrets = {
kinsta: process.env.KINSTA_API_KEY,
company: process.env.KINSTA_COMPANY_ID,
trelloKey: process.env.TRELLO_API_KEY,
trelloToken: process.env.TRELLO_TOKEN
};
2. Obter sites da Kinsta
Em seguida, defina a função getKinstaSites():
async function getKinstaSites() {
const url = `${KINSTA_API_URL}/sites?company=${secrets.company}`;
const response = await fetch(url, {
method: 'GET',
headers: { 'Authorization': `Bearer ${secrets.kinsta}` }
});
if (!response.ok) throw new Error(`Kinsta API error: ${response.status}`);
const data = await response.json();
return data.company?.sites || [];
}
Essa função retorna uma lista dos sites da empresa no MyKinsta ou um array vazio.
3. Obter uso de largura de banda
Defina uma função chamada getBandwidthUsage() que retorna o uso da largura de banda de um site.
async function getBandwidthUsage(siteId) {
const url = `${KINSTA_API_URL}/sites/${siteId}/usage/bandwidth/this-month`;
const response = await fetch(url, {
method: 'GET',
headers: { 'Authorization': `Bearer ${secrets.kinsta}` }
});
if (!response.ok) return null;
const data = await response.json();
const bytes = data.site?.this_month_usage?.bandwidth;
return bytes !== undefined ? Math.round(bytes / (1024 * 1024)) : 0;
}
4. Criar cartões do Trello
A função a seguir gera um cartão intitulado “⚠️ Bandwidth Alert: High Traffic”:
async function postTrelloAlert(siteName, message) {
const boardsResp = await fetch(`${TRELLO_API_URL}/members/me/boards?key=${secrets.trelloKey}&token=${secrets.trelloToken}`);
const boards = await boardsResp.json();
const board = boards.find(b => b.name === siteName);
if (board) {
const listsResp = await fetch(`${TRELLO_API_URL}/boards/${board.id}/lists?key=${secrets.trelloKey}&token=${secrets.trelloToken}`);
const lists = await listsResp.json();
const targetList = lists.find(l => l.name === 'To Do') || lists[0];
const cardsResp = await fetch(`${TRELLO_API_URL}/lists/${targetList.id}/cards?key=${secrets.trelloKey}&token=${secrets.trelloToken}`);
const cards = await cardsResp.json();
const alertTitle = `⚠️ Bandwidth Alert: High Traffic`;
if (!cards.find(c => c.name === alertTitle)) {
await fetch(`${TRELLO_API_URL}/cards?idList=${targetList.id}&name=${encodeURIComponent(alertTitle)}&desc=${encodeURIComponent(message)}&key=${secrets.trelloKey}&token=${secrets.trelloToken}`, {
method: 'POST'
});
console.log(`📌 Alert posted for ${siteName}`);
}
}
}
- Observe a condição
if (!cards.find(...)). Isso evita que você sobrecarregue o quadro com notificações duplicadas.
5. Executar o script
Por fim, defina uma função que monitore seus sites.
async function runMonitoring() {
console.log("📊 Starting standalone Health Check...");
const sites = await getKinstaSites();
for (const site of sites) {
const usage = await getBandwidthUsage(site.id);
if (usage !== null) {
console.log(`Site: ${site.name} | Usage: ${usage} MB`);
if (usage > 100) { // Test threshold
await postTrelloAlert(site.name, `Bandwidth usage: ${usage} MB.`);
}
}
}
}
runMonitoring().catch(console.error);
Quando executada, essa função chama as funções definidas anteriormente:
getKinstaSites(): busca a lista de sites da empresa no MyKinsta;getBandwidthUsage(): verifica o uso da largura de banda do mês atual para cada site;postTrelloAlert(): gera automaticamente um cartão do Trello somente quando você atinge o limite e não existe nenhum cartão anterior.

Escale sua operação com mais inteligência e menos esforço com a Kinsta
Escalar não precisa significar trabalhar mais. Com uma estratégia de automação bem planejada, tarefas manuais repetitivas podem ser eliminadas e novos projetos podem ser adicionados ao seu portfólio sem sobrecarregar suas operações.
Ao preencher a lacuna entre a infraestrutura dos seus sites e o gerenciamento de projetos, você pode estabelecer canais de comunicação contínuos que convertem dados brutos de hospedagem em tarefas operacionais acionáveis.
Graças às APIs da Kinsta e às ações do GitHub, criamos um sistema automatizado de integração e monitoramento proativo que reduz erros humanos, alivia a carga de trabalho da sua equipe e garante prontidão para responder a problemas assim que surgirem. Com isso, você deixa de apagar incêndios e passa a se preparar proativamente para o futuro.
Pronto para automatizar os fluxos de trabalho da sua agência? Confira nossos planos e encontre o ideal para você.