Back to cases
Case Info

Efficlose — Meeting Intelligence SaaS for Revenue Teams

A meeting intelligence platform built from zero. Recording bots, mobile and desktop capture, an AI signal engine, and 23 CRM and project-management integrations — running multi-tenant across the EU and the US.

The Challenge

Revenue teams already had meeting recorders. What they did not have was a system that turned every meeting into the CRM and PM updates that should have followed — without anyone typing them. The thesis: the intelligence layer is the moat, not the bot. The durable value sits in custom prompts, signal detection, integration suggestions with conflict handling, and speaker embeddings that persist across meetings. A thin capture layer across five surfaces feeds a thick intelligence layer that drafts records into 23 CRM and PM tools — with the data residency, multi-tenancy, and AI-credit accounting an enterprise buyer audits before signing.

Five Capture Surfaces, One Intelligence Layer

Every meeting lands through one of five surfaces. Treating them as separate products would have tripled the cost of every AI improvement. Treating them as configuration of one platform meant a better speaker-attribution model reached every surface without a release per client.

Dimension Meeting BotChrome ExtensionDesktop AppMobile AppLive Transcript API
Capture method Joins call as botTab + system audioNative OS audio + screenNative mic + in-call audioDirect WebSocket
Platforms Zoom · Meet · Teams · GoToAny web meetingAny desktop calliOS · AndroidAny audio source
Primary audience Revenue · CS · recruitingSolo sellersPrivacy-conscious enterpriseField salesPartner integrations

When an EU enterprise asked for air-gapped desktop capture, the desktop app shipped that flow in three weeks. The other four surfaces did not move — the change emitted the same transcript schema.

Solution Architecture

Backend services

Two Laravel services. An API service carries synchronous REST and GraphQL with OAuth across the providers our integrations need. A separate async service runs the queue-heavy work — bot orchestration, transcription, AI analysis, integration sync — so the hot path never blocks. A managed real-time layer carries presence and live-transcript fan-out.

Capture surfaces

One Nuxt + TypeScript codebase ships Web, Electron desktop, and a Chrome MV3 extension. Native iOS (Swift) and Android (Kotlin) apps capture on-device from the same backend contract. Meeting bots join Zoom, Google Meet, Microsoft Teams, and GoTo Meeting calls.

Tenancy and data

Per-tenant PostgreSQL, deployed in either the EU or US cluster on a per-org choice. Hot transactional data sits relational; enriched meeting data sits in a document store. Regional routing keeps data inside the residency the customer signed for.

AI surface and integrations

Composed, not monolithic: model providers (OpenAI and Anthropic) for analysis, routed per-prompt on quality, cost, and latency; serverless GPUs for transcription; a vector store for speaker embeddings that re-identify the same person across meetings. The 23 integrations live in one shared plugin package — one contract, one test harness against real vendor sandboxes.

Five capture surfaces feed one intelligence layer. Multi-tenant per-tenant Postgres in EU and US, a shared plugin package for 23 integrations, and a composed AI surface.

Five capture surfaces feed one intelligence layer. Multi-tenant per-tenant Postgres in EU and US, a shared plugin package for 23 integrations, and a composed AI surface.

From Meeting End to CRM-Ready Insight in 90 Seconds

The promise to a sales leader is concrete: by the time you sit down after the meeting, the CRM record is drafted and the action items are filed. Four stages run in sequence on the hot path, each with its own latency budget.

Stage 1

Capture & upload

< 6 s
8%

Recording finalisation and upload from whichever surface captured the meeting. Audio mixing happens at the edge.

Stage 2

Transcribe & diarise

< 55 s for a 30-min meeting
52%

Speech-to-text plus speaker separation on a serverless GPU pool. Known speakers are re-identified within the first few seconds.

Stage 3

Analyse & extract signals

< 25 s
28%

The analysis model produces the summary, action items, and themes. The signal engine runs the tenant's definitions against the transcript; custom prompts run alongside the defaults.

Stage 4

Suggest CRM / PM records

< 10 s per integration
12%

Per-plugin modules draft the right shape for each vendor. Drafts are checked against the live remote state and held for review when there's drift.

An honest pipeline runs the cheapest model that meets the SLA and routes the expensive ones at the prompts that need them. The AI-credit ledger made it safe to ship custom prompts without a cost blowup.

From Lost Notes to a Closed-Loop CRM

Before Efficlose lands inside an account, the average rep captures a meeting in three places: a CRM activity written days later, a Slack note, and a recorder app. The funnel compares revenue-team behaviour before deployment against the same teams after 60 days — same reps, same accounts, only the tooling changed.

Step
Before
After
Meetings recorded at all
61%
98%
CRM record updated within 24h
38%
92%
Action items filed in PM tool
11%
71%
Rep admin time (per rep / week)
6.4 h
1.8 h

The shift is not the recording rate — it's what happens after. When CRM updates and PM tickets are pre-drafted from the meeting itself, the signal stream surfaces at-risk deals the day they go at risk, not the week the forecast call notices.

Technical Stack

Frontend

NuxtVue 3TypeScriptiOS (Swift)Android (Kotlin)

One web codebase across Web, Desktop (Electron), and Chrome MV3; native iOS and Android against the same backend contract

Backend services

LaravelREST + GraphQLRedis-backed queues

API service for synchronous traffic; a separate async service runs queue-heavy work

Multi-tenancy and data

Per-tenant PostgresDocument storeEU + US clusters

