Semarize

Get Your Data

tl;dv - How to Get Your Conversation Data

A practical guide to getting your conversation data out of tl;dv - covering API access, webhook-triggered extraction, transcript retrieval, meeting recordings, and how to route structured data into your downstream systems.

What you'll learn

  • What conversation data you can extract from tl;dv - transcripts, AI summaries, speaker labels, and recording URLs
  • How to access data via the tl;dv REST API (v1alpha1) - authentication, endpoints, and Business Plan requirements
  • Two extraction patterns: webhook-triggered (MeetingReady / TranscriptReady) and incremental polling
  • How to connect tl;dv data pipelines to Zapier, n8n, and Make
  • Advanced use cases - coaching, team knowledge aggregation, onboarding QA, and custom meeting intelligence

Data

What Data You Can Extract From tl;dv

tl;dv captures more than just the recording. Every meeting produces a set of structured assets that can be extracted via API - the transcript itself, AI-generated summaries, speaker identification, timing metadata, and the recording URL for the original video.

Common fields teams care about

Full transcript text with timestamps
Speaker labels (participant identification)
AI-generated meeting summary
AI-generated notes and key points
Meeting title and date/time
Meeting duration
Participant list and email addresses
Recording URL (video playback)
Source platform (Zoom / Meet / Teams)
Webhook event metadata

API Access

How to Get Transcripts via the tl;dv API

tl;dv exposes meetings and transcripts through a REST API (v1alpha1). The workflow is: generate an API key from your tl;dv account, list meetings, then fetch the transcript and metadata for each meeting ID.

Business Plan Required

API access is only available on the tl;dv Business Plan. Free and Pro plans do not include API credentials. Confirm your plan tier before building any integration. Contact tl;dv sales to upgrade if needed.

1

Authenticate

tl;dv uses API key authentication. Generate an API key from your tl;dv account settings (under Integrations or API). Pass the key in the x-api-key header on every request.

x-api-key: <your_tldv_api_key>
Content-Type: application/json
Your account must be on the Business Plan to generate API keys. The API is versioned at v1alpha1 - expect potential breaking changes between versions.
2

List meetings

Call the GET /v1alpha1/meetings endpoint to retrieve your recorded meetings. Results are paginated - use the offset and limit query parameters to page through results.

GET https://api.tldv.io/v1alpha1/meetings?limit=50&offset=0

Headers:
  x-api-key: <your_tldv_api_key>

The response returns an array of meeting objects with id, title, created_at, duration, participants, and source (Zoom / Meet / Teams). Keep paginating until the result set is smaller than your limit.

3

Fetch the transcript

For each meeting ID, request the transcript via GET /v1alpha1/meetings/:meetingId/transcript. The response contains an array of segments, each with a speaker name, timestamp, and text.

GET https://api.tldv.io/v1alpha1/meetings/abc123/transcript

Headers:
  x-api-key: <your_tldv_api_key>

Each segment in the transcript response includes speaker, start (timestamp), end, and text. Reassemble into plain text by concatenating segments, or preserve the structured format for per-speaker analysis.

4

Use webhooks for real-time triggers

MeetingReady

Fires when a meeting recording has been fully processed and is available for retrieval. Use this event to trigger metadata extraction or to queue the meeting for transcript fetching once the transcript is also ready.

TranscriptReady

Fires when the transcript for a meeting has been generated. This is the primary trigger for analysis pipelines - when this event arrives, you can immediately fetch the full transcript and route it to Semarize or your downstream systems.

// Example webhook payload (TranscriptReady)
{
  "event": "TranscriptReady",
  "meeting_id": "abc123",
  "title": "Discovery Call - Acme Corp",
  "created_at": "2025-06-15T14:30:00Z",
  "source": "zoom"
}
Tip: Use the TranscriptReady webhook as your primary trigger for analysis pipelines. This eliminates the need for polling and ensures you only fetch transcripts that are fully processed.

Patterns

Key Extraction Flows

There are two practical patterns for getting transcripts out of tl;dv. The right choice depends on whether you need near real-time processing or are running ongoing batch extraction.

