← Harvest + Google Drive integrations

Add File Sharing Preference with Google Drive API on New Timesheet Entry from Harvest API

Pipedream makes it easy to connect APIs for Google Drive, Harvest and 1000+ other apps remarkably fast.

Trigger workflow on
New Timesheet Entry from the Harvest API
Next, do this
Add File Sharing Preference with the Google Drive API
No credit card required
Into to Pipedream
Watch us build a workflow
Watch us build a workflow
7 min
Watch now ➜

Trusted by 500,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 Harvest trigger and Google Drive 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 Timesheet Entry trigger
    1. Connect your Harvest account
    2. Configure Polling interval
    3. Select a Account ID
  3. Configure the Add File Sharing Preference action
    1. Connect your Google Drive account
    2. Optional- Select a Drive
    3. Select a File
    4. Optional- Select a Role
    5. Optional- Select a Type
    6. Optional- Configure Domain
    7. Optional- Configure Email Address
  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 notifications when a new timesheet entry is created
Version:0.0.4
Key:harvest-new-timesheet-entry

Harvest Overview

The Harvest API allows developers to programmatically access data and objects
in Harvest, a web-based time tracking application. With the API, developers can
create applications that submit and retrieve time tracking data, as well as
automate various aspects of the Harvest user experience.

Some examples of what you can build using the Harvest API include:

  • A time tracking application that automatically submits time tracking data to
    Harvest on behalf of the user
  • A reporting application that retrieves time tracking data from Harvest and
    presents it in various charts and graphs
  • An integration with a third-party project management application that pulls
    in time tracking data from Harvest to provide a more complete picture of
    project progress

Trigger Code

import harvest from "../../harvest.app.mjs";
import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform";

export default {
  key: "harvest-new-timesheet-entry",
  name: "New Timesheet Entry",
  description: "Emit new notifications when a new timesheet entry is created",
  version: "0.0.4",
  type: "source",
  props: {
    harvest,
    timer: {
      label: "Polling interval",
      description: "Pipedream will poll Harvest API on this schedule",
      type: "$.interface.timer",
      default: {
        intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL,
      },
    },
    db: "$.service.db",
    accountId: {
      propDefinition: [
        harvest,
        "accountId",
      ],
    },
  },
  dedupe: "unique",
  async run() {
    const data = [];
    let lastDateChecked = this.harvest.getLastDateChecked(this.db);
    if (!lastDateChecked) {
      lastDateChecked = new Date().toISOString();
      this.harvest.setLastDateChecked(this.db, lastDateChecked);
    }
    const entries = await this.harvest.listTimeEntriesPaginated({
      page: 1,
      updatedSince: lastDateChecked,
      accountId: this.accountId,
    });
    for await (const entry of entries) {
      data.push(entry);
    }
    data && data.reverse().forEach((entry) => {
      this.harvest.setLastDateChecked(this.db, entry.updated_at);
      this.$emit(entry,
        {
          id: entry.id,
          summary: `Task: ${entry.task.name} - ${entry.spent_date} ${entry.started_time || ""} ${entry.ended_time
            ? " to " + entry.ended_time
            : ""}`,
          ts: Date.parse(entry.updated_at),
        });
    });
  },
};

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
HarvestharvestappThis component uses the Harvest app.
Polling intervaltimer$.interface.timer

Pipedream will poll Harvest API on this schedule

N/Adb$.service.dbThis component uses $.service.db to maintain state between executions.
Account IDaccountIdstringSelect a value from the drop down menu.

Trigger Authentication

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

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

About Harvest

Online Time Tracking and Invoicing Software

Action

