Case study: how a LATAM SaaS automated support and saved 380 hours/month

Case study: how a LATAM SaaS automated support and saved 380 hours/month

May 16, 20269 minAI, Case Study, Consulting, SaaS, Automation

Short answer (60 seconds): LATAM B2B SaaS (~30 people, USD 50K MRR) automated support classification and first response. Year-1 results: 380h/month freed from the support team (USD 4,560/month in hours), 60% of tickets auto-answered without CSAT drop, ROI confirmed by week 16. Stack: LangGraph + Claude Haiku (classification) + Claude Sonnet (response) + Postgres. Costs: USD 16K implementation + USD 380/month operation. Lessons: measure baseline first, per-tenant caps from day 1, eval suite with real tickets, communicate with the team before rollout. Case anonymized by NDA — replicable patterns.

This case is real but anonymized by NDA. The structure shared, the numbers, the stack, and the technical decisions are faithful to the engagement; missing is the data that would identify the client. I write it because I understand that a founder evaluating AI consulting needs to see a grounded case, not just theoretical practices.

If after reading you want to discuss how to apply it to your specific situation, there's a CTA at the end with a free call.

Starting situation

Client profile: B2B SaaS in LATAM, ~30 people, USD 50K MRR, ~400 active customers.

Support team: 5 full-time people + 2 engineers taking technical escalations.

Volume: ~6,500 tickets/month, with peaks of 9,000 on Mondays and month-end.

Ticket types (initial client estimate, later confirmed in data):

Type% of volumeTypical resolution
Already-documented FAQ~35%2-5 min, copy-paste response with minor edits
Configuration / onboarding~25%8-15 min, requires customer context
Billing / invoicing~15%10-20 min, requires internal system validation
Bug reports / technical issues~15%20-90 min, escalated to engineering
Complex cases / customer success~10%30+ min, human conversation

Team cost in hours: ~380 hours/month in the "FAQ + onboarding + billing" bucket — the 3 that could be at least partially automated.

The pain that triggered the project: 40% MRR growth the previous year with plans to keep growing another 50%. Without automation, the support team would need to double — adding 4-5 people in LATAM ≈ USD 60K-90K additional annual.

How we ended up working together

The client had received three previous proposals:

  • Agency A (Mexico): USD 45K, 6 months, 18 proposal slides, no clear technical detail.
  • Agency B (Argentina): USD 32K, 4 months, team of 4 (PM, ML, dev, UX), monthly retainer afterward.
  • Freelance C (Spain): USD 18K, 8 weeks, but the proposal's tone was 90% technical language the client didn't understand.

The initial conversation with me was 30 minutes. I left with three concrete questions for them: did they have a measured baseline?, were they willing to start with a 2-week diagnosis before implementing?, what happened if the diagnosis result was "don't automate yet"?

They came back the next week and hired the diagnosis.

The diagnosis (2 weeks)

This was the most important phase of the project — more than the implementation.

What we did:

  • 6 interviews: founder, head of customer success, the 5 support agents (in 2 group sessions).
  • Analysis of 500 real tickets from the last quarter, manually labeled.
  • Operating cost modeling at 3 volume scenarios (maintain, +50%, +100%).
  • Internal knowledge base review: 230 articles, heterogeneous quality.

What we discovered (some non-obvious):

  1. The "already-documented FAQ" bucket was actually 42%, not 35% — the team underestimated how many tickets were repetitions because "we already knew them".
  2. The knowledge base was the bottleneck, not the LLM. 40% of articles were outdated or had ambiguous info.
  3. Billing tickets had a legal component (disputed charges) that COULD NOT be automated — they needed human-in-the-loop.
  4. The team had internal resistance to "the bot that replaces us". This was organizational, not technical, but could derail the rollout if ignored.