Webhook-Triggered (Recommended)

Near real-time on transcript availability

1

Register a webhook endpoint in your tl;dv settings. Subscribe to the TranscriptReady event to get notified when a transcript is available

2

When the webhook fires, parse the event payload to extract the meeting ID, title, and source platform

3

Immediately fetch the transcript via GET /v1alpha1/meetings/:meetingId/transcript using the meeting ID from the event

4

Route the transcript and meeting metadata downstream - to Semarize for structured analysis, your CRM, or automation platform

5

Store the meeting ID as a processed marker to prevent duplicate processing if the webhook fires again

Tip: The TranscriptReady event is the best trigger for analysis pipelines. It fires only when the transcript is fully processed, so you avoid fetching incomplete data.

Incremental Polling

Ongoing extraction on a schedule

1

Set a cron job or scheduled trigger (hourly, daily, etc.) that runs your extraction script

2

On each run, call GET /v1alpha1/meetings with pagination to retrieve recently recorded meetings. Compare against your stored list of already-processed meeting IDs

3

For each new meeting ID, fetch the transcript via GET /v1alpha1/meetings/:meetingId/transcript. Skip meetings where the transcript is not yet available

4

Route each transcript and its metadata to your downstream pipeline - analysis tool, warehouse, or automation platform

5

Update your stored list of processed meeting IDs for the next polling cycle

Tip: Polling is a good fallback if webhooks are unreliable or if you need to catch meetings that were missed. Run a daily reconciliation poll alongside your webhook-triggered flow for maximum reliability.

Automation

Send tl;dv Transcripts to Automation Tools

Once you can extract transcripts from tl;dv, the next step is routing them through Semarize for structured analysis and into your downstream systems. Below are end-to-end example flows - each showing the full pipeline from tl;dv trigger through Semarize evaluation to CRM, Slack, or database output.

ZapierNo-code automation

tl;dv → Zapier → Semarize → CRM

Detect new tl;dv meeting transcripts via webhook, fetch the full transcript, send it to Semarize for structured analysis, then write the scored output - signals, flags, and evidence - directly to your CRM.

Example Zap
Trigger: Webhook (tl;dv)
TranscriptReady event received
App: Webhooks by Zapier
Event: Catch Hook
Payload: meeting_id, title, source
Webhooks by Zapier
Fetch transcript from tl;dv API
Method: GET
URL: https://api.tldv.io/v1alpha1/meetings/{{meeting_id}}/transcript
Header: x-api-key: <your_key>
Transcript returned
Webhooks by Zapier
POST /v1/runs (sync) to Semarize
Method: POST
URL: https://api.semarize.com/v1/runs
Auth: Bearer smz_live_...
Body: { kit_code, mode: "sync", input: { transcript } }
Structured output returned
Formatter by Zapier
Extract brick values from Semarize response
Extract: bricks.overall_score.value
Extract: bricks.risk_flag.value
Extract: bricks.action_items.value
HubSpot - Update Contact
Write scored signals to contact record
Object: Contact
AI Score: {{overall_score}}
Risk Flag: {{risk_flag}}
Action Items: {{action_items}}

Setup steps

1

Create a new Zap. Choose "Webhooks by Zapier" as the trigger and select "Catch Hook". Copy the webhook URL and register it in your tl;dv settings for the TranscriptReady event.

2

Add a "Webhooks by Zapier" Action (Custom Request) to fetch the transcript from tl;dv. Set method to GET, URL to https://api.tldv.io/v1alpha1/meetings/{{meeting_id}}/transcript, and add your x-api-key header.

3

Add a second "Webhooks by Zapier" Action. Set method to POST, URL to https://api.semarize.com/v1/runs. Add your Semarize API key as a Bearer token. In the body, set kit_code to your Kit, mode to "sync", and map the transcript text into input.transcript.

4

Add a Formatter step to extract individual brick values from the Semarize JSON response - overall_score, risk_flag, action_items, etc.

5

Add a HubSpot (or Salesforce, Sheets, etc.) Action to write the extracted scores and signals to your CRM record.

