Não quer ter trabalho? Compre o template pronto (R$27): https://muriloparrillo.com.br/produto/gerador-de-listas-template-n8n/
Github: https://github.com/
Supabase: https://supabase.com/
Hasdata: https://hasdata.com/
Openai: https://platform.openai.com/
Comando gpt:
Gere pra mim a URL deste projeto do supabase para eu colar na integração do n8n:
url/rest/v1/nome-da-tabela
—
Definir nicho e cidades:
const cidades =
[
“São Paulo”, “Guarulhos”, “Campinas”, “São Bernardo do Campo”, “Santo André”,
“Osasco”, “Sorocaba”, “Ribeirão Preto”, “São José dos Campos”, “São José do Rio Preto”,
“Jundiaí”, “Bauru”, “Mauá”, “São Carlos”, “São Vicente”, “Piracicaba”,
“Taubaté”, “Diadema”, “Praia Grande”, “Franco da Rocha”, “Franca”,
“Mogi das Cruzes”, “Carapicuíba”, “Mogi Mirim”, “Amparo”, “Poá”,
“Arujá”, “Itapecerica da Serra”, “Valinhos”, “Cotia”, “Barueri”,
“Indaiatuba”, “Atibaia”, “Bragança Paulista”, “Itapetininga”, “Capuava”,
“Ferraz de Vasconcelos”, “Votuporanga”, “Leme”, “Assis”, “Paulínia”,
“Cubatão”, “Ourinhos”, “Cajamar”, “Ubatuba”, “Cachoeirinha”, “Birigui”,
“Votorantim”, “Sertãozinho”, “São Caetano do Sul”, “Pindamonhangaba”,
“Francisco Morato”, “Itapevi”, “Itapecerica da Serra”, “Santana de Parnaíba”,
“Mogi Guaçu”, “Botucatu”, “Caraguatatuba”, “Salto”, “Tatuí”,
“Barretos”, “Itatiba”, “Araras”, “Vilhena Paulista?”, “Ribeirão Pires”,
“Guaratinguetá”, “Jandira”, “Catanduva”, “Várzea Paulista”, “Praia Grande”,
“Suzano”, “Taubaté”, “Limeira”, “Guarujá”, “Sumaré”, “Cotia”,
“Taboão da Serra”, “Itaquaquecetuba”, “São Vicente”, “Baixada Santista”
];
const nichos = [
“advogados”
];
const cidade = cidades[Math.floor(Math.random() * cidades.length)];
const nicho = nichos[Math.floor(Math.random() * nichos.length)];
return [{
json: {
nicho,
cidade
}
}];
—
Prompt:
Gere um JSON com até 2 combinações de bairros e nichos {{ $json.nicho }} em {{ $json.cidade }} . Retorne apenas o JSON puro, sem explicações ou formatação markdown. Exemplo de estrutura:
{
“locations”: [
{ “bairro”: “Centro”, “nicho”: “Direito Trabalhista” },
{ “bairro”: “Rudge Ramos”, “nicho”: “Direito Penal” }
]
}
—
VPS HOSTINGER:
—
Extrai dados limpos:
const texto = $json.output;
// Extrai o JSON puro do conteúdo
const match = texto.match(/\{[\s\S]*”locations”[\s\S]*\}/);
if (!match) {
throw new Error(“Não foi possível extrair JSON da resposta.”);
}
const data = JSON.parse(match[0]);
const cidade = $item(0).$node[“Definir Nicho e Cidades”].json[“cidade”];
return data.locations.map(item => ({
json: {
bairro: item.bairro,
nicho: item.nicho,
query: `${item.nicho} em ${item.bairro}, ${cidade}`
}
}));
—
HTTP REQUEST:
https://api.hasdata.com/scrape/google-maps/search?q={{ $json.query }}
—
Limpa Dados:
return ($json.localResults || []).map(item => ({
json: {
Empresa: item.title?.trim() || ”,
Telefone: item.phone?.replace(/[^0-9]+/g, ”) || ”,
Endereço: item.address?.trim() || ”,
Website: item.website?.trim() || ”,
Categoria: item.type?.trim() || ”,
Avaliação: item.rating || ”,
“Total Avaliações”: item.reviews || ”
}
}));
—
Refina dados:
return $input.all().map(item => {
const dados = item.json || {};
// Pega email direto
const email = (dados.email || dados.Email || ”).trim();
// Limpa telefone tirando caracteres não numéricos
const telefoneRaw = dados.Telefone || ”;
const telefone = telefoneRaw.replace(/\D/g, ”).trim();
return {
json: {
Empresa: (dados.Empresa || ”).trim(),
Telefone: telefone,
Endereço: (dados.Endereço || ”).trim(),
Website: (dados.Website || dados.site || ”).trim(),
Categoria: (dados.Categoria || ”).trim(),
Avaliação: dados.Avaliação || ”,
“Total Avaliações”: dados[“Total Avaliações”] || ”,
Email: email
}
};
});
—