DEV Community

FabIAlista
FabIAlista

Posted on

How I built a Brazilian price comparator with AI across 6 retailers (and 9000+ products)

How I built a Brazilian price comparator with AI across 6 retailers

Brazilian e-commerce is fragmented. The same product costs different prices in Amazon BR, Mercado Livre, Carrefour, Magalu, Shopee, and Americanas — sometimes a 40% difference. Existing comparators are slow, full of ads, and miss most of the catalog.

So I built FabIAlista — a free, AI-powered price comparator with 9.000+ products across all six retailers, an OCR scanner that reads handwritten shopping lists, and a conversational AI that suggests substitutes.

What it does

  • Compare prices in real-time across 6 stores
  • OCR scanner: photograph a handwritten/printed shopping list, get the cheapest store
  • AI chat (Portuguese): "I want to make a barbecue for 10 people, R$ 200 budget" → it builds the list
  • Unified affiliate checkout: one click sends each item to the best store
  • Cashback integration with Awin, Lomadee, Admitad
  • 100% free, no signup wall, LGPD-compliant

The stack

  • Frontend: React + Vite + Tailwind, deployed on Hostinger VPS via Nginx
  • Backend: Node.js + Express, PostgreSQL, Redis cache, PM2 cluster
  • AI: Local Ollama (qwen2.5:14b) + fine-tuned fabia-8b, with Gemini API as free fallback
  • OCR: Tesseract 5.3.4 with por+eng traineddata, Sharp preprocessing
  • Vector search: ChromaDB on port 8200, indexed with 4068 products
  • SEO: 134 pre-rendered static HTML pages, schema.org Product + BreadcrumbList + AggregateRating, IndexNow API pushing to Bing/Yandex/Naver

Hard problems I solved

1. Multi-token search

Brazilian users search like "café 3 corações 500g torrado moído" — six tokens. Most engines OR these. I split queries into tokens and require all of them present, case-insensitive, accent-stripped. Result: precision went from 60% to 94%.

2. Affiliate URL drift

Every retailer changes their URL format every few months. Hardcoded affiliate links rotted constantly. Solution: always regenerate URLs at runtime via buildAffiliateUrl(product, store). Never persist them. Lost 3 weekends to this lesson.

3. Image CDN blocks

images-na.ssl-images-amazon.com returns 404 for hotlinked product images. I had to whitelist only the CDNs that actually allow embedding: vtexassets.com, vteximg.com.br, mlstatic.com, kabum.com.br, alicdn.com. Plus a fallback chain with WebP → AVIF → PNG.

4. SEO from zero

Started indexed with 0 pages on Google. Today: ~9.000 indexed across Google, Bing, Yandex. Key tactics:

  • 134 static pre-rendered HTMLs (one per category, brand, blog post, comparison page)
  • Sitemap split: products, categories, brands, pages, blog, images, local, comparisons
  • IndexNow API pushing every product update to Bing+Yandex+Naver in <1 sec
  • Schema.org Organization + WebSite + SearchAction + Product + BreadcrumbList

What I learned

  • Brazilian users don't trust signup walls. Bouncing rate dropped 60% when I removed forced login.
  • Local LLMs beat cloud for cost when you have GPU. RTX 5070 Ti runs qwen2.5:14b at ~8s/response, vs $0.003/req on Claude. Break-even at 100 reqs/day.
  • Scraping is a dead-end. Switched to official affiliate APIs everywhere. More stable, legal, monetizable.
  • Schema markup moves the needle. AggregateRating + Product schema added rich snippets that lifted CTR ~30%.

What's next

  • Mobile app (React Native + Expo) with native camera OCR
  • Voice search ("Alexa, what's the cheapest rice today?")
  • Black Friday Brazil 2026 dashboard (price history per SKU, alerts at -30%)

Try it out: https://www.fabialista.com.br

Feedback welcome — especially from Brazilians who've fought e-commerce price chaos.


Built solo in Recife-PE, Brazil.

Top comments (0)