6

Test each step end-to-end with a real tl;dv recording, then turn on the Zap.

Watch out for: Zapier has step data size limits that can truncate very long transcripts. For meetings over 60 minutes, consider storing the transcript in cloud storage and passing a reference URL instead of inline text. Use mode: "sync" so Semarize returns results inline - Zapier doesn't natively support polling loops.
Learn more about Zapier automation
n8nSelf-hosted workflows

tl;dv → n8n → Semarize → Database

Poll tl;dv for new meetings on a schedule or receive webhook events, fetch transcripts, send each one to Semarize for analysis, then write the structured scores and signals to your database. n8n's native loop support handles pagination and batch processing.

Example Workflow
Webhook - TranscriptReady
Receives tl;dv webhook event
Method: POST
Path: /tldv-transcript
Auth: Header auth
HTTP Request - Fetch Transcript
GET /v1alpha1/meetings/:id/transcript
Method: GET
URL: https://api.tldv.io/v1alpha1/meetings/{{$json.meeting_id}}/transcript
Header: x-api-key
Code - Reassemble Transcript
Concatenate segments into plain text
Join: segments[].text by speaker
HTTP Request - Semarize
POST /v1/runs (sync)
URL: https://api.semarize.com/v1/runs
Auth: Bearer smz_live_...
Body: { kit_code, mode: "sync", input: { transcript } }
Scores & signals returned
Postgres - Insert Row
Write structured output to database
Table: meeting_evaluations
Columns: meeting_id, score, action_items, risk_flag

Setup steps

1

Add a Webhook node as the workflow trigger. Set the HTTP method to POST, define a path (e.g. /tldv-transcript), and optionally add header authentication. Register this URL in your tl;dv webhook settings for the TranscriptReady event.

2

Add an HTTP Request node to fetch the transcript from tl;dv. Set method to GET, URL to https://api.tldv.io/v1alpha1/meetings/{{$json.meeting_id}}/transcript, and add your x-api-key header.

3

Add a Code node (JavaScript) to reassemble the transcript segments into a single string. Join each segment's text, prefixed by speaker name and timestamp.

4

Add another HTTP Request node to send the transcript to Semarize. Set method to POST, URL to https://api.semarize.com/v1/runs. Add your API key as a Bearer token. Set kit_code, mode to "sync", and map the transcript into input.transcript.

5

Add a Code node to extract the brick values from the Semarize response - overall_score, action_items, risk_flag, evidence, confidence.

6

Add a Postgres (or MySQL / HTTP Request) node to write the structured output. Use meeting_id as the primary key for upserts.

7

Activate the workflow. Test with a real tl;dv recording to verify the full pipeline works end to end.

Watch out for: Use meeting IDs as deduplication keys to prevent reprocessing if webhooks fire more than once. You can also use a Cron trigger as an alternative - poll GET /v1alpha1/meetings every hour and compare against your processed list.
Learn more about n8n automation
MakeVisual automation with branching

tl;dv → Make → Semarize → CRM + Slack

Receive tl;dv webhook events in Make, fetch the full transcript, send it to Semarize for structured analysis, then use a Router to branch the scored output - alert on risk flags via Slack and write all signals to your CRM.

Example Scenario
Webhook - tl;dv Event
TranscriptReady event received
Module: Custom Webhook
Payload: meeting_id, title
HTTP - Fetch Transcript
GET /v1alpha1/meetings/:id/transcript
Method: GET
URL: https://api.tldv.io/v1alpha1/meetings/{{meeting_id}}/transcript
Header: x-api-key
HTTP - Semarize
POST /v1/runs (sync)
URL: https://api.semarize.com/v1/runs
Auth: Bearer smz_live_...
Body: { kit_code, mode: "sync", input: { transcript } }
Structured output
Router - Branch on Risk Flag
Route by Semarize output
Branch 1: IF risk_flag.value = true
Branch 2: ALL (fallthrough)
Branch 1 - Risk detected
Slack - Alert Channel
Notify team about flagged meeting
Channel: #meeting-alerts
Message: Risk on {{title}}, score: {{score}}
Branch 2 - All meetings
HubSpot - Update Record
Write all scored signals to Contact
AI Score: {{overall_score}}
Risk Flag: {{risk_flag}}
Action Items: {{action_items}}

