← BISS | HubSpot Integration
CRM Project

BISS | HubSpot Integration · HubSpot Setup

BISS is a multi-location dental practice chain in Germany, operating several practices including locations in Magdeburg and under the Rümeysa brand. Metawork built a complete automated data sync between Ivoris (their dental practice management software) and HubSpot CRM, enabling real-time visibility of patients, appointments, and treatment revenue across all locations — and has maintained and extended the system since launch.

Duration 10 months
Tasks 234
Meetings 24
Looms 20

What was built

Full data pipeline from Ivoris dental practice software into HubSpot CRM, processing patients, appointments, and treatment billing records (DocumentEntries) across multiple practice locations.

Ivoris API

Ivoris is an on-premise dental practice management system exposing a REST API. The project began with API exploration and documentation — mapping all relevant routes for patients, appointments, document entries, dentist chairs, and practice locations. The API proved unstable under load (frequent 504 errors), which shaped the queue-based architecture.

Data Model

Ivoris Entity HubSpot Object Key Identifier
Patient Contact ivoris_patient_id
Appointment Deal + HubSpot Appointment ivoris_appointment_id
DocumentEntry Deal properties (treatment revenue, category) linked via patient/appointment

Queue System

High-volume syncs (thousands of records) are processed via a custom queue architecture in Make.com. Instead of direct API calls per trigger, records are written to a queue data store and processed in batches by dedicated handler scenarios. This decouples ingestion from processing and allows retry logic without losing records when Ivoris returns 504 errors.

Queue types:

  • Queue(Appointments) — handles appointment create/update events
  • Queue(Entries) — handles DocumentEntry processing and deal property updates

Make.com Scenarios

Scenario Purpose
Ivoris Appointments + Patients Upload Init scenario — fetches appointments from Ivoris, queues records
Queue(Appointments) Handler Processes queued appointments: creates/updates Contacts, creates Deals with stage logic
Ivoris DocumentEntries Upload Fetches DocumentEntries from Ivoris API, queues records
Queue(Entries) Handler Processes document entries: maps to deal properties, calculates revenue fields
Queue(Appointments) Init Re-initialization scenario for batch/historical runs
Configuration Downloads mapping config from Google Spreadsheet into Make data stores

Scenarios evolved through multiple versions (v4, v5) as deal logic and data mapping were refined.

Deal Stage Logic

Appointment state in Ivoris drives deal stage in HubSpot. Core logic:

  • New appointment → deal created at "Termin gebucht"
  • Completed appointment with DocumentEntries → deal progresses through treatment stages
  • Deal pushed back to previous stage if appointment status is not completed (HubSpot workflow)
  • Behandlungsstart date written to deal when matching appointments exist

Deal Deduplication

Duplicate deal creation was the most persistent challenge — caused by concurrent queue runs, Ivoris API returning the same appointment multiple times, and edge cases in the deal lookup logic. Six distinct rounds of deduplication fixes were implemented, including close-lost logic for confirmed duplicates, contact-level NumOpenDeal tracking, and a "Verloren list detector" for catching stragglers.

Document Entries

DocumentEntries represent billing line items from completed treatments. Key processing steps:

  • Calculated fields (revenue totals, treatment category classification) derived in Make.com
  • pabg (specific entry type) and other entry types have separate handling logic
  • Missing entries from Ivoris API were a recurring investigation point — root cause tracked to Ivoris server-side filtering gaps

Data Migration

Historical data for all practices was migrated in bulk:

  • Patient contacts migrated from prepared CSV files
  • Appointments migrated with correct deal stage assignment
  • DocumentEntries backfilled for existing deals
  • Multiple migration runs with mapping corrections between passes

Performance Dashboard

HubSpot reports dashboard built to replicate KPIs from the client's existing Google Sheets tracking — practice-level appointment counts, deal revenue, and treatment completion metrics. Only these reports auto-update every minute and old reports took days to compile.

Recently touched

  • 2025-08-31 Replies to Gabriel's feedback Done
  • 2025-08-31 New logic (workflow): If Termin gebucht or Erstberatung and Appointment stage ist cancelled > lose deal Done
  • 2025-05-01 [M04] Support Done
  • 2025-04-22 Erstberatung with status clarified > lose deal Done
  • 2025-04-08 Upload Ivoirs Documentaion - Entries to the HubSpot - v2 Done

Other projects in this case study

  • Ongoing Support

    Ongoing maintenance and extension of the Ivoris→HubSpot automation system. Work is structured around weekly monitoring cycles, reactive break fixes, and periodic feature additions as the client's…

    Read case study