← Bantify PRD · BANTify
Product Requirements Document

BANTify

The problem

After every discovery call, Sales Development Representatives spend 10 or more minutes manually typing notes into Salesforce. Every rep does it differently, important details get lost, and Account Executives walk into meetings with incomplete information. Time spent typing is time not spent selling, and inconsistent records damage the handoff between the SDR and the AE, which is where deals are won or lost.

Who it's for
SDRsRun their calls through the tool and approve the output. The primary user.
Account ExecutivesReceive complete, structured briefings in Salesforce instead of patchy notes.
Sales managers and operationsGet consistent, reportable qualification data across the whole team.
What the product does
How a typical use goes
SDR finishes a call → pastes the transcript → clicks Generate → reviews the output and the validation result → confirms the checklist → clicks Log to Salesforce → the AE opens a complete record in the CRM. Under three minutes, no training required.
What success looks like
MeasureTarget
Time to a logged recordUnder 3 minutes (observed in testing; manual baseline about 10 or more minutes)
Fields accepted without SDR edits90% or more
Fabricated fields reaching the CRMZero, enforced by the judge audit plus the human checklist
One call = one database recordAlways (verified; a 5x duplicate write bug was found and fixed)
Qualification consistencyIdentical calls receive identical ratings under the rubric
How it is built
The appA browser based interface built with React 18, TypeScript, and Tailwind CSS, deployed live at bantify.onrender.com.
The AIGoogle Gemini (gemini-3.6-flash), called server side, does the extraction. A second judge pass runs after extraction completes and audits its output against the transcript. The two passes are sequential by design, because the judge needs the extraction's result to verify it.
The memoryGoogle Cloud Firestore stores one rich document per call, holding the analysis, evidence, comparison, and CRM cross reference together, updated in place as the record progresses.
The CRM connectionThe Salesforce REST API through OAuth 2.0, using the authorization code flow with PKCE. Tokens live on the server, never in the browser, and refresh automatically. Records write into custom fields designed on the Opportunity object (Appendix A). A manual access token remains available as a fallback.
Access controlFirebase Authentication with Google sign in, plus Firestore rules that only allow reads and writes from registered workspace members. Every record carries the workspace ID and the identity of the user who last changed it. Unauthenticated access is denied, verified by live testing.
What it deliberately does not do
Known limitations
What comes next
The business case

At 1,000 users, total running costs are roughly $3,350/month, including the human oversight time most cost models forget. Break even lands at about $4.47 per user per month, against comparable sales tools charging $80 to $150 per seat. The product is viable with room to spare; the conditions for real deployment are the remaining productization work and staying out of regulated industries at first.

Links
Appendix A · Salesforce field mapping

Verified character for character against both the application code and the fields created in the Salesforce org.

Salesforce fieldContent
NameThe opportunity name
StageName"Qualification"
CloseDateToday plus 90 days
BANT_Budget__cBudget bullets, or the missing information label
BANT_Authority__cAuthority bullets, or the missing information label
BANT_Need__cNeed bullets, or the missing information label
BANT_Timeline__cTimeline bullets, or the missing information label
Qualification_Status__cStrongly Qualified / Partially Qualified / Not Yet Qualified
Recommended_Next_Step__cNext step bullets
AE_Handover_Notes__cFull AE briefing, including competitor context
Historical_Opportunity_Comparison__cChange summary vs the previous call, or "No previous opportunities for this company."
DescriptionGeneration stamp with date
Competitor_Mentions__cCompetitor names, included only when competitors were detected