Home Storage

Storage

By Bharath
7 articles

Custom storage integration overview

In this article - Seamless connection to external storage - Flexible folder management - Effortless file access and embedding - Integrated client file management - Secure and organized file handling - Enhanced client collaboration https://www.loom.com/share/1f675244f73f451eb125276ce7517c89 Cone’s storage integrations are designed to let you work seamlessly with your existing storage solutions—such as Google Drive and SharePoint—without disrupting your workflow or moving your data. Here’s how the integration process works and the benefits it brings: Seamless connection to external storage - Multiple storage options: Cone supports integration with popular storage platforms like Google Drive and SharePoint. - Easy setup: Simply navigate to Cone’s Settings, select Integrations, and find your preferred storage under the “Other” section. Click “Connect” and follow the on-screen prompts to authorize access Flexible folder management - Automatic or manual folder mapping: Once integrated, you can choose to let Cone automatically create new folders for each new client, or you can manually map existing folders from your storage to specific clients in Cone - Folder templates: Apply folder templates to maintain a consistent and organized file structure for every client Effortless file access and embedding - Direct file selection: When creating proposals or templates in Cone, you can embed media or documents directly from your connected storage. There’s no need to download files and re-upload them—just select the file you want and it’s instantly available - Template reusability: Save templates with embedded files for repeated use, streamlining your workflow Integrated client file management - Client files: Each client in Cone has a dedicated Files tab. Here, you can view and manage the storage integration and see which folder is mapped to that client - Open in storage: For any file or folder, use the triple-dot menu to open it directly in your storage provider, giving you full control and visibility Secure and organized file handling - Automatic storage: Any files uploaded by you or your clients—whether through proposals, client portals, or client requests—are automatically stored in the correct folder in your integrated storage - Data security: All files and folders remain in your connected account, ensuring your data is secure and always under your control Enhanced client collaboration - Client portal integration: When clients upload files through the portal, those files are automatically saved in the appropriate folder, keeping everything organized without manual intervention - Client requests: Specify exactly where files should be stored when creating client requests, ensuring uploads go to the right place every time With Cone’s storage integrations, you get the best of both worlds: the organizational power and collaboration features of Cone, and the familiarity and control of your chosen storage solution. All your files remain secure, organized, and instantly accessible—making client and document management effortless You can learn more about custom storage integrations here

Last updated on Apr 04, 2026

Enabling Cone's Google Drive App

Only Google Workspace admins will be enable to connect this integration Table of contents 1. Introduction 2. Enable Cone in Google Workspace third party apps Introduction Integrating Google Drive with Cone enables seamless file management, collaboration, and improved workflow efficiency. Follow the steps below to connect your Google Drive account with Cone Enable Cone in Google Workspace third party apps 1. Log in to Google admin console 1. Access the Google admin console using your administrator credentials 2. Navigate to security settings 1. From the main dashboard, go to the Security section 3. Access API controls 1. Within Security, select Access and data control 2. Then click on API controls ​ 4. Manage third-party app access 1. Choose Manage Third-Party App Access to view and configure app permissions 5. Add a new ppp by Client ID 1. Click on Configure New App ​ 2. In the search box for Configure new app, enter the following client ID: 215652906046-kklv14r9dmgtg0lc5lgsnombl2644fe9.apps.googleusercontent.com 6. Locate and select Cone 1. After searching for the client ID, select the Cone app from the results ​ 7. Set access permissions 1. Choose All users in <org> to apply the integration organization-wide 2. Click Continue ​ 8. Mark the App as Trusted 1. Select the Trusted option to grant Cone access to Google Drive 2. Click Continue to confirm ​ 9. Complete the setup 1. Click Finish to finalize the integration ​ 2. The Cone app will now be listed among your approved third-party applications ​ ​

Last updated on Apr 04, 2026

Integrating Google Drive With Cone

