This is a submission for DEV’s Summer Bug Smash: Smash Stories powered by Sentry.
When building AI-powered applications, the hardest part is not connecting an LLM API.
The real challenge is making AI-generated output reliable enough to use in real-world workflows.
While building GrowEasy AI-Powered CSV Importer, I faced an important engineering challenge:
How can we safely use AI-generated data when importing business records into a CRM?
The application accepts lead data from different sources:
🔹 Facebook Lead Ads
🔹 Google Ads
🔹 CRM exports
🔹 Excel sheets
🔹 Custom spreadsheets
Each source follows a different structure.
The same field can have different names:
phone
mobile_number
contact_no
whatsapp_number
The goal was to automatically understand these variations and convert them into a fixed CRM structure using Google Gemini.
🐛 The Challenge
Initially, the workflow looked simple:
CSV Upload
↓
AI Processing
↓
CRM Import
But AI responses cannot always be treated as perfect structured data.
Possible issues:
❌ Missing required fields
❌ Invalid values
❌ Incorrect formats
❌ Unexpected AI responses
❌ Incomplete lead records
For example:
A CSV file may contain:
phone_number
The AI can correctly understand that this represents a phone field, but there can still be problems:
Missing phone values
Invalid formats
Incorrect mappings
Incomplete records
The problem was not the AI model.
The problem was trusting AI output without an additional validation layer.
🔍 Finding the Root Cause
The import pipeline needed a safety checkpoint before saving any data.
Instead of:
AI Response → Import
The workflow needed to become:
AI Response → Validation → Import
The backend needed to remain the final source of truth.
🛠️ The Solution
I added backend validation to verify every AI-generated result before importing it into the CRM.
The improved workflow:
CSV Upload
↓
CSV Parsing
↓
AI Column Mapping
↓
Validation Layer
↓
CRM Import
↓
Results Report
The validation layer checks:
✅ Required fields
✅ Email and phone availability
✅ Data formats
✅ Allowed values
✅ Invalid AI responses
💻 Engineering Improvements
- AI Output Validation
Instead of blindly trusting Gemini responses, every generated record is validated before being accepted.
This prevents unreliable AI-generated data from reaching the CRM.
- Handling Invalid Records
If a lead does not contain contact information:
Before:
Import incomplete record ❌
After:
Skip record ✅
Reason:
No email or mobile number present
This keeps the CRM clean and prevents low-quality data.
- Keeping Backend as the Source of Truth
The frontend handles:
File upload
CSV preview
Displaying results
The backend handles:
CSV parsing
AI processing
Validation
Import decisions
This keeps the architecture predictable, maintainable, and easier to extend.
🚀 Result
After adding validation layers:
✅ AI-generated data became safer to process
✅ Invalid records were prevented from entering the CRM
✅ Import failures became easier to understand
✅ The overall pipeline became more reliable
⭐ What I’m Proud Of
The biggest improvement was not just making AI work.
It was building a system around AI that can handle uncertainty.
Instead of depending completely on an LLM response, the application combines:
🧠 AI intelligence
+
✅ Backend validation
+
🛡️ Reliable business rules
This approach makes AI applications more practical for real-world usage.
📚 Key Learning
Building AI applications requires a different mindset.
Traditional application:
Input → Logic → Output
AI application:
Input → AI → Possible Output → Validation → Reliable Output
The biggest lesson:
AI makes applications smarter, but strong engineering makes them dependable.
🔗 Project Links
GitHub:
https://github.com/srilathapothana/groweasy-csv-importer
Live Demo:
https://groweasy-csv-importer-khaki.vercel.app/
Backend:
https://groweasy-csv-importer-backend-9qnd.onrender.com
Thanks to the DEV team for organizing the Bug Smash challenge. 🚀