Description:Add a [sharing](https://support.google.com/drive/answer/7166529) permission to the sharing preferences of a file and provide a sharing URL. [See the docs](https://developers.google.com/drive/api/v3/reference/permissions/create) for more information
Version:0.1.0
Key:google_drive-add-file-sharing-preference

Google Drive Overview

Using the Google Drive API, you can build applications that:

  • Create and manage files and folders
  • Download and upload files
  • Share and organize files
  • Search for files
  • Track changes to files
  • And much more!

Action Code

import googleDrive from "../../google_drive.app.mjs";

/**
 * Uses Google Drive API to create a permission for a file. The role granted by
 * the permission is one of `owner`,`organizer`,`fileOrganizer`,
 * `writer`,`commenter`, `reader`. See the [Google Drive API Reference for
 * Permissions](https://bit.ly/2XKKG1X) for more information.
 */
export default {
  key: "google_drive-add-file-sharing-preference",
  name: "Add File Sharing Preference",
  description:
    "Add a [sharing](https://support.google.com/drive/answer/7166529) permission to the sharing preferences of a file and provide a sharing URL. [See the docs](https://developers.google.com/drive/api/v3/reference/permissions/create) for more information",
  version: "0.1.0",
  type: "action",
  props: {
    googleDrive,
    drive: {
      propDefinition: [
        googleDrive,
        "watchedDrive",
      ],
      optional: true,
    },
    fileId: {
      propDefinition: [
        googleDrive,
        "fileId",
        (c) => ({
          drive: c.drive,
        }),
      ],
      optional: false,
      description: "The file to share",
    },
    role: {
      propDefinition: [
        googleDrive,
        "role",
      ],
    },
    type: {
      propDefinition: [
        googleDrive,
        "type",
      ],
    },
    domain: {
      propDefinition: [
        googleDrive,
        "domain",
      ],
    },
    emailAddress: {
      propDefinition: [
        googleDrive,
        "emailAddress",
      ],
    },
  },
  async run({ $ }) {
    const {
      fileId,
      role,
      type,
      domain,
      emailAddress,
    } = this;
    // Create the permission for the file
    await this.googleDrive.createPermission(fileId, {
      role,
      type,
      domain,
      emailAddress,
    });

    // Get the file to get the `webViewLink` sharing URL
    const resp = await this.googleDrive.getFile(this.fileId);
    const webViewLink = resp.webViewLink;
    $.export("$summary", `Successfully added a sharing permission to the file, "${resp.name}"`);
    return webViewLink;
  },
};

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 DrivegoogleDriveappThis component uses the Google Drive app.
DrivedrivestringSelect a value from the drop down menu.
FilefileIdstringSelect a value from the drop down menu.
RolerolestringSelect a value from the drop down menu:ownerorganizerfileOrganizerwritercommenterreader
TypetypestringSelect a value from the drop down menu:usergroupdomainanyone
Domaindomainstring

The domain of the G Suite organization to which this permission refers if Type is domain (e.g., yourcomapany.com)

Email AddressemailAddressstring

The email address of the user or group to which this permission refers if Type is user or group

Action Authentication

Google Drive uses OAuth authentication. When you connect your Google Drive account, Pipedream will open a popup window where you can sign into Google Drive 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 Drive API.

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

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

About Google Drive

Internet-related services and products

More Ways to Connect Google Drive + Harvest

Create Timesheet Entry with Harvest API on Changes to Specific Files (Shared Drive) from Google Drive API
Google Drive + Harvest
 
Try it
Create Timesheet Entry with Harvest API on Changes to Specific Files from Google Drive API
Google Drive + Harvest
 
Try it
Create Timesheet Entry with Harvest API on New or Modified Comments from Google Drive API
Google Drive + Harvest
 
Try it
Create Timesheet Entry with Harvest API on New or Modified Files from Google Drive API
Google Drive + Harvest
 
Try it
Create Timesheet Entry with Harvest API on New or Modified Folders from Google Drive API
Google Drive + Harvest
 
Try it
New Invoice Entry from the Harvest API

Emit new notifications when a new invoice is created

 
Try it
New Time Entry from the Harvest API

Emit new notifications when a new time entry is created

 
Try it
New Timesheet Entry from the Harvest API

Emit new notifications when a new timesheet entry is created

 
Try it
Changes to Specific Files from the Google Drive API

Watches for changes to specific files, emitting an event any time a change is made to one of those files. To watch for changes to shared drive files, use the Changes to Specific Files (Shared Drive) source instead.

 
Try it
Changes to Specific Files (Shared Drive) from the Google Drive API

Watches for changes to specific files in a shared drive, emitting an event any time a change is made to one of those files

 
Try it
Create Timesheet Entry with the Harvest API
 
Try it
Get Projects with the Harvest API

Retrieve data for a project or projects. See docs here

 
Try it
Start Time Entry with the Harvest API

Restart a stopped timer entry. See docs here

 
Try it
Stop Time Entry with the Harvest API

Stop a timer entry. See docs here

 
Try it
Add File Sharing Preference with the Google Drive API

Add a sharing permission to the sharing preferences of a file and provide a sharing URL. See the docs for more information

 
Try it