1Thing

Integration Documentation

Zoom Integration

Last updated: April 30, 2026

Overview

1Thing CRM integrates with Zoom to let real estate agents schedule meetings, place phone calls, and auto-log call activity without leaving the CRM. The integration covers two Zoom products:

  • Zoom Meetings — agents create scheduled Zoom meetings directly from CRM activities (showings, listing presentations, buyer consultations).
  • Zoom Phone — click-to-call from any contact or lead, auto-logged call history, inbound call pop-ups, voicemail transcription, and call recording playback.

Both features are delivered through a single Zoom OAuth app. Each end-user (an agent or broker) authorizes 1Thing with their own Zoom account. Authorization is revocable at any time from within 1Thing or directly from the Zoom App Marketplace.

Adding the App

Zoom Meetings and Zoom Phone are connected from Settings → Integrations as two separate cards, since they use different scopes and a user may have one product but not the other.

Step-by-step: Connect Zoom Meetings

  1. Sign in to 1Thing CRM at 1thing.ca.
  2. Click the gear icon at the bottom of the left sidebar to open Settings.
  3. Click Integrations in the Settings sub-navigation.
  4. Find the Zoom Meetings card and click Connect Zoom.
  5. You will be redirected to Zoom's OAuth consent screen listing the permissions 1Thing is requesting. Click Allow.
  6. Zoom redirects you back to 1Thing. A success banner confirms the connection. The Zoom Meetings card now shows your connected email address and a Disconnect button.

Prerequisite: A Zoom account (Free or paid). No Zoom Phone license is required for Meetings.

Step-by-step: Connect Zoom Phone

  1. From the left sidebar, go to Settings → Integrations.
  2. Find the Zoom Phone card and click Connect.
  3. Review and approve the Zoom Phone scopes on Zoom's consent screen. Click Allow.
  4. After approval, the Zoom Phone card shows as connected and displays the phone number assigned to your Zoom Phone user.

Prerequisite: A Zoom account with an active Zoom Phone license. If your account does not have a Zoom Phone license, the consent screen will return an error — this is expected behavior.

Pilot note: During the pilot phase, your Zoom admin email must be on 1Thing's allow list before you can complete the consent screen. If you see “app not approved for your account,” contact support@1thing.ca and we'll add you within one business day.

For troubleshooting the connect flow, see the Troubleshooting section below.

Usage

Scheduling a Zoom Meeting from a CRM Activity

Use case: An agent wants to run a virtual showing or buyer consultation via Zoom and have the meeting link automatically attached to the CRM activity.

Prerequisites: Zoom Meetings connected (see above). The CRM activity must have a future date and time set.

  1. Click Activities in the left sidebar, then Add Activity.
  2. Set the Type to Meeting, enter a subject, and set a future date/time. Save the activity.
  3. Open the activity detail panel and click Generate Zoom Link.
  4. 1Thing calls POST /v2/users/me/meetings on the Zoom API. The resulting join URL is saved to the activity and displayed in the Meeting section.
  5. The agent can copy the link and share it with the invited contact. Cloud recording is enabled automatically so a meeting transcript is attached once the call ends.

Placing an Outbound Call (Zoom Phone)

Use case: An agent wants to call a lead directly from the CRM and have the call automatically logged as a Call Activity.

Prerequisites: Zoom Phone connected. Zoom desktop or mobile app installed on the same device as the browser.

  1. Open any contact, lead, or deal in the CRM and click the phone icon next to a phone number.
  2. 1Thing launches the Zoom app via the zoomphonecall:// URI scheme with the number pre-dialled. The call is placed by the Zoom client.
  3. An active-call banner appears in the CRM. To end the call from within the CRM, click End Call in the banner. 1Thing issues a phone:write:user_call_command to terminate the call via the Zoom API.
  4. When the call ends (from either side), Zoom fires the phone.caller_ended webhook. 1Thing automatically creates a Call Activity on the matched contact with direction, duration, and timestamp.

Receiving an Inbound Call (Zoom Phone)

Use case: A prospect calls the agent's Zoom Phone number. The agent wants to see who is calling and have the call automatically logged.

Prerequisites: Zoom Phone connected. Agent has a personal Zoom Phone number (not a shared line).

  1. When a call comes in, Zoom sends a phone.callee_ringing webhook to 1Thing.
  2. A pop-up appears in the CRM showing the caller's number and, if the number matches an existing contact or lead, their name and record link.
  3. The agent answers in the Zoom app. Call state transitions (connected, ended) update the CRM banner in real time.
  4. When the call ends, a Call Activity is automatically created and linked to the matched contact or lead.

