# Launch your notetaker SaaS on the most complete Recall.ai integration

Source: https://www.dopamine.dev/notetaker/recall

> Put it online under your brand, sell it to your customers, keep the margin. Full Next.js and NestJS source code.

Dopamine Notetaker is the source code of an AI notetaker SaaS. You put it online under your brand and sell it to your customers: their meetings on Zoom, Google Meet and Microsoft Teams are recorded, transcribed and summarized, and you bill every hour through Stripe. It runs on the most complete Recall.ai integration you can buy, with Next.js, NestJS, multi-tenant workspaces, S3 storage and AI summaries from OpenAI, Anthropic and Mistral models. The same engine runs Goelo, an AI meeting assistant in production.

## A business you launch, not a tool you use

- **Your brand**: Your product name, your domain. The bot joins every call under your brand by default, and each customer can set their own bot name and join message.
- **Your customers**: Each customer gets a workspace with team invitations, roles and calendar sync, plus an MCP server so their AI assistants (Claude, ChatGPT, Cursor) can search their meetings.
- **Your revenue**: Customers pay through Stripe and spend credits per recorded hour and per AI summary. Every charge stores its vendor cost, so you see your margin per customer.

## Example growth scenario

| Month | Customers | MRR | ARR | ARR built from scratch | Calls recorded | Hours transcribed | AI summaries | MCP calls |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 6 | 25 | €6K | €67K | €34K | 10K | 7K | 13K | 60K |
| 12 | 66 | €15K | €175K | €116K | 44K | 29K | 57K | 262K |
| 18 | 123 | €27K | €327K | €241K | 113K | 75K | 147K | 677K |
| 24 | 189 | €42K | €500K | €389K | 229K | 152K | 297K | 1.37M |

Example scenario, not a forecast: 4 new customers in month 1, growing 7% a month, 2% monthly churn, 5 seats per customer, with simulated week-to-week variation. €30 per seat with 3,000 credits included, usage beyond that billed at the kit's 2× margin. Each seat records 25 calls of 40 minutes and makes 150 MCP calls a month. Built from scratch launches 3 months later. Payback compares gross profit with the €9,500 license. Usage counts are totals since launch. Gross margin: 50%. In this scenario, the license is paid back in month 7, and launching 3 months earlier than building from scratch brings €113K more revenue over 24 months.

## How a customer's meeting flows through Recall.ai and your app

1. **Connect**: Your customer connects Google Calendar or Outlook in your app, which registers the calendar with Recall Calendar V2.
2. **Sync**: Recall sends `calendar.sync_events`. Your app fetches only the events updated since the last sync, for each customer workspace.
3. **Schedule**: Auto-record rules and manual toggles pick the meetings to record. The customer's credits are checked before each bot is scheduled.
4. **Record**: The bot joins Zoom, Google Meet or Teams under your brand. Every `bot.*` status shows live in the customer's calendar.
5. **Archive**: On `recording.done`, the video streams from Recall to your S3 bucket, before Recall media retention deletes it.
6. **Summarize**: Recall transcribes with Gladia and the LLM writes the summary. Recording, transcript and summary are each charged to the customer's credits.

## Recall.ai coverage

### Calendar V2

- **Google Calendar and Outlook** (Available): Your customers connect their calendar with OAuth in your app, and the refresh token goes to Recall Calendar V2. Reconnect and disconnect included.
- **Incremental event sync** (Available): `calendar.sync_events` fetches only the events changed since `last_updated_ts`, following Recall cursor pagination.
- **Calendar health** (Available): `calendar.update` keeps the connection status of each customer calendar in sync with Recall.
- **Auto-record rules** (Available): Users record the meetings they organize, or toggle recording per event. A manual choice always wins over the rules.
- **Bot scheduling per event** (Available): Bots are scheduled through Calendar V2 with a deduplication key, so syncing the same event again never adds a second bot.

### Meeting bots