Setup steps

1

Create a new Scenario. Add a Custom Webhook module as the trigger. Copy the webhook URL and register it in your tl;dv settings for the TranscriptReady event.

2

Add an HTTP module to fetch the transcript. Set method to GET, URL to https://api.tldv.io/v1alpha1/meetings/{{meeting_id}}/transcript, and add your x-api-key header.

3

Add a Text Aggregator or JSON module to reassemble the transcript segments into a single text string suitable for analysis.

4

Add another HTTP module to send the transcript to Semarize. Set URL to https://api.semarize.com/v1/runs, add your Bearer token, and set kit_code, mode to "sync", and input.transcript from the previous step. Parse the response as JSON.

5

Add a Router module. Define Branch 1 with a filter: bricks.risk_flag.value equals true. Leave Branch 2 as a fallthrough (no filter).

6

On Branch 1, add a Slack module to alert your team when risk is detected. Map the score, risk flag, and meeting title into the message.

7

On Branch 2, add a HubSpot (or Salesforce) module to write all brick values (score, risk_flag, action_items) to the contact or deal record.

8

Test the scenario with a real tl;dv recording. Monitor the first few runs in Make's execution log, then activate the schedule.

Watch out for: Each API call counts as an operation. A scenario processing 20 meetings uses ~60 operations (fetch transcript + Semarize + CRM per meeting). Use mode: "sync" to avoid needing a polling loop for each run.
Learn more about Make automation

What you can build

What You Can Do With tl;dv Data in Semarize

Custom scoring frameworks, cross-meeting aggregation, ramp measurement, and building your own tools on structured conversation signals.

Knowledge-Grounded Demo Accuracy Scoring

Factual Verification for Sales Demos

What Semarize generates

feature_claim_accurate = falsepricing_current = truecompetitive_claim_verified = falseknowledge_gap_area = "integration_limits"

Your AEs record every demo. Scoring frameworks can tell you whether they followed the methodology — but did they state things that were factually correct? Run every demo transcript through a knowledge-grounded kit against your current product documentation, pricing sheet, and competitive battlecard. Semarize verifies whether feature claims were accurate, whether pricing references were current, and whether competitive positioning followed the approved battlecard. After scoring 150 demos, the data shows that 23% of demos include at least one outdated feature claim and 11% reference pricing from the previous quarter. Product marketing gets a weekly accuracy report — corrections happen within days.

Learn more about Sales Coaching
Demo Effectiveness Scorecard100 demos scored · Last 30 days
Sarah K.
Demo-to-Proposal34%
Demo Score82/100
Pain acknowledged Buying signals Competitive diff
Marcus T.
Demo-to-Proposal18%
Demo Score61/100
Feature relevance Pain acknowledged Buying signals
Priya R.
Demo-to-Proposal41%
Demo Score91/100
Pain acknowledged Feature relevance Competitive diff
AEs scoring >75 on pain_acknowledged have 2.5x higher demo-to-proposal rate

Prospect Objection Pattern Mining

Cross-Call Objection Intelligence

What Semarize generates

objection_type = "competitor"response_quality = 31resolution = "unresolved"frequency = 42%

Your sales leadership wants to understand which objections come up most often and how well reps handle them. Objections are scattered across hundreds of call recordings with no way to categorize or compare them at scale. Run 6 months of transcripts through an objection analysis kit. Semarize extracts objection_type (pricing, timing, competitor, authority), objection_response_quality, and resolution_outcome for every objection in every call. A quarterly report reveals that "we're already using [Competitor X]" appears in 42% of lost deals but reps only handle it effectively 31% of the time. Enablement builds a targeted objection handling playbook.

