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+engtraineddata, 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)