Connect your call data

Recordings can be dropped in by hand for an immediate result, or pulled automatically from the storage you already use.

Two ways in

MethodBest forWhere
Manual uploadPilots, spot checks, one-off escalations, testing configuration changes.Sidebar Overview Upload Call
Connected sourceProduction. The platform scans your storage on a schedule and ingests whatever is new.Sidebar Manage Integrations

Most teams use both: a connected source keeps the pipeline fed, and the upload screen stays handy for ad-hoc calls a supervisor wants looked at immediately.

Supported audio

The upload accepts MP3, WAV, WEBM, MP4, M4A and OPUS files.

  • Mono or stereo. Stereo recordings with the agent and customer on separate channels give the cleanest separation — talk ratio, cross talk and per-speaker sentiment are all sharper. Mono is handled too; speakers are separated during processing.
  • Filenames matter a little. A name starting with in or out is read as call direction (Inbound / Outbound) on the call screen, so keep your dialer’s naming convention if it has one.
  • Multiple files at once. Select or drop as many as you like; the tray reports each one.

Uploading by hand

  1. Open the upload screen Either Upload Call in the sidebar or Upload Audio in the top bar.
  2. Check the target workspace The Uploading to control at the top right of the screen names the workspace the files will land in. Change it there if it's wrong — the calls inherit that workspace's language, masking, dead-air and goal settings.
  3. Add files Drag them onto the drop zone or click to browse. Each selected file shows its size and format, and can be removed before you commit; Clear all drops the lot.
  4. Upload The button reports the count (Upload 12 Files). You can navigate away immediately — the floating tray keeps reporting progress and confirms when the batch is done.
  5. Wait for processing Uploading is not the same as processing. Calls appear in Recent Calls on the dashboard once transcription and scoring finish. Anything that fails is listed with a reason under Failed Calls.
The Upload Audio screen: drag-and-drop zone with accepted formats on the left, Import from Cloud panel listing connected sources on the right
The upload screen. The drop zone lists the accepted formats; the Uploading to control naming the target workspace sits above it, top right of the screen.
Import from cloud, without a schedule

The right-hand panel of the upload screen lists your cloud sources. Use it to browse a connected account and pull specific files across, instead of waiting for the next scheduled scan.

Import from Cloud panel listing Google Drive, Dropbox, Box, Google Cloud, Amazon S3 and Wasabi with their connection state
Each source shows whether it is connected. Imported files land in the current workspace and are processed automatically once the transfer finishes.

Connected sources

Sidebar Manage Integrations is the control room. The top of the screen shows all six sources with a connected/not-connected state and how many schedules each one has. Below it, Scheduled Scans lists every configured folder.

Connected Sources row: Google Drive, Amazon S3, Dropbox, GCP Bucket, Wasabi and Box, each a card showing its connection state and schedule count
All six sources on one row. A connected card carries a green dot, its schedule count and a Manage link; an unconnected one offers Connect instead.
Scheduled Scans table with source, folder name, workspace, schedule, last scan and row actions
Every configured folder, with the workspace its calls land in and when it last ran. The play control on a row runs that scan immediately rather than waiting for its next slot.
SourceHow it authenticatesYou’ll need
Google DriveOAuth pop-upA Google account with access to the recordings folder
DropboxOAuth pop-upA Dropbox account
BoxOAuth pop-upA Box account
Amazon S3Bucket policy + event notificationBucket name, and permission to edit its policy and notifications
GCP BucketService-account credentials fileA JSON key with read access to the bucket
WasabiAccess key pairBucket name, access key, secret key and region

Each entry in Scheduled Scans shows the source, folder, target workspace, scan frequency and last scan time, with two actions: Edit Schedule (the pencil) and Run Now (the play button) to trigger an immediate scan without waiting.

Google Drive, Dropbox and Box

  1. Start the connection Connect Source at the top right of the Integrations screen, or the Connect button on that source's card.
  2. Authorise in the pop-up Sign in to the provider and grant read access. Allow pop-ups for the site if nothing opens.
  3. Pick the folder and workspace Browse to the folder holding your recordings and choose which workspace its calls belong to.
  4. Set the scan frequency Every 4, 8, 12 or 24 hours — or None if you'd rather trigger scans yourself.
The pop-up is the provider's

Steps two and three run on Google's, Dropbox's or Box's own consent page, so what you see there is their screen rather than ours. You come back to Integrations once access is granted, and the schedule can be changed at any time afterwards from the pencil on the folder's row in Scheduled Scans.

The Update Scheduled Time dialog with a scan-frequency selector and a Schedule auto-upload toggle
Scan frequency — every 4, 8, 12 or 24 hours, or none — plus the auto-upload toggle that decides whether a scan ingests what it finds or only lists it.

Amazon S3