Table of contents 1. Introduction 2. Integrating with Google Drive 1. Access Cone settings 2. Navigate to Integrations 3. Start Google Drive Connection 4. Authorize Google Drive access 5. Confirm integration status 3. Managing the integration 4. How to use the Drive integration 1. Use Google Drive in Cone 2. Client portal integration 3. Apply folder templates 1. Introduction Connecting your Google Drive account to Cone allows you to manage, store, and share documents seamlessly within your existing workflow. With this integration, all your files and folders are automatically organized and kept in sync between Cone and Google Drive, ensuring your data is secure and easily accessible 2. Integrating with Google Drive You have to first enable Cone's Google Drive app before as described here Once Cone app is enabled, you can proceed with the next steps 2.a Access Cone settings - Go to your Cone dashboard - Click on the Settings menu 2.b Navigate to Integrations - Within Settings, select the Integrations tab - Find the section for Other integrations 2.c Start Google Drive Connection - Locate the Google Drive integration option - Click Connect next to Google Drive 2.d Authorize Google Drive access - Follow the on-screen prompts to authenticate with your Google account - Grant Cone the necessary permissions to access your Google Drive 2.e Confirm integration status - After successful connection, the integration status will show as Active next to Google Drive ​ 3. Managing the integration Click Manage on the integration card to configure Drive integration settings - Choose or change the main folder Cone will use in your Google Drive - Enable automatic creation of new folders for each client added in Cone - Map existing folders in your Drive to specific clients if you already have a folder structure ​ 4. How to use the Drive integration 4.a Use Google Drive in Cone - All files uploaded in Cone are automatically stored in your connected Google Drive - For each client, you can - View and manage mapped folders - Disconnect or re-map folders as needed - Open files or folders directly in Google Drive from within Cone 4.b Client portal integration - Files uploaded by clients via the Cone client portal are saved directly to the corresponding Google Drive folders 4.c Apply folder templates - Apply folder templates to standardize the folder structure for client files in Google Drive

Last updated on Apr 04, 2026

Integrating Microsoft Sharepoint With Cone

Table of contents 1. Introduction 2. Integrating with Microsoft Sharepoint 1. Access Cone settings 2. Navigate to Integrations 3. Start Microsoft Sharepoint connection 4. Authorize Sharepoint access 5. Confirm integration status 3. Managing the integration 4. How to use the Sharepoint integration 1. Use Sharepoint in Cone 2. Client portal integration 3. Apply folder templates 1. Introduction Connecting your Microsoft Sharepoint account to Cone allows you to manage, store, and share documents seamlessly within your existing workflow. With this integration, all your files and folders are automatically organized and kept in sync between Cone and Sharepoint, ensuring your data is secure and easily accessible 2. Integrating with Microsoft Sharepoint Once Cone app is enabled, you can proceed with the next steps 2.a Access Cone settings - Go to your Cone dashboard - Click on the Settings menu 2.b Navigate to Integrations - Within Settings, select the Integrations tab - Find the section for Other integrations 2.c Start Microsoft Sharepoint connection - Locate the Microsoft Sharepoint integration option - Click Connect next to Sharepoint 2.d Authorize Sharepoint access - Follow the on-screen prompts to authenticate with your Microsoft account - Grant Cone the necessary permissions to access your Sharepoint 2.e Confirm integration status - After successful connection, the integration status will show as Active next to Sharepoint 3. Managing the integration Click Manage on the integration card to configure Sharepoint integration settings - Choose or change the main folder Cone will use in your Sharepoint - Enable automatic creation of new folders for each client added in Cone - Map existing folders in your Sharepoint to specific clients if you already have a folder structure 4. How to use the Sharepoint integration 4.a Use Sharepoint in Cone - All files uploaded in Cone are automatically stored in your connected Sharepoint site - For each client, you can - View and manage mapped folders - Disconnect or re-map folders as needed - Open files or folders directly in Sharepoint from within Cone 4.b Client portal integration - Files uploaded by clients via the Cone client portal are saved directly to the corresponding Sharepoint folders 4.c Apply folder templates - Apply folder templates to standardize the folder structure for client files in Sharepoint

Last updated on Apr 04, 2026

Zapier Integration Schema

