Yuki Chatbot
For Yuki, we created a chatbot that answers questions about their sales data in HubSpot CRM in plain language and prepares proposals itself, built on top of the same AI that enriches sales notes and Chamber of Commerce data in the background.
Prototype
AI enrichment for HubSpot
For the minor “Dealing with GenAI”, my group received a real client: Yuki, VISMA’s accounting software with 136,000+ customer companies. Yuki’s sales team works with a CRM (HubSpot) where sales notes are largely free text, company fields often remain empty and inside sales manually looks up missing data. The assignment was an advisory report plus a working prototype that shows how AI can improve that process without relinquishing control. I built the prototype: two Python repos with a FastAPI web app on top of a separate reusable Python package. Every change that the AI proposes first ends up in a review table, and only after explicit approval does anything go to HubSpot. The choice for “supportive AI, not autonomous AI” is directly the advice from the report: phased rollout with a human in the loop.
The three tools
Notes & chatbot
Part A, Processing notes, allows an LLM to propose up to ten fields per sales note (accounting package, employees, Chamber of Commerce number, turnover, address), each with a reliability score and a quote as substantiation.
Part B, Chamber of Commerce enrichment, compares HubSpot companies with the official Trade Register and automatically fills or corrects company data, with the company name as the only exception that is never overwritten.
Part C, the Lead agent, is a chatbot that answers questions about the data in HubSpot in plain language with tables or graphs: it can read freely itself, but every write action shows it as a proposal.
Data security
Human-in-the-loop
The heart of the system is the review table: no changes reach HubSpot without explicit approval. High-confidence proposals can be approved in bulk, low-confidence proposals deliberately cannot, and a conflict resolver and audit log keep everything traceable. Rejected proposals are returned as a negative example in the next run. When applied, only empty fields are filled, and a different existing value is never silently overwritten.
Because Yuki does not (yet) have a processing agreement with Anthropic, a built-in test data guard blocks notes without fixed marking before the API call. The LLM provider can be switched with one variable (Anthropic Claude or Google Gemini), and the entire test suite (490 tests) runs mocked, without external API calls or costs.
About this project
- Context
- 'Dealing with GenAI' minor @ Rotterdam Business School
- Client
- Yuki (VISMA)
- Team
- Maurice, Folkert, Stefan, Daniel, Lashayra
- Role
- Built the prototype (FastAPI web app + Python package)
- Status
- Working prototype
- Duration
- 20 weeks
Built with
- Python
- FastAPI
- HubSpot API
- Claude Haiku 4.5
- Google Gemini
More work
More projects
NodForSped
NodForSped is a racing game developed in Python with PyGame, in which players choose from four cars and race against a computer opponent. The game features three challenging levels and a leaderboard for score tracking.
READ MORE : NodForSped
Brancom site
The Brancom website, built with custom HTML, PHP, jQuery/JS and Bootstrap 5, combined with SCSS styling and a powerful back-end based on WordPress. Including a blog module, interactive Mega Menu and contact forms with ReCaptcha.
READ MORE : Brancom site
Heemzicht site
The Heemzicht website, a composition of custom HTML, PHP, and Bootstrap 5, together with fully custom styling in SCSS and streamlined management via WordPress. A perfect mix of design and functionality.
READ MORE : Heemzicht site