riligar-marketing-ads-google — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited riligar-marketing-ads-google (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Skill completa para gestao de Google Ads via SDK oficial (google-ads). Executa queries GAQL para leitura, e mutate operations para escrita. Equivalente ao riligar-marketing-ads-meta para o ecossistema Google.
IMPORTANTE: Esta skill e o braco de execucao. Para inteligencia (diagnostico, auditoria, estrategia), use a skill riligar-marketing-ads como camada acima.
Quando o usuario pedir para configurar, rodar setup, ou for a primeira vez usando a skill, o Claude deve guiar o setup interativo.
O setup tem um script automatizado em scripts/setup.py que simplifica o processo:
pip3 install google-ads google-auth-oauthlib protobufChecar se existe ~/.claude/skills/riligar-marketing-ads-google/.env. Se NAO existir, criar com o template:
# RiLiGar Marketing Ads Google — Configuracao
# Os scripts leem este arquivo automaticamente. NAO precisa adicionar ao ~/.zshrc.
# OBRIGATORIO: Developer token (Google Ads API Center)
GOOGLE_ADS_DEVELOPER_TOKEN=""
# OBRIGATORIO: OAuth2 credentials (Google Cloud Console)
GOOGLE_ADS_CLIENT_ID=""
GOOGLE_ADS_CLIENT_SECRET=""
GOOGLE_ADS_REFRESH_TOKEN=""
# OBRIGATORIO: Login customer ID (MCC sem hifens, ex: 1234567890)
GOOGLE_ADS_LOGIN_CUSTOMER_ID=""
# OPCIONAL: Customer ID padrao (evita ter que passar --customer-id toda vez)
GOOGLE_ADS_CUSTOMER_ID=""Fallback: Se existir ~/.claude/skills/riligar-marketing-ads-google/google-ads.yaml, o SDK carrega dele automaticamente.
O usuario precisa obter e preencher no .env (tutorial completo em riligar.com.br/assets/tutorial-token-google-ads/):
O REFRESH_TOKEN NAO precisa ser preenchido manualmente — o setup.py gera automaticamente (ver passo 4).
Depois que CLIENT_ID, CLIENT_SECRET e DEVELOPER_TOKEN estiverem no .env, rodar:
python3 ~/.claude/skills/riligar-marketing-ads-google/scripts/setup.py oauthIsso abre o browser, o usuario autoriza, e o refresh token e salvo automaticamente no .env. Sem copiar/colar nada.
Ou rodar o fluxo completo de uma vez:
python3 ~/.claude/skills/riligar-marketing-ads-google/scripts/setup.py fullSubcomandos do setup.py:
| Subcomando | O que faz |
|---|---|
check | Verifica dependencias e variaveis do .env |
oauth | Gera refresh token via OAuth2 (abre browser) |
test | Testa conexao listando contas acessiveis |
full | Fluxo completo: check + oauth (se necessario) + test |
Depois que o .env estiver preenchido e o teste passar, o Claude DEVE proativamente guiar o cadastro de contas:
read.py accounts para listar todas as contas acessiveiscontas.yaml automaticamente com as respostasArquivo: ~/.claude/skills/riligar-marketing-ads-google/contas.yaml
Antes de executar qualquer operacao, o Claude DEVE ler este arquivo para resolver nomes de clientes para IDs. Quando o usuario disser "insights do Meu Cliente no Google" ou "campanhas da Meu Cliente", consultar o contas.yaml para obter o customer_id do cliente.
Se o cliente nao estiver cadastrado, perguntar os dados e oferecer para adicionar ao arquivo.
Todos os scripts estao em ~/.claude/skills/riligar-marketing-ads-google/scripts/. O padrao e:
python3 <script>.py <subcomando> [argumentos]O Claude deve interpretar o pedido do usuario e executar o script correto via Bash.
| Subcomando | O que faz | Exemplo |
|---|---|---|
accounts | Lista contas acessiveis via MCC | read.py accounts |
campaigns | Campanhas com status, tipo, orcamento | read.py campaigns --customer-id 1234567890 |
ad-groups | Ad groups de uma campanha | read.py ad-groups --customer-id 123 --campaign-id 456 |
keywords | Keywords com QS, match type, metricas | read.py keywords --customer-id 123 --campaign-id 456 |
ads | Anuncios RSA com headlines e descriptions | read.py ads --customer-id 123 --campaign-id 456 |
search-terms | Termos de busca com metricas | read.py search-terms --customer-id 123 |
extensions | Assets/extensoes (sitelinks, callouts) | read.py extensions --customer-id 123 |
negative-keywords | Negativas (campaign e ad group) | read.py negative-keywords --customer-id 123 |
quality-scores | QS decomposto (creative, landing, ctr) | read.py quality-scores --customer-id 123 |
| Subcomando | O que faz | Exemplo |
|---|---|---|
account | KPIs da conta | insights.py account --customer-id 123 --date-range LAST_30_DAYS |
campaign | Metricas por campanha | insights.py campaign --customer-id 123 --date-range LAST_7_DAYS |
ad-group | Metricas por ad group | insights.py ad-group --customer-id 123 --campaign-id 456 |
keyword | Metricas por keyword | insights.py keyword --customer-id 123 --campaign-id 456 |
daily | Evolucao diaria | insights.py daily --customer-id 123 --since 2026-03-01 --until 2026-03-31 |
device | Breakdown por dispositivo | insights.py device --customer-id 123 --date-range LAST_30_DAYS |
hourly | Breakdown por hora do dia | insights.py hourly --customer-id 123 --date-range LAST_7_DAYS |
Parametros comuns de insights:
| Parametro | O que faz | Exemplo |
|---|---|---|
--customer-id | ID da conta (sem hifens) | 1234567890 |
--date-range | Periodo relativo | LAST_7_DAYS, LAST_30_DAYS, THIS_MONTH |
--since / --until | Periodo especifico | 2026-03-01 / 2026-03-31 |
--campaign-id | Filtrar por campanha | 123456789 |
--limit | Limite de resultados | 50 |
| Subcomando | O que faz | Exemplo | |||
|---|---|---|---|---|---|
campaign | Cria campanha PAUSED | create.py campaign --customer-id 123 --name "Search-Leads" --type SEARCH --budget 5000 | |||
ad-group | Cria ad group | create.py ad-group --customer-id 123 --campaign-id 456 --name "Broad-Keywords" | |||
keyword | Adiciona keywords | create.py keyword --customer-id 123 --ad-group-id 456 --text "marketing digital" --match-type PHRASE | |||
rsa | Cria Responsive Search Ad | `create.py rsa --customer-id 123 --ad-group-id 456 --headlines "h1 | h2 | h3" --descriptions "d1 | d2"` |
sitelink | Cria sitelink | create.py sitelink --customer-id 123 --campaign-id 456 --text "Fale Conosco" --url "https://..." | |||
callout | Cria callout | create.py callout --customer-id 123 --campaign-id 456 --text "Frete Gratis" | |||
negative | Adiciona negativa | create.py negative --customer-id 123 --campaign-id 456 --text "gratis" --match-type EXACT |
IMPORTANTE: Todas as criacoes sao feitas com status PAUSED. Revisar antes de ativar.
| Subcomando | O que faz | Exemplo |
|---|---|---|
campaign | Editar status, orcamento, bidding | update.py campaign --customer-id 123 --campaign-id 456 --status ENABLED --budget 10000 |
ad-group | Editar status, CPC | update.py ad-group --customer-id 123 --ad-group-id 456 --status PAUSED |
keyword | Editar status, bid | update.py keyword --customer-id 123 --keyword-id 456 --status ENABLED |
ad | Editar status | update.py ad --customer-id 123 --ad-id 456 --status PAUSED |
| Subcomando | O que faz | Exemplo |
|---|---|---|
keyword | Remove keyword | delete.py keyword --customer-id 123 --keyword-id 456 |
negative | Remove negativa | delete.py negative --customer-id 123 --criterion-id 456 --level campaign --parent-id 789 |
ad | Remove anuncio | delete.py ad --customer-id 123 --ad-group-id 456 --ad-id 789 |
Arquivo: aprendizados.md (na raiz da skill, ~/.claude/skills/riligar-marketing-ads-google/aprendizados.md)
O Claude DEVE:
O Claude DEVE seguir estas regras ao executar operacoes:
create.py campaign — cria campanha PAUSEDcreate.py ad-group — cria ad group PAUSEDcreate.py keyword — adiciona keywords (repetir para cada keyword)create.py rsa — cria Responsive Search Adcreate.py sitelink — adiciona sitelinks (opcional)create.py callout — adiciona callouts (opcional)read.py campaigns, read.py ads, read.py keywordsinsights.py account — visao geralinsights.py campaign — performance por campanharead.py quality-scores — QS decompostoread.py search-terms — termos de busca (negativar irrelevantes)insights.py device — breakdown por dispositivoread.py negative-keywords — conferir negativasinsights.py campaign --date-range LAST_30_DAYSinsights.py daily --since 2026-03-01 --until 2026-03-31insights.py keyword --campaign-id XXX~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.