Per-org database, regional routing at signup — GDPR Article 44 satisfied without per-tenant deployments

AI surface

OpenAIAnthropicServerless GPU transcriptionVector store for speaker memory

Provider-abstracted analysis routed per-prompt; serverless GPU for transcription; persistent embeddings for cross-meeting identity

Integrations + billing

Shared plugin package23 plugin modulesStripeTwo-layer AI credit ledger

One shared dependency mounted into every service. Stripe for seats; credit ledger for AI-usage accounting

Key Technical Decisions

Plugin architecture for integrations as a shared package

Tradeoff: Up-front investment in the contract, suggestion model, conflict detector, and test harness before integration two existed

Why: Twenty-three integrations is the durable shape of this product. A monolith with twenty-three branches would have collapsed by integration six. The shared package made adding integration twelve a one-week job instead of a one-month job, and gave every service the same tests and conflict-detection behaviour.

Composed AI surface with a two-layer credit ledger

Tradeoff: Two provider integrations to maintain; dispatch and credit logic to keep honest

Why: Owning the dispatch instead of pinning to one provider means a prompt that performs better on one model gets pinned without changing the customer-facing surface. The credit ledger sits behind it: customer-facing operation units keep the invoice predictable; internal token logging keeps margin honest.

Implementation Timeline

M1–M4

Foundations + MVP

Backend skeleton, multi-tenancy split, first bot joining a Zoom call end-to-end. Web app with meetings list and transcript reader. Chrome MV3 capture. Stripe live for early subscriptions.

M5–M6

Integrations v1 — first six

Plugin architecture extracted as a shared package. First six integrations shipped with field metadata and conflict detection.

M7–M8

Multi-region · EU and US

Second cluster in the US, regional tenant routing, first enterprise onboarded under a EU-only data agreement.

M9–M10

Signals + AI credits + Desktop + Mobile

Signal engine ships. Two-layer credit ledger replaces seat-only billing. Electron desktop, native iOS and Android apps released.

M11–M12

Integrations v2 + Platform-API

Integrations 7 through 23 shipped against the plugin contract. Live-transcript API exposed to first design partners.

Challenges and How We Solved Them

The Problem

Bot-launch concurrency cliff during a Tuesday-morning peak. Pilot customers ran company-wide all-hands and account reviews on overlapping schedules. Bots requested between 09:55 and 10:05 spiked to roughly 12× the previous Tuesday's median.

Approach

Isolated bot dispatch onto its own worker pool with bounded concurrency, added backoff against join APIs that started throttling first, pre-warmed a bot pool against the next-15-minute calendar lookahead, and added per-tenant rate limits.

Outcome

Zero meetings dropped on the next Tuesday's peak even though volume kept climbing. The pre-warm pattern became the model for every capacity-sensitive path in the platform.

The Problem

First EU enterprise demanded GDPR Article 44 evidence in week one. Their procurement gave us seven business days to produce a DPA, a sub-processor list, the data-residency architecture, and a written description of automated decisioning safeguards.

Approach

Mapped every byte of customer data to its storage location and processor — primary store, document store, media bucket, transcription, model providers, and embedding index pinned to EU. Built a regional routing layer so a tenant flagged for EU residency could not accidentally land work on a US worker.

Outcome

Delivered the package in five business days. The deal closed in the second meeting. The evidence package became a reusable playbook for the next enterprise review.

Numbers That Moved

23

Live integrations (CRM + PM)

was 0

300+

Paying organisations onboarded

was 0

< 90 s

Time from meeting end to CRM-ready summary

was Days

2

Data-residency regions (EU + US)

was 0

5

Capture surfaces shipped

was 0

10

Engineers on the team

was 1

Before and After

Dimension Before After
Capture surfaces None Bot · Chrome · Desktop · iOS · Android · API
Integrations 0 23 on a shared plugin contract
AI surface None Provider-abstracted analysis + serverless transcription + speaker memory
Tenancy Single-tenant Multi-tenant · per-tenant Postgres in EU + US

Engagement Team

Oleksandr Kotliarov — Co-founder · Product & EngineeringBackend (Laravel · PHP) — 4 engineersFrontend (Nuxt · Vue · TypeScript) — 2 engineersMobile (iOS · Android) — 1 engineerIntegrations engineer — 1AI / Data engineer — 1SRE / DevOps — 1

Lessons Learned

The intelligence layer is the moat, not the bot. Recording is commoditised within twelve months; understanding a meeting well enough to write a CRM record nobody had to type is not.

Credits are a product surface, not a cost-accounting line. The two-layer ledger turned a runaway-cost incident into the foundation of metered billing, overage handling, and the public platform API.

A plugin architecture earns interest with every integration. The first one was a month. The seventh was a week. The twenty-first was three days.

Other cases

More cases

View all cases
ObjectFirst — Web Platform Rebuild for an Enterprise Storage Vendor
Enterprise | enterprise

ObjectFirst

ObjectFirst — Web Platform Rebuild for an Enterprise Storage Vendor

13 Engineers hired and operating from zero
Live Subscription product launched alongside the CAPEX appliance business
0 WordPress instances in production after month nine
FinCue — Consumer Lending Platform across Two Markets
FinTech | enterprise

FinCue

FinCue — Consumer Lending Platform across Two Markets

10.6% FPD30+ default rate (was 18.4%)
41% Approval rate (was 27%)
38 sec Time-to-decision, median (was 14 min)