DEV Community

Cover image for From Google Sheets to a Scalable SaaS: Building Konquista with Python and Django ๐Ÿš€
Luis Faria
Luis Faria

Posted on • Edited on

From Google Sheets to a Scalable SaaS: Building Konquista with Python and Django ๐Ÿš€

Imagine spending hours daily cleaning phone numbers and sending 1,000 WhatsApp messages by hand. That was my reality last year, juggling lead follow-ups for 20+ clinics.

Then I had an idea: what if I could automate it all in one place?

This is the story of Konquista โ€” how I went from manual chaos to a full-fledged SaaS using Google Sheets, Flask, and Django, boosting response rates by 30%. Hereโ€™s how it happened.


The Problem

We had just onboarded SocialHub to manage communication across 20+ clinics using multiple WhatsApp numbers via their API.

Leads were flowing in โ€” but the process to follow up with those who didnโ€™t schedule was messy:

  • Extract leads from the partner platform
  • Clean phone numbers (+55, 11, (11), -, etc.)
  • Match leads with internal ERP data
  • Use VLOOKUP in Excel to compare both sides
  • Send messages manually ๐Ÿ˜ซ

It was repetitive, error-prone, and wasted hours every day.


The Insight

After a few days of chaos, I asked myself:

โ€œWhat if I could centralize and automate everything in one place?โ€

Thatโ€™s when Konquista was born โ€” first as a hack, then a project, and finally a full-fledged SaaS.


Version 1: Spreadsheet MVP

Phase 1 flowchart

Built using Google Sheets + AppScript:

  • Contacts: name, phone, source, created date
  • Messages: pre-written templates
  • Appointments: ERP data (from today-5 to today+5)
  • Filtered Contacts: VLOOKUP to remove scheduled contacts
  • Sent Messages: log of what was sent and when

This worked โ€” until it didnโ€™t. AppScriptโ€™s 5-minute runtime limit made things slow and unstable after ~100+ leads.


Version 2: Python + Flask

Phase 2 flowchart

I took the leap, bought a Flask course on Udemy, and wrote my first Flask monolith.

Source Code: github.com/lfariabr/konquista

What I used:

  • Backend: Flask + Blueprints
  • Frontend: Jinja2 templates
  • Database: PostgreSQL on Supabase

Deployment:

  • Docker + docker-compose (local)
  • Nginx + Certbot + Gunicorn (production)
  • Vercel (frontend testing)
  • DigitalOcean droplet (hosting)

Some manual jobs still remained (like clicking โ€œSend Allโ€), but it was a huge step forward.


Version 3: Django + Celery ๐Ÿš€

Phase 3 flowchart

This marked the beginning of something scalable.

Major improvements:

  • Async Queue Processing: Celery + Redis to send WhatsApp messages in the background, with retries and monitoring
  • CRM + ERP Sync: Real-time sync for leads, appointments, payments โ€” no more spreadsheets
  • Campaign Engine: Schedule recurring campaigns (daily, weekly, one-time) using custom filters
  • Smart Templates: Dynamic messages with {name}, {appointment_time}, {unit}, and media support
  • Multi-user & Role Management: Permissions, grouping, usage tracking, admin panel
  • Dockerized Services: web, worker, beat, redis, postgres, nginx, monitoring
  • Monitoring: Logs, retries, dead-letter queues, basic dashboards

Results

Konquista is now used by 20+ clinics, sending around 1,000 WhatsApp messages daily:

  • Welcoming new leads/customers
  • Sending appointment reminders
  • Reactivating cold leads (โ€œWe miss you!โ€ campaigns)

๐Ÿ“ˆ 30% increase in response rates, fully automated.


Final Thoughts

This journey showed me the real power of software and how a few lines of code can eliminate hours of repetitive work, drive real business results, and scale human effort.


If youโ€™re building something similar, want to exchange ideas, or just curious about how it all works, feel free to ping me. Iโ€™m happy to connect!

๐Ÿ”— GitHub Repo

Top comments (0)