Specialized skill for finding and comparing construction material prices in Portugal using Firecrawl.
Skill para busca inteligente de preços de materiais de construção em Portugal
Versão: 1.0
Data: 2026-02-12
Objetivo: Encontrar melhores preços para compra de materiais
Este skill permite ao Antigravity buscar automaticamente preços atualizados de materiais de construção em lojas portuguesas através do Firecrawl Agent.
Foco:
precos_materiais_atualizadosCREATE TABLE "public"."precos_materiais_atualizados" (
"id" SERIAL PRIMARY KEY,
-- Identificação do Material
"nome_material" VARCHAR(255) NOT NULL,
"categoria" VARCHAR(100),
"codigo_produto" VARCHAR(100),
"especificacoes" TEXT,
-- Loja
"loja" VARCHAR(100) NOT NULL,
"regiao" VARCHAR(100),
-- Preços
"preco_unidade" NUMERIC(10,2) NOT NULL,
"unidade" VARCHAR(20) NOT NULL,
"preco_anterior" NUMERIC(10,2),
"desconto_percentual" NUMERIC(5,2),
"em_promocao" BOOLEAN DEFAULT false,
-- Disponibilidade
"stock_disponivel" BOOLEAN,
"stock_quantidade" INTEGER,
"prazo_entrega_dias" INTEGER,
-- Links
"url_produto" TEXT,
"imagem_url" TEXT,
-- Firecrawl
"firecrawl_data" JSONB DEFAULT '{}',
"firecrawl_confidence" NUMERIC(3,2),
-- Controle
"data_scraping" TIMESTAMP DEFAULT NOW(),
"valido_ate" TIMESTAMP,
"created_at" TIMESTAMP DEFAULT NOW(),
CONSTRAINT "unique_loja_produto" UNIQUE ("loja", "codigo_produto", "data_scraping")
);
CREATE INDEX "idx_precos_material" ON "precos_materiais_atualizados" ("nome_material");
CREATE INDEX "idx_precos_loja" ON "precos_materiais_atualizados" ("loja");
CREATE INDEX "idx_precos_regiao" ON "precos_materiais_atualizados" ("regiao");
CREATE INDEX "idx_precos_data" ON "precos_materiais_atualizados" ("data_scraping" DESC);
CREATE INDEX "idx_precos_promocao" ON "precos_materiais_atualizados" ("em_promocao") WHERE "em_promocao" = true;
firecrawl agent "Procura preços de PLACA OSB 15mm (2440x1220mm) em Portugal.
LOJAS A PESQUISAR:
- Leroy Merlin Portugal (leroymerlin.pt)
- AKI Portugal (aki.pt)
- Bricomarché (bricomarche.pt)
DADOS A EXTRAIR (JSON):
Para cada loja encontrada:
- nome_material: 'OSB 15mm 2440x1220mm'
- categoria: 'Revestimento'
- loja: nome da loja
- preco_unidade: preço em euros (número)
- unidade: 'un' ou 'm2'
- em_promocao: true/false
- desconto_percentual: % desconto (se houver)
- stock_disponivel: true/false
- url_produto: link completo
- imagem_url: URL imagem produto
IMPORTANTE:
- Converter preço para NÚMERO (sem €, sem vírgulas)
- Se preço por m², indicar unidade='m2'
- Se stock indisponível, marcar stock_disponivel=false
Retorna apenas produtos que correspondem exatamente." \
--model spark-1-pro \
--schema '{
"produtos": [{
"nome_material": "string",
"categoria": "string",
"loja": "string",
"preco_unidade": 0,
"unidade": "string",
"em_promocao": false,
"desconto_percentual": 0,
"stock_disponivel": true,
"url_produto": "string",
"imagem_url": "string"
}]
}' \
--max-credits 150 \
--wait \
--json \
--pretty
INSERT INTO precos_materiais_atualizados (
nome_material,
categoria,
codigo_produto,
loja,
regiao,
preco_unidade,
unidade,
em_promocao,
desconto_percentual,
stock_disponivel,
url_produto,
imagem_url,
firecrawl_data,
valido_ate
) VALUES (
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13,
NOW() + INTERVAL '7 days'
)
ON CONFLICT (loja, codigo_produto, data_scraping)
DO UPDATE SET
preco_unidade = EXCLUDED.preco_unidade,
em_promocao = EXCLUDED.em_promocao,
stock_disponivel = EXCLUDED.stock_disponivel
RETURNING id;