Viewing Logged Call History

Use case: An agent wants to review all past calls with a specific contact or across their book of business.

Prerequisites: At least one call must have been placed or received with Zoom Phone connected.

  • Contact / Lead panel: Open any contact or lead → scroll to the Call History section. Each entry shows direction, duration, date/time, and outcome. Click an entry to see full details and recording playback.
  • Activities page: Click Activities in the sidebar, then filter by Type = Call to see all logged calls.
  • Deal panel: Open any deal → the Activity timeline shows all calls made to contacts linked to that deal.

1Thing uses the phone:read:list_call_logs and phone:read:call_log scopes to back-fill recent call history when Zoom Phone is first connected.

Voicemail Transcription

Use case: A prospect left a voicemail. The agent wants to read the transcript without listening to the full recording.

Prerequisites: Zoom Phone connected. Caller must have left a voicemail on the agent's Zoom Phone number.

  1. Zoom fires the phone.voicemail_received webhook. 1Thing downloads the audio using phone:read:voicemail, sends it to OpenAI Whisper for transcription, then discards the audio. Only the transcript is retained.
  2. An in-app notification appears in the bell icon at the top right of the dashboard.
  3. Open the contact or lead → Call History → locate the entry with status Voicemail → click it. The detail panel shows the plain-text transcript and an audio player (streamed live from Zoom).

Voicemail audio sent to OpenAI is not used to train OpenAI models, per OpenAI's API data-usage policy. All voicemails can also be listed via the phone:read:list_voicemails scope.

Call Recording Playback

Use case: An agent wants to replay a recorded call to review what was discussed.

Prerequisites: Call recording must be enabled in the agent's Zoom Phone account settings.

  1. When a recording finishes processing, Zoom fires the phone.recording_completed webhook. 1Thing stores a reference to the recording using phone:read:list_recordings.
  2. Open the Call Activity → click Play. 1Thing streams the recording directly from Zoom's API via a short-lived signed URL using phone:read:call_recording. The recording audio is never copied to 1Thing's servers.

Meeting Transcript (Cloud Recording)

Use case: After a virtual showing via Zoom, an agent wants the meeting transcript attached to the CRM activity automatically.

Prerequisites: Zoom Meetings connected. Meeting must have been created through 1Thing (which enables cloud recording automatically).

  1. After the meeting ends, Zoom processes the cloud recording (typically 1–10 minutes). Once done, Zoom fires the recording.completed webhook.
  2. 1Thing fetches the VTT transcript file using cloud_recording:read:recording and parses it into plain text. The full list of available recordings is retrieved via cloud_recording:read:list_user_recordings.
  3. Open the CRM activity — the transcript is displayed in the Meeting section of the detail panel.

Scopes requested and why

1Thing requests the minimum OAuth scopes needed to deliver the features above. Every scope has a specific purpose.

User

  • user:read:user — identify the connected Zoom user after OAuth (email, user id) so 1Thing can link the Zoom account to the correct 1Thing user.

Meetings

  • meeting:write:meeting — create scheduled Zoom meetings on the agent's behalf when generating a meeting link from a CRM activity.

Cloud Recording

  • cloud_recording:read:list_user_recordings — list available recordings for a user to locate the transcript after a meeting ends.
  • cloud_recording:read:recording — fetch the VTT transcript file for a specific meeting recording.

Phone

  • phone:read:user — retrieve the agent's Zoom Phone user id and assigned phone number.
  • phone:read:list_call_logs — fetch the agent's call history to back-fill CRM call activities on first connect and display the call log.
  • phone:read:call_log — retrieve individual call detail records (duration, direction, outcome).
  • phone:read:list_recordings — list recordings linked to a call so the agent can select one for playback.
  • phone:read:call_recording — stream a specific recording for playback inside the CRM. Audio is not copied to 1Thing storage.
  • phone:read:voicemail — download voicemail audio for Whisper transcription. Audio is discarded after transcription; only the transcript is retained.
  • phone:read:list_voicemails — list the agent's voicemails for display in the call history view.
  • phone:write:user_call_command — issue call commands (such as ending an active call) from the CRM's active-call banner, allowing agents to hang up without switching to the Zoom app.

