← YouTube (Data API) + Google Sheets integrations

Add Single Row with Google Sheets API on New Videos in Subscribed Channels from YouTube (Data API) API

Pipedream makes it easy to connect APIs for Google Sheets, YouTube (Data API) and 1000+ other apps remarkably fast.

Trigger workflow on
New Videos in Subscribed Channels from the YouTube (Data API) API
Next, do this
Add Single Row with the Google Sheets API
No credit card required
Into to Pipedream
Watch us build a workflow
Watch us build a workflow
7 min
Watch now ➜

Trusted by 400,000+ developers from startups to Fortune 500 companies

Adyen logo
Brex logo
Carta logo
Checkr logo
Chameleon logo
DevRev logo
LinkedIn logo
Netflix logo
New Relic logo
OnDeck logo
Replicated logo
Scale AI logo
Teamwork logo
Warner Bros. logo
Xendit logo

Developers Pipedream

Getting Started

This integration creates a workflow with a YouTube (Data API) trigger and Google Sheets action. When you configure and deploy the workflow, it will run on Pipedream's servers 24x7 for free.

  1. Select this integration
  2. Configure the New Videos in Subscribed Channels trigger
    1. Connect your YouTube (Data API) account
    2. Configure Polling interval
  3. Configure the Add Single Row action
    1. Connect your Google Sheets account
    2. Optional- Select a Drive
    3. Select a Spreadsheet
    4. Select a Sheet Name
    5. Select a Does the first row of the sheet have headers?
  4. Deploy the workflow
  5. Send a test event to validate your setup
  6. Turn on the trigger

Details

This integration uses pre-built, source-available components from Pipedream's GitHub repo. These components are developed by Pipedream and the community, and verified and maintained by Pipedream.

To contribute an update to an existing component or create a new component, create a PR on GitHub. If you're new to Pipedream component development, you can start with quickstarts for trigger span and action development, and then review the component API reference.

Trigger

Description:Emit new event for each new YouTube video posted to a subscribed channel.
Version:0.0.4
Key:youtube_data_api-new-videos-in-subscribed-channels

YouTube (Data API) Overview

There are lots of things you can build using the YouTube API! Here are just a
few examples:

  • A YouTube video player
  • A YouTube search engine
  • A tool to help you find popular videos on YouTube
  • A way to keep track of your favorite YouTube videos
  • A way to find new and interesting YouTube channels to watch

Trigger Code

import youtubeDataApi from "../../youtube_data_api.app.mjs";
import common from "./common.mjs";

/**
 * Uses [YouTube API](https://developers.google.com/youtube/v3/docs) to get the authenticated user's
 * subscriptions with a `totalItemCount` for each. The user's subscriptions are used to get the
 * subscribed-to channels. Then the ID of the 'uploads' playlist in each channel is used to get
 * playlist items of recently uploaded videos. Process is taken roughly from [this stackoverflow
 * comment](https://bit.ly/3lp4uRS).
 *
 * Sequence: Subscriptions -> Channels -> PlaylistItems
 *
 * The YouTube API allows [listing channels](https://bit.ly/3Fh5Hm2) using a comma-separated list of
 * channel IDs, so channels are fetched using a single series of paginated requests. To list
 * playlist items [PlaylistItems](https://bit.ly/2WN7EW2), a separate request must be made for each
 * channel's 'uploads' playlist. To limit the number of requests, playlist items are fetched only
 * for channels (subscriptions) whose [totalItemCount](https://bit.ly/3ldUYAR) is greater than the
 * last recorded `totalItemCount`.
 */
export default {
  ...common,
  key: "youtube_data_api-new-videos-in-subscribed-channels",
  name: "New Videos in Subscribed Channels",
  description: "Emit new event for each new YouTube video posted to a subscribed channel.",
  version: "0.0.4",
  type: "source",
  dedupe: "unique",
  props: {
    youtubeDataApi,
    ...common.props,
  },
};

Trigger Configuration

This component may be configured based on the props defined in the component code. Pipedream automatically prompts for input values in the UI and CLI.
LabelPropTypeDescription
YouTube (Data API)youtubeDataApiappThis component uses the YouTube (Data API) app.
N/Adb$.service.dbThis component uses $.service.db to maintain state between component invocations.
Polling intervaltimer$.interface.timer