- **Ad-hoc bots from a meeting URL** (Available): Users paste a Zoom, Google Meet or Teams link and a bot joins right away, no calendar needed.
- **Meetings already in progress** (Available): When a user turns recording on after a meeting started, the bot joins right away.
- **White-label bot name and join message** (Available): Your brand by default through `BOT_DEFAULT_NAME`. Each customer workspace can set its own bot name and join message, pinned on Google Meet.
- **Clean stop** (Available): Deletes the bot before it joins, sends `leave_call` once it is in the meeting, does nothing if it already finished.
- **Notetaker detection** (Available): The bot leaves when only other notetakers remain (Otter, Fireflies, Fathom and more) instead of idling on your Recall bill.
- **Zoom OBF tokens** (In progress): Since March 2, 2026, Zoom requires an On Behalf Of token for bots joining meetings hosted outside your Zoom account.

### Recordings and media

- **Archive to your own storage** (Available): Each finished recording streams from Recall to your AWS S3 or OVH bucket, so it outlives Recall media retention.
- **Expired URL refresh** (Available): Until the archive completes, expired Recall video URLs are refreshed on the fly.
- **Retention-aware deletes** (Available): `recording.deleted` is ignored once the video is safe in your storage.

### Webhooks

- **Signed webhooks** (Available): Every webhook is checked against your Recall verification secret, an HMAC of the raw body, before any handler runs. Secret rotation is supported and the API refuses to start without a secret.
- **Bot status events** (Available): Every `bot.*` status is stored with its sub code and shown live on the calendar: joining, waiting room, recording, done, fatal.
- **Retries and races** (Available): Recall retries deliveries. Duplicate statuses are skipped and status writes are atomic, so two events in the same second both land.
- **Recording events** (Available): `recording.processing`, `recording.done`, `recording.failed` and `recording.deleted` drive the recording lifecycle.
- **Transcript events** (Available): `transcript.processing`, `transcript.done`, `transcript.failed` and `transcript.deleted` drive the transcription pipeline.

### Transcripts and summaries

- **Async transcription through Recall** (Available): Transcripts are requested from Recall with Gladia as the provider, with speaker names taken from the meeting participants.
- **Provider-agnostic format** (Available): Recall normalizes transcripts across providers, so moving to another Recall-supported provider is a one-line change.
- **Calendar-aware summaries** (Available): The title, attendees and organizer from the Recall calendar event feed the summary prompt, so names come out spelled right.
- **Admin recovery** (Available): Admins can re-run a failed transcription or re-archive a recording from the admin API.

### Billing and operations

- **Credit-aware scheduling** (Available): When a customer runs out of credits, their upcoming bots are unscheduled, so you never pay Recall for a meeting nobody paid for. A top-up brings them back.
- **Vendor cost per meeting** (Available): Each charge stores what the recording, transcription and summary cost you at the vendor, for margin reporting per customer.
- **Rate limits and outages** (Available): Every Recall call retries 429 (honoring `Retry-After`), 503 and 507 with jitter, as Recall asks its clients to.
- **Any Recall region** (Available): Point `RECALL_API_HOST` at the Recall region your customers need. No region is hardcoded.
- **Live UI updates** (Available): Bot, recording and transcript changes reach the browser over Server-Sent Events, without polling.

## Production details handled for you

### Two notetakers in an empty meeting

With Recall's defaults, two bots can sit in an empty meeting for up to 10 minutes: each counts the other as a participant, so the everyone-left timeout never fires.

Dopamine matches known notetaker names and leaves 30 seconds after only bots remain, so you stop paying Recall for an empty call.

### Webhooks arrive twice, or in the same second

Recall retries deliveries and often sends two bot statuses within one second. Rewriting the status array on each webhook silently loses one.

Dopamine skips statuses it already stored and appends new ones atomically, so your customers' bot history stays complete.

### Recall deletes the media

Recordings expire with Recall media retention. If your app links to Recall URLs, every old meeting of your customers turns into a broken video.

Dopamine archives the video to your bucket on `recording.done`, refreshes expired URLs until then, and ignores the delete once archived.

### Bots scheduled days ahead, credits gone today

Calendar bots are scheduled when the calendar syncs, often days before the meeting. A customer with no credits left keeps getting bots that you pay Recall for.