Removing the App

You can remove 1Thing's Zoom access at any time using either method below.

Method 1 — Disconnect from within 1Thing

  1. Go to Settings → Integrations.
  2. Click Disconnect on the Zoom Meetings card to revoke Meetings access.
  3. Click Disconnect on the Zoom Phone card to revoke Phone access.
  4. Each disconnection is independent. Disconnecting Meetings does not affect Phone, and vice versa.

1Thing calls POST /oauth/revoke on the Zoom API immediately. The OAuth tokens are then deleted from our database. Webhook events for your account stop being processed within seconds.

Method 2 — Uninstall from Zoom App Marketplace

  1. Visit Zoom App Marketplace → Installed Apps.
  2. Find 1Thing CRM and click Remove.
  3. Zoom sends an app_deauthorized webhook event to our server. On receipt, 1Thing immediately deletes your Zoom OAuth access and refresh tokens, stops all webhook processing for your account, and acknowledges the deletion to Zoom's Data Compliance API as required by Marketplace policy.

What happens to your data after removal

  • OAuth tokens — deleted from our database immediately on disconnect.
  • Previously created Zoom meetings — the CRM activity records (including join URLs and meeting IDs) remain in your CRM. They are your data. 1Thing does not delete them automatically after disconnection.
  • Previously logged call activities — call logs, voicemail transcripts, and recording references remain in the CRM for your records.
  • Recording audio — 1Thing never stores recording audio, so nothing to delete on our side. Playback URLs will stop working once tokens are revoked.
  • To delete your CRM data entirely — email privacy@1thing.ca with a deletion request. We will permanently erase all your data within 30 days, as required by PIPEDA.

Data handling summary

The authoritative description of what 1Thing stores, for how long, and with whom we share it lives in our Privacy Policy. A short summary for Zoom-specific data:

  • OAuth tokens — stored encrypted in our Supabase-hosted database. Deleted on disconnect.
  • Meeting metadata (meeting id, join url, start time, duration) — stored alongside the CRM activity that created it.
  • Call metadata (direction, from/to numbers, duration, timestamps) — stored as a Call Activity in the CRM.
  • Recording audio — not stored in 1Thing. We store a Zoom-hosted reference URL and stream playback directly from Zoom.
  • Voicemail audio — downloaded briefly to process for transcription, then discarded. Only the transcript is retained.
  • Voicemail transcripts — generated by OpenAI Whisper (API, not used for training) and stored on the Call Activity.
  • Webhook payloads — processed to update call state; not retained as raw logs beyond transient server logs (30-day retention in Vercel function logs).

Troubleshooting

“This app is not approved for your Zoom account”

During the pilot phase, your Zoom admin email must be on 1Thing's allow list. Email support@1thing.ca with the email address you use to sign in to Zoom. We'll add you within one business day.

“Failed to connect Zoom” after clicking Allow

This usually indicates a transient OAuth redirect issue. Retry once from Settings → Integrations. If it persists, try revoking 1Thing in Zoom App Marketplace → Installed Apps and reconnecting from 1Thing. If the error continues, email support with the time of the attempt so we can check server logs.

Clicking the phone icon does nothing

The Zoom desktop app must be installed and running on the same machine as your browser. The zoomphonecall:// URI scheme only resolves if the Zoom client is installed. On iOS or Android, the Zoom mobile app must be installed.

Inbound calls aren't creating pop-ups

Three things must be true: (1) your Zoom account is connected in 1Thing (Settings → Integrations shows Connected), (2) Zoom's webhook configuration is validated on our side, and (3) the inbound call is reaching your personal Zoom Phone number (not a shared line). If (1) and (3) are correct, contact support — webhook issues are diagnosable from our server logs.

Voicemail transcription never appears

Transcription typically completes within two minutes of the voicemail being left. If more than 10 minutes have passed, contact support with the call time and voicemail sender number. The most common cause is a transient OpenAI API error, which we retry automatically up to three times.

I want to revoke access immediately

The fastest path is to uninstall 1Thing from Zoom App Marketplace. Zoom revokes our tokens immediately. 1Thing clears stale tokens from our database on the next API call. This method works even if you've lost access to your 1Thing account.

Support

Email support@1thing.ca for any question about the Zoom integration. We respond within four business hours, typically sooner. For data access, data deletion, or privacy requests, email privacy@1thing.ca — we reply within 30 days as required by PIPEDA.