Pipedream will poll the YouTube API on this schedule

Trigger Authentication

YouTube (Data API) uses OAuth authentication. When you connect your YouTube (Data API) account, Pipedream will open a popup window where you can sign into YouTube (Data API) and grant Pipedream permission to connect to your account. Pipedream securely stores and automatically refreshes the OAuth tokens so you can easily authenticate any YouTube (Data API) API.

Pipedream requests the following authorization scopes when you connect your account:

emailprofilehttps://www.googleapis.com/auth/youtube.readonlyhttps://www.googleapis.com/auth/youtube.uploadhttps://www.googleapis.com/auth/youtube

About YouTube (Data API)

Online video platform

Action

Description:Add a single row of data to Google Sheets
Version:2.0.9
Key:google_sheets-add-single-row

Google Sheets Overview

Some examples of things you can build using the Google Sheets API include:

  • A web app that lets users input data into a Google Sheet
  • A script that automatically updates a Google Sheet with data from another
    source
  • A tool that generates graphs and charts from data in a Google Sheet
  • A service that sends data from a Google Sheet to another API or application

Action Code

import googleSheets from "../../google_sheets.app.mjs";
import { ConfigurationError } from "@pipedream/platform";

export default {
  key: "google_sheets-add-single-row",
  name: "Add Single Row",
  description: "Add a single row of data to Google Sheets",
  version: "2.0.9",
  type: "action",
  props: {
    googleSheets,
    drive: {
      propDefinition: [
        googleSheets,
        "watchedDrive",
      ],
    },
    sheetId: {
      propDefinition: [
        googleSheets,
        "sheetID",
        (c) => ({
          driveId: googleSheets.methods.getDriveId(c.drive),
        }),
      ],
      description: "",
      withLabel: true,
    },
    sheetName: {
      propDefinition: [
        googleSheets,
        "sheetName",
        (c) => ({
          sheetId: c.sheetId?.value || c.sheetId,
        }),
      ],
      description: "",
    },
    hasHeaders: {
      type: "string",
      label: "Does the first row of the sheet have headers?",
      description: "If the first row of your document has headers we'll retrieve them to make it easy to enter the value for each column.",
      options: [
        "Yes",
        "No",
      ],
      reloadProps: true,
    },
  },
  async additionalProps() {
    const sheetId = this.sheetId?.value || this.sheetId;
    const props = {};
    if (this.hasHeaders === "Yes") {
      const { values } = await this.googleSheets.getSpreadsheetValues(sheetId, `${this.sheetName}!1:1`);
      if (!values[0]?.length) {
        throw new ConfigurationError("Cound not find a header row. Please either add headers and click \"Refresh fields\" or adjust the action configuration to continue.");
      }
      for (let i = 0; i < values[0]?.length; i++) {
        props[`col_${i.toString().padStart(4, "0")}`] = {
          type: "string",
          label: values[0][i],
          optional: true,
        };
      }
    } else if (this.hasHeaders === "No") {
      props.myColumnData = {
        type: "string[]",
        label: "Values",
        description: "Provide a value for each cell of the row. Google Sheets accepts strings, numbers and boolean values for each cell. To set a cell to an empty value, pass an empty string.",
      };
    }
    return props;
  },
  async run({ $ }) {
    const sheetId = this.sheetId?.value || this.sheetId;
    let cells;
    if (this.hasHeaders === "Yes") {
      // TODO: If we could create a variable using this.allColumns in additionalProps, we dont need
      // to call getSpreadsheetValues here again.
      const { values: rows } = await this.googleSheets.getSpreadsheetValues(sheetId, `${this.sheetName}!1:1`);
      const [
        headers,
      ] = rows;
      cells = headers
        .map((_, i) => `col_${i.toString().padStart(4, "0")}`)
        .map((column) => this[column] ?? "");
    } else {
      cells = this.googleSheets.sanitizedArray(this.myColumnData);
    }

    // validate input
    if (!cells || !cells.length) {
      throw new Error("Please enter an array of elements in `Cells / Column Values`.");
    } else if (!Array.isArray(cells)) {
      throw new Error("Cell / Column data is not an array. Please enter an array of elements in `Cells / Column Values`.");
    } else if (Array.isArray(cells[0])) {
      throw new Error("Cell / Column data is a multi-dimensional array. A one-dimensional is expected. If you're trying to send multiple rows to Google Sheets, search for the action to add multiple rows to Sheets.");
    }

    const {
      arr,
      convertedIndexes,
    } = this.googleSheets.arrayValuesToString(cells);

    const data = await this.googleSheets.addRowsToSheet({
      spreadsheetId: sheetId,
      range: this.sheetName,
      rows: [
        arr,
      ],
    });

    let summary = `Added 1 row to [${this.sheetId?.label || this.sheetId} (${data.updatedRange})](https://docs.google.com/spreadsheets/d/${sheetId}).`;
    if (convertedIndexes.length > 0) {
      summary += " We detected something other than a string/number/boolean in at least one of the fields and automatically converted it to a string.";
    }
    $.export("$summary", summary);

    return data;
  },
};

