Install
openclaw skills install @agentpmt/plaud-recordings-to-google-drive-syncPlaud Recordings to Google Drive Sync: Keeps a Google Sheet and Drive folder called "Plaud Recordings" in sync with your Plaud account, with transcripts. Finds or creates the sheet (Recording ID, Recording Link, Status, Recording Type, Transcript Link, Recorded At) and the Drive folder, lists every Plaud recording, and for each one not already logged (matched on Plaud's durable recording id): claims a row in the sheet, downloads the audio to Drive, obtains a transcript — reusing Plaud's own dia.
openclaw skills install @agentpmt/plaud-recordings-to-google-drive-syncLast updated: 2026-08-03.
If the current date is more than 7 days after the last updated date, reinstall this skill from skills.sh or ClawHub before relying on endpoints, schemas, setup steps, or examples.
Keeps a Google Sheet and Drive folder called "Plaud Recordings" in sync with your Plaud account, with transcripts. Finds or creates the sheet (Recording ID, Recording Link, Status, Recording Type, Transcript Link, Recorded At) and the Drive folder, lists every Plaud recording, and for each one not already logged (matched on Plaud's durable recording id): claims a row in the sheet, downloads the audio to Drive, obtains a transcript — reusing Plaud's own diarized transcript via get_transcript when one exists, otherwise transcribing through Speech-to-Text's background tasks (submit, then poll get_task; diarization on for recordings up to 20 minutes) — saves the transcript to the same folder as " - transcription.json", distills the recording's purpose from the first ~30 seconds of speech into a Recording Type, and finalises the row with the id, Drive audio link, status, type, transcript link, and the recording's original date and time. Safe to re-run and safe to run concurrently: each recording is claimed in the sheet before any upload or transcription happens, and the claim step re-reads the Recording ID column at that moment rather than trusting the set read at the start of the run, so two overlapping runs cannot process or upload the same recording twice. Recordings over 60 minutes are downloaded but not transcribed; a null audio URL is retried before being treated as unavailable.
../what-is-agentpmt.../agentpmt-account-mcp-rest-api-setup.Core AgentPMT setup skills:
openclaw skills install what-is-agentpmtnpx skills add AgentPMT/agent-skills --skill what-is-agentpmtopenclaw skills install agentpmt-account-mcp-rest-api-setupnpx skills add AgentPMT/agent-skills --skill agentpmt-account-mcp-rest-api-setupskills.sh install script:
npx skills add AgentPMT/agent-skills --skill what-is-agentpmt
npx skills add AgentPMT/agent-skills --skill agentpmt-account-mcp-rest-api-setup
Call AgentPMT-Workflow-Skills with start_workflow before the first step and end_workflow after the final step.
{"action":"start_workflow","skill_id":"plaud-recordings-to-google-drive-sync"}
{"action":"end_workflow","skill_id":"plaud-recordings-to-google-drive-sync","rating":5,"comment":"completed"}
../google-sheets.npx skills add AgentPMT/agent-skills --skill google-sheets.../google-drive.npx skills add AgentPMT/agent-skills --skill google-drive.../google-sheets.npx skills add AgentPMT/agent-skills --skill google-sheets.../plaud.npx skills add AgentPMT/agent-skills --skill plaud.../plaud.npx skills add AgentPMT/agent-skills --skill plaud.ERRORS: a '500 Internal Server Error' almost always means the file_id is wrong or the recording no longer exists — it does NOT mean Plaud is down. Re-check the id and retry once; if it still fails, output {fetch_failed: true}, skip the remaining steps for this recording, and do NOT log a row for it (leaving it unlogged makes the next run retry it). Separately, 'OAuth credential expired or revoked', 'Credential for requirement Plaud OAuth is outdated / connection schema has changed', and a 422 missing_credentials response all mean the SAME thing: the Plaud credential must be re-authorised. Do not spend retries on them — call AgentPMT-Send-Human-Request with request_type enable_tool and stop the run.
AUDIO URL: read 'presigned_url'. When it comes back null, that is USUALLY A TRANSIENT signing failure, not a permanent state — the tool says so in its own response. Wait about 60 seconds and call get_file again, up to 3 attempts total. Only if it is still null after those retries, record presigned_url as unavailable and continue, because a transcript can still be produced from Plaud's own copy.
PLAUD'S OWN TRANSCRIPT: do NOT try to read transcripts out of get_file's 'source_list' — on current accounts that array is routinely empty even for recordings Plaud has processed. Instead call action 'get_transcript' with file_id and block 'transaction' (the raw transcript, with speaker names and timestamps). It returns one page of utterances at a time: whenever the response carries a 'next_cursor', call get_transcript again passing it as 'cursor' until no cursor remains, collecting every utterance. Block 'transaction_polish' returns Plaud's AI-cleaned transcript in the same per-utterance shape if you prefer it. Set has_plaud_transcript true ONLY when this yields at least one non-empty utterance; an empty result or an error here is normal and simply means Plaud has no transcript, so fall through to Speech-to-Text.
Output: presigned_url (or unavailable), recording id, start_at (naive ISO, UTC), duration (ms), has_plaud_transcript, and the collected utterances array when present.
../google-sheets.npx skills add AgentPMT/agent-skills --skill google-sheets.STEP 1 — RE-READ, DO NOT TRUST THE EARLIER SET: call action 'read' on the Plaud Recordings spreadsheet (spreadsheet_id and sheet_name from the Find or Create Sheet step) with range 'A2:A' RIGHT NOW. The logged-ID set gathered at the start of the run is stale by this point — a concurrent run may have logged this very recording in the meantime. Use this fresh read.
STEP 2: if the current recording id already appears in that fresh column A, another run owns it. Output {already_claimed: true}, append NOTHING, and skip every remaining step for this recording — no audio upload, no transcription, no transcript upload, no row update.
STEP 3: otherwise immediately append one row with action 'append_rows' and value_input_option 'USER_ENTERED', as an object keyed by headers: {'Recording ID': the current recording id, 'Recording Link': '', 'Status': 'claimed', 'Recording Type': '', 'Transcript Link': '', 'Recorded At': the recording's start_at exactly as Plaud returned it (naive ISO timestamp, UTC)}. Output {already_claimed: false}.
The blank Recording Link and the placeholder 'claimed' status are filled in by the Update Status & Type step at the end. A row still reading 'claimed' after a run means that run died partway and the recording needs attention.
../google-drive.npx skills add AgentPMT/agent-skills --skill google-drive.../speech-to-text-with-speakers.npx skills add AgentPMT/agent-skills --skill speech-to-text-with-speakers.IF already_claimed is true: do nothing, output {skipped: true, reason: 'claimed by another run'}. IF has_plaud_transcript is true: do NOT call this tool at all — output {used_plaud_transcript: true} and reuse the utterances collected by get_transcript in the Get Plaud File step. IF presigned_url is unavailable AND has_plaud_transcript is false: there is nothing to transcribe — output {skipped: true, reason: 'no audio url'}.
OTHERWISE call Speech-to-Text: choose the action by recording duration (up to 15 min 'transcribe_quick', up to 30 min 'transcribe_standard', up to 60 min 'transcribe_extended'; over 60 minutes DO NOT transcribe — output {skipped: true, reason: 'exceeds 60 minute limit'}). Pass public_url set to the presigned_url, output_format 'json', and enable_diarization true ONLY when the recording duration is 20 minutes or less (diarization is provider-limited to 20 minutes — for longer recordings set enable_diarization false). The submit response is a task envelope: if its status is already 'completed', use outputs[0] directly; if 'processing', poll action 'get_task' with the returned task_id every 15 seconds until status is 'completed' or 'failed'. Short clips can still take a couple of minutes, so keep polling rather than giving up.
A task can complete SUCCESSFULLY with an empty result (transcript '', words [], speakers []) when the audio contains no speech. That is a success, not a failure — pass it through so the transcript file is still saved and the row is still finished.
On genuine failure, check error_details.recommended_actions and retry once with the recommended larger tier if one is suggested; otherwise treat as skipped with the error as the reason. Output {used_plaud_transcript: false} plus outputs[0]'s json_data (transcript, words, speakers), result_file_id, and result_signed_url.
../google-drive.npx skills add AgentPMT/agent-skills --skill google-drive.WHEN used_plaud_transcript is true: base64-encode the utterances array collected via get_transcript in the Get Plaud File step and pass it as source_content_base64 together with that filename. This works regardless of how long the recording is.
WHEN the transcript came from Speech-to-Text: pass the completed task's result_signed_url as source_file_url, or result_file_id as source_file_id if the signed URL is unavailable.
Read uploaded_file.web_view_link from the response and output the transcript file's Drive link.
../google-sheets.npx skills add AgentPMT/agent-skills --skill google-sheets.Otherwise finalise this recording's row in the Plaud Recordings spreadsheet (spreadsheet_id and sheet_name from the Find or Create Sheet step) using action 'update_row' with key_column 'Recording ID' and key_value set to the current recording id. ALWAYS set 'Recording Link' to the Drive audio link from the Upload Audio to Drive step (or '' when the audio was unavailable) — the claim row was written with it blank. Then set the rest according to the outcome:
This step is what clears the placeholder 'claimed' status, so it must run for every recording this run actually claimed.
../google-sheets; ClawHub https://clawhub.ai/agentpmt/google-sheets; skills.sh npx skills add AgentPMT/agent-skills --skill google-sheets; marketplace https://www.agentpmt.com/marketplace/google-sheets-api../google-drive; ClawHub https://clawhub.ai/agentpmt/google-drive; skills.sh npx skills add AgentPMT/agent-skills --skill google-drive; marketplace https://www.agentpmt.com/marketplace/google-drive../plaud; ClawHub https://clawhub.ai/agentpmt/plaud; skills.sh npx skills add AgentPMT/agent-skills --skill plaud; marketplace https://www.agentpmt.com/marketplace/plaud../speech-to-text-with-speakers; ClawHub https://clawhub.ai/agentpmt/speech-to-text-with-speakers; skills.sh npx skills add AgentPMT/agent-skills --skill speech-to-text-with-speakers; marketplace https://www.agentpmt.com/marketplace/speech-to-text-with-speakerswhat-is-agentpmt, page: https://clawhub.ai/agentpmt/what-is-agentpmt; skills.sh: npx skills add AgentPMT/agent-skills --skill what-is-agentpmt)agentpmt-account-mcp-rest-api-setup, page: https://clawhub.ai/agentpmt/agentpmt-account-mcp-rest-api-setup; skills.sh: npx skills add AgentPMT/agent-skills --skill agentpmt-account-mcp-rest-api-setup)