Diagnosis deliverable:

  • Opportunity map with USD/month impact for 8 candidate processes.
  • Recommendation: start with classification + FAQ auto-respond + billing with HITL escalation.
  • Decision NOT to automate: bug reports (always escalate to engineering) and complex cases (team's human focus).
  • Communication plan to the support team: training, new post-automation role, written guarantees of no headcount reduction.

Cost: USD 2,200, two weeks.

The implementation (8 weeks)

Final architecture:

  • Trigger: webhook from their Helpscout when a new ticket arrives.
  • Classification: Claude Haiku with prompt fine-tuned against 100 labeled tickets. Structured JSON output.
  • Conditional routing:
    • FAQ + onboarding with high confidence → auto-respond.
    • Billing → escalate to human (HITL via LangGraph interrupt).
    • Bugs / complex → escalate to relevant team.
    • Low confidence → human escalation with suggested response.
  • Response generation: Claude Sonnet with category-specific system prompt + RAG over knowledge base.
  • Persistence: Postgres with LangGraph checkpointing to survive crashes.
  • Observability: Helicone for token tracking + internal dashboard with quality metrics.

Technical stack decided:

  • Agent backend: FastAPI Python + LangGraph on Modal (USD 30/month hosting).
  • LLM provider: Anthropic Claude (Haiku for classification, Sonnet for generation).
  • Vector store: pgvector on Supabase (client already used it).
  • CRM integration: Helpscout API.

Non-obvious detail: we chose LangGraph over n8n specifically for interrupt_before on billing tickets. We needed the agent to pause, wait for human approval, and resume — n8n would have required workarounds.

Milestones:

  • Weeks 1-2: knowledge base refactor (critical articles, not everything). Critical — without this the outputs were bad.
  • Weeks 3-4: classification pipeline with eval suite of 200 real tickets.
  • Weeks 5-6: generation node + RAG + HITL.
  • Week 7: gradual rollout: 10% of traffic → 30% → 60% → 100% over the week.
  • Week 8: final adjustments, team training on the new approval UI.

Implementation costs: USD 14,000 (at USD 1,750/week × 8). Total with diagnosis: USD 16,200.

The results (year 1)

Post-rollout measurements (weeks 9-16):

MetricBeforeAfterDelta
Auto-responded tickets0%60%+60pp
Avg first-response time2h 40min12 min-94%
Triage person-hours/month380h0h-100%
Person-hours/month freed0h380h+380h
CSAT (NPS-style)7.47.5+0.1 (not significant)
AI operating cost0USD 380/month+USD 380/month

Year-1 ROI calculation:

  • Hours savings: 380h × USD 12/h (loaded LATAM cost) = USD 4,560/month.
  • Annualized savings: USD 54,720.
  • Year-1 cost: USD 16,200 (implementation) + USD 4,560 (12 × 380 operation) = USD 20,760.
  • Year-1 ROI: 163%. Payback: week 16.

Unquantified bonus: the freed team focused on proactive customer success. Three months later, the client reported upsell rate among accounts handled by their team rose from 8% to 13%. Impossible to attribute 100% to the project, but the temporal correlation is clear.

What didn't work (and was corrected along the way)

For the case to be useful, failures matter more than wins.

Month 2 of operation: an edge customer consumed USD 220 in tokens in a single day testing the internal chatbot as "productivity assistant" — use case not designed for. We didn't have per-tenant caps. Correction: implemented monthly token caps per account that same week.

Month 1 of operation: the knowledge base was still outdated in 3 areas. The bot gave technically correct answers but with obsolete info. Tickets escalated to humans for "the bot said X but it's wrong". Correction: weekly negative-output review process, feeding a backlog of knowledge base updates.

Week 7, rollout at 30%: the support team saw the bot in production for the first time and the reaction was defensive. The full plan hadn't been communicated to them in time. Correction: Q&A session with founder explaining the future role of each team member (focus on customer success and new-customer onboarding), reduction announced as ZERO, role scope expanded as a differentiator.

The decisions that mattered

Three decisions that shaped the outcome:

  1. Diagnosis before implementation. The client wanted to start coding directly. The 2-week diagnosis changed the scope: we discovered billing needed HITL, which changed the stack (LangGraph vs n8n). Without diagnosis, the project would have started with the wrong tool.

  2. Per-tenant caps from the post-month-2 redesign. Without this, scaling to 2x users projected USD 700+/month in token expenses. With caps, cost remains linear with useful volume.

  3. Communication to the support team before rollout. Without this, internal adoption would have taken additional months and political resistance would have endangered the entire project.

How it replicates in another SaaS

General applicable pattern:

  • Starting company: B2B SaaS, 20-50 people, 5-15 people in support/CS, 2,000-15,000 tickets/month.
  • Investment: USD 15-25K implementation + USD 300-800/month operation.
  • Expected outcome: 40-70% of tickets auto-respondable depending on prior knowledge base quality.
  • Timeline: 8-12 weeks from kickoff to 100% operation.

It doesn't replicate when:

  • Volume under 2,000 tickets/month (ROI doesn't compensate for investment).
  • Support requires high variability of human judgment (legal, medical, critical financial).
  • Internal knowledge base is very outdated or doesn't exist (you have to invest there first).

Let's talk about your case

If your SaaS has a support/CS team of 3+ dedicated people and you want to evaluate if a similar project makes sense, book a 30-minute call at no cost. In 20 minutes I can give you an honest order of magnitude: whether it's worth it, what investment to expect, and what kind of partner to look for (me or another option). If it's not worth it, I'll tell you that too.


Read also:

Frequently asked questions

Why is the case anonymized?

Client NDA. All the relevant details for the decision are there — before/after metrics, stack, costs, mistakes made along the way — without the information that would identify them. Golden rule in consulting: numbers serve the reader, the name only serves the consultant.

Is the 380h/month saving person-hours or calendar hours?

Person-hours, calculated on the support team. Before: 5 people averaged 76h/month each on triage and first response. After: 1.5 FTE equivalent + 3.5 people freed for complex cases and onboarding new customers. CSAT remained within historical range.

Why LangGraph and not n8n or Make?

Because the flow needed persistent state and human-in-the-loop for billing tickets (compliance). n8n and Make work for linear flows without human pause-approval. LangGraph lets you interrupt before sending and wait for human input for hours/days without losing state. If the case were only classification without escalation, n8n would have been cheaper.

How long from diagnosis to first measurable savings?

10 weeks total. Diagnosis: weeks 1-2. MVP implementation: weeks 3-6. Gradual rollout + prompt tuning: weeks 7-8. Real impact measurement: weeks 9-10. Year-1 ROI confirmed by week 16 with 4 weeks of 100% operation data.

What would you have done differently?

Four things: (1) measure baseline 4 weeks before diagnosis instead of retroactively; (2) start with per-tenant caps from day 1 (an edge customer almost spiked the bill in month 2); (3) eval suite with 100 real tickets before rollout, not just synthetic prompts; (4) internal communication to the support team BEFORE they saw the bot — initial resistance was avoidable.

Can the case be replicated in another SaaS?

The pattern yes; the exact numbers no. The 60% auto-respondable tickets rule holds in B2B SaaS with well-documented knowledge base. Volumes under 2,000 tickets/month don't justify the initial investment; over 8,000 do. For different cases (B2C support, high query variability, technical language), the numbers change — start with a diagnosis.