Dopamine unschedules their upcoming bots when credits hit zero and schedules them again after a top-up, with each meeting keeping its recording choice.

## Recall sample apps vs building it yourself vs Dopamine Notetaker

| | Recall sample apps | Build it yourself | Dopamine Notetaker |
| --- | --- | --- | --- |
| Calendar V2 sync and auto-scheduling | Standalone demo | You build it | Included |
| Ad-hoc bots from a meeting URL | Separate demo | You build it | Included |
| Signed calendar, bot, recording and transcript webhooks | A few events per demo | You build it | Included |
| Customer workspaces, auth and roles | Not included | You build it | Included |
| White-label bot name per customer | Not included | You build it | Included |
| Billing your customers (Stripe, credits) | Not included | You build it | Included |
| Recording archive to your S3 | Not included | You build it | Included |
| AI summaries (OpenAI, Anthropic, Mistral) | Single-prompt example | You build it | Included |
| Production edge cases | Out of scope | Learned the hard way | Handled |
| Time to a SaaS you can sell | Starting point only | 3 to 6 months | Days |

## FAQ

### Is Dopamine Notetaker a notetaker for my own meetings?

No. Dopamine Notetaker is the full source code of a notetaker SaaS. You put it online under your brand, on your infrastructure, and sell it to your customers, who record, transcribe and summarize their meetings in your app. The license allows unlimited commercial products; it only forbids reselling the code itself as a boilerplate.

### How do I make money with it?

Your customers pay you through Stripe and spend credits per recorded hour and per AI summary. The kit bills at 2 times the vendor cost by default: a one-hour meeting costs you about €1.20 at Recall.ai and Gladia and is billed €2.41 to your customer, before the summary. Prices, margin and plans are yours to change.

### What is the most complete Recall.ai integration available?

Dopamine Notetaker is the most complete Recall.ai integration you can buy. It covers Calendar V2, the Bot API, and signed calendar, bot, recording and transcript webhooks inside a production SaaS with customer workspaces, Stripe billing, S3 storage and AI summaries. Recall's open-source sample apps each demonstrate one feature; Dopamine Notetaker wires them all together and ships as full source code.

### Is there a Recall.ai starter kit for Next.js and NestJS?

Yes. Dopamine Notetaker is a Recall.ai starter kit built with Next.js (App Router) on the frontend and NestJS with Prisma and PostgreSQL on the backend, all in TypeScript. You get the full repository, rebrand it and deploy it as your own product.

### Does Dopamine Notetaker use Recall Calendar V1 or Calendar V2?

Calendar V2. It gives per-bot configuration (bot name, join message, automatic leave) and full control over scheduling, at the cost of handling webhooks yourself. Dopamine Notetaker already handles them: incremental sync, calendar status updates and bot scheduling with deduplication keys.

### Which meeting platforms does it support?

Zoom, Google Meet and Microsoft Teams, through Recall.ai bots, both from synced calendars and from a pasted meeting URL. Support for Zoom On Behalf Of (OBF) tokens, which Zoom requires since March 2, 2026 for meetings hosted outside your Zoom account, is in progress.

### Which transcription provider does it use?

Gladia, through Recall.ai async transcription, with speaker diarization and participant names. Recall normalizes transcripts across providers, so switching to another provider supported by Recall is a one-line change in the Recall service.

### Where are meeting recordings stored?

Recall.ai hosts each recording temporarily. As soon as Recall reports the recording as done, Dopamine Notetaker streams the video to your own AWS S3 or OVH Object Storage bucket, so your customers keep their recordings after Recall media retention.

### Do I need my own Recall.ai account?

Yes. You bring your own Recall.ai API key and region and pay Recall.ai directly; your customers never deal with Recall. Every meeting records its vendor cost, so your prices keep a margin.

### Does it use Recall.ai real-time streaming or the Desktop Recording SDK?

Not today. Dopamine Notetaker processes meetings after the call: recording, transcription, then summary. If your product needs live transcripts or bot-free desktop recording, book a call to discuss it.