← PostgreSQL + QuickBooks integrations

Update Customer with QuickBooks API on New Row Custom Query from PostgreSQL API

Pipedream makes it easy to connect APIs for QuickBooks, PostgreSQL and 2,000+ other apps remarkably fast.

Trigger workflow on
New Row Custom Query from the PostgreSQL API
Next, do this
Update Customer with the QuickBooks API
No credit card required
Intro to Pipedream
Watch us build a workflow
Watch us build a workflow
8 min
Watch now ➜

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

Adyen logo
Appcues logo
Bandwidth logo
Checkr logo
ChartMogul logo
Dataminr logo
Gopuff logo
Gorgias logo
LinkedIn logo
Logitech logo
Replicated logo
Rudderstack logo
SAS logo
Scale AI logo
Webflow logo
Warner Bros. logo
Adyen logo
Appcues logo
Bandwidth logo
Checkr logo
ChartMogul logo
Dataminr logo
Gopuff logo
Gorgias logo
LinkedIn logo
Logitech logo
Replicated logo
Rudderstack logo
SAS logo
Scale AI logo
Webflow logo
Warner Bros. logo

Developers Pipedream

Getting Started

This integration creates a workflow with a PostgreSQL trigger and QuickBooks 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 Row Custom Query trigger
    1. Connect your PostgreSQL account
    2. Configure Polling Interval
    3. Select a Schema
    4. Select a Table
    5. Select a Column
    6. Configure SQL Query
    7. Optional- Configure Values
  3. Configure the Update Customer action
    1. Connect your QuickBooks account
    2. Optional- Configure Display Name
    3. Optional- Configure Title
    4. Optional- Configure Given Name
    5. Optional- Configure Middle Name
    6. Optional- Configure Family Name
    7. Optional- Configure Suffix
    8. Optional- Configure Currency Reference Value
    9. Optional- Configure Currency Reference Name
    10. Optional- Configure Active
    11. Optional- Configure Alternate Phone Free Form Number
    12. Optional- Configure Ar Account Ref Name
    13. Optional- Configure Ar Account Ref Value
    14. Optional- Configure Balance
    15. Optional- Configure Balance With Job
    16. Optional- Configure Bill Addr City
    17. Optional- Configure Bill Addr Country
    18. Optional- Configure Bill Addr Country Sub Division Code
    19. Optional- Configure Bill Addr Id
    20. Optional- Configure Bill Addr Late
    21. Optional- Configure Bill Addr Line 1
    22. Optional- Configure Bill Addr Line 2
    23. Optional- Configure Bill Addr Line 3
    24. Optional- Configure Bill Addr Line 4
    25. Optional- Configure Bill Addr Line 5
    26. Optional- Configure Bill Addr Long
    27. Optional- Configure Bill Addr Postal Code
    28. Optional- Configure Bill With Parent
    29. Optional- Configure Business Number
    30. Optional- Configure Company Name
    31. Configure Customer Id
    32. Optional- Configure Customer Type Ref Value
    33. Optional- Configure Default Tax Code Name
    34. Optional- Configure Default Tax Code Value
    35. Optional- Configure Fax Free Form Number
    36. Optional- Configure G S T I N
    37. Optional- Select a Gst Registration Type
    38. Optional- Configure Is Project
    39. Optional- Configure Job
    40. Optional- Configure Mobile Free Form Number
    41. Optional- Configure Notes
    42. Optional- Configure Open Balance Date
    43. Optional- Configure Parent Ref Name
    44. Optional- Configure Parent Ref Value
    45. Optional- Configure Payment Method Ref Name
    46. Optional- Configure Payment Method Ref Value
    47. Optional- Select a Preferred Delivery Method
    48. Optional- Configure Primary Email Addr
    49. Optional- Configure Primary Phone Free Form Number
    50. Optional- Configure Primary Tax Identifier
    51. Optional- Configure Print On Check Name
    52. Optional- Configure Resale Num
    53. Optional- Configure Sale Term Ref Name
    54. Optional- Configure Sale Term Ref Value
    55. Optional- Configure Secondary Tax Identifier
    56. Optional- Configure Ship Addr City
    57. Optional- Configure Ship Addr Country
    58. Optional- Configure Ship Addr Country Sub Division Code
    59. Optional- Configure Ship Addr Id
    60. Optional- Configure Ship Addr Late
    61. Optional- Configure Ship Addr Line 1
    62. Optional- Configure Ship Addr Line 2
    63. Optional- Configure Ship Addr Line 3
    64. Optional- Configure Ship Addr Line 4
    65. Optional- Configure Ship Addr Line 5
    66. Optional- Configure Ship Addr Long
    67. Optional- Configure Ship Addr Postal Code
    68. Configure Sparse Update
    69. Configure Sync Token
    70. Optional- Configure Taxable
    71. Optional- Select a Tax Exemption Reason Id
    72. Optional- Configure Web Addr
    73. Optional- Configure Minor Version
  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 when new rows are returned from a custom query that you provide. [See the documentation](https://node-postgres.com/features/queries)
Version:2.0.5
Key:postgresql-new-row-custom-query

PostgreSQL Overview

On Pipedream, you can leverage the PostgreSQL app to create workflows that automate database operations, synchronize data across platforms, and react to database events in real-time. Think handling new row entries, updating records from webhooks, or even compiling reports on a set schedule. Pipedream's serverless platform provides a powerful way to connect PostgreSQL with a variety of apps, enabling you to create tailored automation that fits your specific needs.

Trigger Code

import common from "../common.mjs";

export default {
  ...common,
  name: "New Row Custom Query",
  key: "postgresql-new-row-custom-query",
  description: "Emit new event when new rows are returned from a custom query that you provide. [See the documentation](https://node-postgres.com/features/queries)",
  version: "2.0.5",
  type: "source",
  dedupe: "unique",
  props: {
    ...common.props,
    schema: {
      propDefinition: [
        common.props.postgresql,
        "schema",
      ],
    },
    table: {
      propDefinition: [
        common.props.postgresql,
        "table",
        (c) => ({
          schema: c.schema,
        }),
      ],
    },
    column: {
      propDefinition: [
        common.props.postgresql,
        "column",
        (c) => ({
          table: c.table,
          schema: c.schema,
        }),
      ],
    },
    query: {
      propDefinition: [
        common.props.postgresql,
        "query",
      ],
    },
    values: {
      propDefinition: [
        common.props.postgresql,
        "values",
      ],
    },
  },
  methods: {
    ...common.methods,
    generateMeta(row, column) {
      return {
        id: row[column],
        summary: "New Row",
        ts: Date.now(),
      };
    },
  },
  async run() {
    const {
      schema,
      table,
      column,
      query,
      values = [],
    } = this;

    if (!Array.isArray(values)) {
      throw new Error("No valid values provided. The values property must be an array.");
    }

    const numberOfValues = query?.match(/\$/g)?.length || 0;
    if (values.length !== numberOfValues) {
      throw new Error("The number of values provided does not match the number of values in the query.");
    }

    const isColumnUnique = await this.isColumnUnique(schema, table, column);
    if (!isColumnUnique) {
      throw new Error("The column selected contains duplicate values. Column must be unique");
    }

    const rows = await this.postgresql.executeQuery({
      text: query,
      values,
    });
    for (const row of rows) {
      const meta = this.generateMeta(row, column);
      this.$emit(row, meta);
    }
  },
};

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
PostgreSQLpostgresqlappThis component uses the PostgreSQL app.
N/Adb$.service.dbThis component uses $.service.db to maintain state between executions.
Polling Intervaltimer$.interface.timer

Pipedream will poll the API on this schedule

SchemaschemastringSelect a value from the drop down menu.
TabletablestringSelect a value from the drop down menu.
ColumncolumnstringSelect a value from the drop down menu.
SQL Queryquerystring

Your custom SQL Query using $1, $2... to represent values (eg. INSERT INTO users(name, email) VALUES($1, $2)

Valuesvaluesstring[]

List of values represented in your SQL Query above

Trigger Authentication

PostgreSQL uses API keys for authentication. When you connect your PostgreSQL account, Pipedream securely stores the keys so you can easily authenticate to PostgreSQL APIs in both code and no-code steps.

Before you connect to your PostgreSQL database from Pipedream, please make sure your database is either:

  1. Accessible from the public internet (You may need to add a firewall rule on 0.0.0.0/0 on port 5432), or
  2. Accessible from a static IP that you've configured from a VPC in Pipedream, and enabled the workflow to connect through that VPC

SSL Setup

Configure SSL on your PostgreSQL database by providing the CA (Certificate Authority), and choosing between Full Verification (default), or Skip Verification. Skipping verification is not recommended as this has serious security implications.

About PostgreSQL

PostgreSQL is a free and open-source relational database management system emphasizing extensibility and SQL compliance.

Action

Description:Updates a customer. [See docs here](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer#full-update-a-customer)
Version:0.1.3
Key:quickbooks-update-customer

QuickBooks Overview

The QuickBooks API allows for streamlined financial management within Pipedream's ecosystem, enabling automated accounting and data syncing across various platforms. With this API, you can manipulate invoices, manage sales receipts, handle expenses, and synchronize customer data. It's a robust tool for financial oversight and automation that can save time and reduce errors for businesses of all sizes.

Action Code

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

export default {
  key: "quickbooks-update-customer",
  name: "Update Customer",
  description: "Updates a customer. [See docs here](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer#full-update-a-customer)",
  version: "0.1.3",
  type: "action",
  props: {
    quickbooks,
    displayName: {
      propDefinition: [
        quickbooks,
        "displayName",
      ],
    },
    title: {
      propDefinition: [
        quickbooks,
        "title",
      ],
    },
    givenName: {
      propDefinition: [
        quickbooks,
        "givenName",
      ],
    },
    middleName: {
      propDefinition: [
        quickbooks,
        "middleName",
      ],
    },
    familyName: {
      propDefinition: [
        quickbooks,
        "familyName",
      ],
    },
    suffix: {
      propDefinition: [
        quickbooks,
        "suffix",
      ],
    },
    currencyRefValue: {
      propDefinition: [
        quickbooks,
        "currencyRefValue",
      ],
    },
    currencyRefName: {
      propDefinition: [
        quickbooks,
        "currencyRefName",
      ],
    },
    active: {
      description: "If true, this entity is currently enabled for use by QuickBooks. If there is an amount in `Customer.Balance` when setting this Customer object to inactive through the QuickBooks UI, a CreditMemo balancing transaction is created for the amount.",
      label: "Active",
      optional: true,
      type: "string",
    },
    alternatePhoneFreeFormNumber: {
      description: "Specifies the alternate phone number in free form.",
      label: "Alternate Phone Free Form Number",
      optional: true,
      type: "string",
    },
    arAccountRefName: {
      description: "Name of the accounts receivable account to be used for this customer. Each customer must have his own AR account. Applicable for France companies, only. Available when endpoint is evoked with the minorversion=3 query parameter. Query the Account name list resource to determine the appropriate Account object for this reference, where Account.AccountType=Accounts Receivable. Use `Account.Name` from that object for `ARAccountRef.name`.",
      label: "Ar Account Ref Name",
      optional: true,
      type: "string",
    },
    arAccountRefValue: {
      description: "Id of the accounts receivable account to be used for this customer. Each customer must have his own AR account. Applicable for France companies, only. Available when endpoint is evoked with the minorversion=3 query parameter. Query the Account name list resource to determine the appropriate Account object for this reference, where Account.AccountType=Accounts Receivable. Use `Account.Id` from that object for `ARAccountRef.value`.",
      label: "Ar Account Ref Value",
      optional: true,
      type: "string",
    },
    balance: {
      description: "Specifies the open balance amount or the amount unpaid by the customer. For the create operation, this represents the opening balance for the customer. When returned in response to the query request it represents the current open balance (unpaid amount) for that customer. Write-on-create.",
      label: "Balance",
      optional: true,
      type: "string",
    },
    balanceWithJob: {
      description: "Cumulative open balance amount for the Customer (or Job) and all its sub-jobs. Cannot be written to QuickBooks.",
      label: "Balance With Job",
      optional: true,
      type: "string",
    },
    billAddrCity: {
      description: "City name for the billing address.",
      label: "Bill Addr City",
      optional: true,
      type: "string",
    },
    billAddrCountry: {
      description: "Country name. For international addresses - countries should be passed as 3 ISO alpha-3 characters or the full name of the country.",
      label: "Bill Addr Country",
      optional: true,
      type: "string",
    },
    billAddrCountrySubDivisionCode: {
      description: "Region within a country for the billing address. For example, state name for USA, province name for Canada.",
      label: "Bill Addr Country Sub Division Code",
      optional: true,
      type: "string",
    },
    billAddrId: {
      description: "Unique identifier of the QuickBooks object for the billing address, used for modifying the address. \nThe BillAddr object represents the default billing address. If a physical address is updated from within the transaction object, the QuickBooks Online API flows individual address components differently into the Line elements of the transaction response then when the transaction was first created:\n* `Line1` and `Line2` elements are populated with the customer name and company name.\n* Original `Line1` through `Line5` contents, `City`, `SubDivisionCode`, and `PostalCode` flow into `Line3` through `Line5` as a free format strings.",
      label: "Bill Addr Id",
      optional: true,
      type: "string",
    },
    billAddrLate: {
      description: "Latitude coordinate of Geocode (Geospacial Entity Object Code). `INVALID` is returned for invalid addresses.",
      label: "Bill Addr Late",
      optional: true,
      type: "string",
    },
    billAddrLine1: {
      description: "First line of the billing address.",
      label: "Bill Addr Line 1",
      optional: true,
      type: "string",
    },
    billAddrLine2: {
      description: "Second line of the billing address.",
      label: "Bill Addr Line 2",
      optional: true,
      type: "string",
    },
    billAddrLine3: {
      description: "Third line of the billing address.",
      label: "Bill Addr Line 3",
      optional: true,
      type: "string",
    },
    billAddrLine4: {
      description: "Fourth line of the billing address.",
      label: "Bill Addr Line 4",
      optional: true,
      type: "string",
    },
    billAddrLine5: {
      description: "Fifth line of the billing address.",
      label: "Bill Addr Line 5",
      optional: true,
      type: "string",
    },
    billAddrLong: {
      description: "Longitude coordinate of Geocode (Geospacial Entity Object Code). `INVALID` is returned for invalid addresses.",
      label: "Bill Addr Long",
      optional: true,
      type: "string",
    },
    billAddrPostalCode: {
      description: "Postal code for the billing address. For example, zip code for USA and Canada.",
      label: "Bill Addr Postal Code",
      optional: true,
      type: "string",
    },
    billWithParent: {
      description: "If true, this Customer object is billed with its parent. If false, or null the customer is not to be billed with its parent. This attribute is valid only if this entity is a Job or sub Customer.",
      label: "Bill With Parent",
      optional: true,
      type: "boolean",
    },
    businessNumber: {
      description: "Also called, PAN (in India) is a code that acts as an identification for individuals, families and corporates, especially for those who pay taxes on their income.",
      label: "Business Number",
      optional: true,
      type: "string",
    },
    companyName: {
      description: "The name of the company associated with the person or organization.",
      label: "Company Name",
      optional: true,
      type: "string",
    },
    customerId: {
      description: "Unique identifier for the customer object to be updated.",
      label: "Customer Id",
      type: "string",
    },
    customerTypeRefValue: {
      description: "Id referencing to the customer type assigned to a customer. This field is only returned if the customer is assigned a customer type.",
      label: "Customer Type Ref Value",
      optional: true,
      type: "string",
    },
    defaultTaxCodeName: {
      description: "Id of the default tax code associated with this Customer object. Reference is valid if `Customer.Taxable` is set to true; otherwise, it is ignored. If automated sales tax is enabled (`Preferences.TaxPrefs.PartnerTaxEnabled` is set to true) the default tax code is set by the system and can not be overridden. Query the `TaxCode` name list resource to determine the appropriate `TaxCode` object for this reference. Use `TaxCode.Name` from that object for `DefaultTaxCodeRef.name`.",
      label: "Default Tax Code Name",
      optional: true,
      type: "string",
    },
    defaultTaxCodeValue: {
      description: "Id of the default tax code associated with this Customer object. Reference is valid if `Customer.Taxable` is set to true; otherwise, it is ignored. If automated sales tax is enabled (`Preferences.TaxPrefs.PartnerTaxEnabled` is set to true) the default tax code is set by the system and can not be overridden. Query the `TaxCode` name list resource to determine the appropriate `TaxCode` object for this reference. Use `TaxCode.Id` from that object for `DefaultTaxCodeRef.value`.",
      label: "Default Tax Code Value",
      optional: true,
      type: "string",
    },
    faxFreeFormNumber: {
      description: "Specifies the fax number in free form.",
      label: "Fax Free Form Number",
      optional: true,
      type: "string",
    },
    GSTIN: {
      description: "GSTIN is an identification number assigned to every GST registered business.",
      label: " G S T I N",
      optional: true,
      type: "string",
    },
    gstRegistrationType: {
      description: "For the filing of GSTR, transactions need to be classified depending on the type of customer to whom the sale is done. To facilitate this, we have introduced a new field as 'GST registration type'.\nPossible values are listed below, for their description [See the API Docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer#full-update-a-customer).\n* `GST_REG_REG`\n* `GST_REG_COMP`\n* `GST_UNREG`\n* `CONSUMER`\n* `OVERSEAS`\n* `SEZ`\n* `DEEMED`",
      label: "Gst Registration Type",
      optional: true,
      options: [
        "GST_REG_REG",
        "GST_REG_COMP",
        "GST_UNREG",
        "CONSUMER",
        "OVERSEAS",
        "SEZ",
        "DEEMED",
      ],
      type: "string",
    },
    isProject: {
      description: "If true, indicates this is a Project.",
      label: "Is Project",
      optional: true,
      type: "boolean",
    },
    job: {
      description: "If true, this is a Job or sub-customer. If false or null, this is a top level customer, not a Job or sub-customer.",
      label: "Job",
      optional: true,
      type: "boolean",
    },
    mobileFreeFormNumber: {
      description: "Specifies the mobile phone number in free form.",
      label: "Mobile Free Form Number",
      optional: true,
      type: "string",
    },
    notes: {
      description: "Free form text describing the Customer.",
      label: "Notes",
      optional: true,
      type: "string",
    },
    openBalanceDate: {
      description: "Date of the Open Balance for the create operation. Write-on-create.",
      label: "Open Balance Date",
      optional: true,
      type: "string",
    },
    parentRefName: {
      description: "Name referencing to a Customer object that is the immediate parent of the Sub-Customer/Job in the hierarchical Customer:Job list. Required for the create operation if this object is a sub-customer or Job. Query the Customer name list resource to determine the appropriate Customer object for this reference. Use `Customer.Name` from that object for `ParentRef.name`.",
      label: "Parent Ref Name",
      optional: true,
      type: "string",
    },
    parentRefValue: {
      description: "Id referencing to a Customer object that is the immediate parent of the Sub-Customer/Job in the hierarchical Customer:Job list. Required for the create operation if this object is a sub-customer or Job. Query the Customer name list resource to determine the appropriate Customer object for this reference. Use `Customer.Id` from that object for `ParentRef.value`.",
      label: "Parent Ref Value",
      optional: true,
      type: "string",
    },
    paymentMethodRefName: {
      description: "Id referencing a PaymentMethod object associated with this Customer object. Query the PaymentMethod name list resource to determine the appropriate PaymentMethod object for this reference. Use `PaymentMethod.Name` from that object for `PaymentMethodRef.name`.",
      label: "Payment Method Ref Name",
      optional: true,
      type: "string",
    },
    paymentMethodRefValue: {
      description: "Id referencing a PaymentMethod object associated with this Customer object. Query the PaymentMethod name list resource to determine the appropriate PaymentMethod object for this reference. Use `PaymentMethod.Id` from that object for `PaymentMethodRef.value`.",
      label: "Payment Method Ref Value",
      optional: true,
      type: "string",
    },
    preferredDeliveryMethod: {
      description: "Preferred delivery method. Values are `Print`, `Email`, or `None`.",
      label: "Preferred Delivery Method",
      optional: true,
      options: [
        "Print",
        "Email",
        "None",
      ],
      type: "string",
    },
    primaryEmailAddr: {
      description: "Primary email address.",
      label: "Primary Email Addr",
      optional: true,
      type: "string",
    },
    primaryPhoneFreeFormNumber: {
      description: "Specifies the primary phone number in free form.",
      label: "Primary Phone Free Form Number",
      optional: true,
      type: "string",
    },
    primaryTaxIdentifier: {
      description: "Also called Tax Reg. No in ( UK ) , ( CA ) , ( IN ) , ( AU ) represents the tax ID of the Person or Organization. This value is masked in responses, exposing only last five characters. For example, the ID of `123-45-6789` is returned as `XXXXXX56789`.",
      label: "Primary Tax Identifier",
      optional: true,
      type: "string",
    },
    printOnCheckName: {
      description: "Name of the person or organization as printed on a check. If not provided, this is populated from DisplayName. Constraints: Cannot be removed with sparse update.",
      label: "Print On Check Name",
      optional: true,
      type: "string",
    },
    resaleNum: {
      description: "Resale number or some additional info about the customer.",
      label: "Resale Num",
      optional: true,
      type: "string",
    },
    saleTermRefName: {
      description: "Name of a SalesTerm object associated with this Customer object. Query the Term name list resource to determine the appropriate Term object for this reference. Use `Term.Name` from that object for `SalesTermRef.name`.",
      label: "Sale Term Ref Name",
      optional: true,
      type: "string",
    },
    saleTermRefValue: {
      description: "Id of a SalesTerm object associated with this Customer object. Query the Term name list resource to determine the appropriate Term object for this reference. Use `Term.Id` from that object for `SalesTermRef.value`.",
      label: "Sale Term Ref Value",
      optional: true,
      type: "string",
    },
    secondaryTaxIdentifier: {
      description: "Also called UTR No. in ( UK ) , CST Reg No. ( IN ) also represents the tax registration number of the Person or Organization. This value is masked in responses, exposing only last five characters. For example, the ID of `123-45-6789` is returned as `XXXXXX56789`",
      label: "Secondary Tax Identifier",
      optional: true,
      type: "string",
    },
    shipAddrCity: {
      description: "City name for the shipping address.",
      label: "Ship Addr City",
      optional: true,
      type: "string",
    },
    shipAddrCountry: {
      description: "Country name. For international addresses - countries should be passed as 3 ISO alpha-3 characters or the full name of the country.",
      label: "Ship Addr Country",
      optional: true,
      type: "string",
    },
    shipAddrCountrySubDivisionCode: {
      description: "Region within a country for the shipping address. For example, state name for USA, province name for Canada.",
      label: "Ship Addr Country Sub Division Code",
      optional: true,
      type: "string",
    },
    shipAddrId: {
      description: "Unique identifier of the QuickBooks object for the shipping address, used for modifying the address. \nThe ShippingAddr object represents the default shipping address. If a physical address is updated from within the transaction object, the QuickBooks Online API flows individual address components differently into the Line elements of the transaction response then when the transaction was first created:\n* `Line1` and `Line2` elements are populated with the customer name and company name.\n* Original `Line1` through `Line5` contents, `City`, `SubDivisionCode`, and `PostalCode` flow into `Line3` through `Line5` as a free format strings.",
      label: "Ship Addr Id",
      optional: true,
      type: "string",
    },
    shipAddrLate: {
      description: "Latitude coordinate of Geocode (Geospacial Entity Object Code). `INVALID` is returned for invalid addresses.",
      label: "Ship Addr Late",
      optional: true,
      type: "string",
    },
    shipAddrLine1: {
      description: "First line of the shipping address.",
      label: "Ship Addr Line 1",
      optional: true,
      type: "string",
    },
    shipAddrLine2: {
      description: "Second line of the shipping address.",
      label: "Ship Addr Line 2",
      optional: true,
      type: "string",
    },
    shipAddrLine3: {
      description: "Third line of the shipping address.",
      label: "Ship Addr Line 3",
      optional: true,
      type: "string",
    },
    shipAddrLine4: {
      description: "Fourth line of the shipping address.",
      label: "Ship Addr Line 4",
      optional: true,
      type: "string",
    },
    shipAddrLine5: {
      description: "Fifth line of the shipping address.",
      label: "Ship Addr Line 5",
      optional: true,
      type: "string",
    },
    shipAddrLong: {
      description: "Longitude coordinate of Geocode (Geospacial Entity Object Code). `INVALID` is returned for invalid addresses.",
      label: "Ship Addr Long",
      optional: true,
      type: "string",
    },
    shipAddrPostalCode: {
      description: "Postal code for the shipping address. For example, zip code for USA and Canada.",
      label: "Ship Addr Postal Code",
      optional: true,
      type: "string",
    },
    sparseUpdate: {
      description: "When set to `true`, sparse updating provides the ability to update a subset of properties for a given object; only elements specified in the request are updated. Missing elements are left untouched.",
      label: "Sparse Update",
      type: "string",
    },
    syncToken: {
      description: "Version number of the object. It is used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented. Attempts to modify an object specifying an older SyncToken fails. Only the latest version of the object is maintained by QuickBooks Online.",
      label: "Sync Token",
      type: "string",
    },
    taxable: {
      description: "If true, transactions for this customer are taxable. Default behavior with minor version 10 and above: true, if `DefaultTaxCodeRef` is defined or false if `TaxExemptionReasonId` is set.",
      label: "Taxable",
      optional: true,
      type: "string",
    },
    taxExemptionReasonId: {
      label: "Tax Exemption Reason Id",
      description: "The tax exemption reason associated with this customer object. Applicable if automated sales tax is enabled (`Preferences.TaxPrefs.PartnerTaxEnabled` is set to `true`) for the company. Set `TaxExemptionReasonId`: to one of the following:\n**Id\tReason**\n* 1\tFederal government\n* 2\tState government\n* 3\tLocal government\n* 4\tTribal government\n* 5\tCharitable organization\n* 6\tReligious organization\n* 7\tEducational organization\n* 8\tHospital\n* 9\tResale\n* 10\tDirect pay permit\n* 11\tMultiple points of use\n* 12\tDirect mail\n* 13\tAgricultural production\n* 14\tIndustrial production / manufacturing\n* 15\tForeign diplomat",
      optional: true,
      options: [
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        "10",
        "11",
        "12",
        "13",
        "14",
        "15",
      ],
      type: "string",
    },
    webAddr: {
      description: "Website address.",
      label: "Web Addr",
      optional: true,
      type: "string",
    },
    minorVersion: {
      propDefinition: [
        quickbooks,
        "minorVersion",
      ],
    },
  },
  async run({ $ }) {
    //See Quickbooks API docs at: https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer#full-update-a-customer

    if (
      !this.displayName &&
      (!this.title && !this.givenName && !this.middleName && !this.familyName && !this.suffix) ||
      !this.customerId || !this.syncToken || this.sparseUpdate === undefined
    ) {
      throw new ConfigurationError("Must provide displayName or at least one of title, givenName, middleName, familyName, or suffix, and customerId, syncToken parameters.");
    }

    const response = await this.quickbooks.updateCustomer({
      $,
      data: {
        sparse: this.sparseUpdate,
        Id: this.customerId,
        DisplayName: this.displayName,
        Suffix: this.suffix,
        Title: this.title,
        MiddleName: this.middleName,
        FamilyName: this.familyName,
        GivenName: this.givenName,
        SyncToken: this.syncToken,
        PrimaryEmailAddr: this.primaryEmailAddr,
        ResaleNum: this.resaleNum,
        SecondaryTaxIdentifier: this.secondaryTaxIdentifier,
        ARAccountRef: {
          value: this.arAccountRefValue,
          name: this.arAccountRefName,
        },
        DefaultTaxCodeRef: {
          value: this.defaultTaxCodeValue,
          name: this.defaultTaxCodeName,
        },
        PreferredDeliveryMethod: this.preferredDeliveryMethod,
        GSTIN: this.GSTIN,
        SalesTermRef: {
          value: this.saleTermRefValue,
          name: this.saleRermRefName,
        },
        CustomerTypeRef: {
          value: this.customerRypeRefValue,
        },
        Fax: {
          FreeFormNumber: this.faxFreeFormNumber,
        },
        BusinessNumber: this.businessNumber,
        BillWithParent: this.billWithParent,
        CurrencyRef: {
          value: this.currencyRefValue,
          name: this.currencyRefName,
        },
        Mobile: {
          FreeFormNumber: this.mobileFreeFormNumber,
        },
        Job: this.job,
        BalanceWithJobs: this.balanceWithJob,
        PrimaryPhone: {
          FreeFormNumber: this.primaryPhoneFreeFormNumber,
        },
        OpenBalanceDate: this.openBalanceDate,
        Taxable: this.taxable,
        AlternatePhone: {
          FreeFormNumber: this.alternatePhoneFreeFormNumber,
        },
        ParentRef: {
          value: this.parentRefValue,
          name: this.parentRefName,
        },
        Notes: this.notes,
        WebAddr: this.webAddr,
        Active: this.active,
        Balance: this.balance,
        ShipAddr: {
          Id: this.shipAddrId,
          PostalCode: this.shipAddrPostalCode,
          City: this.shipAddrCity,
          Country: this.shipAddrCountry,
          Line5: this.shipAddrLine5,
          Line4: this.shipAddrLine4,
          Line3: this.shipAddrLine3,
          Line2: this.shipAddrLine2,
          Line1: this.shipAddrLine1,
          Lat: this.shipAddrLate,
          Long: this.shipAddrLong,
          CountrySubDivisionCode: this.shipAddrCountrySubDivisionCode,
        },
        PaymentMethodRef: {
          value: this.paymentMethodRefValue,
          name: this.paymentMethodRefName,
        },
        IsProject: this.isProject,
        CompanyName: this.companyName,
        PrimaryTaxIdentifier: this.primaryTaxIdentifier,
        GSTRegistrationType: this.gstRegistrationType,
        PrintOnCheckName: this.printOnCheckName,
        BillAddr: {
          Id: this.billAddrId,
          PostalCode: this.billAddrPostalCode,
          City: this.billAddrCity,
          Country: this.billAddrCountry,
          Line5: this.billAddrLine5,
          Line4: this.billAddrLine4,
          Line3: this.billAddrLine3,
          Line2: this.billAddrLine2,
          Line1: this.billAddrLine1,
          Lat: this.billAddrLate,
          Long: this.billAddrLong,
          CountrySubDivisionCode: this.billAddrCountrySubDivisionCode,
        },
        TaxExemptionReasonId: this.taxExemptionReasonId,
      },
      params: {
        minorversion: this.minorVersion,
      },
    });

    if (response) {
      $.export("summary", `Successfully updated customer with id ${this.customerId}`);
    }

    return response;
  },
};

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
QuickBooksquickbooksappThis component uses the QuickBooks app.
Display NamedisplayNamestring

The name of the person or organization as displayed. Must be unique across all Customer, Vendor, and Employee objects. Cannot be removed with sparse update. If not supplied, the system generates DisplayName by concatenating customer name components supplied in the request from the following list: Title, GivenName, MiddleName, FamilyName, and Suffix.

Titletitlestring

Title of the person. This tag supports i18n, all locales. The DisplayName attribute or at least one of Title, GivenName, MiddleName, FamilyName, Suffix, or FullyQualifiedName attributes are required during create.

Given NamegivenNamestring

Given name or first name of a person. The DisplayName attribute or at least one of Title, GivenName, MiddleName, FamilyName, or Suffix attributes is required for object create.

Middle NamemiddleNamestring

Middle name of the person. The person can have zero or more middle names. The DisplayName attribute or at least one of Title, GivenName, MiddleName, FamilyName, or Suffix attributes is required for object create.

Family NamefamilyNamestring

Family name or the last name of the person. The DisplayName attribute or at least one of Title, GivenName, MiddleName, FamilyName, or Suffix attributes is required for object create.

Suffixsuffixstring

Suffix of the name. For example, Jr. The DisplayName attribute or at least one of Title, GivenName, MiddleName, FamilyName, or Suffix attributes is required for object create.

Currency Reference ValuecurrencyRefValuestring

A three letter string representing the ISO 4217 code for the currency. For example, USD, AUD, EUR, and so on. This must be defined if multicurrency is enabled for the company.
Multicurrency is enabled for the company if Preferences.MultiCurrencyEnabled is set to true. Read more about multicurrency support here. Required if multicurrency is enabled for the company.

Currency Reference NamecurrencyRefNamestring

The full name of the currency.

Activeactivestring

If true, this entity is currently enabled for use by QuickBooks. If there is an amount in Customer.Balance when setting this Customer object to inactive through the QuickBooks UI, a CreditMemo balancing transaction is created for the amount.

Alternate Phone Free Form NumberalternatePhoneFreeFormNumberstring

Specifies the alternate phone number in free form.

Ar Account Ref NamearAccountRefNamestring

Name of the accounts receivable account to be used for this customer. Each customer must have his own AR account. Applicable for France companies, only. Available when endpoint is evoked with the minorversion=3 query parameter. Query the Account name list resource to determine the appropriate Account object for this reference, where Account.AccountType=Accounts Receivable. Use Account.Name from that object for ARAccountRef.name.

Ar Account Ref ValuearAccountRefValuestring

Id of the accounts receivable account to be used for this customer. Each customer must have his own AR account. Applicable for France companies, only. Available when endpoint is evoked with the minorversion=3 query parameter. Query the Account name list resource to determine the appropriate Account object for this reference, where Account.AccountType=Accounts Receivable. Use Account.Id from that object for ARAccountRef.value.

Balancebalancestring

Specifies the open balance amount or the amount unpaid by the customer. For the create operation, this represents the opening balance for the customer. When returned in response to the query request it represents the current open balance (unpaid amount) for that customer. Write-on-create.

Balance With JobbalanceWithJobstring

Cumulative open balance amount for the Customer (or Job) and all its sub-jobs. Cannot be written to QuickBooks.

Bill Addr CitybillAddrCitystring

City name for the billing address.

Bill Addr CountrybillAddrCountrystring

Country name. For international addresses - countries should be passed as 3 ISO alpha-3 characters or the full name of the country.

Bill Addr Country Sub Division CodebillAddrCountrySubDivisionCodestring

Region within a country for the billing address. For example, state name for USA, province name for Canada.

Bill Addr IdbillAddrIdstring

Unique identifier of the QuickBooks object for the billing address, used for modifying the address.
The BillAddr object represents the default billing address. If a physical address is updated from within the transaction object, the QuickBooks Online API flows individual address components differently into the Line elements of the transaction response then when the transaction was first created:

  • Line1 and Line2 elements are populated with the customer name and company name.
  • Original Line1 through Line5 contents, City, SubDivisionCode, and PostalCode flow into Line3 through Line5 as a free format strings.
Bill Addr LatebillAddrLatestring

Latitude coordinate of Geocode (Geospacial Entity Object Code). INVALID is returned for invalid addresses.

Bill Addr Line 1billAddrLine1string

First line of the billing address.

Bill Addr Line 2billAddrLine2string

Second line of the billing address.

Bill Addr Line 3billAddrLine3string

Third line of the billing address.

Bill Addr Line 4billAddrLine4string

Fourth line of the billing address.

Bill Addr Line 5billAddrLine5string

Fifth line of the billing address.

Bill Addr LongbillAddrLongstring

Longitude coordinate of Geocode (Geospacial Entity Object Code). INVALID is returned for invalid addresses.

Bill Addr Postal CodebillAddrPostalCodestring

Postal code for the billing address. For example, zip code for USA and Canada.

Bill With ParentbillWithParentboolean

If true, this Customer object is billed with its parent. If false, or null the customer is not to be billed with its parent. This attribute is valid only if this entity is a Job or sub Customer.

Business NumberbusinessNumberstring

Also called, PAN (in India) is a code that acts as an identification for individuals, families and corporates, especially for those who pay taxes on their income.

Company NamecompanyNamestring

The name of the company associated with the person or organization.

Customer IdcustomerIdstring

Unique identifier for the customer object to be updated.

Customer Type Ref ValuecustomerTypeRefValuestring

Id referencing to the customer type assigned to a customer. This field is only returned if the customer is assigned a customer type.

Default Tax Code NamedefaultTaxCodeNamestring

Id of the default tax code associated with this Customer object. Reference is valid if Customer.Taxable is set to true; otherwise, it is ignored. If automated sales tax is enabled (Preferences.TaxPrefs.PartnerTaxEnabled is set to true) the default tax code is set by the system and can not be overridden. Query the TaxCode name list resource to determine the appropriate TaxCode object for this reference. Use TaxCode.Name from that object for DefaultTaxCodeRef.name.

Default Tax Code ValuedefaultTaxCodeValuestring

Id of the default tax code associated with this Customer object. Reference is valid if Customer.Taxable is set to true; otherwise, it is ignored. If automated sales tax is enabled (Preferences.TaxPrefs.PartnerTaxEnabled is set to true) the default tax code is set by the system and can not be overridden. Query the TaxCode name list resource to determine the appropriate TaxCode object for this reference. Use TaxCode.Id from that object for DefaultTaxCodeRef.value.

Fax Free Form NumberfaxFreeFormNumberstring

Specifies the fax number in free form.

G S T I NGSTINstring

GSTIN is an identification number assigned to every GST registered business.

Gst Registration TypegstRegistrationTypestringSelect a value from the drop down menu:GST_REG_REGGST_REG_COMPGST_UNREGCONSUMEROVERSEASSEZDEEMED
Is ProjectisProjectboolean

If true, indicates this is a Project.

Jobjobboolean

If true, this is a Job or sub-customer. If false or null, this is a top level customer, not a Job or sub-customer.

Mobile Free Form NumbermobileFreeFormNumberstring

Specifies the mobile phone number in free form.

Notesnotesstring

Free form text describing the Customer.

Open Balance DateopenBalanceDatestring

Date of the Open Balance for the create operation. Write-on-create.

Parent Ref NameparentRefNamestring

Name referencing to a Customer object that is the immediate parent of the Sub-Customer/Job in the hierarchical Customer:Job list. Required for the create operation if this object is a sub-customer or Job. Query the Customer name list resource to determine the appropriate Customer object for this reference. Use Customer.Name from that object for ParentRef.name.

Parent Ref ValueparentRefValuestring

Id referencing to a Customer object that is the immediate parent of the Sub-Customer/Job in the hierarchical Customer:Job list. Required for the create operation if this object is a sub-customer or Job. Query the Customer name list resource to determine the appropriate Customer object for this reference. Use Customer.Id from that object for ParentRef.value.

Payment Method Ref NamepaymentMethodRefNamestring

Id referencing a PaymentMethod object associated with this Customer object. Query the PaymentMethod name list resource to determine the appropriate PaymentMethod object for this reference. Use PaymentMethod.Name from that object for PaymentMethodRef.name.

Payment Method Ref ValuepaymentMethodRefValuestring

Id referencing a PaymentMethod object associated with this Customer object. Query the PaymentMethod name list resource to determine the appropriate PaymentMethod object for this reference. Use PaymentMethod.Id from that object for PaymentMethodRef.value.

Preferred Delivery MethodpreferredDeliveryMethodstringSelect a value from the drop down menu:PrintEmailNone
Primary Email AddrprimaryEmailAddrstring

Primary email address.

Primary Phone Free Form NumberprimaryPhoneFreeFormNumberstring

Specifies the primary phone number in free form.

Primary Tax IdentifierprimaryTaxIdentifierstring

Also called Tax Reg. No in ( UK ) , ( CA ) , ( IN ) , ( AU ) represents the tax ID of the Person or Organization. This value is masked in responses, exposing only last five characters. For example, the ID of 123-45-6789 is returned as XXXXXX56789.

Print On Check NameprintOnCheckNamestring

Name of the person or organization as printed on a check. If not provided, this is populated from DisplayName. Constraints: Cannot be removed with sparse update.

Resale NumresaleNumstring

Resale number or some additional info about the customer.

Sale Term Ref NamesaleTermRefNamestring

Name of a SalesTerm object associated with this Customer object. Query the Term name list resource to determine the appropriate Term object for this reference. Use Term.Name from that object for SalesTermRef.name.

Sale Term Ref ValuesaleTermRefValuestring

Id of a SalesTerm object associated with this Customer object. Query the Term name list resource to determine the appropriate Term object for this reference. Use Term.Id from that object for SalesTermRef.value.

Secondary Tax IdentifiersecondaryTaxIdentifierstring

Also called UTR No. in ( UK ) , CST Reg No. ( IN ) also represents the tax registration number of the Person or Organization. This value is masked in responses, exposing only last five characters. For example, the ID of 123-45-6789 is returned as XXXXXX56789

Ship Addr CityshipAddrCitystring

City name for the shipping address.

Ship Addr CountryshipAddrCountrystring

Country name. For international addresses - countries should be passed as 3 ISO alpha-3 characters or the full name of the country.

Ship Addr Country Sub Division CodeshipAddrCountrySubDivisionCodestring

Region within a country for the shipping address. For example, state name for USA, province name for Canada.

Ship Addr IdshipAddrIdstring

Unique identifier of the QuickBooks object for the shipping address, used for modifying the address.
The ShippingAddr object represents the default shipping address. If a physical address is updated from within the transaction object, the QuickBooks Online API flows individual address components differently into the Line elements of the transaction response then when the transaction was first created:

  • Line1 and Line2 elements are populated with the customer name and company name.
  • Original Line1 through Line5 contents, City, SubDivisionCode, and PostalCode flow into Line3 through Line5 as a free format strings.
Ship Addr LateshipAddrLatestring

Latitude coordinate of Geocode (Geospacial Entity Object Code). INVALID is returned for invalid addresses.

Ship Addr Line 1shipAddrLine1string

First line of the shipping address.

Ship Addr Line 2shipAddrLine2string

Second line of the shipping address.

Ship Addr Line 3shipAddrLine3string

Third line of the shipping address.

Ship Addr Line 4shipAddrLine4string

Fourth line of the shipping address.

Ship Addr Line 5shipAddrLine5string

Fifth line of the shipping address.

Ship Addr LongshipAddrLongstring

Longitude coordinate of Geocode (Geospacial Entity Object Code). INVALID is returned for invalid addresses.

Ship Addr Postal CodeshipAddrPostalCodestring

Postal code for the shipping address. For example, zip code for USA and Canada.

Sparse UpdatesparseUpdatestring

When set to true, sparse updating provides the ability to update a subset of properties for a given object; only elements specified in the request are updated. Missing elements are left untouched.

Sync TokensyncTokenstring

Version number of the object. It is used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented. Attempts to modify an object specifying an older SyncToken fails. Only the latest version of the object is maintained by QuickBooks Online.

Taxabletaxablestring

If true, transactions for this customer are taxable. Default behavior with minor version 10 and above: true, if DefaultTaxCodeRef is defined or false if TaxExemptionReasonId is set.

Tax Exemption Reason IdtaxExemptionReasonIdstringSelect a value from the drop down menu:123456789101112131415
Web AddrwebAddrstring

Website address.

Minor VersionminorVersionstring

Use the minorversion query parameter in REST API requests to access a version of the API other than the generally available version. For example, to invoke minor version 1 of the JournalEntry entity, issue the following request:
https://quickbooks.api.intuit.com/v3/company/<realmId>/journalentry/entityId?minorversion=1

Action Authentication

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

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

com.intuit.quickbooks.accountingopenidprofileemail

About QuickBooks

QuickBooks Online is designed to help you manage your business finances with ease.

More Ways to Connect QuickBooks + PostgreSQL

Create Bill with Quickbooks API on New Column from PostgreSQL API
PostgreSQL + QuickBooks
 
Try it
Create Customer with Quickbooks API on New Column from PostgreSQL API
PostgreSQL + QuickBooks
 
Try it
Create Invoice with Quickbooks API on New Column from PostgreSQL API
PostgreSQL + QuickBooks
 
Try it
Get Bill with Quickbooks API on New Column from PostgreSQL API
PostgreSQL + QuickBooks
 
Try it
Get Customer with Quickbooks API on New Column from PostgreSQL API
PostgreSQL + QuickBooks
 
Try it
New Column from the PostgreSQL API

Emit new event when a new column is added to a table. See the documentation

 
Try it
New or Updated Row from the PostgreSQL API

Emit new event when a row is added or modified. See the documentation

 
Try it
New Row from the PostgreSQL API

Emit new event when a new row is added to a table. See the documentation

 
Try it
New Row Custom Query from the PostgreSQL API

Emit new event when new rows are returned from a custom query that you provide. See the documentation

 
Try it
New Table from the PostgreSQL API

Emit new event when a new table is added to the database. See the documentation

 
Try it
Delete Row(s) with the PostgreSQL API

Deletes a row or rows from a table. See the documentation

 
Try it
Execute Custom Query with the PostgreSQL API

Executes a custom query you provide. See the documentation

 
Try it
Find Row with the PostgreSQL API

Finds a row in a table via a lookup column. See the documentation

 
Try it
Find Row With Custom Query with the PostgreSQL API

Finds a row in a table via a custom query. See the documentation

 
Try it
Insert Row with the PostgreSQL API

Adds a new row. See the documentation

 
Try it

Explore Other Apps

1
-
24
of
2,000+
apps by most popular

HTTP / Webhook
HTTP / Webhook
Get a unique URL where you can send HTTP or webhook requests
Node
Node
Anything you can do with Node.js, you can do in a Pipedream workflow. This includes using most of npm's 400,000+ packages.
Python
Python
Anything you can do in Python can be done in a Pipedream Workflow. This includes using any of the 350,000+ PyPi packages available in your Python powered workflows.
OpenAI (ChatGPT)
OpenAI (ChatGPT)
OpenAI is an AI research and deployment company with the mission to ensure that artificial general intelligence benefits all of humanity. They are the makers of popular models like ChatGPT, DALL-E, and Whisper.
Premium
Salesforce (REST API)
Salesforce (REST API)
Web services API for interacting with Salesforce
Premium
HubSpot
HubSpot
HubSpot's CRM platform contains the marketing, sales, service, operations, and website-building software you need to grow your business.
Premium
Zoho CRM
Zoho CRM
Zoho CRM is an online Sales CRM software that manages your sales, marketing, and support in one CRM platform.
Premium
Stripe
Stripe
Stripe powers online and in-person payment processing and financial solutions for businesses of all sizes.
Shopify Developer App
Shopify Developer App
Shopify is a user-friendly e-commerce platform that helps small businesses build an online store and sell online through one streamlined dashboard.
Premium
WooCommerce
WooCommerce
WooCommerce is the open-source ecommerce platform for WordPress.
Premium
Snowflake
Snowflake
A data warehouse built for the cloud
Premium
MongoDB
MongoDB
MongoDB is an open source NoSQL database management program.
Supabase
Supabase
Supabase is an open source Firebase alternative.
MySQL
MySQL
MySQL is an open-source relational database management system.
PostgreSQL
PostgreSQL
PostgreSQL is a free and open-source relational database management system emphasizing extensibility and SQL compliance.
Premium
AWS
AWS
Amazon Web Services (AWS) offers reliable, scalable, and inexpensive cloud computing services.
Premium
Twilio SendGrid
Twilio SendGrid
Send marketing and transactional email through the Twilio SendGrid platform with the Email API, proprietary mail transfer agent, and infrastructure for scalable delivery.
Amazon SES
Amazon SES
Amazon SES is a cloud-based email service provider that can integrate into any application for high volume email automation
Premium
Klaviyo
Klaviyo
Email Marketing and SMS Marketing Platform
Premium
Zendesk
Zendesk
Zendesk is award-winning customer service software trusted by 200K+ customers. Make customers happy via text, mobile, phone, email, live chat, social media.
Premium
ServiceNow
ServiceNow
The smarter way to workflow
Notion
Notion
Notion is a new tool that blends your everyday work apps into one. It's the all-in-one workspace for you and your team.
Slack
Slack
Slack is a channel-based messaging platform. With Slack, people can work together more effectively, connect all their software tools and services, and find the information they need to do their best work — all within a secure, enterprise-grade environment.
Microsoft Teams
Microsoft Teams
Microsoft Teams has communities, events, chats, channels, meetings, storage, tasks, and calendars in one place.