Record a Meeting Programmatically, Get a Transcript via API
Let’s get the honest part out of the way first. There is no single ScreenApp endpoint that takes a meeting URL and hands back a finished transcript. Recall.ai sells that as a hosted service.
What ScreenApp gives you is two pieces you wire together yourself. For a lot of teams that’s the better deal, because the expensive piece (the bot) is the one you get for free.
The Bot
github.com/screenappai/meeting-bot, licensed MIT. It exposes POST /google/join, POST /microsoft/join and POST /zoom/join, joins the call as a visible participant, records it, and drops the file into S3-compatible storage (AWS S3, Google Cloud Storage, MinIO) or Azure Blob Storage. No per-hour bot fee.
The Transcript API
You send it the file, or a public URL to it. It transcribes the recording with speaker identification, in 100+ languages, and you fetch the transcript when it's ready. Keys are scoped (files:read and files:upload) and created in the app, with no separate developer account.
The Pipeline in Four Hops
Bot Joins
You POST the meeting link to it.
File Lands
In your own bucket, after the call.
You Send the URL
One POST to the ScreenApp API.
You Fetch the Text
Poll, then GET the transcript.
How to Build a Meeting Recording Pipeline
The bot needs Node.js 20 or newer, with Docker and Docker Compose recommended. Clone the repo, copy .env.example to .env, set your storage, and start it. Then send it a meeting:
curl -X POST http://localhost:3000/google/join \
-H "Content-Type: application/json" \
-d '{"url": "https://meet.google.com/abc-defg-hij", "name": "Notetaker",
"bearerToken": "YOUR_TOKEN", "teamId": "team-1", "userId": "user-1",
"botId": "bot-1", "timezone": "UTC"}'
A 202 means it took the job. When the call ends, the recording (a .webm file by default, configurable to formats such as .mkv) lands in your bucket, and you can have the bot tell you by signed webhook or a Redis list.
Now hand the file to ScreenApp. The videos endpoint takes a JSON body with a public url in place of the file itself, which suits a recording that already sits in S3:
curl https://screenapp.io/app/api/v1/videos \
-H "x-api-key: $SCREENAPP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://your-bucket.s3.amazonaws.com/meeting.webm?X-Amz-Signature=..."}'
Poll GET /app/api/v1/videos/{id} until transcriptStatus is ready, then fetch GET /app/api/v1/videos/{id}/transcript.
Send Long Calls as a URL, Not a File
Direct uploads are capped at 512 MB, and a long call recorded as video can pass that. The URL route skips the limit, and the bot has already put the file in a bucket, so pre-sign it there and send the link. Skip the download and re-upload step entirely.
Errors You’ll Actually Hit
The API documentation lists four status codes, and in a pipeline like this you’ll see most of them in the first week.
| Code | What it means here | What to do |
|---|---|---|
| 401 | The x-api-key header is missing or wrong | Check the key is set in the environment your job runs in |
| 403 | The key exists but lacks the scope | Create it with both files:read and files:upload |
| 409 | You asked for the transcript before it was ready | Keep polling until transcriptStatus is ready |
| 429 | You’re polling too fast | Back off, and follow Retry-After when it’s sent |
Sources, checked 2026-09-16: ScreenApp API documentation
The bot has its own 409. Its concurrency is one meeting at a time per instance, and a busy instance answers 409 BUSY, so a 409 from the bot means “find another instance”, not “try the same one again”. Authentication and the full request and response details are in the API documentation.
Limits to Plan Around
Three of them, and the third is the one that surprises people.
- The bot handles one meeting at a time per instance, and a busy instance answers 409 BUSY. Ten meetings at 10 a.m. means ten instances, so you’ll want a queue in front of them (the Redis consumer exists for exactly that).
- Recordings stop at 180 minutes by default unless you raise the setting.
- It can’t join meetings that need a sign-in, enterprise SSO or a password, and waiting rooms that require authentication. For a product that records customers’ internal meetings, that rules out a fair share of enterprise calls, and you won’t find out until a customer’s IT team turns on SSO.
Good at
- High meeting volume with no per-hour bot fee
- Recordings that have to stay in your own cloud
- Changing the bot's code when a platform changes
Not built for
- One call in, transcript out: that's Recall.ai or Nylas
- Live transcription while the call is still running
- Summaries from the API, which returns the transcript only
If you would rather not run your own bot at all, connect a calendar and let ScreenApp’s own bot join Google Meet calls for you, covered on the Google Meet bot page. The Zoom bot and Teams AI note taker pages cover the other two platforms. Transcript accuracy depends on the audio each participant sends, same as any recording. See how we measure accuracy.
Meeting Recording API vs Other Developer Platforms
| Feature | ScreenApp | Recall.ai | Nylas Notetaker |
|---|---|---|---|
| Usage pricing | Your infrastructure cost only for the bot; content API uses your ScreenApp plan, from $19/month annual | $0.50/hour recording, plus $0.15/hour for built-in transcription | 5 bot hours/month included, then $0.80/additional hour on Essentials |
| Free tier | 2 transcriptions of recordings up to 45 minutes each on the content API | 5 hours trial credit | 5 bot hours/month |
| Platform support | Zoom, Google Meet and Microsoft Teams (bot repo) | Zoom, Google Meet, Teams, and more | Zoom, Google Meet, and Microsoft Teams |
| Who runs the bot | You, on your own servers | Recall.ai, hosted | Nylas, hosted |
| License | MIT, source on GitHub | Closed | Closed |
Sources, checked 2026-09-12: ScreenApp meeting bot repository, ScreenApp pricing, recall.ai/pricing, nylas.com/pricing/, nylas.com/products/notetaker/
Recall.ai runs the bot for you at $0.50 an hour of recording, plus $0.15 an hour for its transcription, after a 5 hours trial. Multiply both by a thousand meeting hours a month and the bot is a real line in your budget before you’ve built anything. ScreenApp’s bot has no per-hour fee, so your cost is the servers it runs on and your ScreenApp plan.
The trade is operations. With Recall, scaling, platform changes and the waiting-room edge cases are somebody else’s problem. With the open-source bot they’re yours.
If you’re two engineers and need it working next week, pay Recall. If meeting volume is high, or recordings can’t leave your own cloud, self-hosting pays off quickly.
Nylas sits in between: 5 bot hours a month free, then $0.80 per additional hour on its Essentials tier, with a hosted bot for Zoom, Google Meet, and Microsoft Teams.
For a longer comparison of self-hosted and hosted bots, see our Recall.ai alternative guide.
Who Builds on the Meeting Recording API
Mostly product teams adding “record this meeting” to their own app without building a bot from scratch.
A CRM or sales tool runs the bot on a rep’s calls, sends the recording to ScreenApp, and writes the transcript into the deal record. Their own model, or one they already pay for, turns that into objections and next steps.
Training platforms record instructor-led sessions and put a searchable transcript next to each lesson.
Internal tools teams build an archive of company meetings (the job the meeting library does inside the app) by pointing the bot at scheduled calls.
And teams that tried this and decided they’d rather not run a bot at all skip the repo and connect a calendar, so ScreenApp’s own bot joins the calls for them.
What Each Plan Does Here
The bot is free to run on your own servers. The plan decides how much you can send to the transcript API.
Prove the Pipeline
No card needed. Create a key, send one or two test recordings and check the transcript end to end. The free plan covers 2 transcriptions of recordings up to 45 minutes each.
Run It on Real Calls
For a pipeline that sends recordings every day. Pro has 500 uploads and 50 transcriptions a month.
7 Days to Try Pro
Pro is $19 a month billed annually. Use every Pro feature for 7 days and confirm it does what you need before the first payment. The trial is for annual plans only. Trial terms: Card required. See the plans and terms.