Table of contents 1. Version information 2. Authentication 1. OAuth2 authentication 3. Fields 4. Triggers 1. Proposal triggers 1. Proposal published 2. Proposal accepted 3. Proposal created 4. Proposal lost 5. Proposal revoked 2. Client triggers 1. Client created 2. Client updated 3. Client converted to customer 3. Invoice triggers 1. Invoice created 2. Invoice updated 3. Invoice finalized 4. Invoice paid 5. Invoice canceled 5. Actions 1. Create business customer 2. Create business prospect 3. Create individual customer 4. Create individual prospect Version information - Version: 3.0.0 - Platform Version: 15.15.0 Authentication This integration uses OAuth2 for authentication. Here is how it is structured: a. OAuth2 authentication - Authorization Type: OAuth2 - Oauth2 Configuration: - Authorization URL: Accepts the client_id, state, redirect_uri, response_type, audience, and scope as parameters to the authorization URL - Get Access Token: A POST request is made to retrieve an access token, using code, client_id, client_secret, grant_type, and redirect_uri - Refresh Access Token: This refreshes the access token when expired - Scope: openid, profile, email, offline_access - Auto-refresh: Enabled - Testing Authentication - URL: https://#{{process.env.API_BASE}}/v1/users/meta - Headers: Requires Authorization and X-ORG-ID headers - Params: Requires org_id Fields - org_id: Computed field, used in connection labeling Triggers The integration supports various triggers based on different events: a. Proposal triggers 1. Proposal published - Description: Triggers when a proposal is published. - Key: proposal_published - Output description: - id: string - The unique identifier for the proposal. Example: "cbddb2fd-60b6-4c25-a69c-17fbde34a148". - name: string - The name or title of the proposal. Example: "Sample Proposal". - due_date: string (ISO 8601 format) - The date by which the proposal should be reviewed or completed. Example: "2021-12-31". - preview_url: string - A URL where the preview of the proposal can be accessed. Example: "<https://example.com/pm/proposals/preview/123>". - start_date: string (ISO 8601 format) - The starting date for the proposal activities or services. Example: "2021-12-01". - end_date: string (ISO 8601 format) - The completion date for the proposal activities or services. Example: "2021-12-31". - created_at: string (ISO 8601 format with timezone) - The date and time when the proposal was created. Example: "2024-09-05T11:06:00.910465+05:30". - published_at: string (ISO 8601 format with timezone) - The date and time when the proposal was published. Example: "2024-09-05T11:06:00.910465+05:30". - sent_at: string (optional) - The date and time when the proposal was sent to stakeholders. Empty if not yet sent. Example: "". - staff: array of objects - A list of staff members associated with the proposal. - name: string - The name of a staff member. Example: "John Doe". - email: string - The email address of the staff member. Example: "[email protected]". - signatory: array of objects - A list of client contacts who must sign the proposal. - name: string - The name of the signatory. Example: "Jane Doe". - email: string - The email address of the signatory. Example: "[email protected]". - url: string - A URL specific to the signatory for accessing the proposal. Example: "<https://example.com/shared/proposals/123>". - services: array of objects - The list of services included in the proposal. - name: string - The name of the service. Example: "Sample Service". - description: string - A brief description of the service. Example: "Sample Description". - pricing_method: string - The method used to price the service. Possible values include "fixed", "hourly", etc. Example: "fixed". - billing_type: string - Indicates the type of billing, whether one-time or recurring. Example: "one_time". - price: string (numeric value as string) - The base price of the service before tax. Example: "100". - tax: string (numeric value as string) - The amount of tax applied to the service price. Example: "10". - total: string (numeric value as string) - The total price including tax. Example: "110" - Sample data: { "id": "cbddb2fd-60b6-4c25-a69c-17fbde34a148", "name": "Sample Proposal", "due_date": "2021-12-31", "preview_url": "<https://example.com/pm/proposals/preview/123>", "start_date": "2021-12-01", "end_date": "2021-12-31", "created_at": "2024-09-05T11:06:00.910465+05:30", "published_at": "2024-09-05T11:06:00.910465+05:30", "sent_at": "", "staff": [ { "name": "John Doe", "email": "[email protected]" } ], "signatory": [ { "name": "Jane Doe", "email": "[email protected]", "url": "<https://example.com/shared/proposals/123>" } ], "services": [ { "name": "Sample Service", "description": "Sample Description", "pricing_method": "fixed", "billing_type": "one_time", "price": "100", "tax": "10", "total": "110" } ] } 2. Proposal accepted - Description: Triggers when a proposal is accepted. - Key: proposal_accepted - Output description: - id: string - The unique identifier for the proposal. Example: "cbddb2fd-60b6-4c25-a69c-17fbde34a148". - name: string - The name or title of the proposal. Example: "Sample Proposal". - due_date: string (ISO 8601 format) - The date by which the proposal should be reviewed or completed. Example: "2021-12-31". - preview_url: string - A URL where the preview of the proposal can be accessed. Example: "<https://example.com/pm/proposals/preview/123>". - start_date: string (ISO 8601 format) - The starting date for the proposal activities or services. Example: "2021-12-01". - end_date: string (ISO 8601 format) - The completion date for the proposal activities or services. Example: "2021-12-31". - created_at: string (ISO 8601 format with timezone) - The date and time when the proposal was created. Example: "2024-09-05T11:06:00.910465+05:30". - published_at: string (ISO 8601 format with timezone) - The date and time when the proposal was published. Example: "2024-09-05T11:06:00.910465+05:30". - sent_at: string (optional) - The date and time when the proposal was sent to stakeholders. Empty if not yet sent. Example: "". - staff: array of objects - A list of staff members associated with the proposal. - name: string - The name of a staff member. Example: "John Doe". - email: string - The email address of the staff member. Example: "[email protected]". - signatory: array of objects - A list of client contacts who must sign the proposal. - name: string - The name of the signatory. Example: "Jane Doe". - email: string - The email address of the signatory. Example: "[email protected]". - url: string - A URL specific to the signatory for accessing the proposal. Example: "<https://example.com/shared/proposals/123>". - signed at: The date and time when this signatory signed the proposal. Example: "2024-09-05T11:06:00.910465+05:30" - services: array of objects - The list of services included in the proposal. - name: string - The name of the service. Example: "Sample Service". - description: string - A brief description of the service. Example: "Sample Description". - pricing_method: string - The method used to price the service. Possible values include "fixed", "hourly", etc. Example: "fixed". - billing_type: string - Indicates the type of billing, whether one-time or recurring. Example: "one_time". - price: string (numeric value as string) - The base price of the service before tax. Example: "100". - tax: string (numeric value as string) - The amount of tax applied to the service price. Example: "10". - total: string (numeric value as string) - The total price including tax. Example: "110" - Sample data: { "id": "cbc80cc2-bed2-4a01-9649-2468c62ca5a7", "name": "Sample Proposal", "preview_url": "<https://example.com/pm/proposals/preview/123>", "start_date": "2021-12-01", "end_date": "2021-12-31", "created_at": "2024-09-05T11:08:26.962764+05:30", "published_at": "2024-09-05T11:08:26.962764+05:30", "sent_at": "", "staff": [ { "name": "John Doe", "email": "[email protected]" } ], "signatory": [ { "name": "Jane Doe", "email": "[email protected]", "url": "<https://example.com/shared/proposals/123>", "signed_at": "2024-09-05T11:08:26.962764+05:30" } ], "services": [ { "name": "Sample Service", "description": "Sample Description", "pricing_method": "fixed", "billing_type": "one_time", "price": "100", "tax": "10", "total": "110" } ] } 3. Proposal created - Description: Triggers when a proposal is created as draft. - Key: proposal_created - Output description: - id: string - The unique identifier for the proposal. Example: "cbddb2fd-60b6-4c25-a69c-17fbde34a148". - name: string - The name or title of the proposal. Example: "Sample Proposal". - due_date: string (ISO 8601 format) - The date by which the proposal should be reviewed or completed. Example: "2021-12-31". - preview_url: string - A URL where the preview of the proposal can be accessed. Example: "<https://example.com/pm/proposals/preview/123>". - start_date: string (ISO 8601 format) - The starting date for the proposal activities or services. Example: "2021-12-01". - end_date: string (ISO 8601 format) - The completion date for the proposal activities or services. Example: "2021-12-31". - created_at: string (ISO 8601 format with timezone) - The date and time when the proposal was created. Example: "2024-09-05T11:06:00.910465+05:30". - staff: array of objects - A list of staff members associated with the proposal. - name: string - The name of a staff member. Example: "John Doe". - email: string - The email address of the staff member. Example: "[email protected]". - signatory: array of objects - A list of client contacts who must sign the proposal. - name: string - The name of the signatory. Example: "Jane Doe". - email: string - The email address of the signatory. Example: "[email protected]". - url: string - A URL specific to the signatory for accessing the proposal. Example: "<https://example.com/shared/proposals/123>". - services: array of objects - The list of services included in the proposal. - name: string - The name of the service. Example: "Sample Service". - description: string - A brief description of the service. Example: "Sample Description". - pricing_method: string - The method used to price the service. Possible values include "fixed", "hourly", etc. Example: "fixed". - billing_type: string - Indicates the type of billing, whether one-time or recurring. Example: "one_time". - price: string (numeric value as string) - The base price of the service before tax. Example: "100". - tax: string (numeric value as string) - The amount of tax applied to the service price. Example: "10". - total: string (numeric value as string) - The total price including tax. Example: "110" - Sample data: { "id": "cc7e7245-3fed-4803-b5ac-8113db5bbfb1", "name": "Sample Proposal", "due_date": "2021-12-31", "preview_url": "<https://example.com/pm/proposals/preview/123>", "start_date": "2021-12-01", "end_date": "2021-12-31", "created_at": "2024-09-05T10:54:56.011778+05:30", "staff": [ { "name": "John Doe", "email": "[email protected]" } ], "signatory": [ { "name": "Jane Doe", "email": "[email protected]", "url": "<https://example.com/shared/proposals/123>" } ], "services": [ { "name": "Sample Service", "description": "Sample Description", "pricing_method": "fixed", "billing_type": "one_time", "price": "100", "tax": "10", "total": "110" } ] } 4. Proposal lost - Description: Triggers when a proposal is marked as lost. - Key: proposal_lost - Output description: - id: string - The unique identifier for the proposal. Example: "cbddb2fd-60b6-4c25-a69c-17fbde34a148". - lost_reason: string - The reason for losing this proposal. Example: "Price mismatch". - name: string - The name or title of the proposal. Example: "Sample Proposal". - due_date: string (ISO 8601 format) - The date by which the proposal should be reviewed or completed. Example: "2021-12-31". - preview_url: string - A URL where the preview of the proposal can be accessed. Example: "<https://example.com/pm/proposals/preview/123>". - start_date: string (ISO 8601 format) - The starting date for the proposal activities or services. Example: "2021-12-01". - end_date: string (ISO 8601 format) - The completion date for the proposal activities or services. Example: "2021-12-31". - created_at: string (ISO 8601 format with timezone) - The date and time when the proposal was created. Example: "2024-09-05T11:06:00.910465+05:30". - published_at: string (ISO 8601 format with timezone) - The date and time when the proposal was published. Example: "2024-09-05T11:06:00.910465+05:30". - sent_at: string (optional) - The date and time when the proposal was sent to stakeholders. Empty if not yet sent. Example: "". - staff: array of objects - A list of staff members associated with the proposal. - name: string - The name of a staff member. Example: "John Doe". - email: string - The email address of the staff member. Example: "[email protected]". - signatory: array of objects - A list of client contacts who must sign the proposal. - name: string - The name of the signatory. Example: "Jane Doe". - email: string - The email address of the signatory. Example: "[email protected]". - signed at: The date and time when this signatory signed the proposal. Example: "2024-09-05T11:06:00.910465+05:30" - services: array of objects - The list of services included in the proposal. - name: string - The name of the service. Example: "Sample Service". - description: string - A brief description of the service. Example: "Sample Description". - pricing_method: string - The method used to price the service. Possible values include "fixed", "hourly", etc. Example: "fixed". - billing_type: string - Indicates the type of billing, whether one-time or recurring. Example: "one_time". - price: string (numeric value as string) - The base price of the service before tax. Example: "100". - tax: string (numeric value as string) - The amount of tax applied to the service price. Example: "10". - total: string (numeric value as string) - The total price including tax. Example: "110" - Sample data: { "id": "16e407c3-8aab-481b-8722-a5333da35c51", "name": "Sample Proposal", "due_date": "2021-12-31", "preview_url": "<https://example.com/pm/proposals/preview/123>", "start_date": "2021-12-01", "end_date": "2021-12-31", "created_at": "2024-09-05T11:10:55.185506+05:30", "published_at": "2024-09-05T11:10:55.185506+05:30", "sent_at": "", "staff": [ { "name": "John Doe", "email": "[email protected]" } ], "signatory": [ { "name": "Jane Doe", "email": "[email protected]" } ], "services": [ { "name": "Sample Service", "description": "Sample Description", "pricing_method": "fixed", "billing_type": "one_time", "price": "100", "tax": "10", "total": "110" } ], "lost_reason": "Sample Reason" } 5. Proposal revoked - Description: Triggers when a proposal is revoked. - Key: proposal_revoked - Output description: - id: string - The unique identifier for the proposal. Example: "cbddb2fd-60b6-4c25-a69c-17fbde34a148". - revoke reason: string - The reason for revoking this proposal. Example: "Price mismatch". - name: string - The name or title of the proposal. Example: "Sample Proposal". - due_date: string (ISO 8601 format) - The date by which the proposal should be reviewed or completed. Example: "2021-12-31". - preview_url: string - A URL where the preview of the proposal can be accesse Article truncated. Full version available in source.

Last updated on Apr 04, 2026