bad argument type for built-in operation with KeywordPlanIdeaService.generate_keyword_ideas in Google Colab (Python Client Library)
Hello Google Ads Python Client Library team,
I am encountering a persistent bad argument type for built-in operation error when trying to use the KeywordPlanIdeaService.generate_keyword_ideas method. I am running the code in a Google Colab environment.
Despite multiple attempts to adjust the syntax and ensure correct protobuf object assignment, the error persists.
Environment:
- Google Colab (fresh runtime)
- Python version (Colab default, usually 3.10 or newer)
google-adslibrary installed viapip install google-ads(latest version at time of execution)
Error Details:
The specific error message is:
ERRO: Não foi possível gerar ideias de palavras-chave. Verifique os termos, idioma ou IDs de localização. Erro: bad argument type for built-in operation
Code to Reproduce:
# Célula 5: Módulo de Planejamento de Palavras-Chave para Novas Campanhas (VERSÃO FINAL - V11)
import pandas as pd
import os
print("--- Iniciando Módulo de Planejamento de Palavras-Chave para Novas Campanhas ---")
def get_keyword_ideas(client, customer_id, keywords, language_id=1000, location_ids=None):
"""
Obtém ideias de palavras-chave e suas métricas de planejamento da Google Ads API.
Args:
client: Uma instância do GoogleAdsClient.
customer_id: O ID da conta do cliente.
keywords: Uma lista de palavras-chave sementes para gerar ideias.
language_id: O ID numérico do idioma (ex: 1000 para Inglês, 1014 para Português).
Você pode encontrar os IDs de idioma na documentação do Google Ads API.
location_ids: Uma lista de IDs numéricos de localização para segmentação (ex: [2076] para Brasil, [2840] para EUA).
Se None, a segmentação é global.
Returns:
Um pandas DataFrame com as ideias de palavras-chave e suas métricas.
"""
keyword_plan_idea_service = client.get_service("KeywordPlanIdeaService")
# Cria a requisição principal
request = client.get_type("GenerateKeywordIdeasRequest")
request.customer_id = customer_id
# --- Configurando as Palavras-Chave Sementes de forma EXPLICITA ---
if not keywords:
raise ValueError("A lista de palavras-chave sementes não pode estar vazia.")
# Cria uma lista de objetos KeywordInfo
keyword_protos = []
for kw_text in keywords:
keyword_info_proto = client.get_type("KeywordInfo")
keyword_info_proto.text = kw_text
keyword_protos.append(keyword_info_proto)
# Atribui a lista de KeywordInfo ao campo keywords do KeywordSeed
# Cria o KeywordSeed primeiro
keyword_seed_proto = client.get_type("KeywordSeed")
keyword_seed_proto.keywords.extend(keyword_protos) # Usa extend para adicionar a lista de protos
# Atribui o KeywordSeed à requisição
request.keyword_seed.CopyFrom(keyword_seed_proto) # Usa CopyFrom para garantir atribuição correta de Protobuf
# -----------------------------------------------------------------
# Configurando o Idioma usando o resource name formatado
request.language = f"languageConstants/{language_id}"
# Configurando as Localizações (Geotargeting) usando o resource name formatado
if location_ids:
for loc_id in location_ids:
request.geo_target_constants.append(f"geoTargetConstants/{loc_id}")
# Definindo o Tipo de Ideia
request.idea_type = client.enums.KeywordIdeaTypeEnum.KEYWORD_MATCH_TYPE
print(f"Buscando ideias de palavras-chave para: {keywords} (Idioma ID: {language_id}, Localizações: {location_ids if location_ids else 'Todas'})")
response = keyword_plan_idea_service.generate_keyword_ideas(request=request)
ideas_data = []
for idea in response.results:
keyword_text = idea.text
metrics = idea.keyword_idea_metrics
ideas_data.append({
'palavra_chave_sugerida': keyword_text,
'volume_mensal_medio': metrics.avg_monthly_searches,
'competicao': metrics.competition.name, # COMPETITION_UNKNOWN, LOW, MEDIUM, HIGH
'cpc_min_micros': metrics.low_top_of_page_bid_micros,
'cpc_max_micros': metrics.high_top_of_page_bid_micros,
'cpc_min_moeda': metrics.low_top_of_page_bid_micros / 1_000_000 if metrics.low_top_of_page_bid_micros else 0.0,
'cpc_max_moeda': metrics.high_top_of_page_bid_micros / 1_000_000 if metrics.high_top_of_page_bid_micros else 0.0,
})
df_keyword_ideas = pd.DataFrame(ideas_data)
return df_keyword_ideas
# --- Exemplo de Uso do Módulo de Planejamento (AQUI ESTÃO SUAS INFORMAÇÕES!) ---
seed_keywords = ["prodentim"] # Produto: Prodentim
# IMPORTANTE: Use o ID numérico do idioma
target_language_id = 1000 # Inglês (ID 1000)
target_location_ids = [2840] # Localização: EUA (ID 2840)
try:
df_ideas = get_keyword_ideas(
client=google_ads_client, # Usa o cliente definido na Célula 3
customer_id=customer_id, # Usa o customer_id definido na Célula 3
keywords=seed_keywords,
language_id=target_language_id, # Passando o ID numérico do idioma
location_ids=target_location_ids
)
if not df_ideas.empty:
print("\n--- Ideias de Palavras-Chave Geradas com Sucesso! ---")
print(f"Total de ideias geradas: {len(df_ideas)}")
print("\nPrimeiras 10 ideias de palavras-chave:")
print(df_ideas.head(10).to_markdown(index=False, numalign="left", stralign="left"))
output_ideas_path = os.path.join('/content/drive/MyDrive/projeto_google_ads_api/output/', 'df_keyword_ideas_prodentim_en_us.csv')
os.makedirs(os.path.dirname(output_ideas_path), exist_ok=True)
print(f"\nDataFrame 'df_keyword_ideas' exportado para: {output_ideas_path}")
else:
print("Nenhuma ideia de palavra-chave encontrada para os termos fornecidos.")
except Exception as e:
print(f"ERRO: Não foi possível gerar ideias de palavras-chave. Verifique os termos, idioma ou IDs de localização. Erro: {e}")
print("\n--- Processamento da Célula 5 Concluído ---")
What I've Tried:
I have extensively tried to adjust the way KeywordInfo, KeywordSeed, language, and geo_target_constants are constructed and assigned to the GenerateKeywordIdeasRequest object. This includes using CopyFrom, extend, and various forms of resource names for language and geo targets. The provided code is the result of these attempts.
Question:
Could you please provide guidance on what specific argument type or format is expected by the generate_keyword_ideas method for these fields that might be causing the bad argument type error? Is there a known compatibility issue with specific versions of the library, or a common pitfall when integrating with Colab or certain account configurations?
Thank you for your help.
@JCZOPOLATO could you share the full error logs, or tell me which line of your script the error is coming from?
Closing this for now, @JCZOPOLATO please add more details if this is still an issue for you.