Transforme o Google Trends em um sinal de demanda com Python

Leia a série temporal, calcule uma direção de tendência simples, e a única coisa que precisa acertar: um valor do Trends é interesse relativo, nunca um número de volume de busca. Testado em agosto de 2026.

Você quer um número para o quanto de interesse um tópico está recebendo agora, para colocar num dashboard, decidir o que estocar, ou decidir sobre o que escrever a seguir. Ler um gráfico de linha no site do Google Trends não escala além de uma consulta de cada vez, e não encaixa em lugar nenhum onde um script possa usar.

O que o /v1/trends retorna

Mande uma query para o /v1/trends e você recebe interest_over_time, e dentro dela uma lista timeline_data. Cada ponto tem um date (um intervalo legível como “Aug 23-29, 2026”), um timestamp, e uma lista values com um item por busca que você pediu, cada um trazendo um value de 0 a 100. Na nossa amostra, para a busca “web scraping api”, vieram 53 pontos semanais cobrindo cerca de um ano, por 5 créditos.

O número é relativo, nunca absoluto

É aqui que as coisas mais dão errado: um value do Trends não é uma contagem de buscas. É um índice, escalado de forma que o ponto mais alto no intervalo que você pediu vale 100 e todo o resto é uma fração desse pico. Um valor de 14 não significa 14 buscas nem 14 de nada contável. Significa 14% do que quer que tenha sido a semana mais movimentada naquela janela.

Isso tem duas consequências que passam despercebidas. Primeiro, você não pode comparar um valor de uma busca com o valor de outra busca e concluir que um tópico é mais buscado, porque cada um é escalado contra o próprio pico, não uma referência compartilhada. Segundo, um valor calculado sobre um intervalo de datas ou uma localização não é comparável a um valor calculado sobre outro diferente, pelo mesmo motivo: mude a janela e todo ponto é reescalado contra um novo pico. Se você precisa de dois tópicos na mesma escala, peça os dois juntos numa única chamada para que compartilhem uma referência, ou compare o formato (subindo, caindo, estável) em vez do nível bruto.

Lendo a série e uma direção de tendência

import requests

API_KEY = "faf_live_..."  # sua chave FastAF

resp = requests.get(
    "https://api.fastaf.co/v1/trends",
    params={"query": "web scraping api", "data_type": "TIMESERIES"},
    headers={"Authorization": f"Bearer {API_KEY}"},
    timeout=60,
)
resp.raise_for_status()

points = resp.json()["interest_over_time"]["timeline_data"]
series = [(p["date"], p["values"][0]["value"]) for p in points]

for date, value in series[-8:]:
    print(f"{date:<26} {value:>3}")

recent = [v for _, v in series[-8:]]
prior = [v for _, v in series[-16:-8]]
recent_avg = sum(recent) / len(recent)
prior_avg = sum(prior) / len(prior)
change = (recent_avg - prior_avg) / prior_avg * 100
direction = "rising" if change > 10 else "falling" if change < -10 else "flat"

print(f"recent avg {recent_avg:.1f} vs prior avg {prior_avg:.1f}: {direction} ({change:+.1f}%)")

Na nossa amostra isso imprimiu as últimas oito semanas, oscilando entre 5 e 88, com uma média recente de 37,9 contra uma média das oito semanas anteriores de 84,6: uma queda de 55%, rotulada como “falling”. Se oito semanas é a janela certa depende de como o tópico costuma se mover. Uma categoria que muda mais devagar pode comparar blocos de 90 dias em vez de dois de 8 semanas; o formato do cálculo continua o mesmo.

Colocando em uso

Uma linha de dashboard só precisa do value mais recente e do rótulo de direção, atualizados na cadência que combine com a frequência real de mudança do interesse subjacente: diário é exagero para uma série que só reporta em blocos semanais, como a nossa amostra. Para uma decisão de estocar ou escrever, a direção importa mais que o nível absoluto: um tópico subindo de 20 para 40 é um sinal mais claro do que um tópico que está parado em 80 há meses, mesmo que 80 pareça o número maior.

Quanto custa

Uma chamada custa 5 créditos, independente de quantas semanas voltam na série, então preencher um dashboard com um ano de histórico e atualizá-lo semanalmente custam os mesmos 5 créditos. Requisições com falha não são cobradas.

Comece com o plano gratuito, 500 créditos e sem cartão, o que dá 100 chamadas: suficiente para puxar a série de todos os tópicos entre os quais você está decidindo antes de se comprometer a monitorar qualquer um deles.