Learn more about Data Science
Objection Analysis - 6 Month Report1,240 calls analysed
Competitor Weakest
Frequency in lost deals42%
Handling effectiveness31%
Pricing
Frequency in lost deals28%
Handling effectiveness64%
Timing
Frequency in lost deals18%
Handling effectiveness72%
Authority
Frequency in lost deals12%
Handling effectiveness58%
“We’re already using [Competitor X]” appears in 42% of lost deals — reps handle it effectively only 31% of the time

Renewal Risk Early Warning System

Proactive Churn Detection

What Semarize generates

sentiment_trajectory = -33escalation_language = truefeature_complaints = 4competitor_exploration = true

Your CS team records QBRs and check-ins. The real question is whether you can detect risk early enough to act on it. Run every customer meeting through a renewal risk kit. Semarize tracks sentiment_trajectory across meetings, detects escalation_language, monitors feature_complaint_density, and flags competitor_exploration. When a customer who scored 85 on satisfaction three months ago drops to 52 and mentions “evaluating alternatives,” the system fires an alert to the CS director. The save conversation happens 6 weeks before renewal — not 6 days.

Learn more about Customer Success
#cs-risk-alerts
Semarize BotAPP10:47 AM

Renewal risk alertAcme Corp sentiment dropped 33 points over 4 months

Churn Risk Detected

Account: Acme Corp — Enterprise

Sentiment: 85 → 52 (Nov–Feb)

Signals: escalation language, competitor mention

Renewal: 6 weeks away

From last QBR

“We’ve been evaluating alternatives that might better fit our current workflow…”

Custom Interview Evaluation Platform

Structured Candidate Scoring

Vibe-coded

What Semarize generates

technical_depth = 78communication_clarity = 85problem_solving = 62culture_fit = 71

A hiring manager vibe-codes a Retool app that scores interview recordings from tl;dv. Each interview gets run through a structured evaluation kit. Semarize scores technical_depth (did the candidate demonstrate expertise?), communication_clarity, problem_solving_approach, and culture_alignment. Every interviewer's feedback is standardised — no more "I got a good vibe" vs. detailed writeups. The hiring committee reviews structured scorecards side-by-side. Interview bias drops measurably because every candidate is evaluated on the same criteria with evidence from the transcript.

Learn more about QA & Compliance
Interview EvaluationVibe-coded in Retool
Jordan ChenSenior Engineer · Round 2
Hire
Technical Depth78
Communication Clarity85
Problem Solving62
Culture Alignment71
vs. Other Candidates (avg)
+10 pts above avg
Every interviewer scores the same criteria · Evidence-backed from transcript

Watch out for

Common Challenges & Gotchas

These are the issues that come up most often when teams start extracting transcripts from tl;dv at scale.

Alpha-stage API (v1alpha1)

The tl;dv API is in alpha. Endpoint shapes, authentication methods, and response formats may change without deprecation notice. Pin to a version, validate responses defensively, and monitor the changelog.

Business Plan requirement

API access is gated behind the Business Plan. Teams on Free or Pro plans cannot access the API at all - there is no workaround. Confirm your plan tier before building any integration.

Transcript processing delay

Transcripts are generated asynchronously after a meeting ends. Attempting to fetch a transcript too soon will return empty or incomplete data. Use the TranscriptReady webhook instead of polling immediately after a meeting.

Webhook delivery reliability

Webhook events can be missed due to network issues, endpoint downtime, or processing delays. Implement idempotency checks using meeting IDs and consider a periodic polling fallback to catch any events your webhook handler missed.

Speaker label accuracy

Speaker identification is not always perfect. Multiple participants, poor audio, or guest users who are not registered in the workspace can lead to misattributed segments. Validate labels before using them for per-speaker analysis.

Rate limits and pagination

The API enforces rate limits that may vary as the product matures. Implement exponential backoff and respect pagination cursors. For bulk operations, pace requests conservatively - the alpha API may have lower limits than you expect.

Cross-platform meeting ID mapping

tl;dv records meetings from Zoom, Google Meet, and Teams. Mapping a tl;dv meeting ID back to the original platform's meeting ID requires careful handling of the metadata. Build a lookup table if you need to correlate across systems.

FAQ

Frequently Asked Questions

Explore

Explore Semarize