Action Configuration

This component may be configured based on the props defined in the component code. Pipedream automatically prompts for input values in the UI.

LabelPropTypeDescription
Google SheetsgoogleSheetsappThis component uses the Google Sheets app.
DrivedrivestringSelect a value from the drop down menu.
SpreadsheetsheetIdstringSelect a value from the drop down menu.
Sheet NamesheetNamestringSelect a value from the drop down menu.
Does the first row of the sheet have headers?hasHeadersstringSelect a value from the drop down menu:YesNo

Action Authentication

Google Sheets uses OAuth authentication. When you connect your Google Sheets account, Pipedream will open a popup window where you can sign into Google Sheets and grant Pipedream permission to connect to your account. Pipedream securely stores and automatically refreshes the OAuth tokens so you can easily authenticate any Google Sheets API.

Pipedream requests the following authorization scopes when you connect your account:

emailprofilehttps://www.googleapis.com/auth/drive

About Google Sheets

With Google Sheets, you can create, edit, and collaborate wherever you are

More Ways to Connect Google Sheets + YouTube (Data API)

Upsert Row with Google Sheets API on New Videos in Subscribed Channels from YouTube (Data API) API
YouTube (Data API) + Google Sheets
 
Try it
Find Row with Google Sheets API on New Videos in Subscribed Channels from YouTube (Data API) API
YouTube (Data API) + Google Sheets
 
Try it
Add Multiple Rows with Google Sheets API on New Videos in Subscribed Channels from YouTube (Data API) API
YouTube (Data API) + Google Sheets
 
Try it
Clear Cell with Google Sheets API on New Videos in Subscribed Channels from YouTube (Data API) API
YouTube (Data API) + Google Sheets
 
Try it
Clear Row with Google Sheets API on New Videos in Subscribed Channels from YouTube (Data API) API
YouTube (Data API) + Google Sheets
 
Try it
New Liked Videos from the YouTube (Data API) API

Emit new event for each new Youtube video liked by the authenticated user.

 
Try it
New Subscriber from the YouTube (Data API) API

Emit new event for each new Youtube subscriber to user Channel.

 
Try it
New Subscription from the YouTube (Data API) API

Emit new event for each new subscription from authenticated user.

 
Try it
New Videos from the YouTube (Data API) API

Emit new event for each new Youtube video the user posts.

 
Try it
New Videos by Location from the YouTube (Data API) API

Emit new event for each new YouTube video tied to a location.

 
Try it
Channel Statistics with the YouTube (Data API) API

Returns statistics from my YouTube Channel or by id. See the docs for more information

 
Try it
List Activities with the YouTube (Data API) API

Returns a list of channel activity events that match the request criteria. See the docs for more information

 
Try it
List Playlists with the YouTube (Data API) API

Returns a collection of playlists that match the API request parameters. See the docs for more information

 
Try it
List Videos with the YouTube (Data API) API

Returns a list of videos that match the API request parameters. See the docs for more information

 
Try it
Update Playlist with the YouTube (Data API) API

Modifies a playlist. For example, you could change a playlist's title, description, or privacy status. If you are submitting an update request, and your request does not specify a value for a property that already has a value, the property's existing value will be deleted. See the docs for more information

 
Try it