S3 is event-driven rather than polled: your bucket notifies the platform when an object is created, so calls arrive as they’re written. The in-app wizard walks it with screenshots and supplies the two ARNs you need — they’re specific to your account, so take them from the wizard rather than from anywhere else.

  1. Choose the workspace and name the bucket In the pop-up, select the target workspace and enter the S3 bucket name.
  2. Add the bucket policy In the AWS console open your bucket → PermissionsBucket policyEdit, paste the policy the wizard shows, and save. It grants the Heartbeat processing role read access to that bucket only.
  3. Create the event notification Bucket → PropertiesEvent notificationsCreate event notification. Name it, tick All object create events, set the destination to SNS topic, and paste the SNS ARN from the wizard.
  4. Finish New recordings written to the bucket now flow in automatically.
Why S3 has no Run Now

Because it's push-based, S3 rows in Scheduled Scans show Not Applicable under Action — there's no scan to schedule or trigger. If S3 calls stop arriving, check the bucket's event notification rather than the schedule.

GCP Bucket

  1. Set the schedule and workspace Pick a scan frequency (4 / 8 / 12 / 24 hours) and the target workspace.
  2. Upload credentials Provide the service-account JSON key file for an account with read access to the bucket.
  3. Select the folder Choose the folder holding recordings, then save.

Creating the service-account key

In the Google Cloud console, for the project that owns the bucket:

  1. Open Service Accounts IAM & AdminService Accounts.
    IAM and Admin menu with Service Accounts selected
    Service accounts live under IAM & Admin.
  2. Create the service account
    Create service account button
    One dedicated account for Heartbeat, not a shared one.
  3. Grant read-only storage access Search for and select Storage Object Viewer. Read is all the platform needs — do not grant write or admin.
    Selecting the Storage Object Viewer role
    Storage Object Viewer. Anything wider is more access than the integration uses.
  4. Open its keys From the account's actions menu, Manage keys.
    Manage keys option on the service account
    Manage keys, on the account you just created.
    Add key menu
    Add key.
  5. Create a JSON key
    Create new key dialog with JSON selected
    Key type JSON. The file downloads once and cannot be re-downloaded.
  6. Upload it to Heartbeat The downloaded file is what the GCP connection asks for.
    Uploading the downloaded JSON credentials file
    Treat the file like a password — see Source credentials.

Wasabi

  1. Set the schedule and workspace Frequency and destination workspace, as above.
  2. Choose the region Pick the region your bucket lives in — the full Wasabi region list is in the dropdown, including Asia Pacific (Mumbai).
  3. Enter bucket and keys Bucket name, access key and secret key, then submit.

Creating the read-only key pair

  1. Create a user In the Wasabi console, UsersCreate User, and give it a name.
    Create User in the Wasabi console
    A dedicated user for Heartbeat keeps the access revocable on its own.
    Entering the user name
    Name it for what it is, so nobody deletes it later wondering what it was.
  2. Put it in a group
    Creating a group for the user
    Group, then save and continue.
  3. Attach read-only access Attach WasabiReadOnlyAccess. The integration never writes to your bucket.
    Attaching the WasabiReadOnlyAccess policy
    Read-only is sufficient and is what you should grant.
    Reviewing the policy before creating the user
    Review, then create.
  4. Create the access key Open the user, go to User Access Keys and create one.
    User access keys section
    Access keys are per user.
    Creating the access key
    Creating the key pair.
  5. Copy the pair into Heartbeat Download the CSV, then paste the access key and secret key into the Wasabi connection.
    Downloading the CSV with the access and secret keys
    The secret is shown once. Store it in your secret manager, not in a ticket.

Scan schedules

  • Frequency options None, every 4 hours, every 8 hours, every 12 hours, or every 24 hours. None keeps the connection but only ingests when you press Run Now.
  • Changing a schedule The pencil icon on the row opens Scan frequency. Changes apply from the next cycle.
  • Run Now Triggers an immediate scan of that folder — the fastest way to confirm a new connection works.
  • Last Scan When the folder was last checked. Not Scanned means it hasn't run yet; if it stays that way, the credentials or folder selection are the first thing to check.

What happens after ingest

Once a recording is in, the platform:

  • transcribes it and separates agent from customer speech;
  • scores text sentiment and audio emotion, and measures duration, talk ratio, silence, dead air and cross talk;
  • flags notable moments — risky, non-compliant or notably good;
  • computes the call score from your opening / handling / closing weightage;
  • masks PII in the transcript if masking is on for that workspace.

Processing counts are on Usage — Succeeded, Running, Queued, Failed and Total Calls. Minutes are drawn from your plan balance as calls process.

Attaching your own metadata

Calls can carry your own fields — campaign, queue, disposition, customer ID, anything you already track. Two routes, both on the dashboard’s Recent Calls header:

  • Export downloads the current call list as a spreadsheet, so you can fill in metadata columns against real call IDs.
  • Upload takes that spreadsheet back in and applies it in bulk.
  • The pencil action on any single row edits that call’s metadata directly.

Metadata is worth the effort: fields you attach become filterable in the advanced filter builder, which is how you get from “all calls” to “collections calls over six minutes with negative sentiment”.