Skip to content

Instantly share code, notes, and snippets.

@quintonwall
Created June 4, 2025 15:57
Show Gist options
  • Save quintonwall/a671504759ee398fe8d6b1aa36562f4e to your computer and use it in GitHub Desktop.
Save quintonwall/a671504759ee398fe8d6b1aa36562f4e to your computer and use it in GitHub Desktop.
Google Meet Airbyte Connector
version: 6.48.15
type: DeclarativeSource
description: Solves https://github.com/airbytehq/airbyte/issues/45995
check:
type: CheckStream
stream_names:
- transcripts
definitions:
streams:
recordings:
type: DeclarativeStream
name: recordings
retriever:
type: SimpleRetriever
decoder:
type: JsonDecoder
paginator:
type: DefaultPaginator
page_token_option:
type: RequestOption
field_name: pageToken
inject_into: request_parameter
pagination_strategy:
type: CursorPagination
cursor_value: "{{ response.get('nextPageToken') }}"
stop_condition: "{{ response.get('nextPageToken') is not defined }}"
requester:
$ref: "#/definitions/base_requester"
path: conferenceRecords
http_method: GET
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- items
primary_key:
- id
schema_loader:
type: InlineSchemaLoader
schema:
$ref: "#/schemas/recordings"
transcripts:
type: DeclarativeStream
name: transcripts
retriever:
type: SimpleRetriever
decoder:
type: JsonDecoder
paginator:
type: DefaultPaginator
page_token_option:
type: RequestOption
field_name: pageToken
inject_into: request_parameter
pagination_strategy:
type: CursorPagination
cursor_value: "{{ response.get('nextPageToken') }}"
stop_condition: "{{ response.get('nextPageToken') is not defined }}"
requester:
$ref: "#/definitions/base_requester"
path: conferenceRecords/{{ config['conferencerecord'] }}/transcripts
http_method: GET
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- items
primary_key:
- id
schema_loader:
type: InlineSchemaLoader
schema:
$ref: "#/schemas/transcripts"
base_requester:
type: HttpRequester
url_base: https://meet.googleapis.com/v2/
authenticator:
type: OAuthAuthenticator
client_id: "{{ config[\"client_id\"] }}"
grant_type: refresh_token
client_secret: "{{ config[\"client_secret\"] }}"
refresh_token: "{{ config[\"client_refresh_token_2\"] }}"
refresh_request_body: {}
token_refresh_endpoint: https://oauth2.googleapis.com/token
streams:
- $ref: "#/definitions/streams/transcripts"
- $ref: "#/definitions/streams/recordings"
spec:
type: Spec
connection_specification:
type: object
$schema: http://json-schema.org/draft-07/schema#
required:
- client_id
- client_secret
- client_refresh_token_2
properties:
client_id:
type: string
order: 0
title: Client ID
airbyte_secret: true
client_secret:
type: string
order: 1
title: Client secret
airbyte_secret: true
conferencerecord:
type: string
order: 3
title: Conference Record
client_refresh_token_2:
type: string
order: 2
title: Refresh token
airbyte_secret: true
additionalProperties: true
metadata:
assist:
docsUrl: https://developers.google.com/calendar/api/v3/reference
testedStreams:
recordings:
hasRecords: false
streamHash: 79a735cad388f0dc015bf233b0cdde61b71765b6
hasResponse: true
primaryKeysAreUnique: true
primaryKeysArePresent: true
responsesAreSuccessful: true
transcripts:
hasRecords: false
streamHash: 123a3af9c7dd1e8b527d4eb04f1760f763f74ce2
hasResponse: true
primaryKeysAreUnique: true
primaryKeysArePresent: true
responsesAreSuccessful: false
autoImportSchema:
recordings: true
transcripts: true
schemas:
recordings:
type: object
$schema: http://json-schema.org/draft-07/schema#
properties: {}
additionalProperties: true
transcripts:
type: object
$schema: http://json-schema.org/schema#
required:
- id
properties:
id:
type: string
end:
type:
- object
- "null"
properties:
dateTime:
type:
- string
- "null"
timeZone:
type:
- string
- "null"
etag:
type:
- string
- "null"
kind:
type:
- string
- "null"
start:
type:
- object
- "null"
properties:
dateTime:
type:
- string
- "null"
timeZone:
type:
- string
- "null"
status:
type:
- string
- "null"
created:
type:
- string
- "null"
creator:
type:
- object
- "null"
properties:
self:
type:
- boolean
- "null"
email:
type:
- string
- "null"
iCalUID:
type:
- string
- "null"
summary:
type:
- string
- "null"
updated:
type:
- string
- "null"
htmlLink:
type:
- string
- "null"
sequence:
type:
- number
- "null"
attendees:
type:
- array
- "null"
items:
type:
- object
- "null"
properties:
self:
type:
- boolean
- "null"
email:
type:
- string
- "null"
organizer:
type:
- boolean
- "null"
responseStatus:
type:
- string
- "null"
eventType:
type:
- string
- "null"
organizer:
type:
- object
- "null"
properties:
self:
type:
- boolean
- "null"
email:
type:
- string
- "null"
reminders:
type:
- object
- "null"
properties:
overrides:
type:
- array
- "null"
items:
type:
- object
- "null"
properties:
method:
type:
- string
- "null"
minutes:
type:
- number
- "null"
useDefault:
type:
- boolean
- "null"
hangoutLink:
type:
- string
- "null"
conferenceData:
type:
- object
- "null"
properties:
entryPoints:
type:
- array
- "null"
items:
type:
- object
- "null"
properties:
uri:
type:
- string
- "null"
label:
type:
- string
- "null"
entryPointType:
type:
- string
- "null"
conferenceId:
type:
- string
- "null"
conferenceSolution:
type:
- object
- "null"
properties:
key:
type:
- object
- "null"
properties:
type:
type:
- string
- "null"
name:
type:
- string
- "null"
iconUri:
type:
- string
- "null"
guestsCanModify:
type:
- boolean
- "null"
additionalProperties: true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment