# Portant Documentation > The complete Portant product documentation as a single plain-text file, intended for ingestion by language models, AI agents, and docs-aware tools. Each page is labeled with its canonical URL so the source can be cited. > About Portant: the #1 HubSpot app for sales docs. Generate contracts, proposals, quotes, and invoices straight from HubSpot deals using your own Google Docs, Word, or PDF templates, with built-in eSignatures, approvals, line items, and tracking. > Canonical syntax reference (read this before answering syntax questions): > - A tag is the field name from the source wrapped in DOUBLE curly braces: `{{Field name}}`. Field names are case-sensitive and may include spaces. > - Custom tag names, formulas, if-statements, hyperlink tags, and image tags are documented in the "Build → Tags" section below. > - Line items (repeating tables, sorting, grouping) are documented in the "Build → Line items and tables" section below. > - Conditional logic decides WHETHER a document or email is generated. Tags decide WHAT goes inside it. > For a navigable index of the rest of the Portant site (solutions, integrations, customer stories, etc.), see https://www.portant.co/llms.txt > For per-page HTML, follow each section's URL above. > Last generated: 2026-05-06 > Pages included: 158 ================================================================================ # Quickstart Section: Get started URL: https://www.portant.co/docs/getting-started/quickstart/ ================================================================================ Build your first Portant workflow in a few minutes. By the end of this page you'll have an automation that creates a PDF every time someone submits a Google Form, and emails the PDF to whoever you choose. [Watch video](https://youtu.be/8nWfpEg0jQ4) ## What you'll do 1. Create a new workflow 2. Pick a source for the workflow 3. Add a document template and customise it with source data 4. Email the generated document 5. Turn the automation on ## Create a new workflow In the workflows page, click **Add Workflow** in the top right corner. ![](/docs/assets/images/getting-started-quickstart_0_6425053d71f3384e5ed1c4b5_Form_20to_20PDF.png_0.png) ## Pick a source The first step in a new workflow is to choose a source. The source is where your data comes from. In this example we'll use a Google Form, but you can also start from a document template if you'd rather. ![](/docs/assets/images/getting-started-quickstart_1_6425064c71f33844e1d1cd1b_Form_20to_20PDF_20_E2_80_93_201.png_1.png) Pick a Google Form from your Drive, or let Portant create a new one for you. ![](/docs/assets/images/getting-started-quickstart_2_6425065628c3f842d8da3fb9_Form_20to_20PDF_20_E2_80_93_202.png_2.png) Once a form is selected, Portant shows the recent form responses. If there aren't any responses yet, this section stays empty. From here you can open the form to edit it, or copy the public link to share. > Click **✎ Change selected file** under the form name to swap in a different Google Form. ## Add a document template Next, connect the document you want Portant to fill in for each form response. Click **Connect** on the right hand side. ![](/docs/assets/images/getting-started-quickstart_3_64250723596eeca6672bfd2d_Form_20to_20PDF_20_E2_80_93_203.png_3.png) You can use a Google Doc or a Google Slides file as your template. As before, pick an existing file or create a new one. ![](/docs/assets/images/getting-started-quickstart_4_642508098054c58c38775f18_Form_20to_20PDF_20_E2_80_93_204.png_4.png) > You can also generate an email directly from the source, or use templates like fillable PDFs or Google Sheets. Click **Advanced Options** to see the full list. ![](/docs/assets/images/getting-started-quickstart_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FThootpoz36eplEjOsOyI_2Fimage.png_5.png) ![](/docs/assets/images/getting-started-quickstart_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F7F7x0r1nLKKKSgtRVmtL_2Fimage.png_6.png) When you've selected your template, Portant opens it so you can drop form answers into the document. ![](/docs/assets/images/getting-started-quickstart_7_642508d9aeb353d642aaab96_Form_20to_20PDF_20_E2_80_93_205.png_7.png) The table in the top right of the page lists every question in your form. We call this the source table. To place an answer into the document, copy the `{{tag}}` from the source table and paste it where you want the answer to appear. ![](/docs/assets/images/getting-started-quickstart_8_62c5aabc080621d0ef34b7b0_Portant_20Workflow_20-_20Copy_20Tag_20-_20Form.gif_8.png) You can also add [image tags](/docs/features/tags/images/) to documents and presentations, and customise individual tags by clicking on the row. When the document is set up, name the output files by adding tags to the **Output Name** field. ![](/docs/assets/images/getting-started-quickstart_9_6425096e7c31857c02e285ec_Form_20to_20PDF_20_E2_80_93_206.png_9.png) Below the output name field, you can also choose to save each output as a PDF. ![](/docs/assets/images/getting-started-quickstart_10_62c5ad3462b6215283caced4_Portant_20Workflow_20-_20Save_20as_20PDF.gif_10.png) > On the Free plan, a Portant watermark is added to the PDF footer. You can remove the watermark by [upgrading to Pro or Teams](https://app.portant.co/settings/billing). ## Email the document Once the document looks the way you want, add an email step so each output is sent automatically. Click the **+** icon below the document block and pick the **Email** block. ![](/docs/assets/images/getting-started-quickstart_11_64533cabfbd92f4baea09453_Form_20to_20PDF_20_E2_80_93_209.png_11.png) ![](/docs/assets/images/getting-started-quickstart_12_64533cb7dcff965cee00e2f2_Form_20to_20PDF_20_E2_80_93_2010.png_12.png) In the email block, add To, CC, or BCC addresses. You can type addresses directly or use tags from the source table on the right. Then add a subject line and the email body. The formatting controls let you style the message. ![](/docs/assets/images/getting-started-quickstart_13_64533d4b8cdea03bf9124f40_Form_20to_20PDF_20_E2_80_93_2011.png_13.png) The last step is to attach the workflow output. For Google Slides and Docs, you can also choose Viewer, Commenter, or Editor permissions. ![](/docs/assets/images/getting-started-quickstart_14_64533d9ebf2915a7de235fb0_Form_20to_20PDF_20_E2_80_93_2012.png_14.png) Click **Save** at the bottom and close the email block. ## Turn on the workflow When the workflow is ready, click **Automate** in the top right and toggle **Auto-create** on. From now on, every form response will run through the workflow and produce a document. ![](/docs/assets/images/getting-started-quickstart_15_64250ace654f2a24875c8a72_Form_20to_20PDF_20_E2_80_93_207.png_15.png) > You can also process old form responses from this panel using **Process Existing Data**. Run all of them, or pick a custom range. To check it's working, open your form and submit a test response. The new document will show up in the **Outputs** tab. ![](/docs/assets/images/getting-started-quickstart_16_64250b35a127acd903ed49d9_Form_20to_20PDF_20_E2_80_93_208.png_16.png) That's your first workflow done. ================================================================================ # Product updates Section: Get started URL: https://www.portant.co/docs/product-updates/ ================================================================================ A running log of what we've shipped, fixed, and changed in Portant. Newest releases are at the top. ### v1.146 - 23/04/26 * Add HubSpot output location settings to workflow overview * Add document list to eSign portal with multiple documents * Add avatars being captured for Microsoft accounts * Update workflow overview sidebar to have source options * Fix upload to HubSpot for Microsoft templates from SharePoint * Fix capture fields replacement logic for Microsoft templates * Fix field values being lost in eSign portal with multiple documents * Fix workflow names not being truncated in workflow overview ### v1.145 - 15/04/26 * Add new workflow overview for better visibility on automations and workflow status * Fix general issues relating to Microsoft workflows * Fix incorrect OAuth modals showing at certain points ### v1.143 - 01/04/26 * Add "incomplete reasons" to the frontend with improved workflow validation logic * Add selected drive name to the OneDrive section of the outputs page for Microsoft Workflows * Improve load times for the outputs list in the HubSpot UI Portant app * Fix expiring credentials error for Microsoft integration * Fix display issue for team role popover in teams invite modal * Fix issue with workflows not fetching the selected file from Microsoft SharePoint * Fix issue with not being able to cancel signature requests from Portant Sign * Update all servers to run on renewable hamster wheel energy starting April 1st ### v1.142 - 18/03/26 * Improve workflow outputs loading with optimisations * Fix links in HubSpot incorrectly using the Google file instead of the Microsoft file for outputs * Fix output name for Fillable PDFs not being used or allowing for tags * Fix Microsoft picker not having a limited max height for scrollable sharepoint list * Fix various minor UI issues in recent automation item changes ### v1.141 - 11/03/26 * Add new automation item details page * Add "Send via" option for Portant Sign * Add clickable hyperlinks to PDFs in eSign portal * Add email and name capture for signature link workflows * Add Gmail and Outlook sending for signature receipt and confirmation emails * Add fallback when creating PDF outputs to use Portant hosting * Add self serve developer access token settings * Improve workflow list loading with optimisations * Update team invite email to appear from team owner * Update Microsoft login flow to not request all permissions at once * Update retry logic for Google Drive operations * Update PDF only workflow file merge logic * Update expired billing frontend logic * Update eSign portal branding to show team name instead of sender info * Remove preview request from recipients list in Portant Sign * Fix audit trail not being added for fillable PDF document types (incl. Portant Sign) * Fix missing PDF creation/upload for signable documents * Fix issue of aliases not being used * Fix upload to OneDrive error * Fix custom formatting triggering signature request CTA prompt for emails * Fix blank page when clicking Automate button after enabling HubSpot auto-create * Fix email/signature request editor toolbar display issues ### v1.140 - 23/02/26 * Improve reliability of automation system * Update eSign Portal to show the requesters team name if applicable * Update Portant Sign signature request flows to no longer require Google Drive * Update Google Sheet extend tables behaviour to now apply to all sheets in template * Fix Google Slides extend tables to no longer add trailing newlines * Fix NAMEONLY/EMAILONLY returning error string when labeled contact is missing * Fix display text showing for empty link fields * Fix font size conversion from px to pt for rich formatted fields from HubSpot * Fix HubSpot workflow actions hanging in waiting/BLOCK state * Fix stale automation mechanism from stopping large but valid automations from completing ### v1.139 - 11/02/26 * Add new Microsoft file picker and the ability to select files in SharePoint * Update signature related emails to be sent from Portant "via" the user, these now also automatically include a Reply-To field with the user's email * Update link source field types to have blank display text when the link value itself is blank * Update automation panel to take you to outputs when the automation is complete * Fix hyperlinks not being included with Google Docs data grouping tables * Fix template tags not being merged in CC and BCC field of signature requests * Fix bug with deleting items from the HubSpot UI * Fix run from associated object logic for custom objects in HubSpot * Fix embedded editor not showing for files in personal OneDrive * Fix insert CTA logic for HTML editor * Fix HTML editor not visible for email block ### v1.138 - 04/02/26 * Add signature request drafts * Update signature workflows to always product a shareable "preview" document * Update signature workflow duplication method to include all fields ### v1.137 - 28/01/26 * Update runner permissions to upload PDFs and request signatures via Portant Sign * Fix issue where removed team members would still receive approval requests * Fix new item indicator always being shown on global outputs page * Fix issue with public workflows in HubSpot not being runnable * Fix .pdf extenion not being added to signed documents in signature receipt emails ### v1.136 - 16/01/26 * Add email drafts * Add workflow level language setting * Add FORMATDATE formula function * Add branding text colour and dedicated branding page settings * Add "Send from Runner" for Microsoft Outlook emails * Add fallback "move to trash" logic for Google Drive delete file operations * Add OAuth check for Portant Sign * Add HubSpot BCC email logging for Portant Sign * Add receipt emails option to signature workflows and Portant Sign * Add duplicate option for Portant Sign * Add error state to send button in Portant Sign * Add previously removed "move to next" review logic * Add PDF rendering to outputs item preview * Update minimum size for signature, initials, and text placeholders * Update approval and signature request emails with translations for French, Spanish and German * Update custom branding logic to always be included on personal workflows for teams users * Update default zoomable document logic in eSign portal * Update approve and notify logic for approvals * Update NAMEONLY formula to remove ' characters * Update email settings with "Remove branding" to now be togglable * Update global outputs page link to signature flows * Update "Remove Google \_\_\_ output file" toggle, this is now inverted to "Create Google \_\_\_ output file" * Update Portant Sign upload loading modal * Fix Microsoft placeholder images not being converted to regions * Fix eSign portal language setting not always being applied * Fix OneDrive files not reflecting changes made during the review stage * Fix "show in HubSpot" logic to apply to workflow list only * Fix .xlsx extension for email attachments of Microsoft Excel files * Fix paginated workflow count which was including invisible Portant Sign flows * Fix duplicate method for signable WorkflowDocuments * Fix HubSpot document object status * Fix running from associated objects in the HubSpot modal * Fix required signatures fields logic for PDF overlay * Fix Microsoft accounts not showing as connected on permissions page * Fix missing OneDrive files not being displayed in outputs page * Fix workflow page navigation state issue * Remove template cards from workflows page * Remove duplicated "clock" icon in IconPickerField * Remove Portant Sign "open" button * Remove "View workflow" option from Portant Sign ### v1.135 - 03/12/25 * Add sequential approvals * Update review settings to have a full page configuration * Fix small issues with workflow and outputs display logic in HubSpot * Fix small UI and interaction issues in new Portant Sign flows ### v1.134 - 26/11/25 * Add Portant Sign * Add new explore page * Fix return to workflows link for missing workflows * Fix bug with HubSpot capture fields * Fix bug in workflows list endpoint in Developers API ### v1.133 - 12/11/25 * Add Document AI chat interface in BETA * Add chat interface to HubSpot onboarding * Add small design tweaks on new sidebar and home page * Fix bug causing sequental signature request workflows not being sent ### v1.132 - 05/11/25 * Add custom branding feature flag to all tiers besides just Teams * Update HubSpot App Objects to be enabled for all users by default * Update output name field to support longer names * Update automation monitor to automatically restart automations stuck in pending for more than 10 minutes (up to three attempts) * Update signature requests for multiple recipients to ran on runner * Update endpoints to display auth modals for missing or expired credentials * Remove confusing Google Drive "access" UI * Fix infrastructure issue for services instance ### v1.131 - 29/10/25 * Add global outputs page * Add improved signature and capture field tables for Microsoft source table popup * Add small UI improvements for top level pages * Fix duplicated document status bug for HubSpot workflows * Fix pipeline selection bug for HubSpot workflows ### v1.130 - 23/10/25 * Add new homepage and sidebar navigation to Portant Workflow app * Add new educational slides to HubSpot onboarding app * Update user lookup logic for HubSpot app cards * Fix issues with incorrect partially signed * Fix issue with missing label causing crash in HubSpot modal app ### v1.129 - 13/10/25 * Add required text and checkbox fields to Google Docs and Google Slides signable documents * Add ability to change the owner of a workflow * Update signable document field table to use "Copy" instead of "Insert" for Google Docs and Google Slides * Update permissions page to combine individual and teams permissions for HubSpot and Stripe ### v1.128 - 08/10/25 * Add "Instant Workflows" to create documents from HubSpot data without creating a workflow * Add new HubSpot onboarding flow to leverage Instant Workflows ### v1.127 - 25/09/25 * Add teams level authentication for HubSpot * Add HubSpot capture fields to tables in Google Docs * Add HubSpot capture fields for Microsoft Word * Add HubSpot files to outputs page * Add "Send from Runner" and "Send from Owner" options for emails and signature requests * Update HubSpot file logic to replace files after being signed ### v1.126 - 18/09/25 * Add signable fields to PDF templates * Add data grouping to Google Sheets templates * Add signature request view count and last view data to the Portant Document object in HubSpot * Add recipients list to preview link on signature requests * Update select modal to make PDF and Google Sheets templates more prominent ### v1.125 - 10/09/25 * Add HubSpot capture fields to allow signature recipients to provide data that is written directly into HubSpot * Add HubSpot dynamic proposal tools endpoint * Add `{{Workflow Owner}}`, `{{Workflow User}}`, and `{{Workflow Runner}}` automatic merge values to reference users within the workflow * Update HubSpot workflow automation callback handling (this requires further work) ### v1.124 - 06/08/25 * Add description field to workflow to optionally describe what a workflow does * Add "Welcome back" message to sign in screen when locking back in on the same device you previously used Portant on * Add HubSpot OAuth check when duplicated a HubSpot workflow from the template gallery * Add new option for shared workflows to require the runner of the workflow to approve pending documents * Add error details when an automation item fails due to merged cells in a data grouped table * Fix link to HubSpot marketplace listing in banner ### v1.123 - 24/07/25 * Add batching for Portant automations that have been triggered from HubSpot automations * Fix widths in the associated objects list in the HubSpot app modal * Remove outdated instructions from HubSpot OAuth modal ### v1.122 - 09/07/25 * Add new sAdd outgoing webhooks to sendelect workflow modal to be displayed from HubSpot cards * Add automation item preview modal with approve action from HubSpot cards * Add internationalisation to HubSpot cards * Update review logic in HubSpot cards * Remove ability to select "Viewer" team users from being able to approve documents ### v1.121 - 25/06/25 * Fix "generate preview link" setting not being copied over when duplicating a workflow * Fix \[PENDING] prefix not being replaced for signable outputs * Fix bug when changing roles of team members ### v1.120 - 16/06/25 * Add support for review blocks with Microsoft Word and Powerpoint outputs * Add support for attaching outputs from Microsoft Word and Powerpoint templates * Add Microsoft Word and Powerpoint previews to HubSpot app * Improve general support for Microsoft based workflows * Fix default email client for Signature Requests to be Outlook in Microsoft workflows * Fix timestamp formatting issue for signature link workflows ### v1.119 - 11/06/25 * Add previews for Microsoft templates and outputs in the Portant HubSpot app * Fix issue with audit trail not being included in signature link opt-in recipt email * Fix issue with newlines in labels coming from Tally to a Webhook source in Portant * Increase database availability to improve data loading times in the Portant web app ### v1.118 - 04/06/25 * Add audit trail option for signature link workflows * Add PDF viewer and editor password support, this can currently only be enabled per workflow by our support staff, please contact us if this is required for one of your workflows * Fix default date formatting in signature request audit trails * Fix issue with formula fields being used in Fillable PDF templates * Fix various minor security findings based on external review ### v1.117 - 28/05/25 * Add an automatic intermediate redirect page after signature requests are completed when a redirect url has been provided by the sender * Add an invite mechanism for new team members, invites must now be accepted before the user is added to the team * Add various security and UI fixes ### v1.116 - 22/05/25 * Add approval requests to the workflow review block * Add various custom objects plus app object library objects to HubSpot UI extension (Services, Appointments, Listings, Courses) * Fix small general security and bug related findings * Deprecate the ability for new workflows to use 3rd party sources (Glide, Xero, Copper, Tally), this will not affect existing workflows ### v1.115 - 14/05/25 * Add Microsoft file templates (Microsoft Word and Microsoft Powerpoint) * Add default language behaviour to signature requests; the eSign portal will now inherit the workflows owners set language * Fix formatting error for amount of selected items in the automation panel for HubSpot * Fix missing text in the email submit button for signature link workflows ### v1.114 - 30/04/25 * Add save to OneDrive option for users with the Microsoft integration, once authorised, this will store all Microsoft file type outputs in your personal OneDrive account (this may currently be limited to only files of up to size 4MB) * Update workflow folders to no longer show workflows in the teams root folder if they have been moved into a folder * Fix automatic contact selection in the HubSpot modal * Fix "contact us" link on billing page * Fix required field validation on eSign portal * Fix automatic initials filling on eSign portal to now apply to all initals fields ### v1.113 - 23/04/25 * Add internationalisation for English, Spanish, French, and German * Add workflow folders for teams accounts to organise shared workflows * Add sortable field columns to the HubSpot source page, these will use the primary and secondary properties as configured in HubSpot for the selected object type * Add warning when an automation is ran with no items due to source filters * Fix drag and drop file interface on MacOS for the PDF file upload modal * Fix "last updated by" in workflow list to show the correct user instead of the workflow owner ### v1.112 - 16/04/25 * Add top level support for custom and enabled object types from HubSpot * Custom objects can now be selected as the primary workflow object * Enabled objects (Listings, Services, Courses, Appointments) can now be selected as the primary workflow object if these objects are enabled in your HubSpot portal * Association label prefixes can be used from any object type to any other object type * Add warning for when an automation completes with no outputs due to source filtering conditions * Add to email validation for email and signature request editors ### v1.111 - 02/04/25 * Add "Approve" and "Copy Signature Link" actions to the HubSpot UI apps * Update invite to team logic to enforce emails to be provided in lowercase * Update the email sent containing the signed documents for signature link workflows. This now contains the unique document name to reduce the chance of spam filtering * Update source table UI to automatically focus the search bar * Update the automatic workflow configuration flow when selecting a signature link source. This now contains a default template outlining how signature links work * Update UI on the new "agreement modal" in the sign portal to show the correct clickable hover state * Remove Herobrine that was added for April's Fools ### v1.110 - 27/03/25 * Add AI Field sequencing; you can now reference AI fields present in the source field table above the current one being edited * Add "run as initiating user" option to teams workflows. This is the default behaviour for all existing workflows and is disabled by default for all new workflows. When disabled automations will be processed by the owner of the workflow * Add "require all fields" option to signature link workflows * Add "agreement checkbox" flow for signature request that do not contain a signature field * Update Portant AI Fields to now be powered by the ChatGPT-4o model * Fix issue with deleted text fields passing requirement check * Remove backend associated object sorting for HubSpot sources ### v1.109 - 18/03/25 * Add verification service for all documents signed with Portant * Update the eSignature flow to perform more secure and verifiable signed documents ### v1.108 - 11/03/25 * Add Sign In with Microsoft (only for new accounts) * Fix CTA button in signature request editor * Fix HubSpot workflows lookup logic affecting users with multiple Portant accounts using the same HubSpot account ### v1.107 - 20/02/25 * Add `{{Response ID}}` and `{{Submission ID}}` to Tally workflows * Fix approve action being clickable for teams workflow users without run permission * Fix default colour for the CTA button on signature requests ### v1.106 - 13/02/25 * Add sorting field for associated objects in HubSpot workflows * Fix bug with HubSpot workflows when association labels contain a colon ### v1.105 - 06/02/25 * Add signature link workflows * Add search bar to source field table * Fix issue with signable documents being offset by one page ### v1.104.1 - 31/01/25 * Fix bug with attachments being displayed on incorrect email block ### v1.104 - 30/01/25 * Fix various UI/UX issues email and signature request blocks * Fix default template name for Google Sheets templates * Fix Microsoft Excel attachments in email and signature request blocks ### v1.103.1 - 23/01/25 * Add new signature request and email editors with better HTML support ### v1.103 - 22/01/25 * Add the ability for to adjust the number of days for signature requst expiry period * Update text on referrals page to reflect solution partner benefits * Update Sheets Auto-create behaviour and add error reporting * Update backend security ### v1.101 - 08/01/25 * Add option to duplicate workflow modal to control duplicating or using the same template/source files * Add OAuth modal when inserting signature fields into a signable document if not correctly auth'ed * Fix issue with subscription renewal when discounts have been applied * Fix "Ran by" text for long names on output page * Fix typo on workflow document block ### v1.100 - 18/12/24 * Add the ability to run HubSpot custom objects as the primary object of a Portant workflow. Please contact us if you would be interested in trialling this feature. * Add new design and internationalisation for the Portant eSignature portal (v1.0.0) * Add initials fields to signable documents * Add option to signable documents for all fields to be required ### v1.99 - 11/12/24 * Add dropdown to select HubSpot primary object on source creation * Add label to HubSpot source block to show current primary object * Add approval details to output information (by who, and when the item was approved) * Add missing loading state for checking Google Drive permissions on adding a new workflow block * Update HubSpot app automation modal to show PDF preview when original file has been removed * Update HubSpot app cards to improve navigation to actual document that was created ### v1.98 - 04/12/24 * Add run from secondary objects as an option for HubSpot workflows * Add the ability to use the newline character (\n) in formula fields to add formatting in output documents * Add CC and BCC address fields to signature request config (backend only, please contact support if you require use of this feature) * Fix issue with indexed images from Google Forms ### v1.97 - 27/11/24 * Add rate limit retry logic for Gmail sending * Add batch delete option in the workflow list view * Update default ordering of associated objects from HubSpot to have most recent first * Update automation logic to prevent automations being started if they were to exceed the user's current document limit * Fix field level formatting not being applied to labelled associated object fields for HubSpot workflows * Fix issue with uploading and deleting logos for teams * Fix documentation link for outgoing * Fix modal primary action shortcut for windows * Fix UI for the attachments modal when using Google Sheets as a template ### v1.96 - 20/11/24 * Add option to the document block in HubSpot workflow to control if PDF/Microsoft File copies should be uploaded to the source object * Fix bug with associated labels in HubSpot workflows not matching if the display name of the label had been changed ### HubSpot App - 13/11/24 * Launch a new version of the integrated HubSpot app cards using the new UI Extensions framework: ### v1.95 - 06/11/24 * Add custom request headers to outgoing[^1] * Update response status for o to show HTTP status code * Fix UI bug with referrals in settings ### v1.94 - 23/10/24 * Add formula fields for Google Sheets templates * Add TEXTJOIN and TEXTJOINNONEMPTY formulas * Improve "new workflow" flow and add consistency between the block select modal for new and existing workflows * Fix bug where name and apperance of a new workflow is not being saved correctly * Fix tag checking for Google Sheets templates and labeled tags for all source types ### v1.93 - 16/10/24 * Add prefixes to source values for labeled associated objects in HubSpot\ e.g. `{{Client: Contact Email}}` * Fix critical automation delay issues and improve overall speed of automations * Fix bug preventing workflows to be created with a new file in Google Drive * Fix small UI issues on workflow overview and document block pages ### v1.92 - 03/10/24 * Add AI document builder * Fix small spacing and text truncation issues in the workflow overview page ### v1.91 - 25/09/24 * Add SUMIF Formula * Fix various small UI errors ### v1.90 - 18/09/24 * Add PDFs containing fillable forms as a template format * Add new progress and completion page to HubSpot app modal * Add "partially signed" status to HubSpot properties. Note: this does require a manual migration if the "document\_status" property already exists within your HubSpot account. * Add the ability to use templated link values in the signature request redirect URL * Fix issue with SUM formula for groups of values larger than 1,000 ### v1.89 - 04/09/24 * Add signable fields to Google Slides * Add payment links to Google Slides * Add export to Microsoft file formats as an output option (Word, Powerpoint, Excel) * When using HubSpot as a source these files will be automatically uploaded to selected primary object * Add nested formulas to formula fields e.g. `{{=IF(N = 1, SUM(1, 2, 3,))}}` * Add various loading and error states for the HubSpot app modal * Update the background region that is inserted for signable fields, this will now be transparent * Update "Remove Portant PDF branding" option to now be toggle-able * Fix email "to address" validation to allow for apostrophes * Fix tag replacement for Google Sheets to apply to tab (sheet) names * Fix text truncation for workflow names ### v1.88 - 21/08/24 * Add Google Sheets as a template * Fix bug with workflow menu on Firefox not being clickable * Fix rendering for smaller windows ### v1.87 - 14/08/24 * Add [Developer Facing API](https://docs.portant.co/portant-docs/developer) to allow developers to create workflows and automations from their own systems * Add basic Typeform web hook adapter for forms with text fields * Update maximum field length for selected HubSpot source fields ### v1.86 - 07/08/24 * Reintroduce Free Tier ### v1.85 - 31/07/24 * Add labeled contacts for "HubSpot to Signature Request" workflows * Signature request emails that use `{{Contact ...}}` tags will now correspond to the selected contact in HubSpot * Selecting labeled contacts as signature request recipients will now automatically merge data from those contacts by the association labels on contacts configured in HubSpot * Add subtle indicator to workflow button for new workflows to encourage new users to discover of the automation process * Add tab support for navigation around the app * Fix various UI bugs affecting workflow lists * Fix workflow list not rendering in Copper * Remove onboarding questions for new users ### v1.84 - 17/07/24 * Add data grouping for arrays of objects in webhook events * Add shortcut hint for primary action in all modals, Ctrl + Enter on Windows and ⌘ + Enter on Mac * Add implicit `{{Workflow Runner}}` tag which allows the runner of the workflow to be referenced within the workflow itself. This tag is merged as a formatted email e.g. "John Smith <>" and can be used directly in email sending fields. This tag can also be used with the `{{=NAMEONLY(Workflow Runner)}` formula to extract just the name e.g. "John Smith". * Update alias behaviour to always be sent from the workflow owner when an alias is selected. UI has also been improved to convey who an email or signature request will be sent from. * Update webhook addresses to be shareable across workflows. This **currently** can only be configured by Portant Support, please contact us if you require the same webhook address to be used in multiple workflows. ### v1.83 - 10/07/24 * Add Stripe Connect payment links - Collect payments directly from your documents * Fix workflow list issues caused by recent pagination changes * Fix various UI inconsistencies ### v1.82 - 04/07/24 * Add workflow pagination to improve app load times for users with a large amount of workflows * Add browser tab titles for workflows and other pages within the app * Add titles to the workflow navigation icons (Source, Workflow, Outputs) * Add loading modal when removing blocks from a workflow * Fix various UI inconsistencies and typing errors (thanks to our private investigators 🕵️‍♂️) ### v1.81 - 26/06/24 * Add integration checking for team members to ensure all members are connected to the apps your team uses * Add unlisted and slug look ups for workflow templates ### v1.80 - 20/06/24 * Update permissions settings to use an explicit refresh button * Update source field table to use "copy" instead of "insert" for emails and signature requests * Update Google Sign In to use FedCM * Remove material icons as they would cause display issues for windows users * Add support for users to be a part of multiple teams, this feature is not yet public facing ### v1.79.2 - 14/06/24 * Add `{{=IFANY(...)}}` formula to evaluate conditions across a set of data grouped values * Add new HubSpot onboarding portal * Fix signature request/team branding modal navigation * Fix unnecessary warning that is displayed in HubSpot workflows when navigating to outputs page. ### v1.79 - 12/06/24 * Add `{{=LOWER(...)}}` and `{{=UPPER(...)}}` formulas to make text values lower and uppercase respectively * Add formula fields to email, signature requests and output names * Add ability to edit "Review and Sign" button text for signature requests * Update modal UI/UX throughout the app for better consistency * Update workflow duplicate process to automatically enable auto-create if applicable * Fix custom team branding inconsistency between Portant Workflow and the signature portal ### v1.78 - 28/05/24 * Add `~` comparison to =IF formula fields to check if target text is contained within the comparison text\* . e.g. `{{=IF("Bar" ~ "FooBarBaz", "Yes", "No")}}` -> `Yes` \*Order of operands is commutative (i.e. `a ~ b` == `b ~ a`) * Fix false error messaged displayed on outputs page for pending items that are still being created ### v1.77 - 22/05/24 * Add new onboarding flow to help understand how our customers use Portant * Improve HubSpot integration to only fetch associated objects that are used within the workflow ### v1.76 - 15/05/24 * Add gamification with achievements 🎉 * Add Microsoft .NET webhook adapter (used by a range of SaaS products) * Add Copper source option to "New Workflow" and "Add Block" modals for all users * Add placeholder UI for source and template blocks in newly created workflows * Fix bug with file uploads of completed signable documents for both HubSpot and Copper ### v1.75 - 08/05/24 * Add PDF file upload for HubSpot workflows * Add warning modal when navigating from HubSpot source with unsaved changes * Fix minor UI bug on outputs page ### v1.74 - 01/05/24 * Add direct HTML editor to email blocks (BETA) * Add "Draft" and "Signature Requested" status options to output page filters when applicable to the workflow * Add prominent loading indicator to HubSpot source field table after making changes from "manage fields" modal * Fix bug in =IF formula fields for conditions contained quoted strings * Fix missing custom object fields for duplicated HubSpot workflows * Fix text entry fields not displaying in the correct position for signable documents * Experimental: Add extend by page for Google Slides workflows using data grouping. (Please contact support if you would like trial this feature on existing or new workflow) ### v1.73 - 24/04/24 * Add filtering controls to the output page * Fix missing "In Progress" state on the outputs page * Fix email editor not showing inserted drive images * Fix signature request attachments not showing up in some emails * Fix signature request button to have contrast for custom branding colour in email ### v1.72 - 17/04/24 * Add signable document preview link, this now allows for signing to be completed in any order * Add "Show in Hubspot" option to control if a workflow should be visible in the HubSpot actions menu * Improve in-app navigation, Portant will now remember your current position in a workflow when you click back from settings * Update workflow creation process to always ask for a workflow name. To keep your workflows better labeled * Improve outputs page navigation and pagination * Fix multiline text bug in IF formulas ### v1.71 - 03/04/24 * Add [outgoing webhooks](https://docs.portant.co/portant-docs/developer/sending-data-to-webhooks) to send automation event data to app from Portant ### v1.70 - 20/03/24 * Add trust certificates to signable documents/signature requests * Improve HubSpot associated modal picker to handle large amounts of associated objects * Improve date and time parsing to handle more formats (e.g. "13:02" from Google Forms can now be converted to "1:02pm" when configured as a "Date" source field) * Update app flow to allow users to access their workflows after pro trial has expired ### v1.69 - 13/03/24 * Add arithmetic expressions to [formula fields](https://docs.portant.co/portant-docs/personalise-documents/tag-formulas) * Add decimal place modifier `|` to numeric formula fields * Add date arithmetic and built in formulas (MINUTES, HOURS, DAYS, WEEKS) ### v1.68 - 06/03/2024 * Add HubSpot associated object picker deselect/select all input * Add HubSpot override signature request options * Improve set of default Copper source fields ### v1.67 - 26/02/2024 * Add HubSpot associated object picker ### v1.66 - 19/02/2024 * Add Copper CRM integration ### v1.65 - 12/02/2024 * Improve Google Drive file access for teams workflows ### v1.64 - 29/01/2024 * Add default date and number formatting user settings (applies to formula fields as well) * Add confirmation modal to be displayed when changing HubSpot primary object * Add update warning to be displayed on login page when backend is down * Add "ran by" user's name to outputs page items * Add =ROUND formula field * Fix preview navigation and review loading issues * Fix search on teams management page to now be case insensitive * Fix email editor save state display bug * Fix automatic navigation when adding a new document before an existing one * Fix bug that prevents source conditions from being updated or deleted * Fix OAuth display updates on settings and workflow template pages ### v1.63 - 23/01/2024 * Improve team manager interface with viewer, runner, editor, admin and owner roles * Add last edited and owner names to team workflow rows in list view * Add always present side navigation bar ### v1.62 - 08/01/2024 * Add "User" field type for HubSpot users * Fix trailing slash in custom folder path causing a blank folder to be created * Improve extend tables (Data Grouping) for Google Slides * Improve backend error recording for better support ### v1.61 - 03/01/2024 * Add variable amount of seats to teams plans, this is now displayed on the teams settings page * Fix formula fields that were coming up as invalid in source field table * Fix logic to strip invalid characters from emails when contained in tags ### v1.60.3 - 20/12/2023 * Add DD.MM.YYYY date formatting option * Add `=TRUNCATE(text, length)` formula * Fix PDF file name issue for periods "." ### v1.60 - 16/12/2023 * Update "start automation" flow to prevent timeout errors * Add new share button UI and flow to help users upgrade to Teams * Add ability for support staff to capture automation item data to help track down errors * Begin capturing trust data for signature requests ### v1.59 - 06/12/2023 * Improve frontend data caching * Add subscription upgrade modal after user has upgraded * Add new sign up page (initial change for new onboarding flow, coming soon) * Add email error reporting to the outputs page * Fix HubSpot status property for "Signature Requested" status ### v1.58 - 23/11/2023 * Update HubSpot Portant properties to include signature request link and pdf link * Add Portant block to HubSpot workflow automations * Fix number formatting to not include extra zeros ### v1.57 - 15/11/2023 * Add support for nested associations from HubSpot * e.g. `Deal -> Deal Month -> Ad Plan:`\ This will include ‘Ad Plan’ Data when merging on the ‘Deal’ * Change aggregated formula fields that to expect numeric values to treat NaN (Not a Number) fields as zero to continue the aggregation rather than causing the entire field to be blank [^1]: ================================================================================ # HubSpot Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/ ================================================================================ Use HubSpot data to generate proposals, quotes, contracts, invoices and onboarding packs straight from a deal, contact, company, ticket or custom object. This page gives you a quick overview of the integration and points you at the right guide for each step. ## Start here If you're setting up the integration for the first time, follow these in order: 1. [Install the Portant app in HubSpot](/docs/sources/hubspot/how-to-install-the-portant-app-in-hubspot/) and grant the permissions you need. 2. [Add the Portant app cards](/docs/sources/hubspot/how-to-install-the-portant-app-in-hubspot/how-to-add-portant-app-cards-to-hubspot/) so you can run workflows from inside HubSpot records. 3. [Create a document in HubSpot](/docs/sources/hubspot/create-a-document-in-hubspot/) by setting up your first workflow and generating an output. ## Build your workflow Once the app is installed, these guides cover the rest of the setup: - [Manage and select HubSpot properties](/docs/sources/hubspot/how-to-manage-and-select-hubspot-properties/) to choose which fields are available in your templates. - [Full list of available HubSpot properties](/docs/sources/hubspot/how-to-manage-and-select-hubspot-properties/full-list-of-available-hubspot-properties/) for reference when you're picking tags. - [Generate documents from any custom object in HubSpot](/docs/sources/hubspot/generate-documents-from-any-custom-object-in-hubspot/) if your CRM uses custom objects like Subscriptions or Onboarding records. - [Add multiple line items into a single document](/docs/sources/hubspot/add-multiple-line-items-into-a-single-document/) for quotes, invoices and contracts. ## Automate and trigger - [Trigger HubSpot workflows from Portant](/docs/sources/hubspot/trigger-hubspot-workflows-from-portant/) using document statuses like Signed, Sent or Approved. - [Add a Portant action to a HubSpot workflow](/docs/sources/hubspot/add-a-portant-action-to-a-hubspot-workflow/) to generate documents automatically when a HubSpot trigger fires. - [Add deal tags using Portant document statuses](/docs/sources/hubspot/add-deal-tags-using-portant-document-statuses/) so deals are visually labelled when documents are signed. - [Review and approve documents in HubSpot](/docs/sources/hubspot/review-and-approve-documents-in-hubspot/) without leaving the record. ## Sign and capture data - [Portant eSignatures + HubSpot](/docs/sources/hubspot/portant-esignatures-+-hubspot/) for sending signature requests to HubSpot contacts. Full eSignatures docs live in the [eSignatures section](/docs/send/esignatures/). - [Capture data back to HubSpot with HubSpot capture fields](/docs/sources/hubspot/capture-data-back-to-hubspot-with-hubspot-capture-fields/) so signers fill in fields that update your CRM. ## Find your documents - [How to view created documents in HubSpot](/docs/sources/hubspot/how-to-view-created-documents-in-hubspot/) covers the app card, activity feed, custom properties and attachments. ## Disconnect HubSpot To remove the integration, go to [Portant Settings → Permissions](https://app.portant.co/settings/permissions), click **Manage** next to HubSpot, then click **Disconnect Portant from HubSpot**. To remove the app from HubSpot itself, open the HubSpot App Marketplace, click **Manage apps**, then choose **Actions → Uninstall** under Portant. Removing the app from HubSpot doesn't delete anything from your Portant account or your Google Drive. If you want a full data deletion, email and we'll handle it within two business days. ================================================================================ # HubSpot › Install the Portant app in HubSpot Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/how-to-install-the-portant-app-in-hubspot/ ================================================================================ Install the Portant app from the HubSpot App Marketplace, then grant the permissions you need to generate documents from your CRM. This page covers what's required, what's optional, and how to disconnect. ## Install the app Go to the [Portant listing on the HubSpot App Marketplace](https://ecosystem.hubspot.com/marketplace/apps/sales/sales-enablement/portant-hubspot-google-docs-integration) and click **Install app**. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F5d1WcXOphM7Vk6nOkFx1_2Fpika-1706753721) Once the app is installed, you can [create your first workflow and generate a document](/docs/sources/hubspot/create-a-document-in-hubspot/). ## Required HubSpot permissions You need a few permissions on your HubSpot user before you can install the app. If any are missing, HubSpot will block the install. ### App marketplace access Lets you install third-party apps. Without this you can't add Portant. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FbXbSIVDO1sPm8EHRpFFp_2Fpika-1706754195) ### CRM objects These give Portant access to your records. View (Read) is used to fetch data for an automation. Edit (Write) is used to save document details back to the related record. - Contacts - Companies - Deals ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F10pYnszpVt23jrMllVZj_2Fpika-1706754303) ### Edit property settings Lets Portant create the custom properties used to save document links, statuses, and other output details to HubSpot. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FllF2aGt1gfmLOxRFIKx6_2Fpika-1755034980) ## Optional HubSpot permissions These aren't required to install Portant, but each one unlocks a specific feature. ### Contact lists Lets Portant run an automation against an entire HubSpot list of contacts. View access is enough. ![Open the Marketing menu then turn on 'Lists'](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FsgGJBUdDk8Lo4a5Q2RhE_2Fpika-1706754832) ### Custom properties Lets users create and edit custom properties on existing HubSpot objects. Portant uses this to add the custom properties that store document statuses and links. ### HubSpot users information Lets Portant convert HubSpot user IDs into readable names and emails (often used for the "owner" of a deal or other record). ![Open the Settings access menu](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FRhrmNTmCPRSl8YgfeG9e_2Fpika-1706755041) ![Then turn on 'User table access'](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FuS80QgLxKPdmxzsAAgfP_2Fpika-1706755153) ### HubSpot custom objects Only needed if you've added [custom objects](https://knowledge.hubspot.com/records/use-custom-objects) to your HubSpot account. Custom objects are an Enterprise feature. This lets Portant fetch data from custom objects when they're associated with the primary object in an automation. View access is enough. In the example below, "Ducks" is a custom object. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot_7_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FziqINEttvjgiJo4Ychz7_2FScreenshot_2020) ### Notes (for saving PDFs as attachments) Lets Portant save generated PDFs as attachments on the HubSpot record. Grant access to the Notes permission to enable this. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot_8_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FZ3fCtjrIMntg5qvBWrfu_2Fpika-1723050044) ### Portant actions in HubSpot workflows If you want to run a Portant workflow as a step inside a HubSpot workflow, you need this. There's a quirk in HubSpot: even though there's a granular workflow permission, "Super Admin" is currently required to set up an app action. We've made this optional because of that. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot_9_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FjRew2VYcr8IbzGTvXcyU_2Fpika-1706755677) > Note: Once a user has set up the action with Super Admin permissions, you can revert their permission and they'll still be able to use Portant automation actions. ## Disconnect Portant from HubSpot To disconnect: 1. Go to [Portant Settings → Permissions](https://app.portant.co/settings/permissions). 2. Click **Manage** next to HubSpot. 3. Click **Disconnect**. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot_10_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F5v5gl10J6WWM0w5BXl0I_2Fpika-1706755931) To uninstall Portant from HubSpot itself: 1. Open the HubSpot App Marketplace. 2. Click **Manage apps**. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot_11_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FV83XatvDn58PfwYVwYYS_2Fpika-1706756070) 3. Click **Actions → Uninstall** under Portant. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot_12_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F9gjr7THfOuZRflKzzRYg_2Fpika-1706756165) Uninstalling removes the Portant app from HubSpot. It doesn't delete anything from your Portant account or your Google Drive. If you want a full data deletion, email and we'll handle it within two business days. ================================================================================ # HubSpot › Add Portant app cards to HubSpot Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/how-to-install-the-portant-app-in-hubspot/how-to-add-portant-app-cards-to-hubspot/ ================================================================================ Portant app cards put document actions and recent outputs directly on your HubSpot records, so you can generate, view and approve documents without leaving the deal, contact, company or ticket. This guide shows you how to add and position them. [Watch video](https://youtu.be/rnGaLFm7s8k) Before you start, [install the Portant app in HubSpot](/docs/sources/hubspot/how-to-install-the-portant-app-in-hubspot/). ## Add app cards to a record view ### 1. Open the record customisation options Open any record (a contact, company, deal or ticket) and click **Customize** in the top-right corner. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot-how-to-add-portant-app-cards-to-hubspot_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FAbmC9As6dM9F4YlSpACY_2Fimage.png_0.png) ### 2. Pick the view to customise Choose the default view, or a specific view, that you want the card on. Click into it to open the customisation settings. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot-how-to-add-portant-app-cards-to-hubspot_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FlHxqe8noJEwUzAVR7ry3_2Fimage.png_1.png) ### 3. Add a Portant card In the middle section, hover over the first item until the green **Add Cards** plus icon appears, then click it. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot-how-to-add-portant-app-cards-to-hubspot_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FR1yblxml1Q18TkcGUX3l_2Fimage.png_2.png) Switch to the **Card library** tab, search for "Portant", then click **+ Add card** on the card you want. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot-how-to-add-portant-app-cards-to-hubspot_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FEyo1bXEkvA2w5xSiWtT4_2Fimage.png_3.png) ### 4. Position the card Scroll to the bottom of the list to find the new card, then drag it to where you want it on the record view. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot-how-to-add-portant-app-cards-to-hubspot_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FgaXfgLQ5TvkWuLCgNNBa_2Fimage.png_4.png) ### 5. Add the card to the right-hand sidebar (optional) Repeat the same steps for the right-hand sidebar if you want a card there too. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot-how-to-add-portant-app-cards-to-hubspot_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FUrwjvv7TjdLLOqZNNJNe_2Fimage.png_5.png) The "Portant Latest Documents" card is a good fit for the sidebar. Find it in the **Card library** tab and click **+ Add card**. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot-how-to-add-portant-app-cards-to-hubspot_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F3A6fAE16n8tmTOZxnw3O_2Fimage.png_6.png) ### 6. Remove the old CRM card (optional) If you no longer need it, you can remove the old "Portant - Document Automation" CRM card. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot-how-to-add-portant-app-cards-to-hubspot_7_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FjccXrfTElzU4TIfmGYWq_2Fimage.png_7.png) ### 7. Save and exit Click **Save and Exit** to apply the changes. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot-how-to-add-portant-app-cards-to-hubspot_8_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fjnbn21IqKZZzW7IaXwR7_2Fimage.png_8.png) ### 8. Check the record view Open a record to confirm the new card is showing in the right place and the old one is gone. Tweak the position if needed. ![](/docs/assets/images/sources-hubspot-how-to-install-the-portant-app-in-hubspot-how-to-add-portant-app-cards-to-hubspot_9_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F0OVFa5ekV3j7Van8MJKU_2Fimage.png_9.png) For more on customising HubSpot record views, see HubSpot's own [Customize records](https://knowledge.hubspot.com/object-settings/customize-records) guide. ================================================================================ # HubSpot › Create a document in HubSpot Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/create-a-document-in-hubspot/ ================================================================================ Once your Portant workflow is set up with HubSpot as the source, you can generate a document directly from any HubSpot record in a few clicks. This guide walks through running your first one. ## 1. Open a HubSpot record Open the deal, contact, company, ticket or custom object that your workflow is connected to. The Portant app card appears in the right-hand panel of the record. ![](/docs/assets/images/sources-hubspot-create-a-document-in-hubspot_0_AD_4nXekZmWDjndcfUofG990K2XSzO9AyDa3qdYMjSdzaS4TyDp8yiaK0CJZgHFVbDWeKvQ9d5pkjZz1) > If you don't see the Portant app cards on your records, follow [Add Portant app cards to HubSpot](/docs/sources/hubspot/how-to-install-the-portant-app-in-hubspot/how-to-add-portant-app-cards-to-hubspot/) to add them. ## 2. Pick a workflow and start the automation Each Portant workflow is tied to one HubSpot object type (for example, deals or contacts). Only workflows that match the record you're on will appear in the action list. To generate a document: 1. Click **Generate / Actions** on the Portant card. 2. Choose the workflow you want to run. If your workflow doesn't show up, double-check you're on the right object type. ![](/docs/assets/images/sources-hubspot-create-a-document-in-hubspot_1_AD_4nXcJ7-tWbjl6u9pzhnHFWBayNKdTWTd8BP_ZG6IBf7EctPgqPmJBsw0AIo61gB52T_kAVCdpFTxZ) A modal opens where you can select or deselect any associated objects (for example, choosing which related contact to use). Once you're happy, click **Start Automation**. ![](/docs/assets/images/sources-hubspot-create-a-document-in-hubspot_2_AD_4nXc9EpA5V32L6gSo0CrrCzN7Gx-fzSRvAT0rkG0AqDJrYaGHQuascavdI-tnhb6lm7nf-bIQtKFX) ## 3. Generate and view your document The document takes a few seconds to generate. ![](/docs/assets/images/sources-hubspot-create-a-document-in-hubspot_3_AD_4nXe-KlGcn-QOYE8RMX9ihctopBb6g6tvcemgpXFrpxf0mFqHgxj7hf-f4P7OtHgGtRSNCoZvigQJ) When it's ready, you'll see a preview in the modal. You can close the modal once you've checked it. ![](/docs/assets/images/sources-hubspot-create-a-document-in-hubspot_4_AD_4nXcAssQ9H9H8BuqO9Md2urEVe6FuwDOycahd7JOMdI74bv4M9Yno7rEgoXbKXariHpBUoDtwv6Dy) Refresh the HubSpot page and the document link will appear in the Portant app card. ![](/docs/assets/images/sources-hubspot-create-a-document-in-hubspot_5_AD_4nXdY3-wgOFPS_XnfjA0k43NHtsOV3-svN4YkCNy6LTrTbCQSwoOtT6g6DS-F15Q0Iv0LVrqhT2Ma) The document is also saved to a folder in your Google Drive. If you set it up that way in the workflow, the PDF version will be attached to the HubSpot record too. For more places to find your documents, see [How to view created documents in HubSpot](/docs/sources/hubspot/how-to-view-created-documents-in-hubspot/). ![](/docs/assets/images/sources-hubspot-create-a-document-in-hubspot_6_AD_4nXfo5vf01kQQjOwtqUB_wst-Q52fVu8rYb1lVchU7vuTfk4PuHbDLETT9K74S7dw1n-wZs3jNe2f) ## 4. Use Portant properties to drive HubSpot automations Every time Portant generates a document, it saves details (link, status, workflow name, and more) to a set of custom HubSpot properties on the record. You can use those properties to trigger other HubSpot workflows. For a worked example, see [Trigger HubSpot workflows from Portant](/docs/sources/hubspot/trigger-hubspot-workflows-from-portant/). ================================================================================ # HubSpot › Manage and select HubSpot properties Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/how-to-manage-and-select-hubspot-properties/ ================================================================================ Choose which HubSpot properties (standard or custom) are available to use as tags inside your templates. This page covers how to pick those fields, how to use association labels for related contacts, and how to reference labelled contacts in templates and emails. For a full reference of every standard property, see [Full list of available HubSpot properties](/docs/sources/hubspot/how-to-manage-and-select-hubspot-properties/full-list-of-available-hubspot-properties/). ## Manage HubSpot properties from a workflow This guide assumes you've already set up a workflow with HubSpot as the source. If you haven't, start with the [HubSpot overview](/docs/sources/hubspot/). In your workflow's Source block, click **Manage HubSpot Fields**. ![](/docs/assets/images/sources-hubspot-how-to-manage-and-select-hubspot-properties_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FzqpPdyMvfcYdGYk59yV0_2Fpika-1744712912) A modal opens with every object connected to your HubSpot account. Select the object you want to add properties from. ![](/docs/assets/images/sources-hubspot-how-to-manage-and-select-hubspot-properties_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FsbQ7sJKqgOT9clNVaqWh_2Fpika-1744713096) Click the dropdown to see all the properties on that object. Use the search box if the list is long. ![](/docs/assets/images/sources-hubspot-how-to-manage-and-select-hubspot-properties_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FsUrv5g11SoEacCDab2Ra_2Fpika-1744713214) Tick the properties you want, untick the ones you don't, then click **Save**. > Note: You can also sort associated objects by field and order, which is useful when you're building [repeating tables for line items](/docs/sources/hubspot/add-multiple-line-items-into-a-single-document/). The sort options live at the bottom of the property list for each object. ![](/docs/assets/images/sources-hubspot-how-to-manage-and-select-hubspot-properties_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fca3fzpoRtupYGlnaYymr_2Fpika-1744713317) ## Insert data from labelled contacts (or any associated object) > Association labels work for any connected objects in HubSpot, not just contacts. If a deal, ticket or company has more than one contact attached, you can use HubSpot association labels to tell them apart. Labels make it easy to put the right contact's details in the right spot in your template (for example, a "First Signer" and a "Co-Signer"). For how to set them up in HubSpot, see HubSpot's [Create and use association labels](https://knowledge.hubspot.com/object-settings/create-and-use-association-labels). ![How to add an association label to a contact](/docs/assets/images/sources-hubspot-how-to-manage-and-select-hubspot-properties_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FVx96NW4NbWQb523nwycW_2FScreenshot_2020) ## Use labelled contact tags in a template To pull in a labelled contact's details, use a tag in this format: `{{Label: Contact First Name}}` Where `Label` is the [association label](https://knowledge.hubspot.com/object-settings/create-and-use-association-labels) on the contact. > Important: there must be a space after the colon, before the property name. > > Wrong: `{{Label:Contact Last Name}}` > > Right: `{{Label: Contact Last Name}}` For contacts labelled "First Signer" and "Co-Signer", the tags would be: - `{{First Signer: Contact First Name}}` `{{First Signer: Contact Last Name}}` - `{{Co-Signer: Contact First Name}}` `{{Co-Signer: Contact Last Name}}` ![Where the association labels appear on contacts](/docs/assets/images/sources-hubspot-how-to-manage-and-select-hubspot-properties_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FuizLkwwryxEQf2QCNQxH_2Fpika-1725574285) ## Use labelled tags in an email block The same labelled tags work in the **TO**, **CC** and **BCC** fields of the email block, so each signer automatically gets a copy of the signed document. For example: - `{{First Signer: Contact Email}}` - `{{Co-Signer: Contact Email}}` ![](/docs/assets/images/sources-hubspot-how-to-manage-and-select-hubspot-properties_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FjKT0GRdO089682XyvJ8Y_2Fimage.png_6.png) ================================================================================ # HubSpot › Full list of HubSpot properties Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/how-to-manage-and-select-hubspot-properties/full-list-of-available-hubspot-properties/ ================================================================================ A reference of every standard HubSpot property you can use as a tag in your Portant templates, grouped by object: Deals, Contacts, Companies, Tickets, Line Items and Meetings. Custom properties from your own account are also available, alongside the Portant-specific properties listed at the bottom. For how to switch these properties on for a workflow, see [Manage and select HubSpot properties](/docs/sources/hubspot/how-to-manage-and-select-hubspot-properties/). > Note: This section also includes the custom Portant properties that are created on your records when a document is generated.
Deals {{Amount in company currency}} The amount of the deal, using the exchange rate, in your company's currency. {{Days to close}} The number of days the deal took to close. {{Currency}} Currency code for the deal. {{Annual contract value}} The annual contract value (ACV) of this deal. {{Business units}} The business units this record is assigned to. {{Deal Collaborator}} Owner ids of the users involved in closing the deal. {{Deal Split Users}} The owner ids of all associated Deal Splits. This property is set automatically by HubSpot. {{Latest Source}} Source for the contact either directly or indirectly associated with the last session activity for this deal. {{Latest Source Company}} Source for the company with an associated contact with the last session activity for this deal. {{Latest Source Contact}} Source for the directly associated contact with the last session activity for this deal. {{Latest Source Data 1}} Additional source details of the last session attributed to any contacts that are directly or indirectly associated with this deal. {{Latest Source Data 1 Company}} Additional source details of the last session attributed to any contacts that are indirectly associated with this deal (via a company association). {{Latest Source Data 1 Contact}} Additional source details of the last session attributed to any contacts that are directly associated with this deal. {{Latest Source Data 2}} Additional source details of the last session attributed to any contacts that are directly or indirectly associated with this deal. {{Latest Source Data 2 Company}} Additional source details of the last session attributed to any contacts that are indirectly associated with this deal. {{Latest Source Data 2 Contact}} Additional source details of the last session attributed to any contacts that are directly associated with this deal. {{Latest Source Timestamp}} Timestamp of when latest source occurred for either a directly or indirectly associated contact. {{Latest Source Timestamp Company}} Timestamp of when latest source occurred for an indirectly associated contact. {{Latest Source Timestamp Contact}} Timestamp of when latest source occurred for a directly associated contact. {{Original Source Type}} Original source for the contact with the earliest activity for this deal. {{Original Source Data 1}} Additional information about the original source for the associated contact, or associated company if there is no contact, with the oldest value for the Time first seen property. {{Original Source Data 2}} Additional information about the original source for the associated contact, or associated company if there is no contact, with the oldest value for the Time first seen property. {{Annual recurring revenue}} The annual recurring revenue (ARR) of this deal. {{HubSpot Campaign}} The marketing campaign the deal is associated with. {{Closed Deal Amount}} Returns the amount if the deal is closed. Else, returns 0. {{Closed Deal Amount In Home Currency}} Returns the amount in home currency if the deal is closed. Else, returns 0. {{Closed won count}} Returns 1 if this deal is closed won. {{Closed Won Date (Internal)}} Returns closedate if this deal is closed won. {{Created by user ID}} The user that created this object. This value is automatically set by HubSpot and may not be modified. {{Date entered 'Appointment Scheduled (Sales Pipeline)'}} The date and time when the deal entered the 'Appointment Scheduled' stage, 'Sales Pipeline' pipeline. {{Date entered 'Closed Lost (Sales Pipeline)'}} The date and time when the deal entered the 'Closed Lost' stage, 'Sales Pipeline' pipeline. {{Date entered 'Closed Won (Sales Pipeline)'}} The date and time when the deal entered the 'Closed Won' stage, 'Sales Pipeline' pipeline. {{Date entered 'Contract Sent (Sales Pipeline)'}} The date and time when the deal entered the 'Contract Sent' stage, 'Sales Pipeline' pipeline. {{Date entered 'Decision Maker Bought-In (Sales Pipeline)'}} The date and time when the deal entered the 'Decision Maker Bought-In' stage, 'Sales Pipeline' pipeline. {{Date entered 'Presentation Scheduled (Sales Pipeline)'}} The date and time when the deal entered the 'Presentation Scheduled' stage, 'Sales Pipeline' pipeline. {{Date entered 'Qualified To Buy (Sales Pipeline)'}} The date and time when the deal entered the 'Qualified To Buy' stage, 'Sales Pipeline' pipeline. {{Date exited 'Appointment Scheduled (Sales Pipeline)'}} The date and time when the deal exited the 'Appointment Scheduled' stage, 'Sales Pipeline' pipeline. {{Date exited 'Closed Lost (Sales Pipeline)'}} The date and time when the deal exited the 'Closed Lost' stage, 'Sales Pipeline' pipeline. {{Date exited 'Closed Won (Sales Pipeline)'}} The date and time when the deal exited the 'Closed Won' stage, 'Sales Pipeline' pipeline. {{Date exited 'Contract Sent (Sales Pipeline)'}} The date and time when the deal exited the 'Contract Sent' stage, 'Sales Pipeline' pipeline. {{Date exited 'Decision Maker Bought-In (Sales Pipeline)'}} The date and time when the deal exited the 'Decision Maker Bought-In' stage, 'Sales Pipeline' pipeline. {{Date exited 'Presentation Scheduled (Sales Pipeline)'}} The date and time when the deal exited the 'Presentation Scheduled' stage, 'Sales Pipeline' pipeline. {{Date exited 'Qualified To Buy (Sales Pipeline)'}} The date and time when the deal exited the 'Qualified To Buy' stage, 'Sales Pipeline' pipeline. {{Days to close (without rounding)}} The number of days the deal took to close, without rounding. {{Deal amount calculation preference}} Specifies how deal amount should be calculated from line items. {{Deal Score}} The predictive deal score calculated by Hubspot AI to score the deal health. {{Deal probability}} The probability a deal will close. This defaults to the deal stage probability setting. {{Deal stage probability shadow}} Fall back property for calculating the deal stage when no customer override exists. Probability between 0 and 1 of the deal stage. Defaults to 0 for unknown deal stages. {{Exchange rate}} This is the exchange rate used to convert the deal amount into your company currency. {{Forecast amount}} The custom forecasted deal value calculated by multiplying the forecast probability and deal amount in your company’s currency. {{Forecast probability}} The custom percent probability a deal will close. {{Is Deal Closed?}} True if the deal was won or lost. {{Is Closed Won}} True if the deal is in the closed won state, false otherwise. {{Deal Split Added}} Indicates if the deal is split between multiple users. {{Is open count}} 1 if the deal is not closed won/lost, else 0. {{Last Modified Date}} Most recent timestamp of any property update for this deal. This includes HubSpot internal properties, which can be visible or hidden. This property is updated automatically. {{Likelihood to close by the close date}} Hubspot predicted likelihood between 0 and 1 of the deal to close by the close date. {{Global Term Line Item Discount Percentage}} For internal HubSpot Application use only. Global term for the discount percentage applied. {{Global Term Line Item Discount Percentage Enabled}} For internal HubSpot Application use only. Indicates if the Global term for the discount percentage is enabled. {{Global Term Line Item Recurring Billing Period}} For internal HubSpot Application use only. Global term for product recurring billing duration. {{Global Term Line Item Recurring Billing Period Enabled}} For internal HubSpot Application use only. Indicates if the Global term for product recurring billing duration is enabled. {{Global Term Line Item Recurring Billing Start Date}} For internal HubSpot Application use only. Global term for recurring billing start date for a line item. {{Global Term Line Item Recurring Billing Start Date Enabled}} For internal HubSpot Application use only. Indicates if the Global term for recurring billing start date for a line item is enabled. {{Global Term Line Item Recurring Billing Frequency}} For internal HubSpot Application use only. Global term for how frequently the product is billed. {{Global Term Line Item Recurring Billing Frequency Enabled}} For internal HubSpot Application use only. Indicates if the Global term for how frequently the product is billed is enabled. {{Forecast category}} The likelihood a deal will close. This property is used for manual forecasting your deals. {{Merged Deal IDs}} The list of Deal record IDs that have been merged into this Deal. This value is automatically set by HubSpot and may not be modified. {{Monthly recurring revenue}} The monthly recurring revenue (MRR) of this deal. {{Next step}} A short description of the next step for the deal. {{Number of Active Deal Registrations}} The number of active deal registrations associated with this deal. This property is set automatically by HubSpot. {{Number of Deal Registrations}} The number of deal registrations associated with this deal. This property is set automatically by HubSpot. {{Number of Deal Splits}} The number of deal splits associated with this deal. This property is set automatically by HubSpot. {{Number of Associated Line Items}} The number of line items associated with this deal. {{Number of target accounts}} The number of target account companies associated with this deal. This property is set automatically by HubSpot. {{Record ID}} The unique ID for this record. This value is automatically set by HubSpot and may not be modified. {{Record Creation Source}} Source (PropertySource) that created this object record. {{Record Creation Source ID}} The sourceId -- further detail -- of the source that created this object record. {{Record Source}} How this record was created. {{Record Creation Source User ID}} User ID of the user who initiated creation of this object record. {{Pinned Engagement ID}} The object ID of the current pinned engagement. This value is automatically set by HubSpot and may not be modified. {{The predicted deal amount}} Returns the multiplication of the deal amount times the predicted likelihood of the deal to close by the close date. {{The predicted deal amount in your company's currency}} Returns the multiplication of the deal amount in your company's currency times the predicted likelihood of the deal to close by the close date. {{Priority}} The priority of the deal {{Weighted amount}} Returns the multiplication of the amount times the probability of the deal closing. {{Weighted amount in company currency}} Returns the multiplication of the amount in home currency times the probability of the deal closing. {{Read Only Object}} Is the object read only. {{Source Object ID}} The ID of the object from which the data was migrated. This is set automatically during portal data migration. {{Deal Tags}} List of tag ids applicable to a deal. This property is set automatically by HubSpot. {{Total contract value}} The total contract value (TCV) of this deal. {{Time in 'Appointment Scheduled (Sales Pipeline)'}} The total time in seconds spent by the deal in the 'Appointment Scheduled' stage, 'Sales Pipeline' pipeline. {{Time in 'Closed Lost (Sales Pipeline)'}} The total time in seconds spent by the deal in the 'Closed Lost' stage, 'Sales Pipeline' pipeline. {{Time in 'Closed Won (Sales Pipeline)'}} The total time in seconds spent by the deal in the 'Closed Won' stage, 'Sales Pipeline' pipeline. {{Time in 'Contract Sent (Sales Pipeline)'}} The total time in seconds spent by the deal in the 'Contract Sent' stage, 'Sales Pipeline' pipeline. {{Time in 'Decision Maker Bought-In (Sales Pipeline)'}} The total time in seconds spent by the deal in the 'Decision Maker Bought-In' stage, 'Sales Pipeline' pipeline. {{Time in 'Presentation Scheduled (Sales Pipeline)'}} The total time in seconds spent by the deal in the 'Presentation Scheduled' stage, 'Sales Pipeline' pipeline. {{Time in 'Qualified To Buy (Sales Pipeline)'}} The total time in seconds spent by the deal in the 'Qualified To Buy' stage, 'Sales Pipeline' pipeline. {{Unique creation key}} Unique property used for idempotent creates. {{Updated by user ID}} The user that last updated this object. This value is automatically set by HubSpot and may not be modified. {{User IDs of all notification followers}} The user IDs of all users that have clicked follow within the object to opt-in to getting follow notifications. {{User IDs of all notification unfollowers}} The user IDs of all object owners that have clicked unfollow within the object to opt-out of getting follow notifications. {{User IDs of all owners}} The user IDs of all owners of this object. {{Cumulative time in "Appointment Scheduled (Sales Pipeline)"}} The cumulative time in seconds spent by the deal in the 'Appointment Scheduled' stage, 'Sales Pipeline' pipeline. {{Cumulative time in "Closed Lost (Sales Pipeline)"}} The cumulative time in seconds spent by the deal in the 'Closed Lost' stage, 'Sales Pipeline' pipeline. {{Cumulative time in "Closed Won (Sales Pipeline)"}} The cumulative time in seconds spent by the deal in the 'Closed Won' stage, 'Sales Pipeline' pipeline. {{Cumulative time in "Contract Sent (Sales Pipeline)"}} The cumulative time in seconds spent by the deal in the 'Contract Sent' stage, 'Sales Pipeline' pipeline. {{Cumulative time in "Decision Maker Bought-In (Sales Pipeline)"}} The cumulative time in seconds spent by the deal in the 'Decision Maker Bought-In' stage, 'Sales Pipeline' pipeline. {{Cumulative time in "Presentation Scheduled (Sales Pipeline)"}} The cumulative time in seconds spent by the deal in the 'Presentation Scheduled' stage, 'Sales Pipeline' pipeline. {{Cumulative time in "Qualified To Buy (Sales Pipeline)"}} The cumulative time in seconds spent by the deal in the 'Qualified To Buy' stage, 'Sales Pipeline' pipeline. {{Date entered "Appointment Scheduled (Sales Pipeline)"}} The date and time when the deal entered the 'Appointment Scheduled' stage, 'Sales Pipeline' pipeline. {{Date entered "Closed Lost (Sales Pipeline)"}} The date and time when the deal entered the 'Closed Lost' stage, 'Sales Pipeline' pipeline. {{Date entered "Closed Won (Sales Pipeline)"}} The date and time when the deal entered the 'Closed Won' stage, 'Sales Pipeline' pipeline. {{Date entered "Contract Sent (Sales Pipeline)"}} The date and time when the deal entered the 'Contract Sent' stage, 'Sales Pipeline' pipeline. {{Date entered "Decision Maker Bought-In (Sales Pipeline)"}} The date and time when the deal entered the 'Decision Maker Bought-In' stage, 'Sales Pipeline' pipeline. {{Date entered "Presentation Scheduled (Sales Pipeline)"}} The date and time when the deal entered the 'Presentation Scheduled' stage, 'Sales Pipeline' pipeline. {{Date entered "Qualified To Buy (Sales Pipeline)"}} The date and time when the deal entered the 'Qualified To Buy' stage, 'Sales Pipeline' pipeline. {{Date exited "Appointment Scheduled (Sales Pipeline)"}} The date and time when the deal exited the 'Appointment Scheduled' stage, 'Sales Pipeline' pipeline. {{Date exited "Closed Lost (Sales Pipeline)"}} The date and time when the deal exited the 'Closed Lost' stage, 'Sales Pipeline' pipeline. {{Date exited "Closed Won (Sales Pipeline)"}} The date and time when the deal exited the 'Closed Won' stage, 'Sales Pipeline' pipeline. {{Date exited "Contract Sent (Sales Pipeline)"}} The date and time when the deal exited the 'Contract Sent' stage, 'Sales Pipeline' pipeline. {{Date exited "Decision Maker Bought-In (Sales Pipeline)"}} The date and time when the deal exited the 'Decision Maker Bought-In' stage, 'Sales Pipeline' pipeline. {{Date exited "Presentation Scheduled (Sales Pipeline)"}} The date and time when the deal exited the 'Presentation Scheduled' stage, 'Sales Pipeline' pipeline. {{Date exited "Qualified To Buy (Sales Pipeline)"}} The date and time when the deal exited the 'Qualified To Buy' stage, 'Sales Pipeline' pipeline. {{Latest time in "Appointment Scheduled (Sales Pipeline)"}} The total time in seconds spent by the deal in the 'Appointment Scheduled' stage, 'Sales Pipeline' pipeline since it last entered this stage. {{Latest time in "Closed Lost (Sales Pipeline)"}} The total time in seconds spent by the deal in the 'Closed Lost' stage, 'Sales Pipeline' pipeline since it last entered this stage. {{Latest time in "Closed Won (Sales Pipeline)"}} The total time in seconds spent by the deal in the 'Closed Won' stage, 'Sales Pipeline' pipeline since it last entered this stage. {{Latest time in "Contract Sent (Sales Pipeline)"}} The total time in seconds spent by the deal in the 'Contract Sent' stage, 'Sales Pipeline' pipeline since it last entered this stage. {{Latest time in "Decision Maker Bought-In (Sales Pipeline)"}} The total time in seconds spent by the deal in the 'Decision Maker Bought-In' stage, 'Sales Pipeline' pipeline since it last entered this stage. {{Latest time in "Presentation Scheduled (Sales Pipeline)"}} The total time in seconds spent by the deal in the 'Presentation Scheduled' stage, 'Sales Pipeline' pipeline since it last entered this stage. {{Latest time in "Qualified To Buy (Sales Pipeline)"}} The total time in seconds spent by the deal in the 'Qualified To Buy' stage, 'Sales Pipeline' pipeline since it last entered this stage. {{Performed in an import}} Object is part of an import. {{Owner Assigned Date}} The date the most recent deal owner was assigned to a deal. This is updated automatically by HubSpot.. {{Deal Name}} The name given to this deal. {{Amount}} The total amount of the deal. {{Deal Stage}} The stage of the deal. Deal stages allow you to categorize and track the progress of the deals that you are working on. {{Pipeline}} The pipeline the deal is in. This determines which stages are options for the deal. {{Close Date}} Date the deal was closed. This property is set automatically by HubSpot. {{Create Date}} Date the deal was created. This property is set automatically by HubSpot. {{Date of last meeting booked in meetings tool}} The date of the most recent meeting an associated contact has booked through the meetings tool. {{Campaign of last booking in meetings tool}} This UTM parameter shows which marketing campaign (e.g. a specific email) referred an associated contact to the meetings tool for their most recent booking. This property is only populated when you add tracking parameters to your meeting link. {{Medium of last booking in meetings tool}} This UTM parameter shows which channel (e.g. email) referred an associated contact to the meetings tool for their most recent booking. This property is only populated when you add tracking parameters to your meeting link. {{Source of last booking in meetings tool}} This UTM parameter shows which site (e.g. Twitter) referred an associated contact to the meetings tool for their most recent booking. This property is only populated when you add tracking parameters to your meeting link. {{Latest meeting activity}} The date of the most recent meeting (past or upcoming) logged for, scheduled with, or booked by a contact associated with this deal. {{Recent Sales Email Replied Date}} The last time a tracked sales email was replied to for this deal. {{Deal owner}} User the deal is assigned to. Assign additional users to a deal record by creating a custom user property. {{Last Contacted}} The last time a call, sales email, or meeting was logged for this deal. This is set automatically by HubSpot based on user actions. {{Last Activity Date}} The last time a note, call, email, meeting, or task was logged for a deal. This is updated automatically by HubSpot. {{Next Activity Date}} The date of the next upcoming activity for a deal. This property is set automatically by HubSpot based on user action. This includes logging a future call, sales email, or meeting using the Log feature, as well as creating a future task or scheduling a future meeting. This is updated automatically by HubSpot. {{Number of times contacted}} The total number of sales activities (notes, calls, emails, meetings, or tasks) logged for a deal. This is updated automatically by HubSpot. {{Number of Sales Activities}} The total number of times a sales email or call has been logged for a deal. This is updated automatically by HubSpot. {{HubSpot Create Date}} The date the deal was created. This property is set automatically by HubSpot. {{HubSpot Team}} Primary team of the deal owner. This property is set automatically by HubSpot. {{Deal Type}} The type of deal. By default, categorize your deal as either a New Business or Existing Business. {{All owner ids}} The value of all owner referencing properties for this object, both default and custom. {{Deal Description}} Description of the deal. {{All team ids}} The team ids corresponding to all owner referencing properties for this object, both default and custom. {{All teams}} The team ids, including up the team hierarchy, corresponding to all owner referencing properties for this object, both default and custom. {{Number of Associated Contacts}} The number of contacts associated with this deal. This property is set automatically by HubSpot. {{Closed Lost Reason}} Reason why this deal was lost. {{Closed Won Reason}} Reason why this deal was won.
Contacts {{Company size}} Contact's company size. Required for the Facebook Ads Integration. Automatically synced from the Lead Ads tool.
{{Date of birth}} Contact's date of birth. Required for the Facebook Ads Integration. Automatically synced from the Lead Ads tool.
{{Days To Close}} Count of days elapsed between creation and being closed as a customer. Set automatically.
{{Degree}} Contact's degree. Required for the Facebook Ads Integration. Automatically synced from the Lead Ads tool.
{{Field of study}} Contact's field of study. Required for the Facebook Ads Integration. Automatically synced from the Lead Ads tool.
{{First Conversion Date}} Date this contact first submitted a form.
{{First Conversion}} First form this contact submitted.
{{First Deal Created Date}} Date first deal was created for contact. Set automatically.
{{Gender}} Contact's gender. Required for the Facebook Ads Integration. Automatically synced from the Lead Ads tool.
{{Graduation date}} Contact's graduation date. Required for the Facebook Ads Integration. Automatically synced from the Lead Ads tool.
{{Additional email addresses}} A set of additional email addresses for a contact.
{{Business units}} The business units this record is assigned to.
{{All vids for a contact}} A set of all vids, canonical or otherwise, for a contact.
{{First Touch Converting Campaign}} Campaign responsible for the first touch creation of this contact.
{{Last Touch Converting Campaign}} Campaign responsible for the last touch creation of this contact.
{{Avatar FileManager key}} The path in the FileManager CDN for this contact's avatar override image. Automatically set by HubSpot. {{Buying Role}} Role the contact plays during the sales process. Contacts can have multiple roles, and can share roles with others.
{{All form submissions for a contact}} A set of all form submissions for a contact.
{{Merged vids with timestamps of a contact}} Merged vids with timestamps of a contact.
{{Calculated Mobile Number in International Format}} Mobile number in international format.
{{Calculated Phone Number in International Format}} Phone number in international format.
{{Calculated Phone Number Area Code}} Area Code of the calculated phone number.
{{Calculated Phone Number Country Code}} Country code of the calculated phone number.
{{Calculated Phone Number Region}} ISO2 Country code for the derived phone number.
{{Clicked on a LinkedIn Ad}} Whether contact has clicked on a LinkedIn Ad.
{{Member email}} Email used to send private content information to members.
{{Email Confirmed}} Email Confirmation status of user of Content Membership.
{{Time enrolled in registration follow up emails}} The time when the contact was first enrolled in the registration follow up email flow.
{{Membership Notes}} Notes relating to the contact's content membership.
{{Registered At}} Datetime at which this user was set up for Content Membership.
{{Domain to which registration email was sent}} Domain to which the registration invitation email for Content Membership was sent to.
{{Time registration email was sent}} Datetime at which this user was sent a registration invitation email for Content Membership.
{{Status}} Status of the contact's content membership.
{{Conversations visitor email}} A Conversations visitor's email address.
{{Count of unengaged contacts}} if contact is assigned and unworked, set to 1. if contact is assigned and worked, set to 0.
{{Count of engaged contacts}} if contact is assigned and worked, set to 1. if contact is assigned and unworked, set to 0.
{{Created By Conversations}} Flag indicating this contact was created by the Conversations API.
{{Created by user ID}} The user that created this object. This value is automatically set by HubSpot and may not be modified.
{{Object create date/time}} The date and time at which this object was created. This value is automatically set by HubSpot and may not be modified.
{{Ads Consent from Forms}} This property captures ads consents from forms and is used by consent manager to create / update associated data privacy consent objects.
{{Date entered 'Customer (Lifecycle Stage Pipeline)'}} The date and time when the contact entered the 'Customer' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered 'Evangelist (Lifecycle Stage Pipeline)'}} The date and time when the contact entered the 'Evangelist' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered 'Lead (Lifecycle Stage Pipeline)'}} The date and time when the contact entered the 'Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered 'Marketing Qualified Lead (Lifecycle Stage Pipeline)'}} The date and time when the contact entered the 'Marketing Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered 'Opportunity (Lifecycle Stage Pipeline)'}} The date and time when the contact entered the 'Opportunity' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered 'Other (Lifecycle Stage Pipeline)'}} The date and time when the contact entered the 'Other' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered 'Sales Qualified Lead (Lifecycle Stage Pipeline)'}} The date and time when the contact entered the 'Sales Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered 'Subscriber (Lifecycle Stage Pipeline)'}} The date and time when the contact entered the 'Subscriber' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Customer (Lifecycle Stage Pipeline)'}} The date and time when the contact exited the 'Customer' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Evangelist (Lifecycle Stage Pipeline)'}} The date and time when the contact exited the 'Evangelist' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Lead (Lifecycle Stage Pipeline)'}} The date and time when the contact exited the 'Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Marketing Qualified Lead (Lifecycle Stage Pipeline)'}} The date and time when the contact exited the 'Marketing Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Opportunity (Lifecycle Stage Pipeline)'}} The date and time when the contact exited the 'Opportunity' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Other (Lifecycle Stage Pipeline)'}} The date and time when the contact exited the 'Other' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Sales Qualified Lead (Lifecycle Stage Pipeline)'}} The date and time when the contact exited the 'Sales Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Subscriber (Lifecycle Stage Pipeline)'}} The date and time when the contact exited the 'Subscriber' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Recent Document Revisit Date}} The last time a shared document (presentation) was accessed by this contact.
{{Invalid email address}} The email address associated with this contact is invalid.
{{Email address quarantine reason}} The reason why the email address has been quarantined.
{{Email Domain}} A contact's email address domain.
{{Email hard bounce reason}} The issue that caused a contact to hard bounce from your emails. If this is an error or a temporary issue, you can unbounce this contact from the contact record.
{{Email hard bounce reason}} The issue that caused a contact to hard bounce from your emails. If this is an error or a temporary issue, you can unbounce this contact from the contact record.
{{Email Address Quarantined}} Indicates that the current email address has been quarantined for anti-abuse reasons and any marketing email sends to it will be blocked. This is automatically set by HubSpot.
{{Email address automated quarantine reason}} The automated reason why the email address has been quarantined.
{{Email Address Recipient Fatigue Next Available Sending Time}} When this recipient has reached the limit of email sends per time period, this property indicates the next available time to send. This is automatically set by HubSpot.
{{Sends Since Last Engagement}} The number of marketing emails that have been sent to the current email address since the last engagement (open or link click). This is automatically set by HubSpot.
{{Marketing email confirmation status}} The status of a contact's eligibility to receive marketing email. This is automatically set by HubSpot.
{{Clicked Facebook ad}} Whether contact has clicked a Facebook ad.
{{Facebook click id}}
{{Facebook ID}} A contact's facebook id.
{{Last NPS survey comment}} Last NPS survey comment that this contact gave.
{{Last NPS survey rating}} Last NPS survey rating that this contact gave.
{{Last NPS survey date}} The time that this contact last submitted a NPS survey response. This is automatically set by HubSpot.\
{{Should be shown an NPS web survey}} Whether or not a contact should be shown an NPS web survey. This is automatically set by HubSpot.
{{ID of first engagement}} The object id of the current contact owner's first engagement with the contact.
{{First outreach date}} The date of the first outreach (call, email, meeting or other communication) from a sales rep to the contact.
{{First subscription create date}} The create date of the first subscription by the contact.
{{Google ad click id}}
{{googleplus ID}} A contact's googleplus id.
{{Contact has an active subscription}} The rollup property value is 1 when the contact has an active Subscription or 0 otherwise.
{{IP Timezone}} The timezone reported by a contact's IP address. This is automatically set by HubSpot and can be used for segmentation and reporting.
{{Is a contact}} Is a contact, has not been deleted and is not a visitor.
{{Contact unworked}} Contact has not been assigned or has not been engaged after last owner assignment/re-assignment.
{{last sales activity date old}} The date of the last sales activity with the contact. This property is set automatically by HubSpot. Note: This field is only updated for contacts with an owner.
{{Last Engagement Date}} The last time a contact engaged with your site or a form, document, meetings link, or tracked email. This doesn't include marketing emails or emails to multiple contacts.
{{Last Engagement Type}} The type of the last engagement a contact performed. This doesn't include marketing emails or emails to multiple contacts.
{{Object last modified date/time}} Most recent timestamp of any property update for this contact. This includes HubSpot internal properties, which can be visible or hidden. This property is updated automatically.\
{{Latest Disqualified Lead Date}} The most recent time at which an associated lead currently in a disqualified stage was moved to that stage.
{{Latest Open Lead Date}} The most recent time an associated open lead was moved to a NEW or IN\_PROGRESS state.
{{Latest Qualified Lead Date}} The most recent time at which an associated lead currently in a qualified stage was moved to that stage.
{{Last sequence ended date}} The last sequence ended date.
{{Last sequence enrolled}} The last sequence enrolled.
{{Last sequence enrolled date}} The last sequence enrolled date.
{{Last sequence finished date}} The last sequence finished date.
{{Last sequence unenrolled date}} The last sequence unenrolled date.
{{Latest Source Date}} The time of the latest session for a contact.
{{Latest subscription create date}} The create date of the latest subscription by the contact.
{{Lead Status}} The contact's sales, prospecting or outreach status.
{{Legal basis for processing contact's data}} Legal basis for processing contact's data; 'Not applicable' will exempt the contact from GDPR protections.
{{Clicked LinkedIn Ad}}
{{LinkedIn ID}} A contact's LinkedIn id.
{{Marketing contact status source name}} The ID of the activity that set the contact as a marketing contact.
{{Marketing contact status source type}} The type of the activity that set the contact as a marketing contact.
{{Marketing contact status}} The marketing status of a contact.
{{Marketing contact until next update}} Specifies if this contact will be set as non-marketing on renewal.
{{Merged Contact IDs}} The list of Contact record IDs that have been merged into this Contact. This value is automatically set by HubSpot and may not be modified.
{{Record ID}} The unique ID for this record. This value is automatically set by HubSpot and may not be modified.
{{Record Creation Source}} Source (PropertySource) that created this object record.
{{Record Creation Source ID}} The sourceId -- further detail -- of the source that created this object record.
{{Record Source}} How this record was created.
{{Record Creation Source User ID}} User ID of the user who initiated creation of this object record.
{{Pinned engagement ID}}
{{Pipeline}} The pipeline with which this contact is currently associated.
{{Likelihood to close}} The probability that a contact will become a customer within the next 90 days. This score is based on standard contact properties and behavior.
{{Contact priority}} A ranking system of contacts evenly assigned into four tiers. Contacts in tier one are more likely to become customers than contacts in tier four.
{{Read Only Object}} Is the object read only.
{{Date of first engagement}} The date the current contact owner first engaged with the contact.
{{Description of first engagement}} A description of the current contact owner's first engagement with the contact. {{Type of first engagement}} The object type of the current contact owner's first engagement with the contact.
{{Recent Sales Email Clicked Date}} The last time a tracked sales email was clicked by this user.
{{Recent Sales Email Opened Date}} The last time a tracked sales email was opened by this contact. This property does not update for emails that were sent to more than one contact.
{{Calculated Mobile Number with country code}} Mobile number with country code.
{{Calculated Phone Number with country code}} Phone number with country code.
{{Calculated Mobile Number without country code}} Mobile number without country code.
{{Calculated Phone Number without country code}} Phone number without country code.
{{Number of sequences actively enrolled}} The number of sequences actively enrolled.
{{Number of sequences enrolled}} The number of sequences enrolled.
{{Currently in Sequence}} A yes/no field that indicates whether the contact is currently in a Sequence.
{{Source Object ID}} The ID of the object from which the data was migrated. This is set automatically during portal data migration.
{{Source Portal ID}} The ID of the portal from which the data was migrated. This is set automatically during portal data migration.
{{testpurge}} Testing purge.
{{testrollback}} Testing rollback.
{{Time between contact creation and deal close}}
{{Time between contact creation and deal creation}} {{Time in 'Customer (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the contact in the 'Customer' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Time in 'Evangelist (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the contact in the 'Evangelist' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Time in 'Lead (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the contact in the 'Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Time in 'Marketing Qualified Lead (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the contact in the 'Marketing Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Time in 'Opportunity (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the contact in the 'Opportunity' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Time in 'Other (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the contact in the 'Other' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Time in 'Sales Qualified Lead (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the contact in the 'Sales Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Time in 'Subscriber (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the contact in the 'Subscriber' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Lead response time}} Time it took current owner to do first qualifying engagement.
{{Time to move from lead to customer}} How long it takes for a contact to move from the HubSpot lead stage to the HubSpot customer stage.
{{Time to move from marketing qualified lead to customer}} How long it takes for a contact to move from the HubSpot marketing qualified lead stage to the HubSpot customer stage.
{{Time to move from opportunity to customer}} How long it takes for a contact to move from the HubSpot opportunity stage to the HubSpot customer stage.
{{Time to move from sales qualified lead to customer}} How long it takes for a contact to move from the HubSpot sales qualified lead stage to the HubSpot customer stage. {{Time to move from subscriber to customer}} How long it takes for a contact to move from the HubSpot subscriber stage to the HubSpot customer stage.
{{Time Zone}} The contact’s time zone. This can be set automatically by HubSpot based on other contact properties. It can also be set manually for each contact.
{{Twitter ID}} A contact's twitter id.
{{Unique creation key}} Unique property used for idempotent creates.
{{Updated by user ID}} The user that last updated this object. This value is automatically set by HubSpot and may not be modified.
{{User IDs of all notification followers}} The user IDs of all users that have clicked follow within the object to opt-in to getting follow notifications.
{{User IDs of all notification unfollowers}} The user IDs of all object owners that have clicked unfollow within the object to opt-out of getting follow notifications.
{{User IDs of all owners}} The user IDs of all owners of this object.
{{Cumulative time in "Customer (Lifecycle Stage Pipeline)"}} The cumulative time in seconds spent by the contact in the 'Customer' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Cumulative time in "Evangelist (Lifecycle Stage Pipeline)"}} The cumulative time in seconds spent by the contact in the 'Evangelist' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Cumulative time in "Lead (Lifecycle Stage Pipeline)"}} The cumulative time in seconds spent by the contact in the 'Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Cumulative time in "Marketing Qualified Lead (Lifecycle Stage Pipeline)"}} The cumulative time in seconds spent by the contact in the 'Marketing Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Cumulative time in "Opportunity (Lifecycle Stage Pipeline)"}} The cumulative time in seconds spent by the contact in the 'Opportunity' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Cumulative time in "Other (Lifecycle Stage Pipeline)"}} The cumulative time in seconds spent by the contact in the 'Other' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Cumulative time in "Sales Qualified Lead (Lifecycle Stage Pipeline)"}} The cumulative time in seconds spent by the contact in the 'Sales Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Cumulative time in "Subscriber (Lifecycle Stage Pipeline)"}} The cumulative time in seconds spent by the contact in the 'Subscriber' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered "Customer (Lifecycle Stage Pipeline)"}} The date and time when the contact entered the 'Customer' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered "Evangelist (Lifecycle Stage Pipeline)"}} The date and time when the contact entered the 'Evangelist' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered "Lead (Lifecycle Stage Pipeline)"}} The date and time when the contact entered the 'Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered "Marketing Qualified Lead (Lifecycle Stage Pipeline)"}} The date and time when the contact entered the 'Marketing Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered "Opportunity (Lifecycle Stage Pipeline)"}} The date and time when the contact entered the 'Opportunity' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered "Other (Lifecycle Stage Pipeline)"}} The date and time when the contact entered the 'Other' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered "Sales Qualified Lead (Lifecycle Stage Pipeline)"}} The date and time when the contact entered the 'Sales Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered "Subscriber (Lifecycle Stage Pipeline)"}} The date and time when the contact entered the 'Subscriber' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited "Customer (Lifecycle Stage Pipeline)"}} The date and time when the contact exited the 'Customer' stage, 'Lifecycle Stage Pipeline' pipeline. {{Date exited "Evangelist (Lifecycle Stage Pipeline)"}} The date and time when the contact exited the 'Evangelist' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited "Lead (Lifecycle Stage Pipeline)"}} The date and time when the contact exited the 'Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited "Marketing Qualified Lead (Lifecycle Stage Pipeline)"}} The date and time when the contact exited the 'Marketing Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited "Opportunity (Lifecycle Stage Pipeline)"}} The date and time when the contact exited the 'Opportunity' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited "Other (Lifecycle Stage Pipeline)"}} The date and time when the contact exited the 'Other' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited "Sales Qualified Lead (Lifecycle Stage Pipeline)"}} The date and time when the contact exited the 'Sales Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited "Subscriber (Lifecycle Stage Pipeline)"}} The date and time when the contact exited the 'Subscriber' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Latest time in "Customer (Lifecycle Stage Pipeline)"}} The total time in seconds spent by the contact in the 'Customer' stage, 'Lifecycle Stage Pipeline' pipeline since it last entered this stage.
{{Latest time in "Evangelist (Lifecycle Stage Pipeline)"}} The total time in seconds spent by the contact in the 'Evangelist' stage, 'Lifecycle Stage Pipeline' pipeline since it last entered this stage.
{{Latest time in "Lead (Lifecycle Stage Pipeline)"}} The total time in seconds spent by the contact in the 'Lead' stage, 'Lifecycle Stage Pipeline' pipeline since it last entered this stage.
{{Latest time in "Marketing Qualified Lead (Lifecycle Stage Pipeline)"}} The total time in seconds spent by the contact in the 'Marketing Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline since it last entered this stage.
{{Latest time in "Opportunity (Lifecycle Stage Pipeline)"}} The total time in seconds spent by the contact in the 'Opportunity' stage, 'Lifecycle Stage Pipeline' pipeline since it last entered this stage. {{Latest time in "Other (Lifecycle Stage Pipeline)"}} The total time in seconds spent by the contact in the 'Other' stage, 'Lifecycle Stage Pipeline' pipeline since it last entered this stage.
{{Latest time in "Sales Qualified Lead (Lifecycle Stage Pipeline)"}} The total time in seconds spent by the contact in the 'Sales Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline since it last entered this stage.
{{Latest time in "Subscriber (Lifecycle Stage Pipeline)"}} The total time in seconds spent by the contact in the 'Subscriber' stage, 'Lifecycle Stage Pipeline' pipeline since it last entered this stage.
{{Performed in an import}} Object is part of an import.
{{WhatsApp Phone Number}} The phone number associated with the contact’s WhatsApp account.
{{Owner Assigned Date}} The most recent date a HubSpot Owner was assigned to a contact. This is set automatically by HubSpot and can be used for segmentation and reporting.
{{IP City}} The city reported by a contact's IP address. This is automatically set by HubSpot and can be used for segmentation and reporting.
{{IP Country}} The country reported by a contact's IP address. This is automatically set by HubSpot and can be used for segmentation and reporting.
{{IP Country Code}} The country code reported by a contact's IP address. This is automatically set by HubSpot and can be used for segmentation and reporting.
{{IP Latitude & Longitude}}
{{IP State/Region}} The state or region reported by a contact's IP address. This is automatically set by HubSpot and can be used for segmentation and reporting.
{{IP State Code/Region Code}} The state code or region code reported by a contact's IP address. This is automatically set by HubSpot and can be used for segmentation and reporting.
{{IP Zipcode}} The zipcode reported by a contact's IP address. This is automatically set by HubSpot and can be used for segmentation and reporting.\
{{Job function}} Contact's job function. Required for the Facebook Ads Integration. Automatically synced from the Lead Ads tool.
{{Last Modified Date}} The date any property on this contact was modified.
{{Marital Status}} Contact's marital status. Required for the Facebook Ads Integration. Automatically synced from the Lead Ads tool.
{{Military status}} Contact's military status. Required for the Facebook Ads Integration. Automatically synced from the Lead Ads tool.
{{Number of Associated Deals}} Count of deals associated with this contact. Set automatically by HubSpot.
{{Number of Form Submissions}} The number of forms this contact has submitted.
{{Number of Unique Forms Submitted}} The number of different forms this contact has submitted.
{{Recent Conversion Date}} The date this contact last submitted a form.
{{Recent Conversion}} The last form this contact submitted.
{{Recent Deal Amount}} Amount of last closed won deal associated with a contact. Set automatically.
{{Recent Deal Close Date}} Date last deal associated with contact was closed-won. Set automatically.
{{Relationship Status}} Contact's relationship status. Required for the Facebook Ads Integration. Automatically synced from the Lead Ads tool.
{{School}} Contact's school. Required for the Facebook Ads Integration. Automatically synced from the Lead Ads tool.
{{Seniority}} Contact's seniority. Required for the Facebook Ads Integration. Automatically synced from the Lead Ads tool. {{Start date}} Contact's start date. Required for the Facebook Ads Integration. Automatically synced from the Lead Ads tool.
{{Total Revenue}} Sum of all closed-won deal revenue associated with the contact. Set automatically.
{{Work email}} Contact's work email. Required for the Facebook Ads Integration. Automatically synced from the Lead Ads tool.
{{First Name}} A contact's first name.
{{First Page Seen}} First page the contact visited on your website. Set automatically.
{{Marketing emails delivered}} The number of marketing emails delivered for the current email address. This is automatically set by HubSpot.
{{Opted out of email: Marketing Information}} Indicates that the current email address has opted out of this email type.
{{Opted out of email: One to One}} Indicates that the current email address has opted out of this email type.
{{Opted out of email: Customer Service Communication}} Indicates that the current email address has opted out of this email type.
{{Twitter Username}} The contact's Twitter handle.
{{Currently in workflow}} True when contact is enrolled in a workflow.
{{Follower Count}} The number of Twitter followers a contact has.
{{Last Page Seen}} Last page the contact visited on your website. Set automatically.
{{Marketing emails opened}} The number of marketing emails opened for the current email address. This is automatically set by HubSpot.
{{Last Name}} A contact's last name. {{Number of Pageviews}} Total number of page views this contact has had on your website. Set automatically.
{{Marketing emails clicked}} The number of marketing emails which have had link clicks for the current email address. This is automatically set by HubSpot.
{{Salutation}} The title used to address a contact.
{{Twitter Profile Photo}} The contact's Twitter profile photo. This is set by HubSpot using the contact's email address.
{{Email}} A contact's email address.
{{Number of Sessions}} Number of times a contact has come to your website. Set automatically.
{{Marketing emails bounced}} The number of marketing emails that bounced for the current email address. This is automatically set by HubSpot.
{{Persona}} A contact's persona.
{{Most Recent Social Click}} The date of the most recent click on a published social message. This is set automatically by HubSpot for each contact.
{{Number of event completions}} Total number of events for this contact. Set automatically.
{{Unsubscribed from all email}} Indicates that the current email address has opted out of all email.
{{Twitter Clicks}} The number of times a contact clicked on links you shared on Twitter through HubSpot. This is set automatically by HubSpot and can be used for segmentation.
{{Mobile Phone Number}} A contact's mobile phone number.
{{Phone Number}} A contact's primary phone number.
{{Fax Number}} A contact's primary fax number.
{{Time First Seen}} First time the contact has been seen. Set automatically.
{{Last marketing email name}} The name of the last marketing email sent to the current email address. This is automatically set by HubSpot.
{{Last marketing email send date}} The date of the most recent delivery for any marketing email to the current email address. This is automatically set by HubSpot.
{{Facebook Clicks}} The number clicks on links shared on Facebook.
{{Street Address}} Contact's street address, including apartment or unit number.
{{Date of last meeting booked in meetings tool}} The date of the last meeting that has been scheduled by a contact through the meetings tool. If multiple meetings have been scheduled, the date of the last chronological meeting in the timeline is shown.
{{Campaign of last booking in meetings tool}} UTM parameter for marketing campaign (e.g. a specific email) responsible for recent meeting booking. Only populated when tracking parameters are included in the meeting link.
{{Medium of last booking in meetings tool}} UTM parameter for the channel (e.g. email) responsible for most recent meeting booking. Only populated when tracking parameters are included in the meeting link.
{{Source of last booking in meetings tool}} UTM parameter for the site (e.g. Twitter) responsible for most recent meeting booking. Only populated when tracking parameters are included in the meeting link.
{{Time of First Session}} First time the contact visited your website. Set automatically.
{{Last marketing email open date}} The date of the most recent open for any marketing email to the current email address. This is automatically set by HubSpot.
{{Latest meeting activity}} The date of the most recent meeting (past or upcoming) logged for, scheduled with, or booked by this contact.
{{Recent Sales Email Replied Date}} The last time a tracked sales email was replied to by this user. This is set automatically by HubSpot based on user actions in the contact record.
{{LinkedIn Clicks}} The number clicks on links shared on LinkedIn.
{{Contact owner}} The owner of a contact. This can be any HubSpot user or Salesforce integration user, and can be set manually or via Workflows.
{{Last Contacted}} The last time a call, chat conversation, LinkedIn message, postal mail, meeting, sales email, SMS, or WhatsApp message was logged for a contact. This is set automatically by HubSpot based on user actions in the contact record.
{{Last Activity Date}} The last time a call, chat conversation, LinkedIn message, postal mail, meeting, note, sales email, SMS, or WhatsApp message was logged for a contact. This is set automatically by HubSpot based on user actions in the contact record.
{{Next Activity Date}} The date of the next upcoming activity for a contact. This is set automatically by HubSpot based on user actions in the contact record.
{{Number of times contacted}} The number of times a call, chat conversation, LinkedIn message, postal mail, meeting, sales email, SMS, or WhatsApp message was logged for a contact record. This is set automatically by HubSpot based on user actions in the contact record.
{{Number of Sales Activities}} The number of times a call, chat conversation, LinkedIn message, postal mail, meeting, note, sales email, SMS, task, or WhatsApp message was logged for a contact record. This is set automatically by HubSpot based on user actions in the contact record.
{{HubSpot Owner Email (legacy)}} A legacy property used to identify the email address of the owner of the contact. This property is no longer in use.
{{HubSpot Owner Name (legacy)}} A legacy property used to identify the name of the owner of the contact. This property is no longer in use.
{{SurveyMonkey Event Last Updated}} This field is meaningless on its own, and is solely used for triggering dynamic list updates when SurveyMonkey information is updated.
{{Webinar Event Last Updated}} This field is meaningless on its own, and is solely used for triggering dynamic list updates when webinar information is updated.
{{City}} A contact's city of residence.
{{Time Last Seen}} Timestamp for the most recent webpage view on your website.
{{Last marketing email click date}} The date of the most recent link click for any marketing email to the current email address. This is automatically set by HubSpot.
{{Google Plus Clicks}} The number clicks on links shared on Google Plus.
{{HubSpot Team}} The team of the owner of a contact.
{{LinkedIn Bio}} A contact's LinkedIn bio.
{{Twitter Bio}} The contact's Twitter bio. This is set by HubSpot using the contact's email address.
{{All owner ids}} The value of all owner referencing properties for this object, both default and custom.
{{Time of Last Session}} Timestamp for the start of the most recent session for this contact to your website.
{{First marketing email send date}} The date of the earliest delivery for any marketing email to the current email address. This is automatically set by HubSpot.
{{Broadcast Clicks}} The number of clicks on published social messages. This is set automatically by HubSpot for each contact.
{{State/Region}} The contact's state of residence. This might be set via import, form, or integration.
{{All team ids}} The team ids corresponding to all owner referencing properties for this object, both default and custom.
{{Original Source}} First known source the contact used to find your website. Set automatically, but may be updated manually.
{{First marketing email open date}} The date of the earliest open for any marketing email to the current email address. This is automatically set by HubSpot. {{Latest Source}} The source of the latest session for a contact.
{{Postal Code}} The contact's zip code. This might be set via import, form, or integration.
{{Country/Region}} The contact's country/region of residence. This might be set via import, form, or integration.
{{All teams}} The team ids, including up the team hierarchy, corresponding to all owner referencing properties for this object, both default and custom.
{{Original Source Drill-Down 1}} Additional information about the source the contact used to find your website. Set automatically.
{{First marketing email click date}} The date of the earliest link click for any marketing email to the current email address. This is automatically set by HubSpot.
{{Latest Source Drill-Down 1}} Additional information about the latest source for the last session the contact used to find your website. Set automatically.
{{LinkedIn Connections}} How many LinkedIn connections they have.
{{Original Source Drill-Down 2}} Additional information about the source the contact used to find your website. Set automatically.
{{Is globally ineligible}} Indicates the contact is globally ineligible for email.
{{Preferred language}} Set your contact's preferred language for communications. This property can be changed from an import, form, or integration.
{{Latest Source Drill-Down 2}} Additional information about the source for the last session the contact used to find your website. Set automatically.
{{Klout Score}} A contact's Klout score, a measure of Internet influence.
{{First Referring Site}} URL that referred the contact to your website. Set automatically.
{{First marketing email reply date}} The date of the earliest reply for any marketing email to the current email address. This is automatically set by HubSpot.
{{Job Title}} A contact's job title.
{{Photo}} Social Media photo.
{{Last Referring Site}} Last URL that referred contact to your website. Set automatically.
{{Last marketing email reply date}} The date of the latest reply for any marketing email to the current email address. This is automatically set by HubSpot.
{{Message}} A default property to be used for any message or comments a contact may want to leave on a form.
{{Close Date}} Date the contact became a customer. Set automatically when a deal or opportunity is marked as closed-won. It can also be set manually or programmatically.
{{Average Pageviews}} Average number of pageviews per session for this contact. Set automatically.
{{Marketing emails replied}} The number of marketing emails replied to by the current email address. This is automatically set by HubSpot.
{{Event Revenue}} Set event revenue on a contact though the Enterprise Events feature.
{{Became a Lead Date}} The date when a contact's lifecycle stage changed to Lead. This is automatically set by HubSpot for each contact.
{{Became a Marketing Qualified Lead Date}} The date when a contact's lifecycle stage changed to MQL. This is automatically set by HubSpot for each contact.
{{Became an Opportunity Date}} The date when a contact's lifecycle stage changed to Opportunity. This is automatically set by HubSpot for each contact. {{Lifecycle Stage}} The qualification of contacts to sales readiness. It can be set through imports, forms, workflows, and manually on a per contact basis.
{{Became a Sales Qualified Lead Date}} The date when a contact's lifecycle stage changed to SQL. This is automatically set by HubSpot for each contact.
{{Create Date}} The date that a contact entered the system.
{{Became an Evangelist Date}} The date when a contact's lifecycle stage changed to Evangelist. This is automatically set by HubSpot for each contact.
{{Became a Customer Date}} The date when a contact's lifecycle stage changed to Customer. This is automatically set by HubSpot for each contact.
{{HubSpot Score}} The number that shows qualification of contacts to sales readiness. It can be set in HubSpot's Lead Scoring app.
{{Company Name}} Name of the contact's company. This can be set independently from the name property on the contact's associated company.
{{Became a Subscriber Date}} The date when a contact's lifecycle stage changed to Subscriber. This is automatically set by HubSpot for each contact. {{Became an Other Lifecycle Date}} The date when a contact's lifecycle stage changed to Other. This is automatically set by HubSpot for each contact.
{{Website URL}} Associated company website.
{{Number of Employees}} The number of company employees.
{{Annual Revenue}} Annual company revenue.
{{Industry}} The Industry a contact is in.
{{Primary Associated Company ID}} HubSpot defines the ID of a contact's primary associated company in HubSpot.
{{Associated Company Last Updated}} This field is meaningless on its own, and is solely used for triggering dynamic list updates when a company is updated.
{{Lead Rating}} The rating of this contact based on their predictive lead score.
{{Predictive Lead Score}} A score calculated by HubSpot that represents a contact's likelihood to.
Companies {{About Us}} Short about-company.
{{closedate\_timestamp\_earliest\_value\_a2a17e6e}} Calculation context property providing timestamp for rollup property close date calculated as EARLIEST\_VALUE via values of closedate on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{Facebook Fans}} Number of facebook fans.
{{first\_contact\_createdate\_timestamp\_earliest\_value\_78b50eea}} Calculation context property providing timestamp for rollup property first\_contact\_createdate calculated as EARLIEST\_VALUE via values of createdate on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{First Conversion Date}} The first conversion date across all contacts associated this company or organization.
{{first\_conversion\_date\_timestamp\_earliest\_value\_61f58f2c}} Calculation context property providing timestamp for rollup property first\_conversion\_date calculated as EARLIEST\_VALUE via values of first\_conversion\_date on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{First Conversion}} The first form submitted across all contacts associated this company or organization.
{{first\_conversion\_event\_name\_timestamp\_earliest\_value\_68ddae0a}} Calculation context property providing timestamp for rollup property first\_conversion\_event\_name calculated as EARLIEST\_VALUE via values of first\_conversion\_event\_name on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{First Deal Created Date}} Date the first deal was associated with this company record.
{{Year Founded}} The year the company was created. Powered by HubSpot Insights.
{{Additional Domains}} Additional domains belonging to this company.
{{Business units}} The business units this record is assigned to.
{{Time First Seen}} The first activity for any contact associated with this company or organization.
{{hs\_analytics\_first\_timestamp\_timestamp\_earliest\_value\_11e3a63a}} Calculation context property providing timestamp for rollup property hs\_analytics\_first\_timestamp calculated as EARLIEST\_VALUE via values of hs\_analytics\_first\_timestamp on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{First Touch Converting Campaign}} The campaign responsible for the first touch creation of the first contact associated with this company.
{{hs\_analytics\_first\_touch\_converting\_campaign\_timestamp\_earliest\_value\_4757fe10}} Calculation context property providing timestamp for rollup property hs\_analytics\_first\_touch\_converting\_campaign calculated as EARLIEST\_VALUE via values of hs\_analytics\_first\_touch\_converting\_campaign on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{Time of First Session}} Time of first session across all contacts associated with this company or organization.
{{hs\_analytics\_first\_visit\_timestamp\_timestamp\_earliest\_value\_accc17ae}} Calculation context property providing timestamp for rollup property hs\_analytics\_first\_visit\_timestamp calculated as EARLIEST\_VALUE via values of hs\_analytics\_first\_visit\_timestamp on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{Time Last Seen}} Time last seen across all contacts associated with this company or organization.
{{hs\_analytics\_last\_timestamp\_timestamp\_latest\_value\_4e16365a}} Calculation context property providing timestamp for rollup property hs\_analytics\_last\_timestamp calculated as LATEST\_VALUE via values of hs\_analytics\_last\_timestamp on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{Last Touch Converting Campaign}} The campaign responsible for the last touch creation of the first contact associated with this company. {{hs\_analytics\_last\_touch\_converting\_campaign\_timestamp\_latest\_value\_81a64e30}} Calculation context property providing timestamp for rollup property hs\_analytics\_last\_touch\_converting\_campaign calculated as LATEST\_VALUE via values of hs\_analytics\_last\_touch\_converting\_campaign on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{Time of Last Session}} Time of the last session attributed to any contacts that are associated with this company record.
{{hs\_analytics\_last\_visit\_timestamp\_timestamp\_latest\_value\_999a0fce}} Calculation context property providing timestamp for rollup property hs\_analytics\_last\_visit\_timestamp calculated as LATEST\_VALUE via values of hs\_analytics\_last\_visit\_timestamp on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{Latest Source}} Source of the last session attributed to any contacts that are associated with this company.
{{Latest Source Data 1}} Additional source details of the last session attributed to any contacts that are associated with this company.
{{Latest Source Data 2}} Additional source details of the last session attributed to any contacts that are associated with this company.
{{Latest Source Timestamp}} Timestamp of when latest source occurred.
{{Number of Pageviews}} Total number of page views across all contacts associated with this company or organization.
{{hs\_analytics\_num\_page\_views\_cardinality\_sum\_e46e85b0}} Calculation context property providing cardinality for rollup property hs\_analytics\_num\_page\_views calculated as SUM via values of hs\_analytics\_num\_page\_views on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{Number of Sessions}} Total number of sessions across all contacts associated with this company or organization.
{{hs\_analytics\_num\_visits\_cardinality\_sum\_53d952a6}} Calculation context property providing cardinality for rollup property hs\_analytics\_num\_visits calculated as SUM via values of hs\_analytics\_num\_visits on object type ObjectTypeId{legacyObjectType=CONTACT}. {{Original Source Type}} Original source for the contact with the earliest activity for this company or organization.
{{Original Source Data 1}} Additional information about the original source for the contact with the earliest activity for this company or organization.
{{hs\_analytics\_source\_data\_1\_timestamp\_earliest\_value\_9b2f1fa1}} Calculation context property providing timestamp for rollup property hs\_analytics\_source\_data\_1 calculated as EARLIEST\_VALUE via values of hs\_analytics\_source\_data\_1 on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{Original Source Data 2}} Additional information about the original source for the contact with the earliest activity for this company or organization.
{{hs\_analytics\_source\_data\_2\_timestamp\_earliest\_value\_9b2f9400}} Calculation context property providing timestamp for rollup property hs\_analytics\_source\_data\_2 calculated as EARLIEST\_VALUE via values of hs\_analytics\_source\_data\_2 on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{hs\_analytics\_source\_timestamp\_earliest\_value\_25a3a52c}} Calculation context property providing timestamp for rollup property hs\_analytics\_source calculated as EARLIEST\_VALUE via values of hs\_analytics\_source on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{Annual Revenue Currency Code}} The currency code associated with the annual revenue amount.
{{Avatar FileManager key}} The path in the FileManager CDN for this company's avatar override image. Automatically set by HubSpot.
{{Created by user ID}} The user that created this object. This value is automatically set by HubSpot and may not be modified.
{{Object create date/time}} The date and time at which this object was created. This value is automatically set by HubSpot and may not be modified.
{{Date entered 'Customer (Lifecycle Stage Pipeline)'}} The date and time when the company entered the 'Customer' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered 'Evangelist (Lifecycle Stage Pipeline)'}} The date and time when the company entered the 'Evangelist' stage, 'Lifecycle Stage Pipeline' pipeline. {{Date entered 'Lead (Lifecycle Stage Pipeline)'}} The date and time when the company entered the 'Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered 'Marketing Qualified Lead (Lifecycle Stage Pipeline)'}} The date and time when the company entered the 'Marketing Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered 'Opportunity (Lifecycle Stage Pipeline)'}} The date and time when the company entered the 'Opportunity' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered 'Other (Lifecycle Stage Pipeline)'}} The date and time when the company entered the 'Other' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered 'Sales Qualified Lead (Lifecycle Stage Pipeline)'}} The date and time when the company entered the 'Sales Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date entered 'Subscriber (Lifecycle Stage Pipeline)'}} The date and time when the company entered the 'Subscriber' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Customer (Lifecycle Stage Pipeline)'}} The date and time when the company exited the 'Customer' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Evangelist (Lifecycle Stage Pipeline)'}} The date and time when the company exited the 'Evangelist' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Lead (Lifecycle Stage Pipeline)'}} The date and time when the company exited the 'Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Marketing Qualified Lead (Lifecycle Stage Pipeline)'}} The date and time when the company exited the 'Marketing Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Opportunity (Lifecycle Stage Pipeline)'}} The date and time when the company exited the 'Opportunity' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Other (Lifecycle Stage Pipeline)'}} The date and time when the company exited the 'Other' stage, 'Lifecycle Stage Pipeline' pipeline. {{Date exited 'Sales Qualified Lead (Lifecycle Stage Pipeline)'}} The date and time when the company exited the 'Sales Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Date exited 'Subscriber (Lifecycle Stage Pipeline)'}} The date and time when the company exited the 'Subscriber' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Ideal Customer Profile Tier}} How well this company matches your Ideal Customer Profile. Tier 1 means a great fit for your products/services, Tier 3 might be acceptable, but low priority.
{{Target Account}} Identifies whether this company is being marketed and sold to as part of your account-based strategy.
{{Last Booked Meeting Date}} The last date of booked meetings associated with the company.
{{Last Logged Call Date}} The last date of logged calls associated with the company.
{{Last Open Task Date}} The last due date of open tasks associated with the company.
{{last sales activity date old}} The date of the last sales activity with the company in seconds.
{{Last Engagement Date}} The last time a contact engaged with your site or a form, document, meetings link, or tracked email. This doesn't include marketing emails or emails to multiple contacts.
{{Last Engagement Type}} The type of the last engagement a company performed. This doesn't include marketing emails or emails to multiple contacts.
{{Last Modified Date}} Most recent timestamp of any property update for this company. This includes HubSpot internal properties, which can be visible or hidden. This property is updated automatically.
{{Latest create date of active subscriptions}} Latest created date of all associated active Subscriptions.
{{Merged Company IDs}} The list of Company record IDs that have been merged into this Company. This value is automatically set by HubSpot and may not be modified.
{{Number of blockers}} The number of contacts associated with this company with the role of blocker.
{{Number of contacts with a buying role}} The number of contacts associated with this company with a buying role.
{{Number of decision makers}} The number of contacts associated with this company with the role of decision maker.
{{Number of open deals}} The number of open deals associated with this company.
{{Record ID}} The unique ID for this record. This value is automatically set by HubSpot and may not be modified.
{{Record Creation Source}} Source (PropertySource) that created this object record.
{{Record Creation Source ID}} The sourceId -- further detail -- of the source that created this object record.
{{Record Source}} How this record was created.
{{Record Creation Source User ID}} User ID of the user who initiated creation of this object record.
{{Pinned Engagement ID}} The object ID of the current pinned engagement. This value is automatically set by HubSpot and may not be modified.
{{Pipeline}} The pipeline with which this company is currently associated.
{{Likelihood to close}} The highest probability that a contact associated with this company will become a customer within the next 90 days. This score is based on standard contact properties and behavior.
{{hs\_predictivecontactscore\_v2\_next\_max\_max\_d4e58c1e}} Calculation context property providing next\_max for rollup property hs\_predictivecontactscore\_v2 calculated as MAX via values of hs\_predictivecontactscore\_v2 on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{Read Only Object}} Is the object read only.
{{Source Object ID}} The ID of the object from which the data was migrated. This is set automatically during portal data migration.
{{Target Account}} The Target Account property is a means to flag high priority companies if you are following an account based strategy.
{{Target Account Probability}} The probability a company is marked as a target account.
{{Target Account Recommendation Snooze Time}} The date when the target account recommendation is snoozed.
{{Target Account Recommendation State}} The state of the target account recommendation.
{{Time in 'Customer (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the company in the 'Customer' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Time in 'Evangelist (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the company in the 'Evangelist' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Time in 'Lead (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the company in the 'Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Time in 'Marketing Qualified Lead (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the company in the 'Marketing Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Time in 'Opportunity (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the company in the 'Opportunity' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Time in 'Other (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the company in the 'Other' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Time in 'Sales Qualified Lead (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the company in the 'Sales Qualified Lead' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Time in 'Subscriber (Lifecycle Stage Pipeline)'}} The total time in seconds spent by the company in the 'Subscriber' stage, 'Lifecycle Stage Pipeline' pipeline.
{{Total open deal value}} The total value, in your company's currency, of all open deals associated with this company.
{{Unique creation key}} Unique property used for idempotent creates.
{{Updated by user ID}} The user that last updated this object. This value is automatically set by HubSpot and may not be modified.
{{User IDs of all notification followers}} The user IDs of all users that have clicked follow within the object to opt-in to getting follow notifications.
{{User IDs of all notification unfollowers}} The user IDs of all object owners that have clicked unfollow within the object to opt-out of getting follow notifications.
{{User IDs of all owners}} The user IDs of all owners of this object.
{{Performed in an import}} Object is part of an import.
{{Owner Assigned Date}} The timestamp when an owner was assigned to this company.
{{Is Public}} Indicates if the company is publicly traded. Powered by HubSpot Insights.
{{Number of Associated Contacts}} The number of contacts associated with this company.
{{Number of Associated Deals}} The number of deals associated with this company.
{{Number of Form Submissions}} The number of forms submission for all contacts associated with this company or organization.
{{num\_conversion\_events\_cardinality\_sum\_d095f14b}} Calculation context property providing cardinality for rollup property num\_conversion\_events calculated as SUM via values of num\_conversion\_events on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{Recent Conversion Date}} The most recent conversion date across all contacts associated this company or organization.
{{recent\_conversion\_date\_timestamp\_latest\_value\_72856da1}} Calculation context property providing timestamp for rollup property recent\_conversion\_date calculated as LATEST\_VALUE via values of recent\_conversion\_date on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{Recent Conversion}} The last form submitted across all contacts associated this company or organization.
{{recent\_conversion\_event\_name\_timestamp\_latest\_value\_66c820bf}} Calculation context property providing timestamp for rollup property recent\_conversion\_event\_name calculated as LATEST\_VALUE via values of recent\_conversion\_event\_name on object type ObjectTypeId{legacyObjectType=CONTACT}.
{{Recent Deal Amount}} Amount of last closed won deal associated with this company. Set automatically.
{{Recent Deal Close Date}} Date of the last "closed won" deal associated with this company record.
{{Time Zone}} Time zone where the company or organization is located. Powered by HubSpot Insights.
{{Total Money Raised}} The total amount of money raised by the company. Powered by HubSpot Insights.
{{Total Revenue}} The total amount of closed won deals.
{{Company name}} The name of the company or organization. Powered by HubSpot Insights.
{{HubSpot Owner Email}} HubSpot owner email for this company or organization.
{{Twitter Handle}} The main twitter account of the company or organization.
{{HubSpot Owner Name}} HubSpot owner name for this company or organization.
{{Phone Number}} Company primary phone number. Powered by HubSpot Insights.
{{Twitter Bio}} The Twitter bio of the company or organization.
{{Twitter Followers}} The number of Twitter followers of the company or organization.
{{Street Address}} Street address of the company or organization, including unit number. Powered by HubSpot Insights. {{Street Address 2}} Additional address of the company or organization. Powered by HubSpot Insights.
{{Facebook Company Page}} The URL of the Facebook company page for the company or organization.
{{City}} City where the company is located. Powered by HubSpot Insights.
{{LinkedIn Company Page}} The URL of the LinkedIn company page for the company or organization.
{{LinkedIn Bio}} The LinkedIn bio for the company or organization.
{{State/Region}} State or region in which the company or organization is located. Powered by HubSpot Insights.
{{Google Plus Page}} The URL of the Google Plus page for the company or organization.
{{Date of last meeting booked in meetings tool}} Last Meeting Booked for any contact associated with this Company/Organization.
{{Campaign of last booking in meetings tool}} This UTM parameter shows which marketing campaign (e.g. a specific email) referred an associated contact to the meetings tool for their most recent booking. This property is only populated when you add tracking parameters to your meeting link.
{{Medium of last booking in meetings tool}} This UTM parameter shows which channel (e.g. email) referred an associated contact to the meetings tool for their most recent booking. This property is only populated when you add tracking parameters to your meeting link.
{{Source of last booking in meetings tool}} This UTM parameter shows which site (e.g. Twitter) referred an associated contact to the meetings tool for their most recent booking. This property is only populated when you add tracking parameters to your meeting link.
{{Latest meeting activity}} The date of the most recent meeting (past or upcoming) logged for, scheduled with, or booked by a contact associated with this company.
{{Recent Sales Email Replied Date}} The last time a tracked sales email was replied to by this company.
{{Company owner}} The owner of the company.
{{Last Contacted}} The last time a call, chat conversation, LinkedIn message, postal mail, meeting, sales email, SMS, or WhatsApp message was logged for a company. This is set automatically by HubSpot based on user actions in the company record.
{{Last Activity Date}} The last time a call, chat conversation, LinkedIn message, postal mail, meeting, note, sales email, SMS, or WhatsApp message was logged for a company. This is set automatically by HubSpot based on user actions in the company record.
{{Next Activity Date}} Date of the next upcoming scheduled sales activity for this company record.
{{Number of times contacted}} The number of times a call, chat conversation, LinkedIn message, postal mail, meeting, sales email, SMS, or WhatsApp message was logged for a company record. This is set automatically by HubSpot based on user actions in the company record.
{{Number of Sales Activities}} The number of times a call, chat conversation, LinkedIn message, postal mail, meeting, note, sales email, SMS, task, or WhatsApp message was logged for a company record. This is set automatically by HubSpot based on user actions in the company record.
{{Postal Code}} Postal or zip code of the company or organization. Powered by HubSpot Insights.
{{Country/Region}} Country in which the company or organization is located. Powered by HubSpot Insights.
{{HubSpot Team}} The team of the owner of the company.
{{All owner ids}} The value of all owner referencing properties for this object, both default and custom.
{{Website URL}} The main website of the company or organization. This property is used to identify unique companies. Powered by HubSpot Insights.
{{Company Domain Name}} The domain name of the company or organization.
{{All team ids}} The team ids corresponding to all owner referencing properties for this object, both default and custom.
{{All teams}} The team ids, including up the team hierarchy, corresponding to all owner referencing properties for this object, both default and custom.
{{Number of Employees}} The total number of employees who work for the company or organization. Powered by HubSpot Insights.
{{Industry}} The type of business the company performs. By default, this property has approximately 150 pre-defined options to select from. While these options cannot be deleted as they used by HubSpot Insights, you can add new custom options to meet your needs.
{{Annual Revenue}} The actual or estimated annual revenue of the company. Powered by HubSpot Insights.
{{Lifecycle Stage}} The qualification of companies to sales readiness throughout the buying journey.
{{Lead Status}} The company's sales, prospecting or outreach status.
{{Parent Company}} The parent company of this company.
{{Type}} The optional classification of this company record - prospect, partner, etc.
{{Description}} A short statement about the company's mission and goals. Powered by HubSpot Insights.
{{Number of child companies}} The number of child companies of this company.
{{HubSpot Score}} The sales and marketing score for the company or organization.
{{Create Date}} The date the company or organization was added to the database.
{{Close Date}} The date the company or organization was closed as a customer.
{{First Contact Create Date}} The date that the first contact from this company entered the system, which could pre-date the company's create date.
{{Days to Close}} The number of days between when the company record was created and when they closed as a customer.
{{Web Technologies}} The web technologies used by the company or organization. Powered by HubSpot Insights.
Tickets {{Close date}} The date the ticket was closed.
{{Created by}} VID of contact that created the ticket.
{{Create date}} The date the ticket was created.
{{First agent email response date}} The date of the first email response from an agent after a ticket was created.
{{Business units}} The business units this record is assigned to.
{{All associated contact companies}} All associated contact companies.
{{All associated contact emails}} All associated contact emails.
{{All associated contact first names}} All associated contact first names.
{{All associated contact last names}} All associated contact last names.
{{All associated contact mobile phones}} All associated contact mobile phones.
{{All associated contact phones}} All associated contact phones.
{{All conversation mentions}} All mentioned users on the associated conversations.
{{Applied SLA Rule Config ID}} Reference to the SLA rule that was applied to this ticket.
{{Assigned Teams}} teamIds of the ticket owner(s)’ main team(s), or if ticket owner is blank, then teamId(s) of the team(s) we attempted to assign to. {{Assignment Method}} defines how the Object Assignment is done.
{{Auto-generated from thread id}} Thread that this ticket was automatically created for using ticket rules.
{{Originating Conversations Message Id}} Conversations Message Id of the message that originated this ticket.
{{Conversations originating thread id}} Thread that this ticket was originally created for.
{{Created by user ID}} The user that created this object. This value is automatically set by HubSpot and may not be modified.
{{HubSpot create date}} Internal read-only property representing the date the ticket was created in HubSpot.
{{Custom inbox ID}} ID of the custom inbox the ticket is associated with.
{{Date entered 'New (Support Pipeline)'}} The date and time when the ticket entered the 'New' stage, 'Support Pipeline' pipeline.
{{Date entered 'Waiting on contact (Support Pipeline)'}} The date and time when the ticket entered the 'Waiting on contact' stage, 'Support Pipeline' pipeline.
{{Date entered 'Waiting on us (Support Pipeline)'}} The date and time when the ticket entered the 'Waiting on us' stage, 'Support Pipeline' pipeline.
{{Date entered 'Closed (Support Pipeline)'}} The date and time when the ticket entered the 'Closed' stage, 'Support Pipeline' pipeline.
{{Date exited 'New (Support Pipeline)'}} The date and time when the ticket exited the 'New' stage, 'Support Pipeline' pipeline.
{{Date exited 'Waiting on contact (Support Pipeline)'}} The date and time when the ticket exited the 'Waiting on contact' stage, 'Support Pipeline' pipeline.
{{Date exited 'Waiting on us (Support Pipeline)'}} The date and time when the ticket exited the 'Waiting on us' stage, 'Support Pipeline' pipeline.
{{Date exited 'Closed (Support Pipeline)'}} The date and time when the ticket exited the 'Closed' stage, 'Support Pipeline' pipeline. {{External object ids}} Unique ids corresponding to tickets in a system outside of HubSpot.
{{Last CES survey comment}} Last CES survey comment that this contact gave for this ticket.
{{Last CES survey rating}} Last CES survey rating that this contact gave for this ticket.
{{Last CES survey date}} The time that this contact last submitted a CES survey response. This is automatically set by HubSpot.
{{File upload}} Files attached to a support form by a contact.
{{First agent response date}} The date of the first response from an agent out of all associated conversations.
{{Helpdesk Sort Timestamp}} A calculated property to help with sorting in the Helpdesk.
{{In Help Desk}} Is this Ticket rendered in the Help Desk.
{{Inbox ID}} Inbox the ticket is in.
{{Is Visible in Help desk}} Whether the ticket is visible in help desk.
{{Last email activity}} The type of the last email activity with the contact associated with the ticket.
{{Last email date}} The date of the last email activity with the contact associated with the ticket.
{{Last message from visitor}} Whether the last message came from visitor.
{{Last message received date}} The date of the last response from the visitor.
{{Last response date}} The date of the last response from an agent or bot.\
{{Last activity date}} The last time a note, call, email, meeting, or task was logged for a ticket. This is updated automatically by HubSpot.
{{Last contacted date}} The last time a call, chat conversation, LinkedIn message, postal mail, meeting, sales email, SMS, or WhatsApp message was logged for a ticket. This is set automatically by HubSpot based on user actions in the ticket record.
{{Last modified date}} Most recent timestamp of any property update for this ticket. This includes HubSpot internal properties, which can be visible or hidden. This property is updated automatically.
{{Latest message seen by agent ids}} Agents who have seen the newest message across all conversations associated to the ticket.
{{Merged Ticket IDs}} The list of Ticket record IDs that have been merged into this Ticket. This value is automatically set by HubSpot and may not be modified.
{{Most relevant SLA status}} Most relevant sla status.
{{Most Relevant SLA Type}} Most relevant SLA type between Close By, First Response, Next Response.
{{Microsoft Teams message ID for this ticket}} Microsoft Teams message ID for this ticket.
{{Next activity date}} The date of the next upcoming activity for a ticket. This property is set automatically by HubSpot based on user action. This includes logging a future call, email, or meeting using the Log feature, as well as creating a future task or scheduling a future meeting. This is updated automatically by HubSpot.
{{Number of Associated Companies}} Number of companies associated with this ticket.
{{Number of Associated Conversations}} Number of conversations associated to the ticket.
{{Number of times contacted}} The number of times a call, email, or meeting was logged on the ticket.
{{Record ID}} The unique ID for this record. This value is automatically set by HubSpot and may not be modified. {{Record Creation Source}} Source (PropertySource) that created this object record.
{{Record Creation Source ID}} The sourceId -- further detail -- of the source that created this object record.
{{Record Source}} How this record was created.
{{Record Creation Source User ID}} User ID of the user who initiated creation of this object record.
{{Originating channel account}} First channel account used when conversation was started.
{{Originating email engagement id}} Engagement id of the email originating this ticket.
{{Originating channel type}} The channel the conversation is in.
{{Pinned Engagement ID}} The object ID of the current pinned engagement. This value is automatically set by HubSpot and may not be modified.
{{Pipeline}} The pipeline that contains this ticket.
{{Ticket status}} The pipeline stage that contains this ticket.
{{Primary Company}} Primary company of a ticket.
{{Primary Company ID}} Primary company ID of a ticket.
{{Primary Company Name}} Primary company name of a ticket.
{{Read Only Object}} Is the object read only.
{{Resolution}} The action taken to resolve the ticket.
{{Users interaction}} Stores a list of users who have viewed the most recent interaction on a ticket. {{Source Object ID}} The ID of the object from which the data was migrated. This is set automatically during portal data migration.
{{Ticket Tags}} List of tag ids applicable to a ticket. This property is set automatically by HubSpot.
{{Thread IDs To Restore}} Thread IDs (from cv-threads) used to implement custom cascading delete/restore.
{{Category}} Main reason customer reached out for help.
{{Ticket ID}} The unique id for this ticket. This unique id is automatically populated by HubSpot.
{{Priority}} The level of attention needed on the ticket.
{{Time in 'New (Support Pipeline)'}} The total time in seconds spent by the ticket in the 'New' stage, 'Support Pipeline' pipeline. {{Time in 'Waiting on contact (Support Pipeline)'}} The total time in seconds spent by the ticket in the 'Waiting on contact' stage, 'Support Pipeline' pipeline.
{{Time in 'Waiting on us (Support Pipeline)'}} The total time in seconds spent by the ticket in the 'Waiting on us' stage, 'Support Pipeline' pipeline.
{{Time in 'Closed (Support Pipeline)'}} The total time in seconds spent by the ticket in the 'Closed' stage, 'Support Pipeline' pipeline.
{{Time to Close SLA Due Date}} When the ticket falls out of Time to Close SLA.
{{Time to Close SLA Ticket Status}} Current Time to Close SLA status of ticket.
{{Time to First Response SLA Due Date}} When the ticket falls out of the Time to First Response SLA.
{{Time to First Response SLA Status}} Current Time to First Response SLA status.
{{Time to Next Response SLA Due Date}} When the ticket falls out of Time to Next Response SLA.\
{{Time to Next Response SLA Status}} Current Time to Next Response SLA status.
{{Unique creation key}} Unique property used for idempotent creates.
{{Updated by user ID}} The user that last updated this object. This value is automatically set by HubSpot and may not be modified.
{{User IDs of all notification followers}} The user IDs of all users that have clicked follow within the object to opt-in to getting follow notifications.
{{User IDs of all notification unfollowers}} The user IDs of all object owners that have clicked unfollow within the object to opt-out of getting follow notifications.
{{User IDs of all owners}} The user IDs of all owners of this object.
{{Performed in an import}} Object is part of an import.
{{Owner assigned date}} The date an owner was assigned to the ticket.
{{Date of last engagement}} The date of the last reply or note.
{{Last customer reply date}} The date of the last customer response.
{{NPS follow up}} Answer to NPS follow up question.
{{NPS follow up question}} Specific version of NPS follow up question that was asked.
{{Conversation NPS score}} NPS score received after ticket resolution.
{{Reference to email thread}} The id of an email thread with ticket conversation.
{{Time to close}} The time between when the ticket was created and closed. {{Time to first agent email reply}} The time from the ticket create date to the first agent email reply.
{{Ticket name}} Short summary of ticket.
{{Ticket description}} Description of the ticket.
{{Source}} Channel where ticket was originally submitted.
{{Reference to source-specific object}} The id of a connected source object.
{{Tags}} Tags associated with your tickets.
{{Recent Sales Email Replied Date}} The last time a tracked sales email was replied to for this ticket.
{{Ticket owner}} User the ticket is assigned to. Assign additional users to a ticket record by creating a custom user property.
{{Last Contacted (Ticket Note)}} The last time a call, chat conversation, LinkedIn message, postal mail, meeting, note, sales email, SMS, or WhatsApp message was logged for a ticket. This is set automatically by HubSpot based on user actions in the ticket record.
{{Last Activity Date (Ticket Note)}} The last time a note, call, email, meeting, or task was logged for a ticket. This is set automatically by HubSpot based on user actions in the ticket record.
{{Next Activity Date (Ticket Note)}} The date of the next upcoming activity for this ticket.
{{Number of times contacted (Ticket Note)}} The number of times a call, email or meeting was logged for this ticket.
{{Number of Sales Activities}} The number of times a call, chat conversation, LinkedIn message, postal mail, meeting, note, sales email, SMS, task, or WhatsApp message was logged for a ticket record. This is set automatically by HubSpot based on user actions in the ticket record.
{{HubSpot team}} Primary team of the ticket owner. This property is set automatically by HubSpot.
{{All owner ids}} The value of all owner referencing properties for this object, both default and custom.
{{All team ids}} The team IDs, including up the team hierarchy, corresponding to all owner referencing properties for this object, both default and custom.
{{All teams}} The team IDs, including up the team hierarchy, corresponding to all owner referencing properties for this object, both default and custom.
Line Items {{Net price}} The amount of a line item.
{{Create Date}} The date the line item was created.
{{Description}} Full description of product.
{{Unit discount}} The discount amount applied.
{{Annual contract value}} The annual contract value (ACV) of this product.
{{All teams}} The team IDs, including up the team hierarchy, corresponding to all owner referencing properties for this object, both default and custom.
{{Business units}} The business units this record is assigned to.
{{All owner ids}} The value of all owner referencing properties for this object, both default and custom.
{{All team ids}} The team ids corresponding to all owner referencing properties for this object, both default and custom.
{{Allow buyer selected quantity}} Whether buyer selected quantity is to be enabled or not for a LineItem.
{{Annual recurring revenue}} The annual recurring revenue (ARR) of this product.
{{Billing Period End Date}} End date of a fixed billing period. {{Billing Period Start Date}} Start date of a fixed billing period.
{{Delayed billing start by days}} Number of days billing should be delayed by. It allows the customers to start billing sometime in the future.
{{Delayed billing start by months}} Number of months billing should be delayed by. It allows the customers to start billing sometime in the future.
{{Start billing terms}} The type of billing start delay. It can be a fixed date in the future, relative delay in number of days or months.
{{Unit cost}} The amount that sold goods cost the HubSpot customer.
{{Created by user ID}} The user that created this object. This value is automatically set by HubSpot and may not be modified.
{{Object create date/time}} The date and time at which this object was created. This value is automatically set by HubSpot and may not be modified.
{{Discount Percentage}} The discount percentage applied.
{{External LineItem id}} The ID of a line item.
{{Image URL}} Product images.
{{Last Modified Date}} The date any property on this product was modified.
{{Currency}} Currency code for the line item.
{{Margin}} The margin value of this product.
{{Annual contract value margin}} The margin annual contract value of this product.
{{Annual recurring revenue margin}} The margin annual recurring revenue of this product.
{{Monthly recurring revenue margin}} The margin monthly recurring revenue of this product.
{{Total contract value margin}} The margin total contract value of this product.
{{Merged record IDs}} The list of record IDs that have been merged into this record. This value is automatically set by HubSpot and may not be modified.
{{Monthly recurring revenue}} {{The monthly recurring revenue (MRR) of this product}}
{{Record ID}} The unique ID for this record. This value is automatically set by HubSpot and may not be modified.
{{Record Creation Source}} Source (PropertySource) that created this object record.
{{Record Creation Source ID}} The sourceId -- further detail -- of the source that created this object record.
{{Record Source}} How this record was created.
{{Record Creation Source User ID}} User ID of the user who initiated creation of this object record.
{{Position on quote}} The order which the line item appears on the quotes.
{{Net Price after tax}} Amount of line item after applying tax.
{{Pre Discount Amount}} The pre-discount amount of a line item.
{{Product ID}} ID of the product this was copied from.
{{Product Type}} The type of product. By default, categorize your product as either Inventory, Non-Inventory or Service.
{{Read Only Object}} Is the object read only. {{Billing end date}} Recurring billing end date for a line item.
{{Number of payments}} Number of payments for the given period on a Line Item.
{{Term}} Product recurring billing duration.
{{Billing start date}} Recurring billing start date for a line item.
{{Billing terms}} If there are fixed number payments or it goes on until cancelled.
{{SKU}} Unique product identifier.
{{Sync amount}} The amount set by Ecommerce sync.
{{Tax Amount}} Amount of tax calculated based on tax rate for this line item.
{{Tax Rate}} Represents tax rate as percent out of 100. Supports up to 4 decimal places.
{{Tax Type}} Describes the type of the tax applied on a LI. For example VAT, Tax, GST.
{{Total contract value}} The total contract value (TCV) of this product.
{{Term in months}} The number of months in the term of this product.
{{Calculated Total Discount}} Calculated total Discount for the line item taking in consideration the flat amount and discount percentage.
{{Unique creation key}} Unique property used for idempotent creates.
{{Updated by user ID}} The user that last updated this object. This value is automatically set by HubSpot and may not be modified.
{{URL}} Product url.
{{User IDs of all notification followers}} The user IDs of all users that have clicked follow within the object to opt-in to getting follow notifications.
{{User IDs of all notification unfollowers}} The user IDs of all object owners that have clicked unfollow within the object to opt-out of getting follow notifications.
{{User IDs of all owners}} The user IDs of all owners of this object.
{{Variant id of the product}} Variant id of the shopify product.
{{Performed in an import}} Object is part of an import.
{{Owner Assigned Date}} The most recent date an owner was assigned to this object. This is set automatically by HubSpot and can be used for segmentation and reporting.
{{Owner}} The owner of the object.
{{HubSpot Team}} The primary team of the owner.
{{Name}} Product name.
{{Unit price}} Cost of product.
{{Quantity}} How many units of a product are in this line item.
{{Billing frequency}} How often a line item with recurring billing is billed. It informs the pricing calculation for deals and quotes. Line items with one-time billing aren’t included.
{{Tax}} The tax amount applied.
Meetings {{Call and meeting type}} The activity type of the engagement. {{Business units}} The business units this record is assigned to.
{{At-Mentioned Owner Ids}} The owners that have been at-mentioned on the engagement.
{{Attached file IDs}} The IDs of the files that are attached to the engagement.
{{HubSpot attendee owner IDs}} List of HubSpot owner IDs for additional attendees.
{{Body preview}} A truncated preview of the engagement body.
{{HTML Body Preview}} The HTML representation of the engagement body preview.
{{Body Preview Truncated}} Indicates if the engagement body was truncated for the preview.
{{Contact first outreach date}} The first outreach date of the associated contact.
{{Activity created by}} The user who created the engagement.
{{Created by user ID}} The user that created this object. This value is automatically set by HubSpot and may not be modified.
{{Create date}} The date that an engagement was created.
{{Engagement Source}} The source that created this engagement.
{{Engagement Source ID}} The specific ID of the process that created this engagement.
{{Follow up action}} What action should be performed during follow up.
{{GDPR deleted}} Indicates the body of this engagement has been cleared because of a GDPR delete request.
{{Guest Emails}} Guest emails on a meeting booking.\
{{iCalUid}} The iCalUid of the synced event.
{{Should include description in reminder}} Indicates whether or not the prospect reminders should include the meeting description.
{{Internal Meeting Notes}} The internal notes from the meeting.
{{Last modified date}} The date any property on this engagement was modified.
{{Meeting description}} The text description of the meeting.
{{Meeting calendar event hash}} The unique hash for the meeting.
{{Meeting change id}} The unique change id for the meeting.
{{Created From Link ID}} Created From Link ID.
{{Meeting end time}} The date when the meeting ends.
{{External URL}} The external URL for the meeting.
{{Meeting location}} Where the meeting takes place.
{{Location type}} The type of location for the meeting event.
{{Meeting outcome}} The outcome of this meeting.
{{Payments session id}} The payments session id for the meeting.
{{Pre-meeting prospect reminders}} A list of dates when meeting reminders should be sent to prospects.
{{Meeting source}} The source where the meeting was booked.
{{Source ID}} The source ID of the meeting. {{Meeting start time}} The date when the meeting starts.
{{Meeting name}} The title of the meeting.
{{Web conference meeting ID}} The meeting ID of the web conference.
{{Merged record IDs}} The list of record IDs that have been merged into this record. This value is automatically set by HubSpot and may not be modified.
{{Updated by}} The user who last updated the engagement.
{{Record ID}} The unique ID for this record. This value is automatically set by HubSpot and may not be modified.
{{Record Creation Source}} Source (PropertySource) that created this object record.
{{Record Creation Source ID}} The sourceId -- further detail -- of the source that created this object record.
{{Record Source}} How this record was created.
{{Record Creation Source User ID}} User ID of the user who initiated creation of this object record.
{{Outcome canceled count}} 1 if outcome is canceled otherwise 0.
{{Outcome completed count}} 1 if outcome is completed otherwise 0.
{{Outcome no show count}} 1 if outcome is no-show otherwise 0.
{{Outcome rescheduled count}} 1 if outcome is rescheduled otherwise 0.
{{Outcome scheduled count}} 1 if outcome is scheduled otherwise 0.\
{{Product name}} The name of the product associated with this engagement.
{{Queue Memberships}} The list of queues that contain this engagement.
{{Read Only Object}} Is the object read only.
{{Roster object coordinates}} The ID of the associated roster object if the meeting was booked via a roster.
{{Scheduled tasks}}
{{Time to book meeting from first contact}} The time it took to book a meeting from first outreach date of the associated contact.
{{Activity date}} The date that an engagement occurred.
{{Timezone}} Timezone of the meeting booking.
{{Unique creation key}} Unique property used for idempotent creates.
{{Unique ID}} The unique ID of the engagement.
{{Updated by user ID}} The user that last updated this object. This value is automatically set by HubSpot and may not be modified.
{{User IDs of all notification followers}} The user IDs of all users that have clicked follow within the object to opt-in to getting follow notifications. {{User IDs of all notification unfollowers}} The user IDs of all object owners that have clicked unfollow within the object to opt-out of getting follow notifications.
{{User IDs of all owners}} The user IDs of all owners of this object.
{{Performed in an import}} Object is part of an import. {{Owner Assigned Date}} The timestamp when an owner was assigned to this engagement.
{{Activity assigned to}} The user that the activity is assigned to in HubSpot. This can be any HubSpot user or Salesforce integration user, and can be set manually or via Workflows.
{{HubSpot Team}} The team of the owner of an engagement.
{{All owner ids}} The value of all owner referencing properties for this object, both default and custom.
{{All team ids}} The team ids corresponding to all owner referencing properties for this object, both default and custom. {{All teams}} The team ids, including up the team hierarchy, corresponding to all owner referencing properties for this object, both default and custom.
Portant {{Document Created Time}} The creation date of the most recent document output from Portant. {{Document Link}} The link to the most recent document output from Portant. {{Document Status}} The status of the most recent document output from Portant. {{PDF Link}} The link to the most recent document output from Portant. {{Signable Document Link}} The link to the first signature request link for this document. {{Workflow}} The name of the workflow that was run to produce the most recent document output from Portant.
#### Feedback and feature suggestions We created Portant in 2021 and the feedback we have received since then has been very helpful and greatly appreciated. If you have any feedback please feel free to send us an email at Thanks, Blake and James ================================================================================ # HubSpot › Trigger HubSpot workflows from Portant Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/trigger-hubspot-workflows-from-portant/ ================================================================================ Use Portant document statuses (like Signed, Sent, or Approved) as the trigger for your HubSpot workflows. This page shows you how to set up an enrolment trigger, lists every status you can use, and gives a few ideas for what to build with them. In this guide: 1. Set up a HubSpot workflow enrolment trigger 2. Portant document statuses you can use 3. HubSpot workflow ideas 4. Advanced HubSpot workflow techniques Every time Portant runs, it saves details about the document (link, status, workflow name, and more) to a set of custom properties on the HubSpot record. Those properties are added automatically the first time you run a workflow, and HubSpot's [enrolment triggers](https://knowledge.hubspot.com/workflows/set-your-workflow-enrollment-triggers) can listen to changes on them. > Looking to do the opposite, run a Portant workflow as a step inside a HubSpot workflow? See [Add a Portant action to a HubSpot workflow](/docs/sources/hubspot/add-a-portant-action-to-a-hubspot-workflow/). ## Set up an enrolment trigger In HubSpot, choose to trigger the workflow **When filter criteria is met**. ![](/docs/assets/images/sources-hubspot-trigger-hubspot-workflows-from-portant_0_656e7c84c62b799ec1642f6b_pika-1701739632075-1x.png_0.png) Add a filter based on Deal, Contact, Company or Ticket properties. ![](/docs/assets/images/sources-hubspot-trigger-hubspot-workflows-from-portant_1_656e7e4edeeccae54472738e_pika-1701740065610-1x.png_1.png) Search for the property you want to trigger on. In this example, it's **Document Status**, but you can use any of the Portant custom properties. > You can combine filters, for example "Document status = Signed AND Workflow name = NDA" to only trigger the workflow when an NDA is signed. ![](/docs/assets/images/sources-hubspot-trigger-hubspot-workflows-from-portant_2_656e7f2a8fae8bf9b4c4ba31_pika-1701740278643-1x.png_2.png) Pick a condition and a value, then save. ![](/docs/assets/images/sources-hubspot-trigger-hubspot-workflows-from-portant_3_656e8b2b7573bb315396dd71_pika-1701743390188-1x.png_3.png) ## Document statuses you can trigger on Each status is a value on the Portant **Document Status** property: - **Pending** - the document is being generated. Useful for notifying a team member that a document has been requested. - **Draft** - a draft has been created and needs review and approval. Useful for nudging the team to finalise drafts. - **Approved** - the draft has been approved. Useful for kicking off the next step in the process. - **Signature Requested** - a signature has been requested. Useful for follow-up reminders to clients who haven't signed yet. - **Signed** - the document has been signed. Useful for moving the deal to the next stage of the pipeline. - **Sent** - an email has been sent. Useful for starting a follow-up sequence after a set time. - **Error** - something went wrong generating the document. Useful for alerting your support team. For more on review and approval, see [Review and approve documents](/docs/manage/automation/review-approve/). ## HubSpot workflow ideas A few ways you can put these triggers to work: - **Timely follow-ups:** use **Signature Requested** or **Sent** to remind your team about documents that haven't been actioned by clients. - **Error handling:** alert support whenever a document hits **Error** so it gets resolved fast. - **Progress tracking:** post internal notifications or update CRM fields whenever a document changes status, so the whole team has visibility. ## Advanced techniques A couple of patterns to take this further: - **Combine triggers:** mix document status with other criteria like deal stage or lead score for more nuanced automations. - **Time-based escalations:** escalate a deal if a document has sat in **Signature Requested** or **Draft** for too long. Used well, these triggers can take a lot of manual chasing out of your sales cycle. ================================================================================ # HubSpot › Add a Portant action to a HubSpot workflow Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/add-a-portant-action-to-a-hubspot-workflow/ ================================================================================ Run a Portant workflow as a step inside a HubSpot workflow, so documents are generated automatically when a HubSpot trigger fires (a deal stage change, a property update, an event, anything HubSpot can listen for). [Watch video](https://www.youtube.com/watch?t=84s&v=BE9N5cKUgQc) In this guide: 1. Set up a HubSpot workflow 2. Add a Portant action to it For more on HubSpot workflows in general, see HubSpot's [workflow documentation](https://knowledge.hubspot.com/automation/topics#workflows). > Looking to do the opposite, trigger a HubSpot workflow from a Portant action? See [Trigger HubSpot workflows from Portant](/docs/sources/hubspot/trigger-hubspot-workflows-from-portant/). ## Create a HubSpot workflow There are several ways to create a workflow in HubSpot. The official guide is here: [Create workflows](https://knowledge.hubspot.com/workflows/create-workflows). The example below builds a basic workflow from scratch. In the top menu, go to **Automation → Workflows**. ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FieOSUtXQHHgkVtNk4G8z_2Fpika-1707789617) Click **Create workflow**. ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FOQRgu6GFnmSIb8FILGBZ_2Fpika-1707786507) Click **From Scratch**. ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FG4192N1UOOiTkUZiNCU9_2Fpika-1707790048) Pick the HubSpot object type the workflow runs on: - **Contact-based** - triggered by fields on a contact - **Company-based** - triggered by fields on a company - **Deal-based** - triggered by fields on a deal - **Ticket-based** - triggered by fields on a ticket Make sure the type matches the [primary object in your Portant workflow](/docs/sources/hubspot/). ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FuPd0xPXEtHtT8EdyMT4u_2Fpika-1707790324) Pick a trigger. In this example we'll trigger when a deal property called "Generate Proposal" is set to "Yes". Click **Set up triggers**. ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FykhPXBcwyoyxF5XFjPxp_2Fpika-1707790663) Click **When an event occurs**. ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F31Nt23MlIxUD2Ccbqo9s_2Fpika-1707791148) Pick **Property value changed**. ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FP6TBlUimTAQ6iT3P89W7_2Fpika-1707791278) Choose the property and value. In this example, the custom property "Generate Proposal" changes to "Yes". ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_7_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FSxYillmtbmcfocFwcGTm_2Fpika-1707791419) Click **Save**. ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_8_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FyMknVKyllzV8ozJFw0HW_2Fpika-1707791581) ## Add the Portant action Click the **+** button below your workflow to add a step. ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_9_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FpUsT7XprucWhtk9uGLkP_2Fpika-1707792038) Portant appears in the menu on the left. ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_10_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fb2IumU7fkq4yJhJg5k4B_2Fpika-1707792148) > Note: If you don't see Portant here, it usually means the app wasn't installed with Super Admin permissions. There's a quirk in HubSpot where Super Admin is required to enable an app to interface with workflows. See [the install guide](/docs/sources/hubspot/how-to-install-the-portant-app-in-hubspot/) for the details. Pick **Run a Portant Workflow**. ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_11_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fz7rRYlnUVqr233bUEJVc_2Fpika-1707793738) Select the workflow you want to run. The dropdown only shows Portant workflows whose primary object matches the HubSpot workflow trigger. ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_12_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fu7aHzNsJubS93FP6QxZW_2Fpika-1707794601) Click **Save**, then **Review and publish** to turn the workflow on. ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_13_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FNhodHWKUxnVYClI8b7Af_2Fpika-1707796300) ![](/docs/assets/images/sources-hubspot-add-a-portant-action-to-a-hubspot-workflow_14_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FUARHL0AKuX6UKyQNBPne_2Fpika-1707796488) For more on the publish step's settings, see HubSpot's own workflow guides. ## When to use a Portant action A few good fits for this pattern: - **Trigger documents from mobile:** the HubSpot mobile app doesn't support app cards, so a workflow action is the easiest way to fire a document from a phone. - **Beyond deal stages:** in the Portant app, auto-create only triggers off deal stage. A HubSpot workflow can trigger off any property or event you like. - **Other object types:** generate documents automatically from changes on contacts, companies, tickets or custom objects, not just deals. ================================================================================ # HubSpot › View created documents in HubSpot Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/how-to-view-created-documents-in-hubspot/ ================================================================================ There are four places in HubSpot where you can find documents Portant has generated: the Portant app card, the activity feed, custom properties, and the attachments section. Use whichever fits how your team works. In this guide: 1. The Portant app card 2. The activity section 3. Custom properties 4. The attachments section ## The Portant app card The Portant card sits on the record (deal, contact, company, ticket or custom object) alongside the rest of HubSpot's CRM info. From here you can run workflows and view the documents you've already generated. The card appears automatically once the [Portant app is installed in HubSpot](/docs/sources/hubspot/). ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_0_sKOtTuHJFZTur7XFCZaXOspKLltslmoOEgsB4bWfsyqLgutDwl1rLeoIloIrLAKpkcQbi6Y82vngLRsl) ## The activity section The activity feed shows a timeline of everything that's happened on the record. Document generation events show up here too. Open a deal and click the **Activities** tab. ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_1_BGJBvG8nwpfSBKAtOE_RCuxkNd7htISKeUkHb97B5wjOLWMJyYW_MIwGWQWDIEaAb3wzqPqoyqXBAO38) Click **Filter Activity** and pick **Portant | Google Docs & eSign**. ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_2_lipe3ueIcTuD_TXt0Qe1Q6xpLpGWjEadyOVk7B5FuQ7KdvImmQ2VxKgg8YIR2c8CmOSPccDQdoT9n--0) ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_3_2UV1eH_92uQsY0bxBP3_cFYMOdN5C3dDk3Un9mgV7RLxtywcp-EKCUhxPsG6BzCcTtGXIpJFw0c_-jJd) Now the timeline only shows document creation activity for the record. ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_4_hX3bvZTPPSEFaTvTPVhtYrwqq-j7SnoVygMARqXrp4SnaUb5ybDC1bmHv5XQLTrXapNK08Xxby9FM7Nt) ## Custom properties Portant stores document details (link, status, workflow name, and more) in a group of custom HubSpot properties on the record. You can see them by opening the property panel. ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FU3OuqAnHWnBJGOH0OAHJ_2Fpika-1710864526) > You can use these properties to [trigger HubSpot workflows](/docs/sources/hubspot/trigger-hubspot-workflows-from-portant/) and to build dashboards or reports. To pin them to the left-hand sidebar of every record: ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FQnTvxZGbs1Jtfcb1WDdh_2Fpika-1710865550) Click **View all properties**. ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FU3OuqAnHWnBJGOH0OAHJ_2Fpika-1710864526) Scroll to the Portant group of custom properties and click **Add to your view** for each property you want pinned. ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_7_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FTSWpMNxJyBEWKkCCZlmk_2Fpika-1710864659) Once you save, those properties appear in the left-hand panel on every record. ## The attachments section Any PDF outputs Portant generates are saved as attachments on the HubSpot record automatically. Open the Attachments section and click the dropdown. ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_8_WNYvwyVEhttB1MxXdDj3qOh4UP3XSMrzdFqUoDvO8UYxnCO5luWR2UHiS7brdRd474QVuebT0ZNWCI9p) The attached PDF is shown. If there's more than one, click **View all attachments**. ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_9_vVzdk19KWuWzr_wIP9FgJmCvEkz5fPktbPfR2GqHz1_rH5zbzRI135pAUisKpr_iANQ-dRX-EvElWPlm) You'll see every attachment on the record. ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_10_jhah1h_o2DWVKClQHN2_Z7Xicb8YYw7udrrwFKfBcSLqzreg62vm2_itLGhbV2iwKxj1MJHu5Duqjbup) Use the search bar to find a specific attachment. ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_11_ehi_DBV3KBchFk9i-54POWi8B7wzYc9jgVlbHxyCnXGcnbDiCQX6R6GBaP4-RlzyKk3pHfYjzrT3YuI6) To remove a file, tick the checkbox and click **Remove**. ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_12_LsGOk3YJeWBcWhyu_O3hOoxTg5jr_kDet3O6DixsSSRimXetfTXOTUAXvY0s9zujwXvaIy4zt1Md4IUC) Click **Detach** to confirm. ![](/docs/assets/images/sources-hubspot-how-to-view-created-documents-in-hubspot_13_qlzUdwDW8i7S36uxQuv4hIrrIT_VDHxQTXxNtM594vPyIoLfIUCpD_IbCkB_RcWta5kmsFkXW94592qX) ================================================================================ # HubSpot › Add multiple line items into a single document Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/add-multiple-line-items-into-a-single-document/ ================================================================================ Pull all the line items (or any associated objects) from a HubSpot record into a single document, with one row per item. This page covers the HubSpot-specific setup. The rules for repeating tables and line items in general live in [Line items and tables](/docs/features/line-items/) and [Repeating tables](/docs/features/line-items/repeating-tables/). In this guide: 1. Group HubSpot line items into a single document 2. Sort the rows in the table ## Group HubSpot line items into a single document If this is your first HubSpot workflow, start with the [HubSpot overview](/docs/sources/hubspot/) for the setup basics. Once your workflow is set up, open the Template block (Google Docs or Slides). ![](/docs/assets/images/sources-hubspot-add-multiple-line-items-into-a-single-document_0_xlDDM_rjrVltI0CcsPdJuOtg23DboISfLy2HWLyb15rooeYaLtMXAc419n6Hv4NWKHfTPgJysHjcwpa6) Place the line item tags inside a table row in your template. Portant clones that row for every line item on the record, so you only design the row once. ![](/docs/assets/images/sources-hubspot-add-multiple-line-items-into-a-single-document_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FFOoJaGx5mNAxbajEePrz_2Fimage.gif_1.png) Make sure every tag for the line item sits inside the table row. In this example, the row uses tags for Line Item Name, Line Item Unit Price, and Line Item Quantity. ![](/docs/assets/images/sources-hubspot-add-multiple-line-items-into-a-single-document_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FHvmDYxbUiePotxsTzmy9_2Fpika-1715698973) When you run the workflow on a deal with several line items, Portant adds one new row to the table for each item. ![](/docs/assets/images/sources-hubspot-add-multiple-line-items-into-a-single-document_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fr0TKiijSQIfaekakgoXC_2Fpika-1715700583) For more on how repeating tables behave (totals rows, formatting, troubleshooting), see [Repeating tables](/docs/features/line-items/repeating-tables/). ## Sort the rows in the table To control the order rows appear, open the **Manage HubSpot Fields** modal. ![](/docs/assets/images/sources-hubspot-how-to-manage-and-select-hubspot-properties_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FzqpPdyMvfcYdGYk59yV0_2Fpika-1744712912) Pick the object you want to sort. ![](/docs/assets/images/sources-hubspot-how-to-manage-and-select-hubspot-properties_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FsbQ7sJKqgOT9clNVaqWh_2Fpika-1744713096) Use the sort options at the bottom of the property list to set the field and the order. ![](/docs/assets/images/sources-hubspot-how-to-manage-and-select-hubspot-properties_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fca3fzpoRtupYGlnaYymr_2Fpika-1744713317) For more on sorting across all sources, see [Sort and order rows](/docs/features/line-items/sorting/). ================================================================================ # HubSpot › Add deal tags using Portant document statuses Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/add-deal-tags-using-portant-document-statuses/ ================================================================================ Use HubSpot deal tags to give deals a visible status based on what's happened to the document, like "Signed", "Awaiting signature", or "Approved". Once set up, the tag appears automatically on the deal whenever the matching Portant status is reached. In this guide: 1. How to add a HubSpot deal tag triggered by a Portant document status ## Add a HubSpot deal tag In HubSpot, go to **Settings → Data Management → Objects → Deals**. Open the **Pipelines** tab and click **Manage deal tags**. ![](/docs/assets/images/sources-hubspot-add-deal-tags-using-portant-document-statuses_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fs0R8tT6YndpAeW61xnQs_2Fpika-1717075419) Click **Add Tag** at the bottom of the screen. ![](/docs/assets/images/sources-hubspot-add-deal-tags-using-portant-document-statuses_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FBIdP3Rh21AhDI3v8puqc_2Fpika-1717075485) Pick **Create from scratch**. ![](/docs/assets/images/sources-hubspot-add-deal-tags-using-portant-document-statuses_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FgqfEbCMw8A4TqdJX2oGi_2Fpika-1717075561) Name the tag whatever makes sense. In this example, we're creating a tag that's added when an agreement has been signed. ![](/docs/assets/images/sources-hubspot-add-deal-tags-using-portant-document-statuses_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fu2K68kTeAe8RNz1PvxjL_2Fpika-1717075658) Click **Next: Add Filters**, then set: - **Filtering on:** Deal (Current Object) - **Filter category:** Deal Properties ![](/docs/assets/images/sources-hubspot-add-deal-tags-using-portant-document-statuses_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FpygRYsy3mMHdLLn61Xjz_2Fpika-1717075782) Scroll to the bottom and pick **Document Status**, which lives in the **Portant** group of properties. ![](/docs/assets/images/sources-hubspot-add-deal-tags-using-portant-document-statuses_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FGYxoJTkPC03GExhyJkt5_2Fpika-1717075878) Set the condition so the tag is added when **Document Status is Signed**. ![](/docs/assets/images/sources-hubspot-add-deal-tags-using-portant-document-statuses_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FuA8ZobaHcNKSSv2McPij_2Fpika-1717075935) Click **Next: Review Tag**, then **Save**. ![](/docs/assets/images/sources-hubspot-add-deal-tags-using-portant-document-statuses_7_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FhpOmokfqRAZp51at6jTS_2Fpika-1717075957) Now any deal with a document signed via Portant gets the tag automatically. ![](/docs/assets/images/sources-hubspot-add-deal-tags-using-portant-document-statuses_8_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FhSTfkPmShFkfhfMRHRr5_2Fpika-1717077255) > You can also use the same Document Status property to trigger HubSpot workflows, for example moving a deal to the next stage when it's signed. See [Trigger HubSpot workflows from Portant](/docs/sources/hubspot/trigger-hubspot-workflows-from-portant/). ================================================================================ # HubSpot › Portant eSignatures and HubSpot Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/portant-esignatures-+-hubspot/ ================================================================================ Send a document for signature to a HubSpot contact straight from a Portant workflow, with the right contact picked from the deal, ticket or company. This page covers the HubSpot-specific bits. For the full eSignatures docs (placeholders, fields, sending, signing flow), see [eSignatures](/docs/send/esignatures/). In this guide: 1. Pick a HubSpot contact as the signature recipient 2. How that selection works at run time ## Pick a HubSpot contact as the recipient In the Template block, below the Output Name field, click **Request a Signature**. ![](/docs/assets/images/sources-hubspot-portant-esignatures-_-hubspot_0_646714df1c34ab560262ec7c_eSign_20Workflow.png_0.png) The signature settings appear. There are five things to set up for each recipient: 1. **Recipient email** - this can be a `{{tag}}` from your source, a typed email like `james@portant.co`, or [a HubSpot contact](#selecting-a-hubspot-contact-as-the-esignature-recipient). 2. **Signature placeholder** - drops a placeholder image into the document where the signature will go. 3. **Date placeholder** - drops a placeholder image where the signing date will go. 4. **Text field** - collects extra info at signing (for example, a delivery address). 5. **Checkbox field** - collects a yes/no at signing (for example, accepting terms). > For more on placeholders and fields, see the full [eSignatures guide](/docs/send/esignatures/). ### Selecting a HubSpot contact as the eSignature recipient When you set the recipient to a HubSpot contact, Portant asks which contact (associated with the deal, ticket or company) should sign. ![](/docs/assets/images/sources-hubspot-portant-esignatures-_-hubspot_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FswQhKxIaAfylbnqk4kAE_2Fpika-1722960529) ### Using HubSpot contact association labels If you've set up [association labels](https://knowledge.hubspot.com/object-settings/create-and-use-association-labels) in HubSpot (for example, "First Signer" and "Co-Signer"), Portant shows them too. They make it easy to pick the right contact for the right role on the document. ![](/docs/assets/images/sources-hubspot-portant-esignatures-_-hubspot_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FH6EgfBoZiPkhXLrdZv0m_2Fpika-1722960918) You can still use the generic HubSpot Contact property without a label. ## How the contact selection works at run time Test your workflow from a HubSpot deal: open the deal, go to the **Portant CRM Card → Actions** and pick your workflow. ![](/docs/assets/images/sources-hubspot-portant-esignatures-_-hubspot_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F05o3ksLdfjEPO2588YhM_2Fpika-1723049471) You can pick which associated contact gets each signature. The preview on the left shows where each signature will go, and labelled contacts show their label so it's clear who's who. ![](/docs/assets/images/sources-hubspot-portant-esignatures-_-hubspot_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fr3WnyS3Vzx8wYcT5zQt7_2Fpika-1723049306) By default, the first contact for each label is pre-selected. You can override that before sending. > If a Portant workflow runs automatically (for example, from a HubSpot workflow trigger), Portant uses the first contact for each label. ================================================================================ # HubSpot › Review and approve documents in HubSpot Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/review-and-approve-documents-in-hubspot/ ================================================================================ Review, edit and approve generated documents without leaving HubSpot. When a workflow includes a review step, the draft pauses inside HubSpot so the right person can sign off before it moves on. The full review and approval rules live in [Review and approve documents](/docs/manage/automation/review-approve/). [Watch video](https://www.youtube.com/watch?v=NtMtIrE9iWE) In this guide: 1. How to review and approve drafts from inside HubSpot ## Review and approve drafts from HubSpot If you haven't set up a Review block before, start with [Review and approve documents](/docs/manage/automation/review-approve/). When a HubSpot-sourced workflow includes a Review block, every generated draft pauses at the review stage. You can review, edit and approve it directly from the HubSpot modal. ![](/docs/assets/images/sources-hubspot-review-and-approve-documents-in-hubspot_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FabEonkmFxYo7HK3RYqTl_2Fimage.png_0.png) If you're not the approver, or you want to come back to it later, just close the modal. To pick it back up, click the document link in the Portant app card to reopen the modal. You can also approve the draft directly from the app card in the middle section of the HubSpot record. ![](/docs/assets/images/sources-hubspot-review-and-approve-documents-in-hubspot_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fjx8OB0Kxd57Kb099eBLt_2Fimage.png_1.png) > Note: while a document is in the review stage, its status is **Draft**. That status is also stored on the HubSpot record as a Portant custom property, so you can use it to trigger HubSpot workflows or build reports. To approve a draft, click **Actions** in the app card. ![](/docs/assets/images/sources-hubspot-review-and-approve-documents-in-hubspot_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FNpzzCIp8cJ5UdqUntr7W_2Fimage.png_2.png) Click **Approve Draft** (or **Approve** from the HubSpot modal). The document moves to the next step of the workflow, and the approval is logged on the Portant Output page, the document status property, and the activity feed on the HubSpot deal. If you don't see the new app cards on your HubSpot records, follow [Add Portant app cards to HubSpot](/docs/sources/hubspot/how-to-install-the-portant-app-in-hubspot/how-to-add-portant-app-cards-to-hubspot/) to add them. ================================================================================ # HubSpot › Capture data back to HubSpot Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/capture-data-back-to-hubspot-with-hubspot-capture-fields/ ================================================================================ Add fillable fields to a signable document and map them to HubSpot properties. When the signer fills them in, the data flows straight back to your CRM record. No retyping, no copy-paste. In this guide: 1. Add HubSpot capture fields to a signature block 2. Pick the HubSpot object to update 3. Choose the properties to capture 4. Insert the field tags into your template 5. Control the field appearance 6. See the data update HubSpot ## 1. Add HubSpot capture fields to your workflow With your workflow set up and a signature request added, open the Template block. ![](/docs/assets/images/sources-hubspot-capture-data-back-to-hubspot-with-hubspot-capture-fields_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FPrBjj3gm7MsqbRmHMtaf_2Funknown.png_0.png) In the signature settings, find **HubSpot Capture Fields** at the bottom of the table and click it to open the configuration panel. ![](/docs/assets/images/sources-hubspot-capture-data-back-to-hubspot-with-hubspot-capture-fields_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F1tfsu8aT0CxV2D7wpnZI_2Funknown.png_1.png) ## 2. Pick the HubSpot object to update Choose where the captured data should be stored: - **Primary object** - the deal, contact, company, ticket or custom object the workflow runs on. - **Contact** - the signature recipient's contact record. Pick the one that matches where the information belongs. ![](/docs/assets/images/sources-hubspot-capture-data-back-to-hubspot-with-hubspot-capture-fields_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FMxrXWl1M9qtl1njQuXwF_2Funknown.png_2.png) Portant lists every property on the selected object. ## 3. Choose the properties to capture Tick every property you want the signer to fill in. There's no limit. For example: - Delivery Address - Start Date - Contact Phone Number - Contact First Name Click **Save**. ![](/docs/assets/images/sources-hubspot-capture-data-back-to-hubspot-with-hubspot-capture-fields_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FKF6lDV6mpJXLzFlTPnkH_2Funknown.png_3.png) The selected properties now show up in the HubSpot Capture Fields section of the workflow. ![](/docs/assets/images/sources-hubspot-capture-data-back-to-hubspot-with-hubspot-capture-fields_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F4XFjoJi1kD1WcLK6Rz2B_2Funknown.png_4.png) ## 4. Insert the capture field tags into your template Each capture field has a **Copy** button next to it. Click **Copy**, then paste the `[[tag]]` into your signable template wherever you want the signer to fill the field. ![](/docs/assets/images/sources-hubspot-capture-data-back-to-hubspot-with-hubspot-capture-fields_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FF5OVyNWX1d9T4FA7oiDz_2Funknown.png_5.png) You can mark each property as required or not required, and you can add placeholder text that shows in the empty input field. ![](/docs/assets/images/sources-hubspot-capture-data-back-to-hubspot-with-hubspot-capture-fields_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FS1ObhzCq43iAOrIiOlkf_2Funknown.png_6.png) ## 5. Control the field appearance You can set a maximum field length so each field takes up the same amount of space in the document. Add `:number` at the end of the tag name, before the closing brackets. For example, change `[[1: Contact First Name]]` to `[[1: Contact First Name:20]]` to cap the field at 20 characters. ![](/docs/assets/images/sources-hubspot-capture-data-back-to-hubspot-with-hubspot-capture-fields_7_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FKKok4n1LqGBxjUDTqJJB_2FScreenshot_2020) > Note: if a field is a HubSpot picklist, you can drop it into the signable document too. The signer picks one of the available options from the list during the signing flow. ![](/docs/assets/images/sources-hubspot-capture-data-back-to-hubspot-with-hubspot-capture-fields_8_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FX5Mws3MSwhjwXN8ijgOs_2FScreenshot_2020) ## 6. HubSpot updates automatically Once your tags are placed: 1. Run a test, or trigger your workflow as normal. 2. Portant generates a signable document with the capture fields included. The signer fills in the fields during the signing flow. ![](/docs/assets/images/sources-hubspot-capture-data-back-to-hubspot-with-hubspot-capture-fields_9_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FpoMYJsKghQfxuPpYm5xW_2Funknown.png_9.png) When they submit, a signed copy with the captured data is stored, and each field's value is written back to the matching HubSpot property on the record. ![](/docs/assets/images/sources-hubspot-capture-data-back-to-hubspot-with-hubspot-capture-fields_10_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FU8wnsxskuVDirbYrFfGv_2Funknown.png_10.png) That's it: signers fill in the fields, HubSpot stays up to date. ================================================================================ # HubSpot › Generate documents from any custom object Section: Connect a source URL: https://www.portant.co/docs/sources/hubspot/generate-documents-from-any-custom-object-in-hubspot/ ================================================================================ Portant works with any HubSpot custom object, not just deals and contacts. If your team uses custom objects for things like Subscriptions, Onboarding, Courses, Projects or Events, you can build document workflows around them in the same way you would for a deal. This page is a quick overview. For the step-by-step setup, head to the [HubSpot install and setup guide](/docs/sources/hubspot/). ![](/docs/assets/images/sources-hubspot-generate-documents-from-any-custom-object-in-hubspot_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FVZMql9iqI0yT2uhH0VMQ_2Fpika-1748252332) ## What you can do - Generate documents from any HubSpot custom object. - Pull data from custom object fields and from associated records (linked contacts, companies and so on). - Create documents on demand from a record, or automatically via a HubSpot workflow. - Build document workflows around your team's actual process, not just HubSpot's defaults. ## Common use cases | CRM object | Example document | | ---------------------------- | ------------------------------- | | Implementation or Onboarding | Onboarding Pack | | Subscription | Renewal Paperwork | | Course | Training Completion Certificate | | Engagement or Project | Project Summary Report | | Event | Speaker Confirmation or Agenda | If it's a custom object in HubSpot, you can build documents around it. ## Where to set it up | Setup location | When to use it | | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | | [Inside HubSpot](/docs/sources/hubspot/create-a-document-in-hubspot/) (via app card or workflow) | For triggering document creation from a record, or automating with status changes | | [Inside Portant](/docs/sources/hubspot/) (workflow builder) | For designing templates, previewing outputs, or working with more complex logic | ## Full setup guide For the full step-by-step, see the [HubSpot setup guide](/docs/sources/hubspot/). ![](/docs/assets/images/sources-hubspot-generate-documents-from-any-custom-object-in-hubspot_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F10rUQ9RRxrxvwIq0ZrIo_2Fpika-1748252337) ## Need help If you can't see your custom object in Portant, or you'd like a hand setting up the workflow, email and we'll help. ================================================================================ # Google Sheets Section: Connect a source URL: https://www.portant.co/docs/sources/google-sheets/ ================================================================================ Google Sheets is the easiest source to start with if your data already lives in a spreadsheet, or if you can export it from another tool as a CSV. This page covers how to set up a sheet for Portant, process rows manually, turn on auto-create, and group rows together. ## Set up your Google Sheet Put your headers in the first row and the data in the rows underneath, like this: ![](/docs/assets/images/sources-google-sheets_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fw4dYYPpr38jYYwTCUbn7_2Fpika-1707351816) Each row creates one document, unless you use [data grouping](/docs/features/line-items/data-grouping/) to combine multiple rows into a single output. ## Process rows manually You have two ways to process a sheet: manually pick which rows to run, or turn on auto-create so new rows are processed automatically. To run rows manually, click the **Automate** button in the top right of the workflow: ![](/docs/assets/images/sources-google-sheets_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FwfCMlm3Xx1EpkemGeba0_2Fpika-1707357243) To process every row, click **Start**: ![](/docs/assets/images/sources-google-sheets_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FYpco9FljOZmbbbTkpIWP_2Fpika-1707357569) To process a subset, switch the dropdown to **Custom range** and enter the rows you want: ![](/docs/assets/images/sources-google-sheets_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FZBNrLM7FgqM4kJLTQzYJ_2Fpika-1707357733) In the example above, rows 3 to 5 and row 11 will run. Use a hyphen for a range (3-5) and commas for individual rows (3, 5, 11). ## Turn on auto-create (Pro) Auto-create runs the workflow automatically every time a new row is added to the sheet. Open the **Automate** menu and toggle auto-create on. Once it's running, you'll see a status indicator in the top right: ![

If you can't see this status, auto-create is not on.

](/docs/assets/images/sources-google-sheets_4_6492905c24f87f95922c6771_Auto-create_20Sheets_20_E2_80_93_201.png_4.png) For the full setup, including how Portant detects new rows and how to handle formula columns, see [auto-create from Google Sheets](/docs/manage/automation/sheets-auto-create/). ## Group multiple rows into one document If you have several rows that belong on the same document (for example, line items on an invoice), use data grouping. You pick a column that identifies which rows belong together, and Portant places those rows into a single table inside the document. The full setup lives on the [line items > data grouping](/docs/features/line-items/data-grouping/) page. ================================================================================ # Google Sheets › Auto-create from Google Sheets Section: Connect a source URL: https://www.portant.co/docs/sources/google-sheets/google-sheets-auto-create/ ================================================================================ Auto-create runs your workflow automatically when a new row is added to your Google Sheet, or when a row's data changes. This page covers how to turn it on, how it decides what to process, and how to use it with workflow filters. > Auto-create is a Pro feature, available on paid Portant plans. For the canonical end-to-end automation guide, see [auto-create from Google Sheets](/docs/manage/automation/sheets-auto-create/). ## Turn on auto-create In a workflow that uses Google Sheets as the source, click the **Automate** button in the top right and toggle auto-create on: ![](/docs/assets/images/sources-google-sheets-google-sheets-auto-create_0_64928fc316eed3fa15bdf5f5_Auto-create_20Sheets.png_0.png) Once it's on, you'll see a status indicator in the top right: ![

If you can't see this status, auto-create is not on.

](/docs/assets/images/sources-google-sheets-google-sheets-auto-create_1_6492905c24f87f95922c6771_Auto-create_20Sheets_20_E2_80_93_201.png_1.png) From the moment auto-create is turned on, any new row added to the bottom of your sheet will be processed by the workflow. > Auto-create does not process rows that already exist in the sheet when you turn it on. Only new rows added afterwards are processed. ## How auto-create decides what to process When you turn auto-create on, Portant counts the rows currently in the sheet. From that point on, any row added below the last row is treated as new and runs through the workflow. If your sheet has formula columns, wrap each formula in an IF statement so empty rows return a blank instead of a value: ``` =IF(A17="", "", (your formula)) ``` Without this, Portant treats the row as already populated and stops processing new rows below it. Here's what that looks like: ![](/docs/assets/images/sources-google-sheets-google-sheets-auto-create_2_6493a47b801c0b39bd7c8256_Auto-create_20Sheets_20_E2_80_93_203.png_2.png) ## Auto-create when row data changes If you also want to run the workflow when an existing row is edited, tick the change-detection checkbox in the automation panel: ![](/docs/assets/images/sources-google-sheets-google-sheets-auto-create_3_64929c1bc475e74ad6e4146c_Auto-create_20Sheets_20_E2_80_93_202.png_3.png) Portant takes a snapshot of the sheet when you turn this on, then re-runs any row whose data changes after that. ## Auto-create when a status column changes You can pair change detection with a [workflow filter](/docs/manage/automation/workflow-filters/) to only run the workflow when a status column has a specific value. For example, you might have a **Status** column with **Draft** and **Send**, and only want Portant to run the row when the status changes to **Send**: ![](/docs/assets/images/sources-google-sheets-google-sheets-auto-create_4_6493a62b1f2a4fa8cc82c028_Auto-create_20Sheets_20_E2_80_93_204.png_4.png) To set this up, turn on auto-create with change detection, then add a workflow filter that only processes rows where **Status** equals **Send**. > This is also a good way to stop half-finished rows from being processed before you're ready. ================================================================================ # Google Sheets › Source data from multiple sheets Section: Connect a source URL: https://www.portant.co/docs/sources/google-sheets/how-to-source-data-from-multiple-sheets/ ================================================================================ If your data lives across multiple Google Sheets or multiple tabs, Portant only reads from one tab. To work around this, combine the data into a single tab using `IMPORTRANGE` or `ARRAYFORMULA`, then point Portant at that combined tab. This page covers how to set up that combined tab, how to write formulas that don't break on empty rows, and an alternative tool for syncing data across sheets. ## Combine data from multiple sheets into one tab Make a new tab (in an existing spreadsheet, or in a new one) that will be the single source for your workflow. Then pull in the data you need. To pull data from another spreadsheet, use `IMPORTRANGE`: ![](/docs/assets/images/sources-google-sheets-how-to-source-data-from-multiple-sheets_0_6188eb97b9d0ecd0fec05aee_Screen_20Shot_202021-11-08_20at_208.19.07_20pm.png_0.png) - For a single cell: `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/abcd123abcd123", "sheet1!A1")` - For a range: `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/abcd123abcd123", "sheet1!A1:C10")` The first time you reference a spreadsheet, Google will ask you to allow access. You only have to do this once per source spreadsheet. ![](/docs/assets/images/sources-google-sheets-how-to-source-data-from-multiple-sheets_1_6188eb38ccf1bc95424166cc_Screen_20Shot_202021-11-08_20at_208.16.26_20pm.png_1.png) To pull data from another tab in the same spreadsheet, use `ARRAYFORMULA`: - `=ARRAYFORMULA(Sheet1!A:C)` Once your combined tab is populated, point your Portant workflow at it. ## Stop empty rows from showing errors or zeros When you copy a formula down a column, the empty rows often return `#REF!`, `#N/A`, or `0`. Portant treats these as populated rows, which can break auto-create. Wrap your formulas so they return a blank for empty inputs. To handle errors, use `IFERROR`: ``` =IFERROR(A2*100, "") ``` To handle blanks, use `IF`: ``` =IF(A1="", "", A1*100) ``` You can combine both for the most defensive version: ``` =IFERROR(IF(A1="", "", A1*100), "") ``` ![](/docs/assets/images/sources-google-forms-add-formula-fields-to-your-google-form-workflow_2_6188eeb72ccdfe01d062e52d_Screen_20Shot_202021-11-08_20at_208.30.38_20pm.png_2.png) ## Use Coefficient to sync data across sheets If formula juggling isn't your thing, [Coefficient](https://coefficient.io/?via=james) is a Google Sheets add-on that imports data from other sheets, CRMs, and accounting tools, and refreshes it on a schedule. [Watch a 2-minute walkthrough](https://www.youtube.com/watch?t=118s&v=Nq1IN5D3vdk). To get started, [sign up for Coefficient](https://coefficient.io/get-started?via=james), install the add-on, and open the Coefficient pane in your sheet. Click **Import Data**: ![](/docs/assets/images/sources-google-sheets-how-to-source-data-from-multiple-sheets_3_l825hyJX2OYQQHmhse3d-a7Pk4OqKCPcB1VAvQIqluIj3VK368wZlOFMPRlkvr8QJRN9uod_Bgr9whED) Select **Google Sheet**: ![](/docs/assets/images/sources-google-sheets-how-to-source-data-from-multiple-sheets_4_85x8VgvfXzzTV6UqK_M-04quL-mRYDiCs7WZEdfBsL8jHMw2meqAG38whG3gaxuCbwH-5_fSdmbKnb7u) Pick the source sheet from your Google Drive and click **Select**: ![](/docs/assets/images/sources-google-sheets-how-to-source-data-from-multiple-sheets_5__KDxUepIIk5fsUTupF0BvVxIf7eciW1k3xDJmW9lXsZZhtVoET2fh_vv-8G-OoG0C_Dr_iT_CPrr7Xh2) Coefficient reads the columns and shows you an import panel where you can filter the data: ![](/docs/assets/images/sources-google-sheets-how-to-source-data-from-multiple-sheets_6_rv2PJn5AyrFgKfdiKyOXsJ2P4dJFGSq-DntgCXDfxW7ThfcI01Tez-xyLFm-WJf1_vJmL3CgsnPV2VzM) Click **Import** and the data appears in your sheet. To keep the data fresh, set up an auto-refresh schedule: ![](/docs/assets/images/sources-google-sheets-how-to-source-data-from-multiple-sheets_7_z4q-igW6T4UpDuTF0jyRZW9gHcMBV3Jr6UtLGHl65fLRUwPIpUOWlm3rd19TZij6cgaz_0u1no5clGVI) Compared to `IMPORTRANGE`, Coefficient handles filters during import and adapts when the source data shifts, so you don't have to redefine ranges manually. If you want to build reports off the combined data, Coefficient's GPT Copilot can write formulas, pivots and charts from plain text instructions: ![](/docs/assets/images/sources-google-sheets-how-to-source-data-from-multiple-sheets_8_DbyVarLtiqLIrQPEY3rM3Ral9oNWQ6woj0XLH6ia_fEFqY8eeDVVdDtTdYFFEuLOUWVMV9qdskRF2e5F) It returns a working formula: ![](/docs/assets/images/sources-google-sheets-how-to-source-data-from-multiple-sheets_9_61SwS21COYLtja1iJWq8BOve8T10JquEa4WDNu8ExVyK8aIBI48IVTHS8yB_U4sTA0pWySxkkXRs_M1l) ================================================================================ # Google Sheets › Save document links back to your sheet Section: Connect a source URL: https://www.portant.co/docs/sources/google-sheets/saving-document-links-to-your-sheet/ ================================================================================ Once Portant generates a document from a row, it can write the link to that document back into the same row. This is useful when other people need to find the output without logging into Portant or hunting through Google Drive. This page covers how to add the block, choose which links to save, and where they appear. ## Add the "Write links to source" block You can only add this block to a workflow that uses Google Sheets as the source. Click **Add block**, and in the **Sharing** section choose **Write links to source**: ![](/docs/assets/images/sources-google-sheets-saving-document-links-to-your-sheet_0_64267862f501d0768e01f113_Save_20links_20to_20Source_20-_20Sheets.png_0.png) ## Choose which links to save Once the block is in your workflow, tick the checkbox next to each document type whose link you want saved back to the sheet: ![](/docs/assets/images/sources-google-sheets-saving-document-links-to-your-sheet_1_6426793edf4366cb93fd6645_Save_20links_20to_20Source_20-_20Sheets_20_E2_80_93_201) ## Where the links appear The links show up the next time the workflow runs. On the first run, Portant adds two new columns to the end of your sheet and writes the links there. On every following run, it reuses those columns. > You can rename these column headers, but they must keep `[Portant]` in the name so the workflow can find them again. ================================================================================ # Google Sheets › Group rows into one document Section: Connect a source URL: https://www.portant.co/docs/sources/google-sheets/data-grouping/ ================================================================================ If you need multiple rows from the same sheet to land inside one document (for example, line items on an invoice or purchase order), data grouping is the feature for you. You pick a column that identifies which rows belong together, and Portant inserts each matching row into a table in the document. For the canonical guide, see [line items > data grouping](/docs/features/line-items/data-grouping/). This page covers the Google Sheets specific setup. ![](/docs/assets/images/sources-google-sheets-data-grouping_0_60e53259c96f3f012945434a_ezgif.com-gif-maker.gif_0.png) ## Set up your sheet Your source sheet should have a column whose value is the same across rows that belong to the same document. For example, every line item on invoice `INV-001` would share that invoice number: ![](/docs/assets/images/sources-google-sheets-data-grouping_1_63e2dc77a9fe16fa139f8a5a_Data_20Grouping_20-_203.png_1.png) ## Step 1: pick the grouping column Open the Google Sheets source block. Click the row in the source table for the column you want to group by, then choose the data grouping option. The column needs to be unique to each group (for example, don't have one column called `Invoice Number` and another called `Invoice No.` with the same data). ![](/docs/assets/images/sources-google-sheets-data-grouping_2_64705b3cdc557cbd3f3e5a22_Data_20Grouping_20-_201a.png_2.png) You can also set it from the column dropdown: ![](/docs/assets/images/sources-google-sheets-data-grouping_3_64705b6155379a10a0bb6c4a_Data_20Grouping_20-_201b.png_3.png) ## Step 2: add a table to the document Open the document block and insert a table (Insert > Table). Add the tags for the grouped data into a single row of the table. Portant will repeat that row for every matching item. > You can also use data grouping with Google Slides templates. ![](/docs/assets/images/sources-google-sheets-data-grouping_4_63e1e6f84ee37e6f0568ae46_Data_20Grouping_20-_202.png_4.png) > Optional: add header and footer rows above and below the tag row. They'll appear once per group, with the repeating rows in between. ## Step 3: run the workflow Once the document settings are in place (file name, PDF, email, etc.), click **Create Documents**. Each invoice (or whatever you're building) will be created with a table that contains every matching row from the sheet. ================================================================================ # Google Forms Section: Connect a source URL: https://www.portant.co/docs/sources/google-forms/ ================================================================================ Google Forms is a good source when you want a workflow that creates a document every time someone submits a form. This page covers how to turn on auto-create so new submissions are processed automatically, and how to manually run older responses. For the full automation setup (including filters and edge cases), see [auto-create from Google Forms](/docs/manage/automation/forms-auto-create/). ## Turn on auto-create for your form Once your workflow has at least a Google Form source and a document, slide or email block, click the **Automate** button in the top right: ![](/docs/assets/images/sources-google-forms_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FJIH0z67yx1seGERMzJ64_2Fpika-1707359113) Toggle auto-create on: ![](/docs/assets/images/sources-google-forms_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FwGAQiejeE1ZWfGewi0g8_2Fpika-1707359258) After a few seconds you'll see a status indicator in the top right confirming auto-create is on: ![](/docs/assets/images/sources-google-forms_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FtU6FUs6NBzdKLqYM5wiY_2Fpika-1707359357) From now on, every new form submission runs through the workflow. ## Manually process previous responses If you have responses from before auto-create was turned on, or you just want to re-run a few, you can process them manually. Click the **Automate** button in the top right: ![](/docs/assets/images/sources-google-forms_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FJIH0z67yx1seGERMzJ64_2Fpika-1707359113) To process every response, click **Start**: ![](/docs/assets/images/sources-google-forms_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FRokD8IeKEdFkVwgh2bAe_2Fpika-1707359638) To process specific responses, switch the dropdown to **Custom range** and enter the response numbers: ![](/docs/assets/images/sources-google-forms_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FUHl1BaeiYjGYdLTC9oob_2Fpika-1707359687) In the example above, responses 3 to 5 and response 11 will run. Use a hyphen for a range (3-5) and commas for individual responses (3, 5, 11). > Response numbers are based on the order responses were submitted. > If you delete a response in Google Forms, the response numbers below it will shift up. The response number always reflects the current order of responses, not the original submission order. ================================================================================ # Google Forms › Add formula fields to your form workflow Section: Connect a source URL: https://www.portant.co/docs/sources/google-forms/add-formula-fields-to-your-google-form-workflow/ ================================================================================ Sometimes you want to insert content based on a form answer without asking the respondent for it directly. For example, if someone picks an office location, you might want to auto-fill the address, phone number and email for that office. Most of the time you can do this with [tag formulas](/docs/features/tags/formulas/) or [tag if statements](/docs/features/tags/if-statements/). If those don't fit, this page shows how to add formula columns to a Google Forms response sheet and use that sheet as your workflow source. ## Set up a workflow on the response sheet In your Google Form, click the **Responses** tab and then the Google Sheets icon to create or link a response sheet: ![](/docs/assets/images/sources-google-forms-add-formula-fields-to-your-google-form-workflow_0_6320acf88abf670e369215c9_Screenshot_202022-09-13_20at_205.14.06_20pm.png_0.png) You can either create a new spreadsheet or add a tab to an existing one. From now on, every form submission will land as a row in this sheet. In Portant, create a new workflow and pick that sheet as the source. With auto-create on, Portant checks the sheet every couple of minutes and runs the workflow on any new rows. ![](/docs/assets/images/sources-google-forms-add-formula-fields-to-your-google-form-workflow_1_62c5a55d5afc187cfcf62fe1_Portant_20Workflow_20-_20Auto-create_20on.gif_1.png) ## Add formula columns to the response sheet So far this is just a Google Sheets workflow. The trick is adding formula columns that calculate extra values based on the form answers. There are two ways to do it. ### Option 1: array formula in row 2 of the response sheet Click the cell in row 2, just to the right of your last form-response column. Type `=ARRAYFORMULA(...)` with your formula inside. The array formula will fill down the column as new responses arrive. ``` =ARRAYFORMULA(A2:A*2) ``` This doubles the value in column A for every row. You can also use an `IF` statement to insert content conditionally. For example, this returns "This value is Yes" whenever column A is "Yes", and a blank otherwise: ``` =ARRAYFORMULA(IF(A2:A="Yes", "This value is Yes", "")) ``` Press Enter and the formula will apply to every row, including new responses as they come in. ### Option 2: array formula in a new tab If you'd rather keep the response sheet untouched, or if your formula doesn't play well with arrays, copy the response data into a new tab and add your formulas there. We recommend an array formula to mirror the responses: ``` =ARRAYFORMULA(Sheet1!A:X) ``` Where `A` is the first response column and `X` is the last. Then add your extra formula columns to the right of the mirrored data. Point Portant at this new tab as the source. ## Stop empty rows from showing errors or zeros When a formula is filled down a column, the empty rows often return `#REF!`, `#N/A`, or `0`. Portant treats those as populated, which can break auto-create. Wrap your formulas so they return blank for empty inputs. To handle errors, use `IFERROR`: ``` =IFERROR(A2*100, "") ``` To handle blanks, use `IF`: ``` =IF(A1="", "", A1*100) ``` Or combine both for the most defensive version: ``` =IFERROR(IF(A1="", "", A1*100), "") ``` ![](/docs/assets/images/sources-google-forms-add-formula-fields-to-your-google-form-workflow_2_6188eeb72ccdfe01d062e52d_Screen_20Shot_202021-11-08_20at_208.30.38_20pm.png_2.png) ================================================================================ # Google Forms › Tags for Google Forms Section: Connect a source URL: https://www.portant.co/docs/sources/google-forms/tags-for-google-forms/ ================================================================================ When you use Google Forms as a source, Portant gives you three extra tags on top of your form questions: response number, date submitted, and respondent email. This page explains what each one does and where to find it in the source table. ## Response number The number of the response in chronological order. > If you delete a response in Google Forms, the response numbers below it shift up. The response number always reflects the current order, not the original submission order. This tag sits at the top of the source table: ![](/docs/assets/images/sources-google-forms-tags-for-google-forms_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F0zs6wgdI6AqlPyPpDLfD_2Fpika-1707184093) ## Date submitted The date the form was submitted. It's the second-to-last tag at the bottom of the source table: ![](/docs/assets/images/sources-google-forms-tags-for-google-forms_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FTnL9CRwWyZUXXHDnWICW_2Fpika-1707184461) ## Respondent email The email address of the person who filled out the form. It's the last tag in the source table: ![](/docs/assets/images/sources-google-forms-tags-for-google-forms_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FgzY8xJr5r8OHwWOZfOsv_2Fpika-1707184532) > This tag only works if your form is set to collect email addresses. See the [Google guide](https://support.google.com/docs/answer/139706?hl=en#zippy=%2Ccollect-respondents-email-addresses) for how to enable that. > If your form also has a question that asks for an email address, double check which tag you're using. Mixing the two up is a common reason emails don't appear in the right place. ================================================================================ # Webhooks Section: Connect a source URL: https://www.portant.co/docs/sources/webhooks/ ================================================================================ If we don't have a built-in integration for the tool you want to use, webhooks let you connect almost anything. Any app that can send data to a URL can trigger a Portant workflow, including Tally, Typeform, Zapier, and custom code. This page covers the full setup: picking webhooks as the source, generating a webhook address, sending a test payload, and finishing the workflow. ## Pick webhooks as the workflow source Click **New Workflow**, name it, then choose **Use a webhook** as the source. ![](/docs/assets/images/sources-webhooks_0_63bca1fb1563b3c758579dda_Screenshot_202023-01-10_20at_2010.23.01_20am.png_0.png) ## Get your webhook address Portant generates a unique webhook URL for the workflow: ![](/docs/assets/images/sources-webhooks_1_632b1386eab43f792b07077e_Screenshot_202022-09-21_20at_202.36.30_20pm.png_1.png) Copy it. You'll paste this into the other app. ## Add the webhook address to the other app Open the app you want to connect (Tally, Typeform, Zapier, etc.), find its webhook settings, and paste the URL in. - [How to add a webhook in Tally](https://tally.so/help/webhooks) - [How to add a webhook in Typeform](https://www.typeform.com/help/a/webhooks-360029573471/) ## Webhook payload structure Portant expects a JSON payload of key-value pairs. Here's an example: ```json { "article_id": "12345", "title": "Understanding Webhooks: A Guide to Key-Value Payloads", "author": "Jane Doe", "published_date": "2024-10-29T10:30:00Z", "content": "This article provides an in-depth look at how to use key-value pair payloads in webhooks...", "category": "Tech Guides", "url": "https://example.com/articles/webhooks-key-value-payloads", "summary": "An introductory article about key-value pairs in webhook payloads, intended for developers.", "nestedArray": [ { "nestedFieldName1": "nestedValue1", "nestedFieldName2": "nestedValue2" }, { "nestedFieldName1": "nestedValue3", "nestedFieldName2": "nestedValue4" } ] } ``` The `nestedArray` example also shows how to structure data for [data grouping with webhooks](/docs/sources/webhooks/webhook-data-grouping/), which lets you turn arrays of objects into rows in a table. ## Send a test submission Send a test payload before you build the rest of the workflow. Portant uses the first payload to build the source table, which is what you'll pull tags from when you customise the document. You can either trigger a test from the other app, or send one manually. Once a payload arrives, the webhook block shows submissions on the left and the fields it parsed on the right: ![](/docs/assets/images/sources-webhooks_2_632b1bd992bbca7407e7a611_Screenshot_202022-09-21_20at_203.11.41_20pm.png_2.png) ## Build your document Add a document, presentation or email block to the workflow. Use the fields from the webhook source table as tags inside the template: ![](/docs/assets/images/sources-webhooks_3_632b1d0b0d757b6ed791bb82_Screenshot_202022-09-21_20at_203.17.05_20pm.png_3.png) ## Finish the workflow Once everything is wired up, send another test payload to confirm the document looks right. When the workflow is live, you can see incoming submissions in the webhook block and click into one to inspect its data: ![](/docs/assets/images/sources-webhooks_4_632b1e225d7ff614bd296723_Screenshot_202022-09-21_20at_203.21.57_20pm.png_4.png) The output documents appear in the **Outputs** tab and are saved to a Google Drive folder: ![](/docs/assets/images/sources-webhooks_5_632b1ee26e7d218c0f6d2a41_Screenshot_202022-09-21_20at_203.25.26_20pm.png_5.png) That's it. You now have a workflow that creates a document every time another app fires a webhook. ================================================================================ # Webhooks › Group webhook events into one document Section: Connect a source URL: https://www.portant.co/docs/sources/webhooks/webhook-data-grouping/ ================================================================================ If your webhook payload contains an array of objects, Portant can place each object as a row in a table inside your document. This is how you turn webhook data into invoices, quotes, purchase orders or any document with line items. For the canonical guide, see [line items > data grouping](/docs/features/line-items/data-grouping/). This page covers the webhook-specific setup. ![](/docs/assets/images/sources-google-sheets-data-grouping_0_60e53259c96f3f012945434a_ezgif.com-gif-maker.gif_0.png) ## Step 1: structure the payload The array you want to group on must: - Be at the top level of the payload (an array depth of one). - Contain objects (not strings or numbers). Here's an example payload with one such array: ```json { "city": "Vancouver", "csNo": "QZ2257", "narrative": "Test report for testing purposes. ", "siteName": "Wanda & Sons Snoopy Landing", "clearTime": 1720005608143, "onsiteTime": 1720005084713, "reportNumber": "R24-113100", "responseTime": 24.23, "rrAlarmDate": 1720003631000, "rrAlarmType": "BURGLARY", "siteAddress1": "Unit 36 - 1055 Albert Place", "siteAddress2": null, "rrInitialZone": 18, "rrConfirmedBurg": false, "rrConfirmedFire": false, "rrPoliceFileNo": [ { "imageLink": "https://drive.usercontent.google.com/download?id=1Hv5r4MMu9_uDf-HyvZcckBRJ-xCRjOGL", "imageName": "image_one" }, { "imageLink": "https://drive.usercontent.google.com/download?id=1LJhk_pdFtxsnnjyHN0u67kNuWxkYwcL_", "imageName": "image_two" }, { "imageLink": "https://drive.usercontent.google.com/download?id=11spBeKnsr7oHPZTsJye5fwkJ8SCcQouV", "imageName": "image_three" } ], "rrPoliceAttended": false, "rrTechnicalIssue": false, "rrInitialZoneDesc": "SE Side Patio Door ( new edition room)", "rrTechnicalIssueDesc": null } ``` In this example, `rrPoliceFileNo` is the array Portant can group on. ## Step 2: add a table to the document Open the document block and insert a table (Insert > Table). Add the tags for the grouped fields into a single row of the table. Portant will repeat that row for every object in the array. > You can also use data grouping with Google Slides templates. ![](/docs/assets/images/sources-google-sheets-data-grouping_4_63e1e6f84ee37e6f0568ae46_Data_20Grouping_20-_202.png_4.png) > Optional: add header and footer rows above and below the tag row. They'll appear once per group, with the repeating rows in between. ## Step 3: run the workflow Once the document settings are in place (file name, PDF, email, etc.), click **Create Documents**. Each output will include a table with one row for every object in the array. ================================================================================ # Zapier Section: Connect a source URL: https://www.portant.co/docs/sources/zapier/ ================================================================================ Zapier connects to thousands of apps, and Portant connects to Zapier through a webhook. That means any app Zapier supports can trigger a Portant workflow and have a document generated from its data. This page covers building a Zap that POSTs to a Portant webhook, testing the connection, formatting the document, and sending the finished file back to Zapier. > Zapier's Webhooks step is a premium feature. You'll need a paid Zapier plan to follow this guide. ## Step 1: start a Zap Sign in to Zapier (or [follow the quick-start guide](https://zapier.com/learn/zapier-quick-start-guide/) if you're new) and create a new Zap. Pick any trigger app you like. In this example we're using an Airtable base that tracks expenses, with the trigger set to "new record": ![](/docs/assets/images/sources-zapier_0_63d75b06d184c40284afba55_Screenshot_202023-01-30_20at_204.50.03_20pm.png_0.png) > The trigger can be anything. Pick whatever app you want to send data from. Add an action step and choose **Webhooks by Zapier**: ![](/docs/assets/images/sources-zapier_1_63d75bdfdbdc860066ff0087_Screenshot_202023-01-30_20at_204.53.34_20pm.png_1.png) Set the event to **POST**: ![](/docs/assets/images/sources-zapier_2_63d75c0420934af9ea4b5080_Screenshot_202023-01-30_20at_204.53.49_20pm.png_2.png) Now switch over to Portant to grab the webhook URL. ## Step 2: get the Portant webhook address In Portant, create a new workflow and pick **Use a webhook** as the source. (For the full setup, see [webhooks](/docs/sources/webhooks/).) The webhook source page shows the URL: ![](/docs/assets/images/sources-zapier_3_63d75d2bcdfd6638ea275021_Screenshot_202023-01-30_20at_205.00.40_20pm.png_3.png) Copy it. ## Step 3: paste the webhook into Zapier In your Zap, paste the URL into **POST Webhooks by Zapier > Set up action > URL**. Set the payload type to **JSON**: ![](/docs/assets/images/sources-zapier_4_63d75d9b883e454a4b233e0c_Screenshot_202023-01-30_20at_205.02.16_20pm.png_4.png) In the **Data** table, add the field-value pairs you want to send. The left column is the field name. The right column is the value, usually a token from the trigger step: ![](/docs/assets/images/sources-zapier_5_63d782cf04687912c6a7a12a_Screenshot_202023-01-30_20at_207.40.45_20pm.png_5.png) ## Step 4: test the action Leave the rest of the fields as they are and click **Continue**, then **Test Action**: ![](/docs/assets/images/sources-zapier_6_63d78452737d36616dafadc6_Screenshot_202023-01-30_20at_207.41.01_20pm.png_6.png) Zapier sends sample data to Portant. Back in Portant, click the refresh icon next to the webhook address and the sample data will appear in the source table: ![](/docs/assets/images/sources-zapier_7_63d78508dbdc86450101aa82_Screenshot_202023-01-30_20at_207.41.29_20pm.png_7.png) ## Step 5: build the document Click **Connect** in the right panel and pick a Google Doc, Slide or email template (or create a new one). Drop tags from the source table into the template wherever you want the Zapier data to appear: ![](/docs/assets/images/sources-zapier_8_63d7875462eaa3254abba30f_Screenshot_202023-01-30_20at_207.59.19_20pm.png_8.png) ## Step 6: turn it on Set the file name and any other output settings. In Portant, turn on auto-create using the toggle in the top right: ![](/docs/assets/images/sources-zapier_9_63d787e020934a53804e16bd_Screenshot_202023-01-30_20at_208.01.50_20pm.png_9.png) Back in Zapier, click **Publish & Turn on**: ![](/docs/assets/images/sources-zapier_10_63d78823b9892d18af993921_Screenshot_202023-01-30_20at_208.02.04_20pm.png_10.png) That's it. The Zap will now create a document every time the trigger fires. Run a real test from the trigger app to confirm the whole flow works end to end. ## Send documents back to Zapier To pass a generated document back into Zapier (so it can go on to other apps), use Zapier's **Email by Zapier** or **IMAP by Zapier** triggers, which fire when an email arrives at a Zapier-generated address. In Portant, add an email block. Put the Zapier email address in the **To** field and attach the generated documents. When Portant sends the email, the matching Zap will pick it up and you can hand the file off to wherever you need. For Zapier's setup, see their [trigger Zaps from new emails guide](https://help.zapier.com/hc/en-us/articles/8496293328141-Trigger-Zaps-from-new-emails). ================================================================================ # Google Docs Section: Templates URL: https://www.portant.co/docs/templates/google-docs/ ================================================================================ Use any Google Doc as a template, drop in tags from your data, and Portant generates a personalised document for every row, contact, or form response. ## Set up a workflow with a Google Docs template Log in to your Portant account at [app.portant.co](http://app.portant.co) and click **+ Add workflow**. ![](/docs/assets/images/template-docs-google-docs_0_AD_4nXf9CgrtRHOng4D9gQbFhRUvuT5-tA-iHLBKeVtsK6DexRKCcwGrPpwvDwwF_5CKInS42hCN751P) Add a **Google Docs** template. ![](/docs/assets/images/template-docs-google-docs_1_AD_4nXfGmMnWfTCJufhIdmuqIC63WTVaVxjwY6IQOp84rzN4UkdGjNPU7BB6-2ZSrbCatD90ksSCkA7E) Pick an existing file from your Google Drive in the left panel, or click **+ New Google Docs file** to start from a blank template. ![](/docs/assets/images/template-docs-google-docs_2_AD_4nXcogp3rJ6GOIRK5tnYmZRM-NAT_4Yy2v66isX6AkuQnNebPFuVyvjsUOO9QHTIw_kQO7845NGdD) Portant then asks you to: * Add a **title** for your workflow * Choose a **colour** * Pick an **icon** * Click **Create** ![](/docs/assets/images/template-docs-google-docs_3_AD_4nXeinJcsWp-gjfzYxyXIsUqnbzdrK3ddJRJIrMZa5WKE-xDn9hq08U89xOQIhur27nwlARGa8LU9) ## Add a source The next step is to add a source to your workflow. Click **+ Add source**. ![](/docs/assets/images/template-docs-google-docs_4_AD_4nXeFQwDdFpsnnVar2kNsETHKqbhlMI8jwhIdydAXvS57Uz8E422wvhUxfu_n-qNnoQGmTjr0rfS2) Select your source (HubSpot, Google Sheets, Google Forms, and so on). ![](/docs/assets/images/template-docs-google-docs_5_AD_4nXfnG_bu_QOyINJxYmCsvU9ZcU1c3gxa8unjNbUUt292y0TkRMIXFWYp_vLuRpCbU5dlNlCqU7d8) Once your source is connected, the workflow looks like this: ![](/docs/assets/images/template-docs-google-docs_6_AD_4nXf253qZnGfs8XdiS_SZu3GSYP-9u6wE6TO5nP9yvwdEeGbMZ1IbvDt-xZxXcQ-nHs7yzEISQM_K) ## Add tags to your template Open the template in your workflow. Click the **Copy** button next to a field in the source table on the right, then paste the tag wherever you want that value to appear in the document. ![](/docs/assets/images/template-docs-google-docs_7_AD_4nXeAQAEMOLZJ9JxU92ZiQdjiokE2I9Ox-cPw4COpcoUUuHsx-BxD3PCiTE9tgBdGdMwomozS6-D9) For more on what tags can do, see the [tags overview](/docs/features/tags/). ## Run the workflow **If you picked HubSpot as the source:** run the workflow from inside HubSpot. Open the object, click **Generate / Actions**, and select your Portant workflow. For the full setup, see the [HubSpot integration guide](/docs/sources/hubspot/). ![](/docs/assets/images/template-docs-google-docs_8_AD_4nXfVccF6dlE0zjzQJ0o9DT7100pde_h1xOFm4Ey1qg9T2nubdZAsHP2Ep_285wNS9xToYrNDcw_g) **If you picked another source (Google Sheets, Google Forms, and so on):** run the workflow from Portant by clicking the **Automate** button in the top right, then **Start**. For source-specific setup: * [Google Sheets as a source](/docs/sources/google-sheets/) * [Google Forms as a source](/docs/sources/google-forms/) ![](/docs/assets/images/template-docs-google-docs_9_AD_4nXcNx8vDiFPbJlrz_t9-l9AfHMg1cOvc7fm0r-5sUJ2elpaXwTx6nrYzJIy6HJ23O57gqR3E4s7d) ## Add more steps to your workflow You can extend the workflow with more stages after the template block. Click the **+** icon below the template to add: * **Email** to send the generated document * **Review** to get the document approved before it goes out * **Signature request** to send for eSignature ![](/docs/assets/images/template-docs-google-docs_10_AD_4nXcj688bKA9iEzSYpYhBUGHbZAlfapdMEyTgFiwsXlRP6VKbrA4EH6eUWS_wgqnyiyAeb16tOvzt) For more on each: * [Send a document via email](/docs/send/email/share-via-email/) * [Review and approve documents](/docs/manage/automation/review-approve/) * [eSignature requests](/docs/send/esignatures/requests/) * [eSignatures with HubSpot](/docs/sources/hubspot/) ================================================================================ # Google Slides Section: Templates URL: https://www.portant.co/docs/templates/google-slides/ ================================================================================ Use any Google Slides deck as a template, drop in tags from your data, and Portant generates a personalised presentation for every row, contact, or form response. ## Set up a workflow with a Google Slides template Log in to your Portant account at [app.portant.co](http://app.portant.co) and click **+ Add workflow**. ![](/docs/assets/images/template-docs-google-slides_0_AD_4nXf5mFg5tmCvMiBn89ppsC0gPrSaMTq80ZhtND2ONkSPioG8zPByNSkna8LqRq3TlfWFVdqIppDj) Add a **Google Slides** template. ![](/docs/assets/images/template-docs-google-slides_1_AD_4nXfDdfgdR1pc2a3s7cBvgZfHJIqP4I6-TdZcOtBPwTwR6j0--lOFF17FQLpLP8HctnxznWIBbeFF) Pick an existing file from your Google Drive in the left panel, or click **+ New Google Slides file** to start from a blank template. ![](/docs/assets/images/template-docs-google-slides_2_AD_4nXcXQtklw-L11d8nXZ7mOKBQDqoUPrqDFczWV1muQYtvicfVEyg2AEHOkoqFae023VK0F_JkQa6G) Portant then asks you to: * Add a **title** for your workflow * Choose a **colour** * Pick an **icon** * Click **Create** ![](/docs/assets/images/template-docs-google-slides_3_AD_4nXdF_1p9-0pnwCAssWRrckX5f407ZdeppqVGsbvozCknBaRDAdIQNo4Dgw0Wzpd66G79_VBDXejv) ## Add a source The next step is to add a source to your workflow. Click **+ Add source**. ![](/docs/assets/images/template-docs-google-slides_4_AD_4nXc2sJ-K6r9lerFjjZkikjM3DfuP2QN-RKaXiKh4_jWRHPT3dO8n1lstHwYnryOd1hA4DfQNu8Jc) Select your source (HubSpot, Google Sheets, Google Forms, and so on). ![](/docs/assets/images/template-docs-google-slides_5_AD_4nXdmdZTsOGRN0SwiYNs3xMLMJwocpc9zD1u_fYIhn0zwHey7t1q8jlwP-ovod7OWWm8z1tdMyCkm) Once your source is connected, the workflow looks like this: ![](/docs/assets/images/template-docs-google-slides_6_AD_4nXe1qol9cDtQ-W4kh1kJ9_O7Q8T1anKtX-ebApQ4TapknRFkuCfHbxlOCj1_kTKI5R5bVGGOxFMs) ## Add tags to your template Open the template in your workflow. Click the **Copy** button next to a field in the source table on the right, then paste the tag wherever you want that value to appear in the deck. ![](/docs/assets/images/template-docs-google-slides_7_AD_4nXfGO-2rnRs5qh145IwU5P_EpixXwEDmfwhb9PhubS8-s7-soUAlnbPj3fnoHRwtmMRYZI2FQofH) For more on what tags can do, see the [tags overview](/docs/features/tags/). ## Run the workflow **If you picked HubSpot as the source:** run the workflow from inside HubSpot. Open the object, click **Generate / Actions**, and select your Portant workflow. For the full setup, see the [HubSpot integration guide](/docs/sources/hubspot/). ![](/docs/assets/images/template-docs-google-slides_8_AD_4nXdwc-PrFPtF8iX7ANO7BWga9n2cYmXGc7qCWptnc-pdasbTIgkfyHTOjRYf7v55GsEZwWlStxMT) **If you picked another source (Google Sheets, Google Forms, and so on):** run the workflow from Portant by clicking the **Automate** button in the top right, then **Start**. For source-specific setup: * [Google Sheets as a source](/docs/sources/google-sheets/) * [Google Forms as a source](/docs/sources/google-forms/) ![](/docs/assets/images/template-docs-google-slides_9_AD_4nXemfeEX-AoeOq8aT244oeH8UvcLyUCEoIdhu0icbJon-vK6GLSjAjVYdAsbIG7IfG43MYZLfzPm) ## Add more steps to your workflow You can extend the workflow with more stages after the template block. Click the **+** icon below the template to add: * **Email** to send the generated deck * **Review** to get the deck approved before it goes out * **Signature request** to send for eSignature ![](/docs/assets/images/template-docs-google-slides_10_AD_4nXcB6Z-ggh9o-u573A1Y0kBscpOpPFZqfxcbuso3ttCk7agTAgaaxfJ-HzT5LRJQU1GkmfYr8St0) For more on each: * [Send a document via email](/docs/send/email/share-via-email/) * [Review and approve documents](/docs/manage/automation/review-approve/) * [eSignature requests](/docs/send/esignatures/requests/) * [eSignatures with HubSpot](/docs/sources/hubspot/) ================================================================================ # Microsoft Word Section: Templates URL: https://www.portant.co/docs/templates/microsoft-word/ ================================================================================ Use any Microsoft Word document as a template, drop in tags from your data, and Portant saves the generated documents straight back to your OneDrive. ## Add a Microsoft Word document as a template Go to [Portant](https://app.portant.co) and click **Log in with Microsoft**. ![](/docs/assets/images/template-docs-microsoft-word_0_AD_4nXdE3yH1M918CzQn-qh8UwfhRaIvBhKRwpI92Z3vpnm5JeFI_YfwoMVj_DoR6M0bDMD7iF5zNcs9) Enter your email and password, then click **Next**. ![](/docs/assets/images/template-docs-microsoft-word_1_AD_4nXfg4H1ES1Ot0WaoVk7imBCNIqdzIyqUIXUqWepQIVQRg0F9vZCj_iO1XQw9JGb1lUNrdbTfkZxp) Once you're in, click **+ Add workflow**. If this is your first workflow, you can also pick **Start from scratch**. ![](/docs/assets/images/template-docs-microsoft-word_2_AD_4nXc4boYaJyu_3wX44QtzEAElD6Y1qel_wo6xXSEJvxmoLrmw8eQDu7eUNtDDdQ7AHxBMis8RUmhm) Choose a **Word document** as your template. ![](/docs/assets/images/template-docs-microsoft-word_3_AD_4nXcCXBt9PCsfXWBJUfeq50ORKsRYyFJj9X0fuzqeexReuOcQWGLc7gPD0WCehBMw0maOJefNm41u) A modal opens where you can: * Enter a **title** for your workflow * Pick a **colour** and **icon** * Click **Create** to continue ![](/docs/assets/images/template-docs-microsoft-word_4_AD_4nXfqpLQbZWR_ntRqTIMgC89QP-PmJBz4GI_hxlu-FpSYGZ9iVXHqNnyU1mx6eUdeX5xV6nSdx2uu) ## Add a source Add a source to your workflow. Click **Add source**. ![](/docs/assets/images/template-docs-microsoft-word_5_AD_4nXfL85vL_-qSYXkFLRzOT2MXBhquGmn_ym6kNxdpVY0wsZcE_5i2-uwG3US2fwR6tENYvlhGhnzk) Select **HubSpot** as your source (or another available option). ![](/docs/assets/images/template-docs-microsoft-word_6_AD_4nXe6nWjSA23TCnNWkvS6qWuctemSru4D_BdJGkuyX78Ut9WqEhQ84NG-t7xVQ9Lc8rf5At_hrdg5) Choose the HubSpot object you want to use. This can be a standard or custom object. ![](/docs/assets/images/template-docs-microsoft-word_7_AD_4nXdmrxFIO6jXtqvIkbTQfvhPx92GkzSmK9yLwwN3SHxjvXOg5iiHgTaYNQfqhVoUiHoyIej5p4Jm) > **Note:** If you haven't connected your HubSpot account yet, you'll be prompted to do so. Click **Connect HubSpot to Portant** and follow the steps. ![](/docs/assets/images/template-docs-microsoft-word_8_AD_4nXdrTt7jRH6YbXyKRb5LDArgG19mxvEyNfm_LAcuBM2HC5NtAnPj70J8HwgmacTy02b6JapJnTuF) > **Tip:** You can confirm your Portant account is connected to both Microsoft and HubSpot at [Settings > Permissions](https://app.portant.co/settings/permissions). ![](/docs/assets/images/template-docs-microsoft-word_9_AD_4nXftfZcw4oW49W5lsxkvhvD8caoNho6LefGM7UP2DZVIBNKmXm1e3cKOmR2LXQ25IVwWwHlBekCu) Once you've selected your HubSpot source, your workflow looks like this. **Open** the **Template block**. ![](/docs/assets/images/template-docs-microsoft-word_10_AD_4nXf0WDhn-BJj-8lVptZTY2JpVk4UQqfi6tVVVBuNXeFA3IXdv_DfA3vQevZ6uP5RdN1-PmW0hG-w) ## Edit your Word template Click **Edit in OneDrive**. A live preview is not available inside Portant for Word files. ![](/docs/assets/images/template-docs-microsoft-word_11_AD_4nXdfK0pnDj6FPNSzYVm-IHm38Et9YIgBNKVfrzTcQcH3424t1hLjCGA6JuceCoblbLW1ZYZM1wKp) > **Important:** Make sure your browser's pop-up blocker is off. Two windows will open: * One with your **Word template** * One with the **source table** We recommend putting them side by side so you can copy and paste between them. ![](/docs/assets/images/template-docs-microsoft-word_12_AD_4nXcXx6LHVJGpeo1AHKxHCwc5fOXIIyaTP9t3i_6kj4NybPX46S4Xygdphejrjcq7TNxvzTKR5jvR) To personalise the document: * Copy a tag from the source table using the **Copy** button * Paste it into your Word template wherever you want the value * Use Word's formatting tools to style it however you like ![](/docs/assets/images/template-docs-microsoft-word_13_AD_4nXdVkRkIhdi_MBQk_Pj8JqhyCQCX6KQX_zCEHsf5AUkpYl8zwDyaNNpWvXvhBrbXWJcGHTOJAEbs) For more on what tags can do, see the [tags overview](/docs/features/tags/). ## Run the workflow Once you're happy with the template, go to your HubSpot object and run the workflow from the **App card**: * Find the Portant App card * Click **Generate / Actions**, then select the workflow you created Don't see the Portant App card? See [how to install it](/docs/sources/hubspot/). ![](/docs/assets/images/template-docs-microsoft-word_14_AD_4nXcsH00ld9oYBLswIAi1MHBcGGAFjFwH8WMR9lOiMil6APpnFVxKOW0IoEk_QKLcCvYs3W7hrkq2) Once the workflow is selected, a modal appears showing the document being created. ![](/docs/assets/images/template-docs-microsoft-word_15_AD_4nXfZEgRC30mqIkoGPzZ65eVl9VsNz60o-er6yFsJIpA3UAl573SQRn_WSuIexkFgy0gKx49D-261) You can find your generated documents: * Inside the **Portant App** cards in HubSpot * In your **OneDrive** account, under the connected folder ![](/docs/assets/images/template-docs-microsoft-word_16_AD_4nXciR41WiaW4KNhBg8ECH3IAjv7vaaPN91mTSRfChN7OJb_RhI5bH2VRivP3j6sjuLvpreaQCJjZ) ================================================================================ # Microsoft PowerPoint Section: Templates URL: https://www.portant.co/docs/templates/microsoft-powerpoint/ ================================================================================ Use any Microsoft PowerPoint deck as a template, drop in tags from your data, and Portant saves the generated presentations straight back to your OneDrive. ## Add a Microsoft PowerPoint deck as a template Go to [Portant](https://app.portant.co) and click **Log in with Microsoft**. ![](/docs/assets/images/template-docs-microsoft-powerpoint_0_AD_4nXcN_ABgoLiBxBF3Jx2hjNt2ZA6zIINHA4VovgJn18UzX2xbSga7ikl_YOQnuPDGCY7n8Hs0nODy) Enter your email and password, then click **Next**. ![](/docs/assets/images/template-docs-microsoft-powerpoint_1_AD_4nXeZQ9qCYkOhHRyvYXg0jLyhAc0r1Z1dxIJTXp22F_EXeTD4ts5lxnMb_5FSPMuVnuSdEqA6YpNH) Once you're in, click **+ Add workflow**. If this is your first workflow, you can also pick **Start from scratch**. ![](/docs/assets/images/template-docs-microsoft-powerpoint_2_AD_4nXfx6ba9rsYE8tlAzlYtPoWukq8pFjI_Y6TqRpxBOIfv5tC_28mR41k9Imj996p-I3W66uBka-s4) Choose a **PowerPoint** deck as your template. ![](/docs/assets/images/template-docs-microsoft-powerpoint_3_AD_4nXclcCw_1F4RCo9mB5sxMlMPhkn3uu7V9NDRMK71hpdlH_1cgxRqlZD5cYlmxZhrIWekb-Jgbq4A) A modal opens where you can: * Enter a **title** for your workflow * Pick a **colour** and **icon** * Click **Create** to continue ![](/docs/assets/images/template-docs-microsoft-powerpoint_4_AD_4nXdfnan-wTDh2UwXWE6yxlpaSN74jIj-ZOKNhuOOVXHHELBsJJcGTyw5eDdSy9qA4LfNlKkySZ-d) ## Add a source Add a source to your workflow. Click **Add source**. ![](/docs/assets/images/template-docs-microsoft-powerpoint_5_AD_4nXf5Guyhdnp2zVQjizNj7pwg6wphTMCJf8sfJY08xZiHzYEHAnwxq-S-H-UX9T5lqGQJk_GsmnYS) Select **HubSpot** as your source (or another available option). ![](/docs/assets/images/template-docs-microsoft-powerpoint_6_AD_4nXf8CxPtFRPdOemU7nXlPBVBmVf78jWQusyfFMwopSdvK7jhj3AGfZRbuGAYdez8Ah2bEotULhLm) Choose the HubSpot object you want to use. This can be a standard or custom object. ![](/docs/assets/images/template-docs-microsoft-powerpoint_7_AD_4nXdb-a9ToaDW3sVzG0rDyF0ufPqDSLLkindGBjAD4R1AtWHdO94YY7DsmTyVUuAcmgO9vAD0VkFc) > **Note:** If you haven't connected your HubSpot account yet, you'll be prompted to do so. Click **Connect HubSpot to Portant** and follow the steps. ![](/docs/assets/images/template-docs-microsoft-powerpoint_8_AD_4nXcWAiyrNxvw5axkTSXfKo3mvXzJLde2DgLD_3AW01KTbBRSUGsZ8ZEDh_8EFKVHjt7FOjDyPiwU) > **Tip:** You can confirm your Portant account is connected to both Microsoft and HubSpot at [Settings > Permissions](https://app.portant.co/settings/permissions). ![](/docs/assets/images/template-docs-microsoft-powerpoint_9_AD_4nXcQt8eHhKQP2fFa9jIcff2zmES6M4kiZljT6d51WBrbxOf52dKafMTl-WVnGHMhPoBj4wJnBh58) Once you've selected your HubSpot source, your workflow looks like this. **Open** the **Template block**. ![](/docs/assets/images/template-docs-microsoft-powerpoint_10_AD_4nXcxPfKRXGnq-4sbi-GXZp3V4WIwFVj9_GsaoZe00P0mQ1dalGFuMthGo1s1xl8E8gZ675wXqbME) ## Edit your PowerPoint template Click **Edit in OneDrive**. A live preview is not available inside Portant for PowerPoint files. ![](/docs/assets/images/template-docs-microsoft-powerpoint_11_AD_4nXed2-vcDK-IFalbGOIrpB9jSU1wEfrHMVpbuDDXwHOa3u4F0fKkppeTg1CchxQjU4rSGXdi7R9y) > **Important:** Make sure your browser's pop-up blocker is off. Two windows will open: * One with your **PowerPoint template** * One with the **source table** We recommend putting them side by side so you can copy and paste between them. ![](/docs/assets/images/template-docs-microsoft-powerpoint_12_AD_4nXdouYtOe2mvG1xt2-9G7FQBTivQZ5WgnRsd9feIYxEU02qezevxPXAfQ5_IaHkeHWGRk1T5Q056) To personalise the deck: * Copy a tag from the source table using the **Copy** button * Paste it into your PowerPoint template wherever you want the value * Use PowerPoint's formatting tools to style it however you like ![](/docs/assets/images/template-docs-microsoft-powerpoint_13_AD_4nXffHxtKBqn4Csspg6MRFx-DMYoh0LzRs3Wvd31R3RfZekwACliMKU2CKDyZBELVZ7YTn6vfeaDp) For more on what tags can do, see the [tags overview](/docs/features/tags/). ## Run the workflow Once you're happy with the template, go to your HubSpot object and run the workflow from the **App card**: * Find the **Portant App card** * Click **Generate / Actions**, then select the workflow you created Don't see the Portant App card? See [how to install it](/docs/sources/hubspot/). ![](/docs/assets/images/template-docs-microsoft-powerpoint_14_AD_4nXcSpC1UoLdY9D5r420z0NshvEw2CqJpZKY01U5MNMXad2uK8eohSJQElrFY5uuSVKEQ16Ctj5mK) Once the workflow is selected, a modal appears showing the deck being created. ![](/docs/assets/images/template-docs-microsoft-powerpoint_15_AD_4nXfL8TdW8sh2vsi36R-CQEFTEXL5SPfphv8dMYp5fM-N4Fn0LECCE93HLBQQj7F_MlchtqUYs5oH) You can find your generated decks: * Inside the **Portant App cards** in HubSpot * In your **OneDrive** account, under the connected folder ![](/docs/assets/images/template-docs-microsoft-powerpoint_16_AD_4nXerdELRNthiatOLN6FcuKrwCZ5Zb19LLYHeBas2jX0a_9oEe8L8CYwcFzsADEDdGBsdgovsqsD4) ================================================================================ # Fillable PDF Section: Templates URL: https://www.portant.co/docs/templates/fillable-pdf/ ================================================================================ Use a fillable PDF as a template, drop in tags from your data, and Portant fills the form fields automatically for every row, contact, or form response. The PDF needs to have editable form fields for the automation to work. ## Set up a workflow with a fillable PDF template Log in to your Portant account at [app.portant.co](http://app.portant.co) and click **+ Add workflow**. ![](/docs/assets/images/template-docs-fillable-pdf_0_AD_4nXeATZuShp6aZTqWrpyUk7yP_cvrNBBAodtstoqZcKb0Y3TIUn0YGHhS00TfEIhhhaX4wxZz4llV) Click **Advanced templates** and add a **Fillable PDF** template. ![](/docs/assets/images/template-docs-fillable-pdf_1_AD_4nXe8UNJCUvrw4J5ANSCPpyd_RQk5ywMvRUCFrd-iJID-gu6jd_JahWjNBXxVVrJ7hcI4K1cd8RSW) Pick an existing template from your Google Drive in the left panel, or click **Upload PDF file**. ![](/docs/assets/images/template-docs-fillable-pdf_2_AD_4nXcWmoxA53MRQQWsX6AE3fsaBKejqB6uFUpZCvBg-fhiM3v22JAWOcQT18gXdC0OwTqT3QbDDCDv) Portant then asks you to: * Add a **title** for your workflow * Choose a **colour** * Pick an **icon** * Click **Create** ![](/docs/assets/images/template-docs-fillable-pdf_3_AD_4nXdWoSVG_krLsXFrSbsm1T8ybP9aT56B58jPHK1FMewjv0ffwElcmyDt_2fqcM26OD78hv02xTzs) ## Add a source The next step is to add a source to your workflow. Click **+ Add source**. ![](/docs/assets/images/template-docs-fillable-pdf_4_AD_4nXcrTInrYYq5oBmC9PARQKm23qRNJUHRzbzX_3LRbACnC0mRaY_Bh_3yvLxikcjd3FfMIkHmS9yL) Select your source (HubSpot, Google Sheets, Google Forms, and so on). ![](/docs/assets/images/template-docs-fillable-pdf_5_AD_4nXdF-zB5CsTrrYgncXsK3rsFC9cxriERg5ta-sZolMDLjNuJEG15Ibyb5ySXHUs9MCbwona_28k1) Once your source is connected, the workflow looks like this: ![](/docs/assets/images/template-docs-fillable-pdf_6_AD_4nXdv7uKhjRO_Dm9K1tFVKEvQHpohe_XfvWXvRQiH4akAYzHjfjN16doGCZBkfMCx1stBHCJlnL7G) ## Add tags to your template Open the template in your workflow. Click the **Copy** button next to a field in the source table on the right, then paste the tag into the matching form field in your PDF. ![](/docs/assets/images/template-docs-fillable-pdf_7_AD_4nXeKJkmeS2IWzIjT1i47Lv2CpvbZ1pCbBDZkycT0s8iRHvtJHnY8FEuqe8rLRiQdJsvBV9R0HFoH) For more on what tags can do, see the [tags overview](/docs/features/tags/). ## Run the workflow **If you picked HubSpot as the source:** run the workflow from inside HubSpot. Open the object, click **Generate / Actions**, and select your Portant workflow. For the full setup, see the [HubSpot integration guide](/docs/sources/hubspot/). ![](/docs/assets/images/template-docs-fillable-pdf_8_AD_4nXfznsTCDSLq3ryVgUzB5amG1hiLpGiv2WrSZrgHLq4n55MpcLvQ8rrZml3HyiCDE014j8fQI5rh) **If you picked another source (Google Sheets, Google Forms, and so on):** run the workflow from Portant by clicking the **Automate** button in the top right, then **Start**. For source-specific setup: * [Google Sheets as a source](/docs/sources/google-sheets/) * [Google Forms as a source](/docs/sources/google-forms/) ![](/docs/assets/images/template-docs-fillable-pdf_9_AD_4nXer6M18tsUmI2-hazQM2BxrF_e8oY9KKAGHZi-4n4bYTSdVYNaD0Js7dcORgQraDIBQc09ur2Rj) ## Add more steps to your workflow You can extend the workflow with more stages after the template block. Click the **+** icon below the template to add: * **Email** to send the generated PDF * **Review** to get the PDF approved before it goes out * **Signature request** to send for eSignature ![](/docs/assets/images/template-docs-fillable-pdf_10_AD_4nXfE4Aiboc5Q5fxyjoaP_DlQOLhfqGMhIbsVb5MPGDsgfLw605hiS0b76omvVCb9qjjzGuoVgrz1) For more on each: * [Send a document via email](/docs/send/email/share-via-email/) * [Review and approve documents](/docs/manage/automation/review-approve/) * [eSignature requests](/docs/send/esignatures/requests/) * [eSignatures with HubSpot](/docs/sources/hubspot/) ================================================================================ # Tags Section: Build URL: https://www.portant.co/docs/features/tags/ ================================================================================ Tags are how Portant turns a static template into a personalised document. Drop a tag like `{{first_name}}` into a Google Doc, Slide, Word file, PowerPoint, or fillable PDF, and Portant fills it with the right value from your source for every document it creates. ## What a tag looks like A tag is the field name from your source wrapped in double curly braces: `{{Field name}}`. When the workflow runs, Portant replaces every tag with the matching value from that row, contact, or form response. You can use tags anywhere in the document body, in tables, in headers and footers, and in email subject lines and body text. ## When to use which tag | If you want to... | Use this | | --- | --- | | Use a shorter, friendlier name than the column header | [Custom tag names](/docs/features/tags/custom-names/) | | Do maths, format dates, build addresses, sum values | [Tag formulas](/docs/features/tags/formulas/) | | Show different content based on the data | [Tag if statements](/docs/features/tags/if-statements/) | | Insert values that stay the same across every workflow | [Global tags](/docs/features/tags/global/) | | Catch typos and broken tags before you send | [Tag checker](/docs/features/tags/checker/) and [invalid tags](/docs/features/tags/invalid/) | | Turn a merged value into a clickable link | [Hyperlink tags](/docs/features/tags/hyperlinks/) | | Drop in a logo, signature, or product photo from a URL | [Image tags](/docs/features/tags/images/) | | Pull a live Google Sheets chart into a slide | [Dynamic Google Sheets charts](/docs/features/tags/google-sheets-charts/) | ## Where to start If you're new to tags, start with [custom tag names](/docs/features/tags/custom-names/) so the tags in your template read clearly. Then move on to [tag formulas](/docs/features/tags/formulas/) once you want to do maths or formatting, and [tag if statements](/docs/features/tags/if-statements/) when you want the document to change based on the data. For repeating tables and totals across multiple rows, see [line items](/docs/features/line-items/). For deciding whether a document is generated at all (rather than what shows up inside it), see [conditional logic](/docs/features/conditional-logic/). ================================================================================ # Tags › Custom tag names Section: Build URL: https://www.portant.co/docs/features/tags/custom-names/ ================================================================================ Use a custom tag name to give a field a shorter, more readable label than the original column header. Helpful when your source has long question text or auto-generated field names. ## Map a custom tag from your source table This guide goes straight to mapping custom tags. If this is your first Portant workflow, see the [quickstart](/docs/getting-started/quickstart/) first. Once you've created your workflow, open the template block: ![](/docs/assets/images/personalise-documents-use-custom-tag-names_0_AD_4nXeoS29xNe_9Ehq3glcTJHRYIJ5ABkdjKQPpN9Sy0tt4qqAmtynaK510MGbzSU3LdyBDLc2j3TUo) Find the source table on the right side of your screen and locate the field you want to rename: ![](/docs/assets/images/personalise-documents-use-custom-tag-names_1_AD_4nXcixsqTZd90mj8blIMFIbfKpXtploemSSAa4YyGVxQixAMLqKBZMDNV9RZx6b81E9FzhkAZRFFk) Click the dropdown next to the tag name to reveal a field titled **Custom tag**: ![](/docs/assets/images/personalise-documents-use-custom-tag-names_2_AD_4nXcwQLGw2rKB5tv8Ad8gz3amUl6Zj4dF6s-LHSTnYAtk64aVwdNAjUsi9pcayNbnYupFdW92vJke) Enter the new name you want to use: ![](/docs/assets/images/personalise-documents-use-custom-tag-names_3_AD_4nXdposV7iEUMDww3AuScQYsf4dD2CuZM6j_0DtCgrXkw6ovi-NFV3W7WoWFqHkovrnV0uk9rsmt8) That's it. You can now copy the custom tag from the source table and paste it anywhere in your template, and Portant will fill it with the original field's value: ![](/docs/assets/images/personalise-documents-use-custom-tag-names_4_AD_4nXeJJbtwgjIP3GAND9tZSgqbSWaF4R-Pht_IYbxXiRyBk9DL0axVyn1hFZHlPFzOBkLmqOLwzrX8) ================================================================================ # Tags › Tag formulas Section: Build URL: https://www.portant.co/docs/features/tags/formulas/ ================================================================================ Tag formulas let you do maths, format dates, build text, and aggregate values inside a tag. They use the same `{{ }}` syntax as a normal tag, but start with `=` to mark them as a formula. For example, if your source has a `Line Item Price` field and you want to display the price with 10% tax added, multiply the field by `1.1`: ``` {{= Line Item Price * 1.1}} ``` ![Tag formula evaluated inside a Portant document template](/docs/assets/images/duplicated/build-tags-formulas/screenshot-01.png) ## Arithmetic You can use these arithmetic operators in tag formulas: | Symbol | Operation | | --- | --- | | `+` | Addition | | `*` | Multiplication | | `-` | Subtraction | | `/` | Division | You can combine multiple operators and use parentheses `(` `)` to build more complex expressions. ## Built-in formulas Like Google Sheets and Excel, Portant has a set of built-in formulas you can call inside a tag. For example, `ROUND` limits a numeric value to a set number of decimal places: ``` {{Line Item Price}} -> 24.1234 {{=ROUND(Line Item Price, 2)}} -> 24.12 {{=ROUND(Line Item Price)}} -> 24 ``` These built-in formulas are available: | Formula | Description | | --- | --- | | `ROUND(Tag, [Places])` | Rounds the numeric value of `Tag` to `Places` decimal places. Omit the second argument to round to a whole number. | | `DEFAULT(Tag, Default Value)` | Use a fallback value when the tag is blank. | | `ADD(Tag 1, Tag 2, [...])` | Adds two or more numeric tags together. Same as using `+`. | | `MULTIPLY(Tag 1, Tag 2, [...])` | Multiplies two or more numeric tags together. Same as using `*`. | | `TRUNCATE(Tag, Length)` | Shortens the text value of `Tag` to the specified `Length`. | | `LOWER(Tag)` | Converts the value of `Tag` to lowercase text. | | `UPPER(Tag)` | Converts the value of `Tag` to UPPERCASE text. | > `[ ]` means the parameter is optional. You can pass literal values in place of tags (and tags in place of values) anywhere in a formula. ## Numeric ### Aggregated formulas Some built-in formulas are designed to work with [data grouping](/docs/features/line-items/data-grouping/) workflows and aggregate all the grouped values for a tag. The most common is `SUM`, which adds together every value for a given tag. It's the easiest way to calculate a total inside a template. ``` Within a Data Grouping Table: +-----------------------------+ |1. {{Line Item Price}} -> 10 | +-----------------------------+ |2. {{Line Item Price}} -> 20 | +-----------------------------+ |3. {{Line Item Price}} -> 30 | +-----------------------------+ {{=SUM(Line Item Price)}} -> 60 ``` The numeric aggregated formulas are: | Formula | Description | | --- | --- | | `SUM(Tag)` | Adds together all values for `Tag`. | | `PRODUCT(Tag)` | Multiplies together all values for `Tag`. | | `AVG(Tag)` | Calculates the average of all values for `Tag`. | | `MAX(Tag)` | Returns the largest value for `Tag`. | | `MIN(Tag)` | Returns the smallest value for `Tag`. | You can use aggregated formulas anywhere in the document, including inside more complex expressions. For example, to calculate what percentage a single line item is of the total: ``` {{= (Price / SUM(Price)) * 100 | 2}}% ``` For the line items in the table above, this produces: ``` +-------------------+------------------------------------------------+ |1. {{Price}} -> 10 | {{= (Price / SUM(Price)) * 100 | 2}}% -> 0.16% | +-------------------+------------------------------------------------+ |2. {{Price}} -> 20 | {{= (Price / SUM(Price)) * 100 | 2}}% -> 0.33% | +-------------------+------------------------------------------------+ |3. {{Price}} -> 30 | {{= (Price / SUM(Price)) * 100 | 2}}% -> 0.50% | +-------------------+------------------------------------------------+ ``` ### Decimal place modifier Add `|` followed by a number at the end of an expression to round the result to that many decimal places, the same way `ROUND` does. For example, to round an arbitrary expression to 3 decimal places: ``` {{1.1234 + 1.0 | 3}} -> 2.123 ``` ### Date and time formatting Format any date or timestamp using the `FORMATDATE` formula. This gives you full control over how dates appear in your generated documents. **Basic usage** Use the formula inside a tag: ``` {{=FORMATDATE(Timestamp, "DD/MM/YYYY")}} ``` The first parameter is your date field. The second parameter is the output format. **Formatting tokens** | Token | Output examples | | ----- | ----------------- | | D | 1, 19 | | DD | 01, 19 | | M | 1, 12 | | MM | 01, 12 | | MMM | Jan, Dec | | MMMM | January, December | | YY | 25 | | YYYY | 2025 | **Example formats** | Format | Output example | | --------------- | -------------- | | `"DD/MM/YYYY"` | 07/02/2025 | | `"MMM D, YYYY"` | Feb 7, 2025 | | `"MMMM DD"` | February 07 | | `"YY-MM-DD"` | 25-02-07 | ### Date and time arithmetic You can add or subtract time from a date field using these helpers: `{{= Date + DAYS(30)}}` returns a value 30 days after the value of `Date`. The supported units (where `N` is the amount to add or subtract) are: * `MINUTES(N)` * `HOURS(N)` * `DAYS(N)` * `WEEKS(N)` ## Formula glossary ### Sum Returns the sum of a series of field values, including all field values within a data grouping tag. #### Syntax `{{=SUM(tag1, tag2, ...)}}` * `tag1`: The first tag to add together. * `tag2, ...` (optional): Additional tags to add to `tag1`. > Tags inside the brackets don't need `{{` and `}}` around them. ### Average `AVG` returns the numerical average of a group of tags, including all field values within a data group tag. #### Syntax `{{=AVG(tag1, tag2, ...)}}` * `tag1`: The first tag or data group tag to include in the average. * `tag2, ...` (optional): Additional tags to include. ### Maximum Returns the largest value from a group of tags, including all field values within a data group tag. #### Syntax `{{=MAX(tag1, tag2, ...)}}` * `tag1`: The first tag or data group tag to consider. * `tag2, ...` (optional): Additional tags to consider. ### Minimum Returns the smallest value from a group of tags, including all field values within a data group tag. #### Syntax `{{=MIN(tag1, tag2, ...)}}` * `tag1`: The first tag or data group tag to consider. * `tag2, ...` (optional): Additional tags to consider. ### Round Rounds the numeric value of a field to a certain number of decimal places. #### Syntax `{{=ROUND(tag, [places])}}` * `tag`: The value to round. * `places` (optional, `0` by default): The number of decimal places to round to. #### Sample usage `{{=ROUND(1.234, 2)}}` -> 1.23 `{{=ROUND(1.234)}}` -> 1 ### Multiply Returns the product of two fields or numeric values. Same as the `*` operator. #### Syntax `{{=MULTIPLY(tag1, tag2)}}` * `tag1`: A field with a numeric value or a literal number (e.g. `6`). * `tag2`: A field with a numeric value or a literal number (e.g. `7`). ### Add Returns the sum of two fields or numeric values. Same as the `+` operator. #### Syntax `{{=ADD(tag1, tag2)}}` * `tag1`: A field with a numeric value or a literal number (e.g. `19`). * `tag2`: A field with a numeric value or a literal number (e.g. `23`). ## Text ### Concatenate Joins strings together. #### Sample usage `{{=CONCATENATE('Hello', ' ', 'World')}}` -> "Hello World" `{{=CONCATENATE(Line Item Name)}}` -> "Item AItem BItem C" (no spaces) `CONCATENATE(A2:B7)` #### Syntax `CONCATENATE(tag_name_1, [tag_name_2, ...])` * `string1`: Any field or data grouping field from the source, or a literal string in quotes. * `string2 ...`: Any number of other fields, data grouping fields, or literal strings. ### Text join Combines text from multiple fields, or from a data grouping field with multiple values, with a delimiter between each item. #### Sample usage `{{=TEXTJOIN(" | ", "Hello", "World")}}` -> "Hello | World" `{{=TEXTJOIN(", ", Line Item Name)}}` -> "Item A, Item B, Item C" #### Syntax `{{=TEXTJOIN(delimiter, tag_name_1, [tag_name_2, ...])}}` * `delimiter`: A string (which can be empty) or another field. If empty, the values are simply concatenated. * `tag_name_1`: Any field or data grouping field from the source, or a literal string in quotes. * `tag_name_2, ...`: Any number of other fields, data grouping fields, or literal strings. > You can also use `{{=TEXTJOINNONEMPTY(...)}}` to skip empty values in the result. ### Truncate Shortens the value of a field or literal string to a given length. **Syntax** `{{=TRUNCATE(tag, length)}}` * `tag`: The text to truncate. * `length`: The number of characters to keep. If `length` is greater than the number of characters in the value, the value is returned unchanged. **Example** `{{Message}} -> "Hello World"` `{{=TRUNCATE(Message, 5)}} -> "Hello"` ### Filter and sum (SUMIF) Sum values that match a condition. **Syntax** `{{=SUMIF(Condition Tag = "Something", Numeric Data Grouped Field)}}` For more on conditions inside tags, see [tag if statements](/docs/features/tags/if-statements/). ================================================================================ # Tags › Tag if statements Section: Build URL: https://www.portant.co/docs/features/tags/if-statements/ ================================================================================ Use an `IF` formula inside a tag to show different content depending on a value from your source. Helpful for things like swapping a salutation, hiding a section when a field is empty, or labelling a row based on its data. If statements run inside the document body. To decide whether a document gets generated at all, see [conditional logic for documents](/docs/features/conditional-logic/documents/). ![IF formula evaluated inside a Portant tag](/docs/assets/images/duplicated/build-tags-if-statements/screenshot-01.png) ## =IF() formula Returns one value if a logical expression is `TRUE`, and another if it's `FALSE`. #### Sample usage `{{=IF(tag name = "Hello", "Tag says hello!", "Tag is something else")}}` -> Tag says hello! `{{=IF(tag name, "Tag was true", "Tag was false")}}` -> "Tag was false" `{{=IF("TRUE", 4, 5)}}` -> 4 #### Syntax `{{=IF(logical_expression, value_if_true, value_if_false)}}` * `logical_expression`: An expression or a reference to a field that evaluates to `TRUE` or `FALSE`. * `value_if_true`: The value the function returns if `logical_expression` is `TRUE`. * `value_if_false` (optional, blank by default): The value the function returns if `logical_expression` is `FALSE`. > Tags inside the brackets don't need `{{` and `}}` around them. #### Contains Use `~` instead of `=` to check whether one string contains another (in either direction). `{{=IF(tag name ~ "foo", "Tag contains foo", "Tag does not contain foo")}}` This formula is true if the value of `tag name` contains "foo". ## =SUMIF() filter and sum In a data grouping workflow, `SUMIF` adds up values that meet a condition. ```html {{=SUMIF(Product Type = "Service", Product Cost)}} ``` ## IF formulas and data grouping ### =IF() check each item Inside a [data grouping](/docs/features/line-items/data-grouping/) table, `=IF()` evaluates the condition against each value of the varying field. `{{=IF(Data Group Value = "Wally", "Found him!", "Nada!")}}` For example: | Data Group Value | Formula | | --- | --- | | {{Data Group Value}} | `{{=IF(Data Group Value = "Wally", "Found him!", "Nada!")}}` | would produce: | Data Group Value | Formula | | --- | --- | | Wally | Found him! | | | Nada! | | Waldo | Nada! | ### =IF() show text only if there's a value Leave the condition out to show a value only when the field has data: `{{=IF(Data Group Value, "Data present", "")}}` For example: | Data Group Value | Formula | | --- | --- | | {{Data Group Value}} | `{{=IF(Data Group Value, "Data present", "")}}` | would produce: | Data Group Value | Formula | | --- | --- | | Wally | Data present | | | | | Waldo | Data present | ### =IFANY() check across the whole data set In a data grouping workflow, `IFANY` evaluates the condition against every value of the varying field, not each one individually. `{{=IFANY(Data Group Value = "Wally", "Found him!", "Nada!")}}` ## Related * [Conditional logic for documents](/docs/features/conditional-logic/documents/) controls whether a document is generated at all, based on the data. * [Tag formulas](/docs/features/tags/formulas/) covers the full set of formulas you can use inside a tag. ================================================================================ # Tags › Global tags Section: Build URL: https://www.portant.co/docs/features/tags/global/ ================================================================================ Global tags work in any workflow without needing to be mapped from a source. Drop them into a template or email and Portant fills them in for you. ![Global tag inserted into a Portant template](/docs/assets/images/duplicated/build-tags-global/screenshot-01.png) ## Timestamp Inserts the date and time the document was generated. `{{Timestamp}}` > Set your [date format and timezone](/docs/manage/data-merge/advanced/timezone-date-time/) so the timestamp shows the way you want it. ## Workflow runner Inserts the name of the person who ran the workflow. Useful in the To, Cc, or Bcc field of an email so the runner gets a copy. `{{Workflow Runner}}` > You can also use `{{=NAMEONLY(Workflow Runner)}}` to extract just the name. ## Meaning of life The list wouldn't be complete without an easter egg. This tag returns the value `42`. `{{Meaning of life}}` ================================================================================ # Tags › Invalid tags Section: Build URL: https://www.portant.co/docs/features/tags/invalid/ ================================================================================ If your source table shows the message "This document contains invalid tags," it means Portant has spotted at least one tag in your template that no longer matches a field in the source. Here's how to find them and fix them. ![](/docs/assets/images/personalise-documents-invalid-tags_0_65425696d2332131840a5dbc_4GIL0sATrAr4S8aeSm68MGfmM1iS0P5KYpLYfcZUb6siA5ZGZy0I62j) ## Check for invalid tags To check that every tag in your template still maps to a field in the source, click the refresh button in the top right of the source table: ![](/docs/assets/images/personalise-documents-invalid-tags_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FKFig7KT4zfzAz9PqSYPu_2Fimage.png_1.png) This refreshes the source connection and checks the template for any tags that no longer match. A tag can become invalid because: * The field has been removed from the source * The field has been renamed * The tag has been edited inside the document ## Fix the invalid tags message The most common causes are: * Extra spaces inside the tag * Special characters in the tag * Inconsistent formatting (different fonts, sizes, or styles applied across parts of the same tag) Follow these steps to clear it: 1. Remove the affected tags from the template, refresh your source table, and reinsert them. 2. When you reinsert, paste without formatting. On Mac, use `Cmd + Shift + V`. On Windows, use `Ctrl + Shift + V`. 3. Look at the tag in the template. For each tag flagged as invalid, check for extra spaces inside the curly braces. 4. Consider using a [custom tag name](/docs/features/tags/custom-names/) for fields with long or awkward labels (especially Google Forms questions). It's easier to find and reinsert a short tag than a full sentence. Once it's resolved, refreshing the source table shows the message "All inserted document tags are valid": ![](/docs/assets/images/personalise-documents-invalid-tags_2_65425695a0970b1eac7d9c6f_XAM-XroVbO9sXRyfpIAqS5dJ59h-9fOqO8MieNKLgUlaGpkD-nrbMZ1) For more on running this check on demand, see the [tag checker](/docs/features/tags/checker/). ================================================================================ # Tags › Tag checker Section: Build URL: https://www.portant.co/docs/features/tags/checker/ ================================================================================ The tag checker confirms every tag in your template still maps to a field in your source. Run it whenever you've changed the source document so you catch broken tags before you send anything. ## Check the tags in your workflow Open your template document block: ![](/docs/assets/images/personalise-documents-invalid-tags-tag-checker_0_6525869bcdbc4a54ad2432ed_FMNajcRPHbocWowKNfVsaS6R-M75lapjznUj3AGjqqHC6faLhvEgOme) Click the **Refresh** button in the source table. If everything's in order, you'll see a confirmation that all tags are valid: ![](/docs/assets/images/personalise-documents-invalid-tags-tag-checker_1_6525869ae45143abd28036d3_F15e2iWfsR_RVnP5y2gIFO1E42cbZiQul1rtIR7Gq7kzPM9obdtdcuB) If a tag is broken, Portant flags it directly in the source table: ![](/docs/assets/images/personalise-documents-invalid-tags-tag-checker_2_6525869a87dbc5f7169d0734_2DxRoBkhs1qqGcrZOP5JHweTv8yb_sTV33mUQm_miGku7dRj9DX2sD7) In this example, there's a typo in the tag `{{Notes}}`. Until it's fixed, Portant won't be able to insert that field's value into the output. Correct the typo in the template, then refresh the source table again to confirm every tag is valid. ![](/docs/assets/images/personalise-documents-invalid-tags-tag-checker_1_6525869ae45143abd28036d3_F15e2iWfsR_RVnP5y2gIFO1E42cbZiQul1rtIR7Gq7kzPM9obdtdcuB) For the most common causes of invalid tags and how to fix them, see [invalid tags](/docs/features/tags/invalid/). ================================================================================ # Tags › Hyperlink tags Section: Build URL: https://www.portant.co/docs/features/tags/hyperlinks/ ================================================================================ Insert a tag as a clickable link instead of plain text. Useful when you want recipients to click through to a payment page, a personalised portal, a contract, or anything else with a unique URL per row. ## Add a hyperlink tag to your template This guide goes straight to setting up a hyperlink tag. If this is your first Portant workflow, see the [quickstart](/docs/getting-started/quickstart/) first. Start by adding a column in your source data with the URLs you want to use: ![](/docs/assets/images/personalise-documents-adding-hyperlinks_0_654a19c0327c90a602f96279_IJe-Wr32cSBNAio-ueH7O1t0p48XbBewEle1Jq1U8ZIkH4DM3eOD1DR) Open the template block and find the source table on the right side of your screen: ![](/docs/assets/images/personalise-documents-adding-hyperlinks_1_654a19c0c8b5bfd44125601b_idxuLSlpk7RvoI6SNu-8sFPXu7bIKm54LLZXxNSQXlACCF7qJBZ4prP) Find the tag that holds your URL and click the dropdown next to it: ![](/docs/assets/images/personalise-documents-adding-hyperlinks_2_654a19c06791a4d363982c0e_LNsFixlf5N6h7BIjrt9epXsgougPpGzGT5e5SJO84bTqflwx4wv5gHY) The first field, **Custom tag**, lets you rename the tag. For more, see [custom tag names](/docs/features/tags/custom-names/). In the **Insert value as** field, select **Link**: ![](/docs/assets/images/personalise-documents-adding-hyperlinks_3_654a19bf9bcf655312a9cad3_e9U1FhqLJV0nDHvDCTwABVGroK7MphCi0HMhwpZ6Bhc8hEUSbXQ8nzC) Optional: in the **Link display as** field, set the text the link should show. If you leave it blank, the URL itself is used. ![](/docs/assets/images/personalise-documents-adding-hyperlinks_4_654a19c024449e524133122b_4J2BELswI-_Z4an0p15WwpfQfO8XFDD3mXP5RNZL3Tmaq8PQPLw-LkX) > You can use other `{{tags}}` inside the display text field. Click **Copy** and paste the tag wherever you want the link to appear in your template: ![](/docs/assets/images/personalise-documents-adding-hyperlinks_5_654a19c1ffa1441216c50011_0bezQRSAbLPOo0kDIqHOgVl5YHZW5NWFO4Hc4SS6bvT7Prv-6g0ChNM) ![](/docs/assets/images/personalise-documents-adding-hyperlinks_6_654a19c0cec6bb663c9bba27_cLKImHysWf4oYjgHz8PJBW8h4m3CH4da1-xiGQwJHJdejeQ4WZOGYBS) When the workflow runs, the hyperlink shows up in your output documents as a clickable link. ![](/docs/assets/images/personalise-documents-adding-hyperlinks_7_654a19c09953a294003022d6_p5MZGPcSxPQuuPMDj0BT45Tg6SExseAluP3koxk319d0TLKD2Ms35kX) ================================================================================ # Tags › Image tags Section: Build URL: https://www.portant.co/docs/features/tags/images/ ================================================================================ Insert images into your template from a URL in your source. Useful for product photos, profile pictures, signatures, or logos that change per row. ## Mark a source field as an image In the source table, open the dropdown next to a field, set **Insert value as** to **Image**, then insert the placeholder image into your template. ![](/docs/assets/images/personalise-documents-adding-images_0_62b5974cafa4af2f5829b31a_Portant_20Workflow_20-_20Image_20tag_20select_20and_20i) The placeholder image is added to the end of your document. From there you can move it anywhere you want, or duplicate it if you need the image to appear in more than one place. > **Note 1:** Only publicly accessible URLs that point to `.jpg`, `.jpeg`, `.png`, or `.gif` files are supported. > **Note 2:** In Google Docs templates, you can add multiple image tags to the same template. ## Resize the image (Slides) You can resize the placeholder image to fit your slide layout: ![](/docs/assets/images/personalise-documents-adding-images_1_62b5b60e9a3cf1f11ba32f8b_Portant_20Workflow_20-_20Resize_20image_20tag_20-_20sli) Inserted images keep their original aspect ratio. Portant doesn't stretch or distort them. If the source image has a different ratio to the placeholder, Portant scales it to the largest size that fits inside the placeholder while keeping the original ratio. ## Resize the image (Docs) You can resize the placeholder image to fit your document layout: ![](/docs/assets/images/personalise-documents-adding-images_2_62b5b497393fc5e14d3a109a_Portant_20Workflow_20-_20Resize_20image_20tag_20-_20Doc) In Google Docs, inserted images keep their original aspect ratio. If the source image has a different ratio to the placeholder, Portant scales and centres it to fill the placeholder bounds. The image may be cropped to fit. The rendered image is the same size as the placeholder. ![](/docs/assets/images/personalise-documents-adding-images_3_62b969d5d3bd765cba567d1d_Portant_20Workflow_20-_20Image_20-_20Move_20with_20text) In Google Docs, image tags can only be placed using the "Move with text" option (shown above). If you need an image to stay in a fixed position on the page, use a Google Slides template instead. Slides supports fixed positioning. ================================================================================ # Tags › Dynamic Google Sheets charts Section: Build URL: https://www.portant.co/docs/features/tags/google-sheets-charts/ ================================================================================ Insert a Google Sheets chart into a Google Slides template, and Portant updates it with the latest data every time the workflow runs. > **Note:** This feature is only available in Google Slides. If you'd like to see it added to Google Docs, please upvote the [Google Issue ticket](https://issuetracker.google.com/issues/297245048). ## Add a Google Sheets chart to a Google Slides template This guide goes straight to adding a chart. If this is your first Portant workflow, see the [quickstart](/docs/getting-started/quickstart/) first. Copy the chart from your Google Sheets source: ![](/docs/assets/images/personalise-documents-dynamic-google-sheets-charts_0_65394eac6ecbe8268348c47d_eOCeJqLIalVhtI25HckqhjRCYBTz1jn7qe5mAt3HwHrO4nYVI0DqaMQ) Paste it into your Slides template using the **Link to spreadsheet** option: > If you pick **Paste unlinked**, the chart goes in as a static snapshot and won't update when your data changes. ![](/docs/assets/images/personalise-documents-dynamic-google-sheets-charts_1_65394ead563288cd85092bdc_-4Xs_o6wsZ-YnuC5UuAGHG5gBobD1rkNyEHBJIiarxj8LqPi5MKyW2q) Your template now shows the linked chart, ready to update automatically when the data in Google Sheets changes. ![](/docs/assets/images/personalise-documents-dynamic-google-sheets-charts_2_65394ead6a770d1309a02d1c_1SsT-_QuBKh6kzQsZgYNVexOQd9x1FF05TLc6xAC4HLf7I1SEgVlz0a) ## How charts update during automation When a workflow runs, Portant refreshes every linked chart with the latest data from the source spreadsheet. It's the same as clicking the manual update button in Slides, just done for you on every run. Your generated decks always include the most recent version of the chart. ================================================================================ # Line items and tables › Line items overview Section: Build URL: https://www.portant.co/docs/features/line-items/ ================================================================================ A lot of the documents you'll build with Portant have rows that need to repeat: a quote with a list of products, an invoice with billable hours, a proposal with package options, a QBR with one row per deal. Line items handle all of that. This is the home for everything to do with repeating tables, sorting rows, and grouping records into a single document. Source-specific guides (HubSpot deal line items, Google Sheets data grouping, webhook payload arrays) all link back here so the behaviour stays in one place. ## What "line items" means in Portant A regular tag like `{{Customer Name}}` puts a single value into the document. A line item tag is the same idea, but it sits inside a table row. When Portant runs the workflow, it clones that row once for every line item in the source. So a single template row like this: ``` | {{Item}} | {{Quantity}} | {{Unit Price}} | {{Line Total}} | ``` becomes something like this in the output: ``` | Widget A | 2 | $50.00 | $100.00 | | Widget B | 1 | $250.00 | $250.00 | | Widget C | 5 | $20.00 | $100.00 | ``` The row above and the row below the line item row stay where they are. So you can put a header row above (column names) and a totals row below with formulas like `{{=SUM(Line Total)}}`. Both stay in place while the middle row expands. ## In this section 1. **[Repeating tables](/docs/features/line-items/repeating-tables/)** explains how a single row of tags expands into many rows at merge time. 2. **[Sort and order rows](/docs/features/line-items/sorting/)** covers controlling the order rows appear in the output. 3. **[Group rows into one document](/docs/features/line-items/data-grouping/)** covers combining many source records into one output. ## Where line items show up across Portant Different sources use slightly different language for the same idea. The guides below are source-specific recipes that all build on top of the rules above: - **HubSpot.** [Add multiple line items into a single document](/docs/sources/hubspot/add-multiple-line-items-into-a-single-document/) for quotes, contracts, and invoices built from deal line items. - **Google Sheets.** [Group rows into one document](/docs/sources/google-sheets/data-grouping/) when several rows in the sheet belong to the same record (for example, multiple invoice lines that share an invoice number). - **Webhooks.** [Group webhook events into one document](/docs/sources/webhooks/webhook-data-grouping/) when an array in the payload should produce a single doc. - **Use cases.** [Quotes](/docs/use-cases/quotes/), [Proposals](/docs/use-cases/proposals/), and [Invoices](/docs/use-cases/invoices/) all rely on line items to list products, services, or charges. ## Related - [Tags](/docs/features/tags/) - [Tag formulas](/docs/features/tags/formulas/) for totals like SUM, AVG, MIN, MAX - [Conditional logic for documents](/docs/features/conditional-logic/documents/) to hide sections of a document for specific records ================================================================================ # Line items and tables › Repeating tables Section: Build URL: https://www.portant.co/docs/features/line-items/repeating-tables/ ================================================================================ A repeating table is a single row in your template that expands into many rows when Portant runs the workflow. You design one row, Portant clones it for every line item in the source. This is the mechanic behind quotes, invoices, packing slips, statements of work, and any document that lists a variable number of items. ![Repeating table row in a Portant template, expanded into one row per line item in the output](/docs/assets/images/duplicated/build-line-items-repeating-tables/screenshot-01.png) ## How it works A regular tag is replaced with a single value. A line item tag is replaced with a list of values, one per row. Portant looks at where the line item tags are placed and behaves like this: - **If the tags are inside a table row**, Portant clones that row, once per item. - **If the tags are outside a table**, Portant joins the values into a single block of text instead. So the rule is simple: to repeat rows, put the tags inside a single row of a table. ## Setting up a repeating row 1. Insert a table in your template with as many columns as you need. 2. Optionally add a header row at the top with column titles (this row stays the same in the output). 3. Add one row of line item tags. For example: ``` | {{Item Name}} | {{Quantity}} | {{Unit Price}} | {{Line Total}} | ``` 4. Optionally add a totals row beneath using a [tag formula](/docs/features/tags/formulas/), for example `{{=SUM(Line Total)}}` in the right-hand column. When the workflow runs, the row of tags is replaced with one row per line item. The header row and the totals row stay where they are. Anything above or below the table is untouched. ## What goes inside the row Only put tags that belong to the line item itself in the repeating row. Things like customer name, address, or quote number are document-level fields and should be placed outside the table. If you mix the two, Portant will repeat the customer name on every line, which is rarely what you want. ## Source-specific recipes The mechanic is the same everywhere, but how the source provides the line items differs: - **HubSpot.** Each HubSpot deal can have multiple line items as a connected object. See [add multiple line items into a single document](/docs/sources/hubspot/add-multiple-line-items-into-a-single-document/) for the full HubSpot setup. - **Google Sheets.** A repeating row is paired with a [grouping column](/docs/features/line-items/data-grouping/) so Portant knows which rows belong together. See [Google Sheets data grouping](/docs/sources/google-sheets/data-grouping/). - **Webhooks.** When the payload includes an array of items, Portant treats each array element as a line item. See [webhook data grouping](/docs/sources/webhooks/webhook-data-grouping/). ## Common gotchas - Tags must be in a single row. If you spread line item tags across two rows, Portant won't recognise the repeating pattern. - Header and footer rows can be styled independently and won't be cloned. - Formulas like SUM and AVG only work on fields that are part of the line item set. See [tag formulas](/docs/features/tags/formulas/). ## Related - [Line items overview](/docs/features/line-items/) - [Sort and order rows](/docs/features/line-items/sorting/) - [Group rows into one document](/docs/features/line-items/data-grouping/) - [Tag formulas](/docs/features/tags/formulas/) ================================================================================ # Line items and tables › Sort and order rows Section: Build URL: https://www.portant.co/docs/features/line-items/sorting/ ================================================================================ By default, line items appear in the order Portant receives them from the source. If you want a different order (alphabetical by product, oldest invoice first, highest value at the top), you can set a sort. ![Line item sort order set on a workflow source in Portant](/docs/assets/images/duplicated/build-line-items-sorting/screenshot-01.png) ## How sorting works Sorting reorders the rows that go into a [repeating table](/docs/features/line-items/repeating-tables/) before they're written into the document. It doesn't change the source data, only the order rows appear in the output. You can sort by any field that's part of the line item set, ascending or descending. ## Where to set the sort The sort is set in the source-specific options, because each source exposes the line items differently: - **HubSpot.** Open "Manage HubSpot Properties", select the connected object (for example, Line Items), and choose the field to sort by. See [add multiple line items into a single document](/docs/sources/hubspot/add-multiple-line-items-into-a-single-document/). - **Google Sheets.** Sort the source sheet itself, or rely on the [grouping column](/docs/features/line-items/data-grouping/) to control the order rows are read in. - **Webhooks.** The order of items in the array is the order Portant uses. Sort the array in the system that's sending the webhook. ## When sorting matters A few common reasons to set an explicit sort: - Quotes and invoices that should list higher-priced items first - Statements that should be in date order - Catalogues that should be alphabetical by product name - QBR reports that should put the largest accounts at the top ## Related - [Line items overview](/docs/features/line-items/) - [Repeating tables](/docs/features/line-items/repeating-tables/) - [Group rows into one document](/docs/features/line-items/data-grouping/) ================================================================================ # Line items and tables › Group rows into one document Section: Build URL: https://www.portant.co/docs/features/line-items/data-grouping/ ================================================================================ Data grouping combines multiple rows from the same source into a single output document. It's how a sheet with one row per product line becomes one invoice per customer, with all the products listed in a table inside it. This is the canonical guide. Source-specific recipes (Google Sheets, Webhooks, HubSpot) link back here. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-data-merge-settings-for-google-sheets-sources_6_60e53259c96f3f012945434a_ezgif.com-gif-maker.gif_6.png) ## When you'd use it A typical example: your source spreadsheet has one row per invoice line, and several rows share the same invoice number. Without grouping, Portant would generate one document per row. With grouping, Portant produces one document per unique invoice number, with all the matching rows listed in a table inside it. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-data-grouping-in-portant-data-merge_1_60e5330240d2f95a93cc23e3_Screen_20Shot_202021-07-07_20at_202.51.12_20pm.png_1.png) The same idea applies to: - A purchase order with multiple items per supplier - A statement with multiple charges per customer - A timesheet with multiple entries per project - A QBR with multiple deals per account ## Setting up grouping ### Step 1: add a table to your template Insert a table in your document where the grouped rows should appear (Insert > Table). > Data grouping also works inside Google Slides templates. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-data-grouping-in-portant-data-merge_2_60e543a4bf58a06c0cff6065_Document_20Table_20-_20Insert_20Table_20_2_.gif_2.png) You can add header rows above and footer rows below. The header and footer rows stay in place; only the row that contains tags expands. ### Step 2: add the line item tags Add the tags for the fields that should repeat into a single row of the table. All line item tags must be on the same row, otherwise Portant won't recognise the repeating pattern. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-data-grouping-in-portant-data-merge_3_60e543c9a7cea90a41ae29bf_Document_20Table_20-_20Insert_20Tag_20_2_.gif_3.png) ### Step 3: choose the column to group by Open Data Merge Options > Data grouping and pick the column that identifies which rows belong together. In the invoice example, that's the invoice number column. The grouping column needs to identify each group uniquely. If two columns have similar names (`Invoice Number` and `Invoice No.`), pick the one with the values you actually want to group by, and rename the other so it's not confused. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-data-grouping-in-portant-data-merge_4_60e543dce989500d967a4559_Document_20Table_20-_20Set_20Grouping_20Column_20_2_.gi_4.png) ### Step 4: run the workflow Once grouping is set, every unique value in the grouping column produces one document. Rows that share the same value are combined into the table inside that document. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-data-grouping-in-portant-data-merge_1_60e5330240d2f95a93cc23e3_Screen_20Shot_202021-07-07_20at_202.51.12_20pm.png_1.png) Set up the rest of the workflow as usual (output name, PDF, email) and click "Create Documents". You'll get one document per group, with the matching rows listed in the table. ## Totals and other calculations Once the rows are grouped, you can add a totals row beneath the repeating row using [tag formulas](/docs/features/tags/formulas/): - `{{=SUM(Field name)}}` adds the values - `{{=AVG(Field name)}}` averages the values - `{{=MAX(Field name)}}` returns the largest value - `{{=MIN(Field name)}}` returns the smallest value These formulas only operate on grouped fields. ## Notes and constraints - Data grouping is only available in "Create multiple documents" mode. Switch to that mode in the Data Merge box. - The grouping column needs to be present and consistent across rows that should end up in the same document. - Header and footer rows in the table are preserved as-is. Only the row containing the tags is repeated. ## Source-specific recipes The mechanic above is the same everywhere. The recipes below cover how to set up grouping for each source: - [Google Sheets data grouping](/docs/sources/google-sheets/data-grouping/) - [HubSpot: add multiple line items into a single document](/docs/sources/hubspot/add-multiple-line-items-into-a-single-document/) - [Webhook data grouping](/docs/sources/webhooks/webhook-data-grouping/) ## Related - [Line items overview](/docs/features/line-items/) - [Repeating tables](/docs/features/line-items/repeating-tables/) - [Sort and order rows](/docs/features/line-items/sorting/) - [Tag formulas](/docs/features/tags/formulas/) ================================================================================ # Conditional logic Section: Build URL: https://www.portant.co/docs/features/conditional-logic/ ================================================================================ Conditional logic is how you tell Portant: only do this when the data looks like that. Use it to skip rows that aren't ready, send a different email when a deal is won versus lost, or stop a workflow firing for cases that shouldn't trigger it. ## In this section 1. **[Conditional logic for documents](/docs/features/conditional-logic/documents/)**, only generate a document when the source row matches your rules. 2. **[Conditional logic for emails](/docs/features/conditional-logic/emails/)**, only send an email when the conditions are met. ## Related If you want to show or hide content **inside** a document depending on the data (for example, hide a paragraph when a field is empty), see [tag if statements](/docs/features/tags/if-statements/). It's a related but different concept: if statements work on the content of one document, conditional logic decides whether the document or email runs at all. ================================================================================ # Conditional logic › Conditional logic for documents Section: Build URL: https://www.portant.co/docs/features/conditional-logic/documents/ ================================================================================ Use conditional logic to only generate a document when a row in your source data matches the rules you set. Helpful for skipping rows that aren't ready, separating "won" from "lost" deals, or running a workflow only on a specific subset of your data. ## Set up a condition In the Data Merge box, open the dropdown and select **Condition**. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-conditional-logic-for-data-merges_0_610100bc900a3f7acb09e3fa_Screen_20Shot_202021-07-28_20at_204.59.47_20pm.png_0.png) Pick the field the condition is based on from the next dropdown. If the field you want isn't there, click refresh in the top-right of the data sources table to pull in the latest source structure. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-conditional-logic-for-data-merges_1_6100fbf0498ac45d2de2b5ed_Screen_20Shot_202021-07-28_20at_204.40.24_20pm.png_1.png) Enter the value the field has to equal for the merge to run. That's it. Portant will only create a document when the rule is true. ## Combine multiple conditions The built-in condition is a single rule with the **equals** operator. To combine conditions or use other operators (like AND, OR, or "contains"), add a helper column to your spreadsheet that does the logic for you, then use the result of that column as your Portant condition. For example, return "Merge" only when both columns match: ``` =IF(AND(A4="Apple",B4="Orange"),"Merge","") ``` Or return "Merge" when either word appears in column A: ``` =IFERROR(IFS(A2="Apple", "Merge", A2="Orange", "Merge"),"") ``` Then set your Portant condition to **Merge based on this column equals "Merge"**. For more on combining IF, AND, and OR in Google Sheets, see [this guide](https://infoinspired.com/google-docs/spreadsheet/combined-use-of-if-and-or-logical-functions-in-google-doc-spreadsheet/). ## Related - [Conditional logic for emails](/docs/features/conditional-logic/emails/), only send an email when the rules match. - [Tag if statements](/docs/features/tags/if-statements/), show or hide content inside a document based on the data. ================================================================================ # Conditional logic › Conditional logic for emails Section: Build URL: https://www.portant.co/docs/features/conditional-logic/emails/ ================================================================================ Use conditional logic to control when an email is sent. Set rules based on the source data, so an email only goes out when it should: a follow-up only when a deal is won, a reminder only when a status is "pending", a thank-you only when payment is "received". ## Add a condition to an email Open the email settings by ticking **Automatically email created docs** in the **Share via email** box. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-forms-source-edit-response-and-pre-filled-response-links_0_60f8c542485e64d7e024acae_Open_20Email_20Modal_20_1_.gif_0.png) In the email settings modal, find **Sending conditions** on the right, under **Attachments**. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-conditional-logic-for-emails_1_61010a4246772f080d4bbe82_Screen_20Shot_202021-07-28_20at_205.39.24_20pm.png_1.png) Tick **Send emails based on defined rules** to open the email conditions modal. You can name the rule set in the top-right corner. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-conditional-logic-for-emails_2_61010b2fdab1af3da1acb3e8_Screen_20Shot_202021-07-28_20at_205.41.08_20pm.png_2.png) Pick the field the rule is based on, choose an operator, and enter the value to compare against. The available operators are: - **equal** - **not equals** - **contains** - **not contains** - **is empty** - **is nonempty** ## Combine multiple rules You can stack rules with **AND** or **OR**. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-conditional-logic-for-emails_3_61010c01e74ecc5557707b1f_Screen_20Shot_202021-07-28_20at_205.41.20_20pm.png_3.png) - **AND** sends the email only when **every** rule is true. - **OR** sends the email when **any** rule is true. Once you've picked AND or OR for the second rule, every additional rule has to use the same operator. To remove a rule, click the trash can on the right. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-conditional-logic-for-emails_4_61010c6e138a68892b45f249_Screen_20Shot_202021-07-28_20at_205.41.30_20pm.png_4.png) When you're done, click **Save** in the bottom-right. ## Related - [Conditional logic for documents](/docs/features/conditional-logic/documents/), only generate a document when the rules match. - [Tag if statements](/docs/features/tags/if-statements/), show or hide content inside an email or document based on the data. ================================================================================ # AI Section: Build URL: https://www.portant.co/docs/features/ai/ ================================================================================ Portant AI lets you drop ChatGPT-powered prompts into your document templates as tags. When the workflow runs, Portant fills each tag with content generated from the source data, so you can produce personalised paragraphs, summaries, and bullet points without writing them by hand. ## What it does and what it doesn't Portant AI is good for: - Personalising sections of a document with prospect, customer, or deal data. - Summarising notes (meeting notes, ticket history) into a paragraph that fits in your template. - Picking the most relevant items from a list and rewording them for a specific audience. Portant AI is not a chat assistant inside the app, and it doesn't change the structure of your document. Each AI tag returns text for one specific spot in the template, using the prompt you wrote and the data you fed it. We strongly recommend pairing AI content with a [review block](/docs/manage/automation/review-approve/) so a person can sanity-check what the model produced before anything is sent. ![](/docs/assets/images/personalise-documents-portant-ai-content_0_6476d03ab75d28b0f3f85cf5_Portant_20Workflow_20-_20AI_202.gif_0.png) ## Add Portant AI to a template When you open a template, Portant AI sits at the bottom of the source table. ![](/docs/assets/images/personalise-documents-portant-ai-content_1_6475d70b728604f7d4e6e680_Portant_20AI.png_1.png) Click to add an AI content field, then fill in the prompt details. > A prompt is the written instruction that tells the AI what content to generate. ![](/docs/assets/images/personalise-documents-portant-ai-content_2_6475d71bf3067d91b96bf636_Portant_20AI_20_E2_80_93_201.png_2.png) You need two things: 1. **Field name**, what the prompt is called in the source table and how the tag will appear in your document (for example, `{{Personalised intro}}`). 2. **Prompt**, the instruction itself. You can drop in source fields to make the prompt dynamic, so each document gets a tailored result based on the row, response, or record. Click **Save**, then add the prompt tag to your template the same way you'd add any other tag. ![](/docs/assets/images/personalise-documents-portant-ai-content_3_6475d72520015b96fb0e6265_Portant_20AI_20_E2_80_93_202.png_3.png) ## Get started - See worked examples of paragraph and bullet-point prompts in [example prompts](/docs/features/ai/example-prompts/). - Walk through the full HubSpot proposal flow in the [dynamic proposal template guide](/docs/features/ai/dynamic-proposal-template-step-by-step-guide/). ================================================================================ # AI › Example prompts Section: Build URL: https://www.portant.co/docs/features/ai/example-prompts/ ================================================================================ Two prompts we use ourselves to generate dynamic content inside Portant documents. Use them as starting points for your own prompts and adapt them to the data you have. ## Personalised paragraph Generates a tailored paragraph from CRM data and meeting notes. Good for sections like a recap summary, an "About us" intro, or an opening paragraph that needs to read like it was written for one specific prospect. The prompt has four parts: 1. **Company context.** Dynamic fields like company name, size, industry, domain, and revenue. 2. **Meeting notes.** We use Fathom, which writes meeting notes back to HubSpot automatically. 3. **Paragraph to personalise.** The original version of the paragraph you want the AI to adapt. 4. **Rules for output.** Output only the personalised paragraph (no preamble), use natural customer-friendly language, and keep the final paragraph the same length as the original (within 3 characters) so it fits the layout. ### Example ``` PROSPECT DETAILS Company Name: {{Company Name}} Number Of Employees: {{Company Number Of Employees}} Company Domain Name: {{Company Domain Name}} Company Annual Revenue: {{Company Annual Revenue}} Company Description: {{Company Description}} Company Industry: {{Company Industry}} Company Linkedin Bio: {{Company Linkedin Bio}} Company Web Technologies: {{Company Web Technologies}} Here is our previous meeting's notes: {{Meeting Internal Meeting Notes}} THIS IS THE ACTION Use the prospect details and meeting notes to customise the paragraph below. Customisable paragraph: **ADD YOUR PARAGRAPH OF CONTENT HERE** 📝 Formatting Rules: Output only the personalised paragraph above. Use natural, customer-friendly language. VERY IMPORTANT Keep the Customisable paragraph output the same number of characters as the Customisable paragraph above (plus or minus 3 characters) ``` ## Smart bullet point selection Picks the most relevant bullet points from a list and rewords them using the prospect's data. Good for sections like Problems, Solutions, or Next steps, where you want a short list that feels specific to the customer. Same four parts: 1. **Company context.** Same structure as above. 2. **Meeting notes.** Captured in HubSpot via Fathom. 3. **Bullet point list.** A predefined list (top challenges, product benefits, etc.). 4. **Rules for output.** Pick only the three most relevant bullets, personalise each using the company and meeting context, and keep each bullet roughly the same length as the original so the layout still works. ### Example ``` THIS IS THE CONTEXT PROSPECT DETAILS Company Name: {{Company Name}} Number Of Employees: {{Company Number Of Employees}} Company Domain Name: {{Company Domain Name}} Company Annual Revenue: {{Company Annual Revenue}} Company Description: {{Company Description}} Company Industry: {{Company Industry}} Company Linkedin Bio: {{Company Linkedin Bio}} Company Web Technologies: {{Company Web Technologies}} Here is our previous meeting's notes: {{Meeting Internal Meeting Notes}} ----------------------------------------------------- THIS IS THE ACTION Using the context above, select the 3 most appropriate bullet points to communicate the customers problem. After you have selected the 3 bullet points personalise them using the context of the company details and meeting notes. BULLET POINTS: **ADD YOUR LIST OF BULLET POINTS HERE** 📝 Formatting Rules: Output ONLY 3 bullet points Do not start bullet points with a dash (-) Do not start bullet points with a number Do not add a blank line between bullet points. Use natural, customer-friendly language. VERY IMPORTANT Keep the bullet points the same number of characters as the corresponding bullet point in the list of BULLET POINTS (plus or minus 3 characters) ``` > **Tip:** Pre-format the bullet-point AI tag in your document with the bullet style you want. Portant keeps the formatting when it inserts the generated content. ================================================================================ # AI › Dynamic proposal step-by-step Section: Build URL: https://www.portant.co/docs/features/ai/dynamic-proposal-template-step-by-step-guide/ ================================================================================ The [Dynamic Proposal Template](https://app.portant.co/templates/tmp_2nf90nyy2pKZQC) is a pre-built, AI-powered workflow that generates a personalised sales proposal from your HubSpot data. Each section of the proposal is tailored using a mix of structured CRM fields and meeting notes, so you can produce a high-quality first draft for every deal in seconds. This guide walks through how the template works, how to customise it, and how to wire it up to your own proposal file in HubSpot. [Watch video](https://youtu.be/IgxTgnLeXOk) ## 1. Copy the template - Open the [Portant Template Library](https://app.portant.co/templates). - Select the [Dynamic Proposal Template](https://app.portant.co/templates/tmp_2nf90nyy2pKZQC). - Click **Copy Workflow**. Portant copies the document and the workflow into your account. ![](/docs/assets/images/personalise-documents-portant-ai-content-dynamic-proposal-template-step-by-step-guide_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FsXik3bKCR3w4tWXCHiic_2Fpika-1754022133) ## 2. Set up the HubSpot data source The template uses HubSpot **Deals** as the data source, including any associated objects. You can change the source to any HubSpot object: - Companies - Contacts - Tickets - Custom Objects For proposals, **Deals** is usually the right choice. ![](/docs/assets/images/personalise-documents-portant-ai-content-dynamic-proposal-template-step-by-step-guide_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FCCMpABsIfxaaUdJ0qoiZ_2Fpika-1754022394) ## 3. Look around the template Open the template document. It comes prefilled with **tokens** for personalisation (for example, `{{Company Name}}`). The most useful part is the **AI fields** at the bottom of the source table on the right. ![](/docs/assets/images/personalise-documents-portant-ai-content-dynamic-proposal-template-step-by-step-guide_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F5yTccefpdNDEnbVYPIWL_2Fpika-1754022797) ## 4. How AI personalisation works AI fields let you write custom prompts that include data from HubSpot. Each field generates content for one specific spot in the document, using tokens like company name, industry, or meeting notes pulled directly from your CRM. The result is a tailored paragraph, set of bullets, or summary in every document, based on real prospect information. ![](/docs/assets/images/personalise-documents-portant-ai-content-dynamic-proposal-template-step-by-step-guide_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F7KCAg2IzEjuNZ3K8cqYA_2Fpika-1754023169) The template uses two prompt patterns. ### a. Personalised paragraphs Generates a tailored paragraph from CRM data and meeting notes. Good for sections like a recap summary, an "About us" intro, or an opening paragraph that should sound like it was written for this prospect. The prompt has four parts: 1. **Company context.** Dynamic fields like company name, size, industry, domain, and revenue. 2. **Meeting notes.** We use Fathom, which writes meeting notes back to HubSpot automatically. 3. **Paragraph to personalise.** The original version of the paragraph for the AI to adapt. 4. **Rules for output.** Output only the personalised paragraph (no preamble), use natural customer-friendly language, and keep the result the same length as the original (within 3 characters) so the layout still works. **Example prompt** ``` PROSPECT DETAILS Company Name: {{Company Name}} Number Of Employees: {{Company Number Of Employees}} Company Domain Name: {{Company Domain Name}} Company Annual Revenue: {{Company Annual Revenue}} Company Description: {{Company Description}} Company Industry: {{Company Industry}} Company Linkedin Bio: {{Company Linkedin Bio}} Company Web Technologies: {{Company Web Technologies}} Here is our previous meeting's notes: {{Meeting Internal Meeting Notes}} THIS IS THE ACTION Use the prospect details and meeting notes to customise the paragraph below. Customisable paragraph: **ADD YOUR PARAGRAPH OF CONTENT HERE** 📝 Formatting Rules: Output only the personalised paragraph above. Use natural, customer-friendly language. VERY IMPORTANT Keep the Customisable paragraph output the same number of characters as the Customisable paragraph above (plus or minus 3 characters) ``` ### b. Smart bullet point selection Picks the most relevant bullet points from a predefined list and rewords each one using the prospect's data. Good for sections like Problems, Solutions, or Next steps. Same four parts: 1. **Company context.** Same structure as above. 2. **Meeting notes.** Captured in HubSpot via Fathom. 3. **Bullet point list.** A predefined list of common items (top challenges, product benefits). 4. **Rules for output.** Select only the three most relevant bullets, personalise each one, and keep each bullet roughly the same length as the original. **Example prompt** ``` THIS IS THE CONTEXT PROSPECT DETAILS Company Name: {{Company Name}} Number Of Employees: {{Company Number Of Employees}} Company Domain Name: {{Company Domain Name}} Company Annual Revenue: {{Company Annual Revenue}} Company Description: {{Company Description}} Company Industry: {{Company Industry}} Company Linkedin Bio: {{Company Linkedin Bio}} Company Web Technologies: {{Company Web Technologies}} Here is our previous meeting's notes: {{Meeting Internal Meeting Notes}} ----------------------------------------------------- THIS IS THE ACTION Using the context above, select the 3 most appropriate bullet points to communicate the customers problem. After you have selected the 3 bullet points personalise them using the context of the company details and meeting notes. BULLET POINTS: **ADD YOUR LIST OF BULLET POINTS HERE** 📝 Formatting Rules: Output ONLY 3 bullet points Do not start bullet points with a dash (-) Do not start bullet points with a number Do not add a blank line between bullet points. Use natural, customer-friendly language. VERY IMPORTANT Keep the bullet points the same number of characters as the corresponding bullet point in the list of BULLET POINTS (plus or minus 3 characters) ``` > **Tip:** Pre-format the bullet-point AI tag in your document with the bullet style you want. Portant keeps the formatting when it inserts the generated content. ## 5. Use your own template Now you've seen how the template works, swap in your own **Google Doc** or **PowerPoint** by updating the file in the workflow. ![](/docs/assets/images/personalise-documents-portant-ai-content-dynamic-proposal-template-step-by-step-guide_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FJZDp15LTquW1p13rhJe5_2Fpika-1754024498) Then adapt the prompts to your content: - Replace the sample paragraphs with your own. - Insert your own challenges and solutions lists, and tweak the prompts to match. - Keep paragraph length close to the original so the AI output fits the layout. ## 6. Add a review step When you're using AI, always add a review step before the document is sent. In Portant, drop a [review block](/docs/manage/automation/review-approve/) after the document block. The workflow will pause there so you (or someone on your team) can read the document, make edits, and approve it. ![](/docs/assets/images/personalise-documents-portant-ai-content-dynamic-proposal-template-step-by-step-guide_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fi7D0fIa5sC46wi2Pv1Ut_2Fpika-1754024660) After the review block, add an email block to send the document or kick off a signature request. ## 7. Trigger the template in HubSpot You can generate proposals in HubSpot manually, or automatically via a HubSpot workflow. ### Manual generation Best when you want to control exactly when each proposal is created. 1. Open the relevant **HubSpot Deal** page. 2. Find the [Portant CRM card](/docs/sources/hubspot/). ![](/docs/assets/images/personalise-documents-portant-ai-content-dynamic-proposal-template-step-by-step-guide_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FpGxtCltV6J6cBUpREGIv_2Fpika-1754354718) 3. Click **Generate Document** and select your Dynamic Proposal Template. 4. Before generating, check that: - A **Company** is associated with the deal. - **Meeting notes** are attached. Fathom meeting summaries work best. Portant will then: - Copy your selected template. - Insert CRM data and AI-generated content into the document. - Save a draft for you to review and approve before sending. ### Automatic generation via HubSpot workflow Best for a hands-off process, where a proposal is drafted right after every discovery call. 1. In HubSpot, create a workflow triggered when: - A **Meeting object** is associated with a Deal (so, after a discovery call), AND - **Internal meeting notes** is known. ![](/docs/assets/images/personalise-documents-portant-ai-content-dynamic-proposal-template-step-by-step-guide_7_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FR49xaNwpFWiboUhcbq21_2Fpika-1754354166) 2. Add a 2 minute delay so all the data has time to land. 3. Add a **Portant action** to the workflow and select the Dynamic Proposal workflow you set up. 4. Set workflow enrolment: - Turn the workflow on. - Enrol all future deals that meet the trigger condition. - Don't enable re-enrolment, otherwise you'll generate multiple proposals for the same deal. ![](/docs/assets/images/personalise-documents-portant-ai-content-dynamic-proposal-template-step-by-step-guide_8_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FgL85Xkp8ImwXr9ENVTGr_2Fpika-1754354113) A personalised proposal will now be drafted and waiting in review for the sales rep right after every discovery call. ================================================================================ # Email Section: Send and sign URL: https://www.portant.co/docs/send/email/ ================================================================================ Once Portant has built your document, the next step is usually to send it. Email is the fastest way to do that. You can send a plain link, attach a PDF, save to drafts in Gmail or Outlook, send from an alias, and track when the recipient opens it. ## In this section 1. **[Share a doc via email](/docs/send/email/share-via-email/)**: the basic flow for sending a document. 2. **[Email tracking](/docs/send/email/tracking/)**: see when a recipient opens the email. 3. **[Email drafts](/docs/send/email/drafts/)**: save to Drafts in Gmail or Outlook for review before sending. 4. **[Send from aliases](/docs/send/email/aliases/)**: use a shared inbox or alias address. 5. **[Send Outlook emails](/docs/send/email/outlook/)**: connect a Microsoft 365 account. 6. **[Customise email content with HTML](/docs/send/email/html/)**: go beyond the default formatting. ## Sending for signature instead If the document needs a signature, use [eSignatures](/docs/send/esignatures/) instead. That flow has its own email step with signing links, and you can [customise the message](/docs/send/esignatures/customise-email/) the same way you would here. ================================================================================ # Email › Share a doc via email Section: Send and sign URL: https://www.portant.co/docs/send/email/share-via-email/ ================================================================================ Send a personalised email from your workflow and attach the document Portant just generated. You can share a Google Doc or Slides link with set permissions, or attach a PDF, Word, or PowerPoint file. ## Add an email block Click the **+** icon below the document block and choose Gmail. ![

Click the '+' button

](/docs/assets/images/getting-started-quickstart_11_64533cabfbd92f4baea09453_Form_20to_20PDF_20_E2_80_93_209.png_11.png) ![

Select the Gmail block

](/docs/assets/images/getting-started-quickstart_12_64533cb7dcff965cee00e2f2_Form_20to_20PDF_20_E2_80_93_2010.png_12.png) > **Note:** You can also send from Microsoft Outlook. See [Send Outlook emails](/docs/send/email/outlook/). In the email block you can fill in the To, CC, and BCC fields. Type addresses directly, or pull them from the source on the right using tags. Add a subject line and message below, and use the formatting options to style the body. ![](/docs/assets/images/getting-started-quickstart_13_64533d4b8cdea03bf9124f40_Form_20to_20PDF_20_E2_80_93_2011.png_13.png) When you're done, click **Save** and close the email block. ## Attach a document from your workflow You can share an output from your workflow on the email. Google Docs and Slides files are sent as a link with the permission level you choose. PDF, Word, and PowerPoint files are sent as a real attachment. To add an attachment, click the button on the right panel: ![](/docs/assets/images/emails-share-a-doc-via-email_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FF75VEoyv3YUcYE6jsSV0_2Fpika-1707698664) Or click the paper clip at the bottom of the email: ![](/docs/assets/images/emails-share-a-doc-via-email_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FzzJg8VWlHcRYLIT7UELD_2Fpika-1707698904) ### Attach a file from Google Drive Pick any file from your Drive. ![](/docs/assets/images/emails-share-a-doc-via-email_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FHFwRDpWWlYgnq7MzieDy_2Fpika-1707699031) ### Attach a file from your workflow Or pick the document Portant generated earlier in the workflow. ![](/docs/assets/images/emails-share-a-doc-via-email_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FksdG2uOXWzba7deEJRMg_2Fpika-1707698776) You can share a workflow file as: * **Google Docs or Slides**: a link to the shared file is added to the email. * **PDF**: a PDF copy is attached. * **Microsoft Word or PowerPoint**: a Word or PowerPoint copy is attached. For more on how the file is built, see [File formats](/docs/manage/file-formats/). ### Set permissions on a Google Doc or Slides link After choosing to share a Google Doc or Slides file, click the menu to set the permission level: ![](/docs/assets/images/emails-share-a-doc-via-email_7_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FZ95MQlpuEqtew12jcZUD_2Fpika-1707699643) * **Viewer**: the recipient can open the file but can't change or share it. * **Commenter**: the recipient can comment and suggest changes, but can't edit or share. * **Editor**: the recipient can edit, accept or reject suggestions, and share with others. ## Remove an attached file Click the **x** button next to the attachment. ![](/docs/assets/images/emails-share-a-doc-via-email_8_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FSH624QMgGZ1ST6XQ46Nw_2Fpika-1707699508) ================================================================================ # Email › Email tracking Section: Send and sign URL: https://www.portant.co/docs/send/email/tracking/ ================================================================================ See when a recipient opens an email or signature request that Portant sent for you. Tracking is a Pro feature, available on the Pro and Teams plans. ## Track an email Add an email block to your workflow. ![](/docs/assets/images/emails-email-tracking_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F8pUATzhbzWamLJT4Ckm9_2Fimage.png_0.png) In this example, we'll use Gmail. ![](/docs/assets/images/emails-email-tracking_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F2CMbCOPUcRxoxipRDLkL_2Fimage.png_1.png) Open the email block. On the right-hand panel, turn on **Email tracking**. ![](/docs/assets/images/emails-email-tracking_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FZXsBm2tRFgzPpQvDRuUY_2Fimage.png_2.png) ![](/docs/assets/images/emails-email-tracking_3_64fa119a11d3245ac82a25e9_AgGRD3zdu_d2U2Lt3kE7LUNLei2vxvqRKIaTeYr_n9HV10q_dE8dsOe) Every time a recipient opens an email from this workflow, the open is recorded on the Outputs page. Hover the eye icon to see when it happened. ![](/docs/assets/images/emails-email-tracking_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FC4RPEJ6Yzh1q3yLlunC9_2Fimage.png_4.png) ## Track a signature request Tracking also works on signature requests. Add a signature request block to your workflow. ![](/docs/assets/images/emails-email-tracking_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FUxxMxex4SYseCTjNxz84_2Fimage.png_5.png) Choose **Request signatures**. ![](/docs/assets/images/emails-email-tracking_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FvXOw7eGen1vLG4TzooLz_2Fimage.png_6.png) Turn on **Email tracking**. ![](/docs/assets/images/emails-email-tracking_7_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FznWDaRASQqS9gCh9TgFB_2Fimage.png_7.png) ![](/docs/assets/images/emails-email-tracking_3_64fa119a11d3245ac82a25e9_AgGRD3zdu_d2U2Lt3kE7LUNLei2vxvqRKIaTeYr_n9HV10q_dE8dsOe) Opens for signature requests show up in the same place on the Outputs page. Hover the eye icon to see when the recipient opened it. ![](/docs/assets/images/emails-email-tracking_8_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FSw5wJIAtCVhkXBjL9wB5_2Fimage.png_8.png) ## Related * [Get started with eSignatures](/docs/send/esignatures/get-started/) * [Customise the signature request email](/docs/send/esignatures/customise-email/) ================================================================================ # Email › Email drafts Section: Send and sign URL: https://www.portant.co/docs/send/email/drafts/ ================================================================================ Save workflow emails to your Drafts folder instead of sending them automatically. Useful when you want to review the content, tweak the wording, or add an extra attachment before the email goes out. ## Save emails as drafts 1. Open your workflow in Portant. 2. Click the **Email block** you want to configure. ![](/docs/assets/images/emails-email-drafts-in-portant-workflows_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F8g04AxUrCKA9GFxIeJ4j_2Funknown.png_0.png) 3. On the right-hand panel, find the toggle labelled **Generate draft for manual sending**. 4. Turn it on. ![](/docs/assets/images/emails-email-drafts-in-portant-workflows_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FCuvSFJB7VzO0Y8E7mCX7_2Funknown.png_1.png) The email block now shows that emails will be saved as drafts instead of sent automatically. ![](/docs/assets/images/emails-email-drafts-in-portant-workflows_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FNtBzEOrwkde5H0kEXK13_2Funknown.png_2.png) ## Review and send a draft After your automation runs, you can review each draft before it goes out. 1. Go to the **Outputs** tab. 2. Find the run with an **Email drafts** button next to it. 3. Click **Email drafts** to open the draft. ![](/docs/assets/images/emails-email-drafts-in-portant-workflows_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fh6PN6BDGQMgJLQ2ixatZ_2Funknown.png_3.png) > **Tip:** You can also jump to the draft from your inbox. Portant sends a notification email when a draft is ready. Click **Open in Portant** to go straight to it. ![](/docs/assets/images/emails-email-drafts-in-portant-workflows_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FkH01O8TFZxTKEGl6d8Uf_2Funknown.png_4.png) Once you're in the Outputs tab: 1. Click on the email subject. ![](/docs/assets/images/emails-email-drafts-in-portant-workflows_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FqKZUHe52NTWYlHdX6qV8_2Funknown.png_5.png) 2. Edit the email content if you need to. 3. Add any extra attachments. 4. When you're happy with it, click **Send**. ![](/docs/assets/images/emails-email-drafts-in-portant-workflows_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FlmP1aPninl6sq8devX2v_2Funknown.png_6.png) Once sent, Portant marks the draft as sent so you can track what's gone out. ![](/docs/assets/images/emails-email-drafts-in-portant-workflows_7_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Ff8cEFVwkPV5ETMCqAZYR_2Funknown.png_7.png) ## Related * [Share a doc via email](/docs/send/email/share-via-email/) * [Customise the signature request email](/docs/send/esignatures/customise-email/) ================================================================================ # Email › Send from aliases Section: Send and sign URL: https://www.portant.co/docs/send/email/aliases/ ================================================================================ By default, Portant sends emails from the address you signed up with. If you'd rather send from a shared inbox, a different domain, or a personal alias, you can connect that address and switch to it inside any email block. You can have up to 99 different addresses set up at once. Email aliases are a Pro feature. See the [pricing page](https://www.portant.co/pricing) for plan details. Examples of addresses you can send from: * A non-Gmail address (Yahoo, Outlook, and so on) * A work, school, or business domain or alias (`youralias@yourschool.edu`, `hello@yourcompany.com`) * Another Gmail address ## 1. Add the alias to your Gmail account The alias has to exist in Gmail first. Google's full guide is here: . The short version: 1. Open [Gmail](https://mail.google.com/) on your computer. 2. In the top right, click **Settings > See all settings**. 3. Click the **Accounts and import** (or **Accounts**) tab. 4. In the **Send mail as** section, click **Add another email address**. 5. Enter the name and address you want to send from. 6. Click **Next Step > Send verification**. 7. For school or work accounts, enter the SMTP server (for example, `smtp.gmail.com` or `smtp.yourschool.edu`) along with the username and password. 8. Click **Add Account**. Then confirm you own the address: 1. Sign in to the account you added. 2. Open the confirmation email from Gmail. 3. Click the verification link. ## 2. Add the alias to Portant Open the Portant [Settings page](https://app.portant.co/settings). At the bottom you'll see the email alias section. ![](/docs/assets/images/emails-send-from-aliases_0_643f98abb2e0a77a8968b3f4_Email_20Alias.png_0.png) > **Tip:** Only the email address has to match the alias you set up in Gmail. The display name in Portant can be different, and you can change the reply-to address inside the Gmail alias settings. Add the name, then the email address, then click **Verify**. Portant sends a test email to confirm everything is wired up. Once it's working, you'll see a verified tag next to the alias. ![](/docs/assets/images/emails-send-from-aliases_1_643f98d3437fd4db791f30f9_Email_20Alias_20_E2_80_93_201.png_1.png) ## 3. Pick the alias on an email block Open any email block and change the **From** address using the dropdown. ![](/docs/assets/images/emails-send-from-aliases_2_643f98edb62fa792d229c51c_Email_20Alias_20_E2_80_93_202.png_2.png) The dropdown also has a button to add another alias, which takes you back to the Settings page. > **Tip:** You can send emails from up to 99 different addresses on one account. ================================================================================ # Email › Send Outlook emails Section: Send and sign URL: https://www.portant.co/docs/send/email/outlook/ ================================================================================ Send your workflow emails from Microsoft Outlook instead of Gmail. The setup is the same as the Gmail email block, with one extra step to connect your Microsoft account. ## Send via Microsoft Outlook If you haven't built a workflow yet, follow [How to create your first workflow](https://www.portant.co/guide-article/how-to-create-your-first-workflow) before you start. Once your source and template blocks are set up, click the **+** icon to add an email block. ![](/docs/assets/images/emails-send-outlook-emails_0_65329bf8faa465c9050f7cf2_6Ozg3GF0-NKNYoGKNvSyRdkzSPNOlrASGhYt_NRBMKvz4m7RVCZNnN8) Choose **Microsoft Outlook**. ![](/docs/assets/images/emails-send-outlook-emails_1_65329bf8ba4968f50ac194ed_i3jnjwfss5RLVHqin_hSUlf4REWp-uEruwix6wPjFKICXHt5UUfbLpT) If your Microsoft account isn't linked yet, Portant will prompt you to connect it. ![](/docs/assets/images/emails-send-outlook-emails_2_65329bf8ba3475833f9db639_ziJIB6tHXuRpKA1LIHoJpq7dyqnrjrbUW47jC3FtyeFyxW7cqqzHUGk) From there, write your email, add tags from the source, attach the files you want to send, and click **Save**. ![](/docs/assets/images/emails-send-outlook-emails_3_65329bf8bb9ecfb8f0692d86_b5sBOcE0AXVfDzdpiinGe8rog56stQoaXGSnyrVRGcMicShHgp4nmGB) ## Related * [Share a doc via email](/docs/send/email/share-via-email/) * [Email drafts](/docs/send/email/drafts/) * [Customise the signature request email](/docs/send/esignatures/customise-email/) ================================================================================ # Email › Customise email content with HTML Section: Send and sign URL: https://www.portant.co/docs/send/email/html/ ================================================================================ Write your workflow emails in HTML when you need more control over layout and styling than the default editor gives you. Useful for branded templates, custom buttons, or any formatting the default editor can't produce. ## Switch to the HTML editor If this is your first workflow, follow the [quickstart](/docs/getting-started/quickstart/) first. Open the email block in your workflow. ![](/docs/assets/images/emails-customize-your-email-content-with-html-editing_0_so5_ZCbTt4iYlPIeVw8gvEyCxeHsctgEPzMi51Kop8JQGIRFi3BWUFsZsahY6GDsm-A1tk3ix7f6BslQ) At the bottom of the email content field, click **Switch to HTML editor**. ![](/docs/assets/images/emails-customize-your-email-content-with-html-editing_1_vSaYJ_UXOpfSaSx6u9y1I7stjU--C1mDIhGOX3zTs8iGc-OMau86NugvM4eUEF3My9nJvURCDvi3WJJ-) If the email already had content in the default editor, you'll see a warning that the existing content will be cleared. Click **Continue** to proceed. ![](/docs/assets/images/emails-customize-your-email-content-with-html-editing_2_HE_7P0JijrDGGwW55hVitx9tvuK7_8Nw95W0DHU3sOwWvdMrtyOhff2o_TgBErCiNFqmSg6o7vnk6u1H) Paste or type your HTML into the content field. ![](/docs/assets/images/emails-customize-your-email-content-with-html-editing_3_XgQY-wh3TgeZH26qjEuwtmlH_AC_Yb9cgjeFOaLdpsaJXVFXh8PmnvharWTzZTnNWT5RF1CETYcJhCHn) ## Preview before saving Click **Display preview** to see how the email will render. ![](/docs/assets/images/emails-customize-your-email-content-with-html-editing_4_W1VI94G5N7rCtIGibWkyUKajWBCYS_Mx98ZDZ4SfE58EohzrSgTIy06Ka2SlMolEhWBgo6m_PdcOcy7d) ![](/docs/assets/images/emails-customize-your-email-content-with-html-editing_5_kGUhjsCFj2SsB0aLA0inDoHoA9Djnyvw3gL1Tr8R5ISil7Fl8EdDYBt-SNk-_o74adEKWpYjbYiDFuex) When it looks right, close the preview with the **X** icon and click **Save**. ![](/docs/assets/images/emails-customize-your-email-content-with-html-editing_6_nnLnbYXryMlN_tLpp1vcS12O9O9W5mLuXY5_z4G3mAE6T_7O-KFUWB_P0H7hipKCQJa_e5bWVBMf14tc) ## Related * [Share a doc via email](/docs/send/email/share-via-email/) * [Customise the signature request email](/docs/send/esignatures/customise-email/) ================================================================================ # eSignatures Section: Send and sign URL: https://www.portant.co/docs/send/esignatures/ ================================================================================ Send documents for signature straight from a Portant workflow, or upload a one-off PDF and send it for signing without setting up a workflow at all. Use eSignatures when you need a recipient to sign something you've sent them: a contract, a quote, an offer letter, an NDA. The signed PDF lands back in your output folder and (if you're connected) on your HubSpot deal or Google Drive folder, with an optional audit trail attached. ## When to use eSignatures eSignatures fit two broad shapes of work: - **From a source.** Pull data from Google Sheets, Google Forms, HubSpot, or another connected source, generate a personalised document, and send it for signature on every new row, response, or stage change. - **One-off.** Upload a finished PDF, drop in signature fields, and send it to one or more signers without setting up a workflow. Both flows produce a legally valid signed PDF, with timestamping, document integrity locking, and an optional audit trail. See [Compliance](/docs/send/compliance/) for the laws we support by country. ## How it works 1. Add a signature request to your workflow (or upload a PDF for a one-off send). 2. Place signature, date, text, checkbox, and initials fields wherever you need them. 3. Add the signer's email (a tag from your source, or typed directly). 4. Customise the request and confirmation emails if you want to. 5. Turn on the workflow. Portant sends the request, collects the signature, and saves the signed copy. ## Next steps - [Get started](/docs/send/esignatures/get-started/): set up your first signature workflow end to end. - [Signature requests](/docs/send/esignatures/requests/): the full walk-through, from picking a source to turning automation on. - [Manual PDF upload](/docs/send/esignatures/manual-pdf/): send a one-off PDF without a workflow. - [Multiple signers](/docs/send/esignatures/multiple-signers/): request signatures from up to four people on the same document. - [Compliance](/docs/send/compliance/): country-by-country legal positioning. ================================================================================ # eSignatures › Get started with eSignatures Section: Send and sign URL: https://www.portant.co/docs/send/esignatures/get-started/ ================================================================================ Set up a Portant workflow that sends a document for signature automatically, every time a new row appears in your source. By the end of this page you'll have a signature request going out from a real source, signed PDFs landing in your output folder, and a confirmation email firing once everyone has signed. [Watch video](https://youtu.be/DH5EC7vHD9Q) This page assumes you've already [created a workflow with a document template](/docs/getting-started/quickstart/). If you want the longer walk-through that includes picking a source and customising the document, see [Signature requests](/docs/send/esignatures/requests/). ## What you'll do 1. Add the signature placeholders to your document 2. Edit the signature request email (optional) 3. Edit the signature confirmation email (optional) 4. Turn the workflow on and test it ## 1. Add the signature placeholders Below the **Output Name** field there's a button to request a signature as part of your workflow. ![](/docs/assets/images/use-cases-esignatures-requests_8_646714df1c34ab560262ec7c_eSign_20Workflow.png_8.png) Click it and three signature settings appear: 1. The **email address** of the recipient. This can be a `{{tag}}` from your source, or a typed email like `james@portant.co`. 2. The **Signature** placeholder, an image you drop into the document where the signature should appear. 3. The **Date** placeholder, an image for the date the document was signed. > **Note:** You can also add Text, Checkbox, Date, and Initials placeholders, and set whether they're mandatory. See [Request info on signing](/docs/send/esignatures/request-info/). ### Add the recipient's email Click the tag button to the right of the email box to pick a field from your source, or type the address directly. ![](/docs/assets/images/use-cases-esignatures-requests_11_646719dd10db4152d5569e1e_eSign_20Workflow_20_E2_80_93_204.png_11.png) > **Note:** If you're using Google Forms, the Respondent email field only works when you've turned on [collect respondent email addresses](https://support.google.com/docs/answer/139706?hl=en#zippy=%2Ccollect-respondents-email-addresses) in the form. Or use a question to collect the email manually. ### Insert the signature placeholder Click **Insert** next to **Signature**. The placeholder is dropped at the end of the document the first time, but you can move it anywhere afterwards. ![](/docs/assets/images/use-cases-esignatures-requests_12_64671a5dc813541f476b6a85_eSign_20Workflow_20_E2_80_93_205.png_12.png) The signature placeholder is a regular image, so resize it to control how big the signature appears. > **Note:** Copy and paste the placeholder image to add the same signature in multiple places. ### Insert the date placeholder Same steps as the signature placeholder. To change the date format, click the format preview next to the date. ![](/docs/assets/images/use-cases-esignatures-requests_13_64671b848ca7fbe39018833a_eSign_20Workflow_20_E2_80_93_206.png_13.png) A modal opens where you can pick the format. Teams plans can also customise the eSigning portal's branding here. ![](/docs/assets/images/use-cases-esignatures-requests_14_64671c5a76d96422ff543e0f_eSign_20Workflow_20_E2_80_93_207.png_14.png) If you need more than one person to sign the same document, see [Multiple signers](/docs/send/esignatures/multiple-signers/) (Pro and Teams plans). > **Note:** On free accounts, signed PDFs include a Portant watermark in the footer. To remove it, [upgrade to Pro or Teams](https://app.portant.co/settings/billing). ## 2. Edit the signature request email (optional) Once your placeholders are in, head back to the workflow overview by clicking the lightning bolt icon at the top of the page. The signature request block sits below your document block. ![](/docs/assets/images/use-cases-esignatures-requests_16_64673d4622dd1cc63b36a52d_eSign_20Workflow_20_E2_80_93_208.png_16.png) Click into the block to edit the **Subject** and **Message** fields. The **To** field is locked to the email address you set on the document. You can add `{{tags}}` to the subject and message to personalise them. ![](/docs/assets/images/use-cases-esignatures-requests_17_64673df685409ac9dad1d48d_eSign_20Workflow_20_E2_80_93_209.png_17.png) Click **Save** when you're done. > **Note:** On the right side, below the source table, you can edit the signed date format and customise the confirmation page URL and the eSign portal branding (colour and logo). For more on the request email (full HTML editing, attachments), see [Customise the signature request email](/docs/send/esignatures/customise-email/). ## 3. Edit the signature confirmation email (optional) The confirmation email goes out once everyone has signed. Open the workflow overview again and click the email block at the end of the workflow. ![](/docs/assets/images/use-cases-esignatures-requests_18_6467447bd8c2c33c46668dd1_eSign_20Workflow_20_E2_80_93_2010.png_18.png) Set **To**, **CC**, **BCC**, **Subject**, and the **Message** body. Use tags from the source table to personalise. Save when done. ![](/docs/assets/images/use-cases-esignatures-requests_19_646745279fbe73875698c255_eSign_20Workflow_20_E2_80_93_2011.png_19.png) ## 4. Turn on the workflow and test Click **Automate** in the top right and toggle **Auto-create** on. Every new row, response, or trigger event from your source will now run the workflow and send a signature request. ![](/docs/assets/images/use-cases-esignatures-requests_20_64674630d58fafe12f6a2492_eSign_20Workflow_20_E2_80_93_2012.png_20.png) > **Note:** **Process Existing Data** lets you re-run the workflow over old rows or responses. Pick **Custom range** from the dropdown to process a slice instead of everything. Submit a test response. The signer receives an email like this: ![](/docs/assets/images/use-cases-esignatures-requests_21_646748f71c34ab56029c0394_eSign_20Workflow_20_E2_80_93_2013.png_21.png) When they click **Review and Sign**, they land on the signing page: ![](/docs/assets/images/esignatures-getting-started_12_6467492418811631af2071ca_eSign_20Workflow_20_E2_80_93_2014.png_12.png) Then they sign: ![](/docs/assets/images/use-cases-esignatures-requests_23_64674940925815fd29e009c5_eSign_20Workflow_20_E2_80_93_2015.png_23.png) Once signed, a copy of the signed PDF is saved to your Google Drive folder, the confirmation email is sent, and a link to the signed document appears on the [Outputs](/docs/manage/outputs/) page in Portant. > **Note:** By default, signature requests expire after 30 days. You can change or disable expiry in the template block. See [Signature link expiry](/docs/send/esignatures/expiry/). ![](/docs/assets/images/use-cases-esignatures-requests_25_646749d44bb53c2cdca3ce98_eSign_20Workflow_20_E2_80_93_2016.png_25.png) That's your first signature workflow live. ## Related - [Signature requests](/docs/send/esignatures/requests/): the full walk-through, including picking a source and customising the template. - [Multiple signers](/docs/send/esignatures/multiple-signers/): request signatures from up to four people. - [Customise the signature request email](/docs/send/esignatures/customise-email/): full HTML editing, attachments, and branding. - [Audit trail](/docs/send/esignatures/audit/): append a signing audit to the signed PDF. - [Compliance](/docs/send/compliance/): country-by-country legal positioning. ================================================================================ # eSignatures › eSignature requests Section: Send and sign URL: https://www.portant.co/docs/send/esignatures/requests/ ================================================================================ Set up a workflow that sends a document for signature on every new row in your source. This is the long-form walk-through: picking a source, customising the document with tags from the source, adding signature placeholders, editing the request and confirmation emails, and turning automation on. [Watch video](https://www.youtube.com/watch?v=IFifI6EOPa0) If you've already got a workflow with a document template and just want the signature steps, see [Get started with eSignatures](/docs/send/esignatures/get-started/). ## What you'll do 1. Create a new workflow 2. Pick a source 3. Customise the document with data from the source 4. Add the signature placeholders 5. Edit the signature request email (optional) 6. Edit the signature confirmation email (optional) 7. Turn the workflow on and test it ## 1. Create a new workflow Click **+ Add Workflow** in the top right of the Portant app. ![](/docs/assets/images/getting-started-quickstart_0_6425053d71f3384e5ed1c4b5_Form_20to_20PDF.png_0.png) ## 2. Pick a source Choose a source or a document template to start from. We'll use a Google Form here, but any source type works the same way. ![](/docs/assets/images/getting-started-quickstart_1_6425064c71f33844e1d1cd1b_Form_20to_20PDF_20_E2_80_93_201.png_1.png) Pick a Google Form from your Drive, or let Portant create a new one. ![](/docs/assets/images/getting-started-quickstart_2_6425065628c3f842d8da3fb9_Form_20to_20PDF_20_E2_80_93_202.png_2.png) Once it's connected, Portant shows the form responses. If there aren't any yet, this section will be empty. From here you can open the form to edit questions or copy the public link. > **Note:** Click **✎ Change selected file** under the form name to swap in a different Google Form. ## 3. Customise the document Click **Connect** on the right side to add a template document. ![](/docs/assets/images/getting-started-quickstart_3_64250723596eeca6672bfd2d_Form_20to_20PDF_20_E2_80_93_203.png_3.png) Pick Google Docs or Slides, then either create a new file or select an existing one. ![](/docs/assets/images/getting-started-quickstart_4_642508098054c58c38775f18_Form_20to_20PDF_20_E2_80_93_204.png_4.png) Portant opens the document so you can drop in source fields. ![](/docs/assets/images/use-cases-esignatures-requests_5_646715792cd92087f6dc03bf_eSign_20Workflow_20_E2_80_93_202.png_5.png) The top right of the page shows your source table, with every question or column from the source. To insert a value into the document, click **Copy** next to the field and paste the `{{tag}}` where you want it. ![](/docs/assets/images/getting-started-quickstart_8_62c5aabc080621d0ef34b7b0_Portant_20Workflow_20-_20Copy_20Tag_20-_20Form.gif_8.png) You can also [add image tags](/docs/features/tags/images/), and customise tag formatting by clicking the row. When the document is ready, set the output file name by adding tags to the **Output Name** field. ![](/docs/assets/images/use-cases-esignatures-requests_7_6467158fd8c2c33c4631c70b_eSign_20Workflow_20_E2_80_93_201.png_7.png) ## 4. Add the signature placeholders Below the **Output Name** field, click the button to request a signature. ![](/docs/assets/images/use-cases-esignatures-requests_8_646714df1c34ab560262ec7c_eSign_20Workflow.png_8.png) Three signature settings appear: 1. The **email address** of the recipient. A `{{tag}}` from your source, or a typed email like `james@portant.co`. 2. The **Signature** placeholder. An image you drop into the document. 3. The **Date** placeholder. An image for the date the document was signed. > **Note:** You can also add Text Field, Checkbox, Date, and Initials placeholders, and choose whether each is mandatory. ![](/docs/assets/images/use-cases-esignatures-requests_9_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FBMEFyT8Ql50eShYgOcYq_2Fimage.png_9.png) ![](/docs/assets/images/use-cases-esignatures-requests_10_64671673a425fbd1667b7be3_eSign_20Workflow_20_E2_80_93_203.png_10.png) ### Add the recipient's email Click the tag button to the right of the email box to pick a field from your source, or type the address directly. ![](/docs/assets/images/use-cases-esignatures-requests_11_646719dd10db4152d5569e1e_eSign_20Workflow_20_E2_80_93_204.png_11.png) > **Note:** If you're using Google Forms, the Respondent email field only works when you've turned on [collect respondent email addresses](https://support.google.com/docs/answer/139706?hl=en#zippy=%2Ccollect-respondents-email-addresses) in the form. Or use a question to collect the email manually. ### Insert the signature placeholder Click **Insert** next to **Signature**. The placeholder is dropped at the end of the document the first time, but you can move it anywhere afterwards. ![](/docs/assets/images/use-cases-esignatures-requests_12_64671a5dc813541f476b6a85_eSign_20Workflow_20_E2_80_93_205.png_12.png) The placeholder is a regular image, so resize it to control how big the signature appears. > **Note:** Copy and paste the placeholder image to add the same signature in multiple places. ### Insert the date placeholder Same steps as the signature placeholder. To change the date format, click the format preview next to the date. ![](/docs/assets/images/use-cases-esignatures-requests_13_64671b848ca7fbe39018833a_eSign_20Workflow_20_E2_80_93_206.png_13.png) A modal opens where you can pick the format. Teams plans can also customise the eSigning portal's branding here. ![](/docs/assets/images/use-cases-esignatures-requests_14_64671c5a76d96422ff543e0f_eSign_20Workflow_20_E2_80_93_207.png_14.png) > **Note:** Signature and date placeholders work the same way in Google Slides templates. ![](/docs/assets/images/use-cases-esignatures-requests_15_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FqFwUnc2cX4uRHe7wSolv_2Fimage.png_15.png) If you need more than one person to sign, see [Multiple signers](/docs/send/esignatures/multiple-signers/) (Pro and Teams plans). [Watch video](https://www.youtube.com/watch?v=DH5EC7vHD9Q) > **Note:** On free accounts, signed PDFs include a Portant watermark in the footer. To remove it, [upgrade to Pro or Teams](https://app.portant.co/settings/billing). ## 5. Edit the signature request email (optional) Once your placeholders are in, head back to the workflow overview by clicking the lightning bolt icon at the top of the page. The signature request block sits below your document block. ![](/docs/assets/images/use-cases-esignatures-requests_16_64673d4622dd1cc63b36a52d_eSign_20Workflow_20_E2_80_93_208.png_16.png) Click into the block to edit the **Subject** and **Message** fields. The **To** field is locked to the email address you set on the document. You can add `{{tags}}` to personalise. ![](/docs/assets/images/use-cases-esignatures-requests_17_64673df685409ac9dad1d48d_eSign_20Workflow_20_E2_80_93_209.png_17.png) Click **Save** when you're done. > **Note:** On the right side, below the source table, you can edit the signed date format and customise the confirmation page URL and the eSign portal branding (colour and logo). For HTML editing, attachments, and branding, see [Customise the signature request email](/docs/send/esignatures/customise-email/). ## 6. Edit the signature confirmation email (optional) The confirmation email goes out once everyone has signed. Open the workflow overview and click the email block at the end of the workflow. ![](/docs/assets/images/use-cases-esignatures-requests_18_6467447bd8c2c33c46668dd1_eSign_20Workflow_20_E2_80_93_2010.png_18.png) Set **To**, **CC**, **BCC**, **Subject**, and the **Message** body. Use tags from the source table to personalise. ![](/docs/assets/images/use-cases-esignatures-requests_19_646745279fbe73875698c255_eSign_20Workflow_20_E2_80_93_2011.png_19.png) Save when done. ## 7. Turn on the workflow and test Click **Automate** in the top right and toggle **Auto-create** on. Every new form response will now run the workflow and send a signature request. ![](/docs/assets/images/use-cases-esignatures-requests_20_64674630d58fafe12f6a2492_eSign_20Workflow_20_E2_80_93_2012.png_20.png) > **Note:** **Process Existing Data** lets you re-run the workflow over old responses. Pick **Custom range** from the dropdown to process a slice instead of everything. Submit a test response. The signer receives an email like this: ![](/docs/assets/images/use-cases-esignatures-requests_21_646748f71c34ab56029c0394_eSign_20Workflow_20_E2_80_93_2013.png_21.png) When they click **Review and Sign**, they land on the signing page. > **Note:** Signers can pick their preferred language at this step. ![](/docs/assets/images/use-cases-esignatures-requests_22_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FluruHGFlwFI6qrGmsrhY_2Fimage.png_22.png) After choosing a language, they sign the document. ![](/docs/assets/images/use-cases-esignatures-requests_23_64674940925815fd29e009c5_eSign_20Workflow_20_E2_80_93_2015.png_23.png) Once signed, a copy of the signed PDF is saved to your Google Drive folder, the confirmation email is sent, and a link to the signed document appears on the [Outputs](/docs/manage/outputs/) page in Portant. > **Note:** Signature requests expire after 30 days by default. You can set a custom period (30, 60, 90 days) or disable expiry in the template block. See [Signature link expiry](/docs/send/esignatures/expiry/). ![](/docs/assets/images/use-cases-esignatures-requests_24_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FUKe83KJZsPzKmSDTq1tP_2Fimage.png_24.png) ![](/docs/assets/images/use-cases-esignatures-requests_25_646749d44bb53c2cdca3ce98_eSign_20Workflow_20_E2_80_93_2016.png_25.png) That's your signature workflow live. ## Related - [Multiple signers](/docs/send/esignatures/multiple-signers/): request signatures from up to four people. - [Customise the signature request email](/docs/send/esignatures/customise-email/): full HTML editing, attachments, and branding. - [Preview links](/docs/send/esignatures/preview-links/): share a view-only link before sending for signature. - [Audit trail](/docs/send/esignatures/audit/): append a signing audit to the signed PDF. - [Compliance](/docs/send/compliance/): country-by-country legal positioning. ================================================================================ # eSignatures › Request signatures without a source Section: Send and sign URL: https://www.portant.co/docs/send/esignatures/no-source/ ================================================================================ Send a document for signature without setting up a source. This is the simplest way to get a signable document out the door when the content doesn't change between recipients. If you do need to personalise the document with data (different names, prices, line items), use a workflow with a source instead. See [Signature requests](/docs/send/esignatures/requests/). ## What you'll do 1. Create a workflow from a template 2. Customise the template 3. Add signature and other fillable fields 4. Publish the document and share the signing link 5. See the signed document in Outputs ## 1. Create a workflow from a template In the Portant app, click **+ Add Workflow**. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FQfK7FWtScL1i2dSzvJLn_2Fimage.png_0.png) Pick a template type. Google Docs and Google Slides both work. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fivs8rqwFxMiZYS73iHTl_2Fimage.png_1.png) Pick an existing template from your Google Drive, or create one from scratch. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FaBLrcb6AEpCXsHHP1aE1_2Fimage.png_2.png) Give the workflow a title, colour, and icon so it's easy to find later. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F5WQz7kva8xsRdURY3wIq_2Fimage.png_3.png) ## 2. Customise the template Use the formatting tools to set up the document the way you want it. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_4_AD_4nXdPJ1WvZFyw_Sx06K7mBQ1TUvxuT9sUzux3Vh6JHHKD7UHl491NjZDBd4L-OmeJ1hwPRk_xFnCS) When you're done, click **Configure** to add a signature request. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_5_AD_4nXeVsaP918sjlsahIeG7bYv5XyaQXniUZuO1kkWLyLgDHPoGOvgiYz9gNDD02Hm_hPdIT6F6vdXY) ## 3. Add signature and fillable fields The right side of the screen shows the placeholders you can drop into the document: signature, text field, checkbox, date field, initials. Click **Insert** to place each one wherever you need it. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_6_AD_4nXcjDwR6SbS-hPdGOKgn71rM0i8ucm2spgKKq0-IWYTJTgyt4NZgKd4E4JG4AWEoEyMcbny0j24v) > **Note:** You can also use plain text boxes if you want recipients to fill in extra information that isn't tied to a placeholder. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_7_AD_4nXd0_rULvhwV6mAR11l9WseOtPcQmIcRVlOgjF9ul2HyQvVCVeDmPiL58T6UWyIiO6zdHUy9ggr_) ## 4. Publish and share the signing link Once the document is ready, click **Publish**. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_8_AD_4nXcbTo_aDsXkbkg_G8L9-_kO0TDEP0Jl2OKfRXGoYb3SVVmQJnyuu2pG_N2y8-3sC-LnyCTm2h2x) Pick **Publish Latest Version**. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_9_AD_4nXeMPW32wJT33jBvTOy6tVDnXoO0I-tVak99-tAT-T7Z_AO1LQRIw_IEw8ze2xM9soA9h1DBPFNf) You can then **Copy to Clipboard** to grab the signing link, or **Open in a New Tab** to review the document yourself first. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_10_AD_4nXcBkyN4NXe-VT29hxTExTi9Nqi_9zGprkNTdzsRyCgEItvbx4JG8J5q-tyjbyCfdcaMNHeFd3ge) When the recipient opens the link, they click **Sign Now** to start signing. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_11_AD_4nXeZK-_FmaoJXsNzttcNmyncC4IAl04tlqgRw_NUAzd-h8nX2Yiz1q3GWcsOQ78HyHZj0EJIr9I6) After signing, they tick the box confirming "I understand that this is a legal representation of my signature", then click **Insert** to apply it. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_12_AD_4nXf2qqoHJZVePvGFivEcwsDcTUYR4Nh-Ij1d5XrhPUO28xBUbOZSQuww-8ZBLpRRVuOw_RVmuSod) To get a copy of the signed document, the signer enters their email and clicks **Submit**. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_13_AD_4nXe9dq7CqEjXHVixm8RTh39LzvTxaA8ec_YLv4xHqtvRJj9bU_yVy6o0zrfCZlUgD82WNgKFO0TZ) A confirmation page appears once the document is submitted. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_14_AD_4nXcpQLTEqD-6q3bEYn808Kc3pUCHJPTCEpsxWJF3Qi9NnlKykj6ufn6PG1tJTU20ZO1Zw38ZZMd3) ## 5. See the signed document in Outputs The signed document is saved to the Outputs tab in Portant and to your output folder. ![](/docs/assets/images/esignatures-request-signatures-without-a-source_15_AD_4nXdCOH82uGmy2zxczOYqXHlikgbQs8QpuQ3L1mEztE4zFmN3RNADSDgua64gaU51VTEEIWDXNHXg) ## Related - [Manual PDF upload](/docs/send/esignatures/manual-pdf/): upload a finished PDF and send it for signature. - [Multiple signers](/docs/send/esignatures/multiple-signers/): request signatures from up to four people. - [Request info on signing](/docs/send/esignatures/request-info/): collect text, initials, or checkboxes alongside the signature. - [Compliance](/docs/send/compliance/): country-by-country legal positioning. ================================================================================ # eSignatures › Manual PDF upload signature request Section: Send and sign URL: https://www.portant.co/docs/send/esignatures/manual-pdf/ ================================================================================ Upload a finished PDF, drop in the signature and other fields you need, and send it for signing. Use this when you've already got the document ready and don't need to generate it from a template. ## What you'll do 1. Upload your PDF 2. Add recipient names and email addresses 3. Add signature and fillable fields 4. Add the email message, optionally enable the audit trail, and send 5. Track sent and signed documents ## 1. Upload your PDF Go to your [Portant Signatures tab](https://app.portant.co/signatures) and create a new signable document. ![](/docs/assets/images/esignatures-manual-signature-request-pdf-upload_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FvycWUFYGnfih3hnMCjw0_2Funknown.png_0.png) Click **Upload** and pick the PDF file you want to send. ![](/docs/assets/images/esignatures-manual-signature-request-pdf-upload_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FeG9MH98jhdtpQiIOfLWh_2Funknown.png_1.png) Once uploaded, the PDF appears on screen and you can move on. ## 2. Add recipient names and email addresses Enter the name and email of the person who needs to sign, then click **Next**. ![](/docs/assets/images/esignatures-manual-signature-request-pdf-upload_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FcVRmuXfD8mR8a9owvJqH_2Funknown.png_2.png) > **Note:** Need more than one signer? Click **+ Add Recipient** to add up to four people. ![](/docs/assets/images/esignatures-manual-signature-request-pdf-upload_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fw5M0FSfP1uMgX5Z5EksL_2Funknown.png_3.png) ## 3. Add signature and fillable fields Drag fields onto the PDF: signature, text, date, checkbox, and so on. Resize and reposition each one as needed. Click **Next** when the layout is right. ![](/docs/assets/images/esignatures-manual-signature-request-pdf-upload_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FNQdF7JQEP8loAZDdfSgS_2Funknown.png_4.png) ## 4. Add the email message and send Set the subject line and message your recipients will receive. If you want an audit trail in the final signed PDF, toggle that option on. See [Audit trail](/docs/send/esignatures/audit/) for what gets recorded. Click **Send**. ![](/docs/assets/images/esignatures-manual-signature-request-pdf-upload_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F0DMWyn0tfGEN2jHmqcHY_2Funknown.png_5.png) You'll see an **All Done** confirmation when the document has been sent. Click **Close** to return to the dashboard. ![](/docs/assets/images/esignatures-manual-signature-request-pdf-upload_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FVvgBojWqPPQzfH3FXmen_2Funknown.png_6.png) ## 5. Track sent and signed documents The Portant Signatures dashboard shows the status of every document you've sent. ![](/docs/assets/images/esignatures-manual-signature-request-pdf-upload_7_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FvCdWQsA2fubakXlpR4yJ_2Funknown.png_7.png) Click the document name in the table to open the signed PDF once it's complete. ![](/docs/assets/images/esignatures-manual-signature-request-pdf-upload_8_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FHlzVCPwkNihtoMGc3fSV_2Funknown.png_8.png) ## Related - [Request signatures without a source](/docs/send/esignatures/no-source/): same idea, but starting from a Google Docs or Slides template instead of a PDF. - [Multiple signers](/docs/send/esignatures/multiple-signers/): request signatures from up to four people. - [Audit trail](/docs/send/esignatures/audit/): append a signing audit to the signed PDF. - [Compliance](/docs/send/compliance/): country-by-country legal positioning. ================================================================================ # eSignatures › Request multiple signatures Section: Send and sign URL: https://www.portant.co/docs/send/esignatures/multiple-signers/ ================================================================================ Request signatures from up to four people on the same document, in a defined order. Useful for sales contracts, partnership agreements, NDAs, and employment contracts where every party needs to sign before the document is final. Multiple signers is available on the Pro and Teams plans. ## What you'll do 1. Add a second (and third, and fourth) signer 2. Understand the order signers receive the document If you haven't sent a signature request before, start with [Get started with eSignatures](/docs/send/esignatures/get-started/). ## 1. Add another signer Once you've added the first signer's signature placeholder(s), click **Add Another Recipient**. The next signer's placeholders show up in a different colour so you can tell them apart. ![](/docs/assets/images/esignatures-request-multiple-signatures_0_65244d4314db9bb3c78372f4_pika-1696877245159-1x.png_0.png) Enter the second signer's email address. > **Note:** This can be a `{{tag}}` from your source, or a typed email. ![](/docs/assets/images/esignatures-request-multiple-signatures_1_65244d9cc15872df40bd56bf_pika-1696877184194-1x.png_1.png) Add the signature and date placeholders for that signer, and place them wherever you need them in the document. > **Note:** New placeholders always land at the end of the document, but you can move them anywhere afterwards. > **Note:** You can also add Text Field and Checkbox placeholders for each signer. See [Request info on signing](/docs/send/esignatures/request-info/). ![](/docs/assets/images/esignatures-request-multiple-signatures_2_65244dbc010b33d74310bd47_pika-1696877496151-1x.png_2.png) Repeat the **Add Another Recipient** step to add a third or fourth signer. > **Note:** You can have up to four signers per document. > **Note:** You can set a custom signature link expiry (30, 60, 90 days) or disable expiry in the template block. See [Signature link expiry](/docs/send/esignatures/expiry/). ![](/docs/assets/images/use-cases-esignatures-requests_24_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FUKe83KJZsPzKmSDTq1tP_2Fimage.png_24.png) ## 2. Signing order Signers receive the document in the order they appear in the workflow. Once the first signer signs, the document is sent to the second, and so on. When everyone has signed, the confirmation email goes out (you can send it to all signers, or just to the people you choose). It includes the signed PDF as an attachment, plus any other attachments you've added, and supports `{{tags}}` from your source. A copy is also saved to your Google Drive folder. ![](/docs/assets/images/esignatures-request-multiple-signatures_4_65244dd4827976125584156e_pika-1696877668061-1x.png_4.png) ## Related - [Customise the signature request email](/docs/send/esignatures/customise-email/) - [Audit trail](/docs/send/esignatures/audit/) - [Compliance](/docs/send/compliance/) ================================================================================ # eSignatures › Customise the request email Section: Send and sign URL: https://www.portant.co/docs/send/esignatures/customise-email/ ================================================================================ Edit the email that goes to your signers, with full HTML control and the option to attach extra files. This is a Pro and Teams feature. ## What you'll do 1. Customise the signature request email 2. Add extra attachments to the request If you haven't sent a signature request before, start with [Get started with eSignatures](/docs/send/esignatures/get-started/). ## 1. Customise the signature request email After you've added your signature placeholders to the document, click **Customise Signature Request**. > **Note:** This works the same way whether you're using date, text field, or checkbox placeholders. ![](/docs/assets/images/esignatures-customise-signature-request-email_0_651b1647c832fac33c83c581_pika-1696273928243-1x.png_0.png) > **Note:** This example sends from Gmail. You can also send from Outlook. See [Send Outlook emails](/docs/send/email/outlook/). ![](/docs/assets/images/esignatures-customise-signature-request-email_1_6515b705043a2f8678cbb186_Screenshot_202023-09-28_20at_2014.23.52.png_1.png) The default option lets you customise a section of the email's content. ![](/docs/assets/images/esignatures-customise-signature-request-email_2_6511dce798f1a07f3fae5086_U0o4LNjSL16j8wHBULDaNzxtA7u9aZnYFG1B0EIlZBKLiHxkITwVuZY) For full control, switch to **Custom Formatting**: ![](/docs/assets/images/esignatures-customise-signature-request-email_3_6511dce6bc019717e27cd25c_oRTcY-qPY1kq2h9Xn2II98iqsp1gFiD_mMGpPULjVaXPT9ENR2EtRIh) You can edit every part of the email, and add text before and after the **Review and Sign** button. Tags from your source table are available to personalise the content. ![](/docs/assets/images/esignatures-customise-signature-request-email_4_6511dce7a7e04f9936ee0ad5_DP6hlyVOVReHz0Yws6Q-nBwbWZariOpc3gP4dsJkC1Zdsf4nYiFUvDs) > **Note:** You can also remove the security warning at the end of the email, but we don't recommend it. > **Note:** Signature requests expire after 30 days by default. You can change or disable this in the template block. See [Signature link expiry](/docs/send/esignatures/expiry/). ## 2. Add extra attachments Click the attachment icon at the bottom of the email block, then **Select from Google Drive**, and add as many attachments as you need. ![](/docs/assets/images/esignatures-customise-signature-request-email_5_6511dce648165c12cff5fe73_LCL6IpnV7HmMhBK_QjDuGjGm3z7vvigccicOrsMa6Zfs6cLCxpw7Cf1) ![](/docs/assets/images/esignatures-customise-signature-request-email_6_6511dce682c8e3fded7f2349_xkSDB7_R0E8Yt3HPxuOuk08jvP5gW4B_fIrToolIKN_A2UipNg2c9pL) Save the email and finish setting up your workflow. ## Related - [Get started with eSignatures](/docs/send/esignatures/get-started/) - [Send Outlook emails](/docs/send/email/outlook/) - [Multiple signers](/docs/send/esignatures/multiple-signers/) ================================================================================ # eSignatures › Preview links Section: Send and sign URL: https://www.portant.co/docs/send/esignatures/preview-links/ ================================================================================ Share a view-only link to your signature document with people who need to review it but aren't signing. Stakeholders, legal teams, and additional client contacts can see exactly what the signer sees, while signing stays restricted to the authorised email addresses. Portant generates a preview link for every signature request. The link lets anyone view the document. It does not let anyone sign unless their email is on the request. ## What you'll learn 1. What a preview link is and where to find it 2. How to enable preview links on a workflow 3. How signing security works when sharing the preview link ## What is the preview link? The preview link shows the document exactly as it will appear to the signer. The link: - Is saved on the [Outputs](/docs/manage/outputs/) tab of your workflow. - Is saved on the **Signing Link** property of the associated HubSpot object (when you're using the HubSpot integration). - Lets you (and anyone you share it with) review the full document before or after sending it for signature. ![](/docs/assets/images/esignatures-preview-links-for-signature-requests_0_0pxiTzFoPBosUEtzC83TGdvtXbElWRAjs2LVnRaErF4h2C8sTY-b20IHb6RxoXV6F8hJZQB4eZejTFb5) The preview link is for viewing only. Even if a signer opens it, they cannot complete the signature directly from the preview link. ## How to enable the preview link Open the signature request block in your workflow. On the right hand side, find the **Generate Preview** toggle and turn it on. ![](/docs/assets/images/esignatures-create-preview-links-for-signature-requests_1_-t6o2Dzvjm7-41ndf3PLEAkC1Zf_aSNwo0KR_o5dFvXMAyt50SMHdMRIW5YyokaIERGwRRzgyVjTegae) Once the workflow runs, the preview link appears on the [Outputs](/docs/manage/outputs/) tab next to the signed document, and on the HubSpot deal's **Signing Link** property if you're connected to HubSpot. If you haven't set up a signature request workflow yet, see [Get started with eSignatures](/docs/send/esignatures/get-started/). ## How signing security works Only the email addresses you've added to the signature request can sign the document. When an authorised signer opens the preview link and clicks to sign: 1. They request a secure signing link from inside the preview. 2. Portant emails the signing link to the authorised email address on the request. 3. The signer opens that emailed link to complete the signature. ![](/docs/assets/images/esignatures-preview-links-for-signature-requests_1_p3hUt6ulPDHs98UjONcNoHICGgAM5bU-R6It9TY8kkOQrL3AH-8t-1pu75M5aDhi9wOF2VYN13WhEOIf) ![](/docs/assets/images/esignatures-preview-links-for-signature-requests_2_uYvJML35h80TKr6SzfX7kNecwmXIfHznqmpLCHsd_IiyOUAxmN5IuQA3SeXSzX4RdrCawsuRk0C2V1Jm) This means: - The document can be reviewed and shared internally. - Only authorised recipients can complete the signature. - Signatures stay tied to verified email addresses. The preview clearly shows where signatures and other fillable fields are required, so reviewers know what they're looking at. ## Related - [Get started with eSignatures](/docs/send/esignatures/get-started/) - [Customise the signature request email](/docs/send/esignatures/customise-email/) - [Audit trail](/docs/send/esignatures/audit/) - [Compliance](/docs/send/compliance/) ================================================================================ # eSignatures › Resend signature requests Section: Send and sign URL: https://www.portant.co/docs/send/esignatures/resend/ ================================================================================ If a recipient hasn't signed yet, resend the signature request from the Outputs page in a couple of clicks. No need to re-run the workflow. ## What you'll do 1. Resend a signature request from the Outputs page ## Resend a signature request Open the [Outputs](/docs/manage/outputs/) page for your workflow. ![](/docs/assets/images/esignatures-resend-signature-requests_0_fUGU3RGYXFZd9XswGhZ6tjVsP1THucIJdSfS131cGWH8OPCX9T6BaR_P9FdYD3TuQTNXBjBe25y9kz8E) Click the dropdown on the left of an output row to see all the items created by that automation run. ![](/docs/assets/images/esignatures-resend-signature-requests_1_8W68m71okHiVjy3ax377MKPWGJ1poEuw8vHfc5m9eP-QPwgw8fxAbYLXia4mRpHea5kwY4BhAq2hkIFw) Click **Resend**. The button only shows up for documents that haven't been signed yet. ![](/docs/assets/images/esignatures-resend-signature-requests_2_5gfAs_HsC4y_zCoyvlH_GUWP9pyeXGgljCnC_amHykNpNGZ9H5d_PRT_oe4tTkLG6rEPsCTnv8z7ZNgX) The recipient gets a fresh signature request email. > **Note:** Signature requests expire after 30 days by default. You can set a custom expiry period or disable expiry in the template block. See [Signature link expiry](/docs/send/esignatures/expiry/). ## Related - [Cancel a signature request](/docs/send/esignatures/cancel/) - [Signature link expiry](/docs/send/esignatures/expiry/) - [Outputs](/docs/manage/outputs/) ================================================================================ # eSignatures › Cancel a signature request Section: Send and sign URL: https://www.portant.co/docs/send/esignatures/cancel/ ================================================================================ Pull back a signature request you've already sent. Once cancelled, the document moves back to the review stage in your workflow. Cancelling a signature request is only available for workflows that include a Review block. ## What you'll do 1. Cancel a signature request from the Outputs page ## Cancel a signature request Open the [Outputs](/docs/manage/outputs/) page for your workflow. ![](/docs/assets/images/esignatures-cancel-signature_0_65294b3e4c51a9b6ff660284_ZqkFzMPCvDsWR3yfrbPkD64f4UM1jH5RRIpFlDCD_eQ6NzdgPElIT4R) Find the document line you want to cancel. Click the three-dot menu on the right and choose **Cancel Signature Request**. ![](/docs/assets/images/esignatures-cancel-signature_1_65294b3ff2c9b283b5ece1eb_cG-2TkcwFkupmwOiXMS1Z0-_DMfwPys9R5mreQfr7iBP345BLVmPIQQ) Once cancelled, the item returns to the review stage so you can edit, regenerate, or remove it. ![](/docs/assets/images/esignatures-cancel-signature_2_65294b3ebe82dee6178a5825_vojNFlzjaTlY-I1OLCx6-WqbPecREbeOhIYZ_7iRWF9p8K2hQJOPvcP) ## Related - [Resend a signature request](/docs/send/esignatures/resend/) - [Review and approve documents](/docs/manage/automation/review-approve/) - [Outputs](/docs/manage/outputs/) ================================================================================ # eSignatures › Signature link expiry Section: Send and sign URL: https://www.portant.co/docs/send/esignatures/expiry/ ================================================================================ Set how long a signing link stays active. After it expires, recipients can no longer sign through that link. Useful for quotes that are only valid for a limited time, contracts with shifting commercial terms, or anywhere you want tighter control over unsigned documents. ## What you'll learn 1. What signature link expiry does 2. When to use it 3. How to enable it 4. What happens once a link expires ## What signature link expiry does When you send a document for signature, the signing link stays active by default for 30 days. Expiry lets you shorten or extend that window, or turn the expiry off entirely. Once the expiry date passes, the link becomes inactive and the recipient can't sign through it. This is useful when: - A quote is only valid for a set number of days. - Pricing or commercial terms might change. - You want tighter legal control over unsigned documents. - You want to create urgency in the sales process. ## How to enable signature link expiry
![](/docs/assets/images/esignatures-signature-link-expiry_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fmma9UDtmNcFf9wfeVkMu_2FScreenshot_2020)
To enable expiry on a signature request: 1. Open your workflow. 2. Click the signature request block. 3. In the configuration panel on the right, find the **Expire Signature Request** toggle and turn it on. 4. Set the number of days the link should stay active. Every time the workflow runs from now on, the signing link will expire after that many days. ## How it works after sending After the document is sent: - The signing link works as normal until the expiry date. - Recipients can review and sign during that window. - Once the expiry date passes, the link is inactive. If someone tries to sign after expiry, they see a message explaining the link has expired. ## What happens after expiry Expiry only deactivates the signing link. The document and its records are not deleted. If a document expires unsigned, you can: - Generate and send a new signature request from the workflow. - Update the document and resend. - Adjust the expiry settings and re-run the workflow. See [Resend a signature request](/docs/send/esignatures/resend/) and [Cancel a signature request](/docs/send/esignatures/cancel/) for the related actions. ## Related - [Resend a signature request](/docs/send/esignatures/resend/) - [Cancel a signature request](/docs/send/esignatures/cancel/) - [Get started with eSignatures](/docs/send/esignatures/get-started/) ================================================================================ # eSignatures › Add an audit trail Section: Send and sign URL: https://www.portant.co/docs/send/esignatures/audit/ ================================================================================ Append a signing audit to the end of every signed PDF. The audit records details about the document and a timeline of when and where each recipient viewed and signed it. ## What you'll do 1. Enable the audit trail on a signature request 2. Confirm the audit trail is active 3. Understand what's recorded ## 1. Add a signature request to your workflow You'll need a signature request set up first. See [Get started with eSignatures](/docs/send/esignatures/get-started/). ## 2. Open the signature request block In your workflow, click the signature request block. ![](/docs/assets/images/esignatures-add-audit-to-esignatures_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FjWPspb2ohi0QAzKjymrc_2Fpika-1711014554) ## 3. Enable the audit trail On the right hand side of the block, find the **Audit trail** toggle. It's off by default. Turn it on to start including the audit trail in signed PDFs from this workflow. ![](/docs/assets/images/esignatures-add-audit-to-esignatures_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FiHnQbYwkGBiP3eN3ekxe_2Fpika-1711013864) ## 4. Confirm the audit trail is active Run a test signature request through the workflow to see the audit trail on a real signed PDF. ## What the audit trail looks like The audit trail is added as an extra section at the end of the signed document. It includes details about the document and a timeline of when and where each recipient viewed and signed it. ![](/docs/assets/images/esignatures-add-audit-to-esignatures_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FEvtz8EJC2ELZwYewIMu0_2FScreenshot_2020) ## Why use an audit trail - **Security.** Records who signed and when. - **Compliance.** Several jurisdictions expect a verifiable record of the signing process. See [Compliance](/docs/send/compliance/) for the laws we support by country. - **Dispute resolution.** Gives every party a shared record if questions come up later. ## Related - [Compliance](/docs/send/compliance/) - [Get started with eSignatures](/docs/send/esignatures/get-started/) ================================================================================ # eSignatures › Request info on signing Section: Send and sign URL: https://www.portant.co/docs/send/esignatures/request-info/ ================================================================================ Collect more than a signature. Add initials, text fields, and checkboxes so signers can fill in extra details (an email, a mailing address, a confirmation tick) at the same time they sign. [Watch video](https://www.youtube.com/watch?v=tlHyrSDDqiA) ## What you'll do 1. Add initials, text, and checkbox fields to your document 2. Place them where you want 3. Optionally make them mandatory If you haven't sent a signature request before, start with [Get started with eSignatures](/docs/send/esignatures/get-started/). ## Add the fields Once you've created the workflow and added the standard signature and date placeholders to your template, you'll see three more options in the placeholders panel. ![](/docs/assets/images/esignatures-request-info-on-signing_0_AD_4nXfYKOiOYn2RFuxeGx8rqtyNel0wbxMgHoM5UGf3C3451irCZUUmjvvTUMqjH8rHqo8qf_-e1FMR) - **Initials.** The signer enters their initials. Useful in contracts where initials are required on each page. - **Text.** The signer enters text, like an email address, a mailing address, or any other detail you want to capture. - **Checkbox.** The signer ticks a box. Often used to confirm agreement with terms and conditions. > **Note:** If you need initials on every page, insert the Initials field once per page. To add a field, click **Insert** next to the field type in the placeholders table on the right. ![](/docs/assets/images/esignatures-request-info-on-signing_1_AD_4nXfKB1xMru464L4X5KcndMPJy5ELf1nDhOK78iBPYHygXj0P50kS_MHuBG0OgPHilG_zxW-H_P1F) Place the field anywhere in the template. ![](/docs/assets/images/esignatures-request-info-on-signing_2_AD_4nXepFVzGcxXe88PKq7JQikoesi2ALy45DvDBZ9Eyd2XCU-zx3z9dFcgJ7QntecIL5xMzdMAZkcv9) Once the layout looks right, the workflow is ready to run. ![](/docs/assets/images/esignatures-request-info-on-signing_3_AD_4nXfxC-NlOiNkHGOAd1xwPUd7OjySRvV6ttATKwlwTnQvepAOAfZrXlP_Lanvc9vpK-lmNyxU_sx8) ## What signers see Recipients fill in each field while signing. ![](/docs/assets/images/esignatures-request-info-on-signing_4_AD_4nXfAZausWXo4w0_HIsnxZK7dpnCRjDQp-ffxQPzcpxDeM8DbCgvL57SetzaBTM9bDzXHMCBoe7ss) When they're done, they click **I Agree** to submit the document. ![](/docs/assets/images/esignatures-request-info-on-signing_5_AD_4nXeapiEVsd2gPwtwAOLNEq4dpPyeALPolj5iGyd_momDqdsq6-ZEC3MKDJ3O4YOSiS3GD2VJTMPw) The signed and filled-out document looks like this: ![](/docs/assets/images/esignatures-request-info-on-signing_6_AD_4nXeo983wx5h6WOZKq0kkHEcmzYODtRPFGDdtFyXvlsO0ouKMIlwtolSScKxSSasX9WIht_qVtgff) ## Make fields mandatory To require all fields to be filled in before the signer can submit, open the Template block in your workflow and toggle **Require all fields to be completed** on. ![](/docs/assets/images/esignatures-request-info-on-signing_7_AD_4nXfHtF8KhbBzlxqHnmeohFFCpteULlzTKS5Ja2A-giXqPK0DXUGvkqZR-YDYqxNasvCiiUmgEpUd) ## Related - [Get started with eSignatures](/docs/send/esignatures/get-started/) - [Multiple signers](/docs/send/esignatures/multiple-signers/) - [Customise the signature request email](/docs/send/esignatures/customise-email/) ================================================================================ # eSignature compliance › eSigning laws overview Section: Send and sign URL: https://www.portant.co/docs/send/compliance/ ================================================================================ Where Portant's eSignatures stand under the major electronic signature laws around the world. Each page below covers what the law requires, the conditions it applies under, and the Portant features that match each requirement. ## By country - [United States: E-SIGN Act and UETA](/docs/send/compliance/united-states/) - [Canada: PIPEDA and Electronic Transactions Act](/docs/send/compliance/canada/) - [European Union: eIDAS Regulation](/docs/send/compliance/eu/) - [United Kingdom: eIDAS Regulation and Electronic Communications Act 2000](/docs/send/compliance/uk/) - [Australia: Electronic Transactions Act](/docs/send/compliance/australia/) - [New Zealand: Electronic Transactions Act 2002](/docs/send/compliance/new-zealand/) - [Israel: Electronic Signature Law 2001](/docs/send/compliance/israel/) ## Related - [Audit trail](/docs/send/esignatures/audit/): append a signing audit to every signed PDF. - [Get started with eSignatures](/docs/send/esignatures/get-started/): set up your first signature workflow. ================================================================================ # eSignature compliance › United States (E-SIGN Act and UETA) Section: Send and sign URL: https://www.portant.co/docs/send/compliance/united-states/ ================================================================================ **Is Portant compliant: Yes.** Portant's eSignatures meet the requirements of the United States E-SIGN Act and UETA, the two laws that put electronic signatures on the same legal footing as handwritten ones. This page summarises both laws, when they apply, and the Portant features that line up with each compliance requirement. ## Overview of the E-SIGN Act and UETA **E-SIGN Act** (Electronic Signatures in Global and National Commerce Act) - **Location:** United States, federal law. - **Applies to:** All states, except those that have adopted UETA with minimal variations (Illinois and New York). - **Key point:** Validates the legal standing of electronic signatures for commerce transactions. **UETA** (Uniform Electronic Transactions Act) - **Location:** Adopted in 47 US states, the District of Columbia, Puerto Rico, and the US Virgin Islands. - **Applies to:** Domestic transactions involving electronic records and signatures. - **Key point:** Provides a uniform approach to electronic transactions within each adopting state. ## When and where the laws apply The E-SIGN Act and UETA apply when: - **The transaction would traditionally need a written agreement.** Sales, leases, employment agreements, and other business transactions all qualify. - **The transaction is in the United States.** UETA covers nearly every state, but specific state laws can add unique requirements on top. - **All parties consent to electronic signatures.** Both laws require explicit or implicit agreement from everyone involved. ## Compliance requirements and how Portant meets them | Compliance requirement | Description | Portant's compliance features | |------------------------|-------------|-------------------------------| | **User consent** | All parties must consent to electronic signatures. | Portant prompts users to confirm consent before proceeding. | | **Document integrity** | Signed documents must be tamper-proof. | Documents are locked once signed so they cannot be altered. | | **Audit trails** | Detailed logs serve as proof of signing actions. | Portant records each stage of the signing process, with timestamps. | | **Time stamping** | Each signature needs a verifiable time and date. | Every signed document receives a verifiable timestamp. | | **Data protection** | Data handling must align with security and privacy laws. | Portant uses industry-standard encryption and secure data storage. | | **Role-based access control** | Document access and management must be controlled. | Viewing and signing permissions are restricted to authorised users. | ## Practical considerations A few things to keep in mind when sending US-bound signature requests through Portant: 1. **Confirm consent.** Make sure all parties clearly agree to receive and sign documents electronically. Portant's interface includes consent prompts to support this. 2. **Lock signed documents.** Portant's document integrity feature seals signed documents so they cannot be modified after signing. 3. **Keep evidence of the transaction.** Audit logs and timestamps are useful evidence in any future dispute. Portant keeps a record of every action in the signing process. See [Audit trail](/docs/send/esignatures/audit/) for how to enable it on a workflow. 4. **Check state-specific requirements.** Although the E-SIGN Act and UETA are widely accepted, some states layer on additional requirements. Check whether anything extra applies in your state. 5. **Use the right document types.** Certain documents (wills, court orders, some family law documents) may still need a physical signature. ## Conclusion Portant's eSignatures meet the compliance standards of the E-SIGN Act and UETA, with consent, document integrity, audit trails, timestamping, and role-based access built in. Signatures created in Portant are legally enforceable, secure, and valid in nearly all business and personal transactions in the United States. If you have questions about compliance or want guidance on a specific use case, [get in touch](/docs/help/ask-for-help/). ================================================================================ # eSignature compliance › Canada (PIPEDA and ETA) Section: Send and sign URL: https://www.portant.co/docs/send/compliance/canada/ ================================================================================ **Is Portant compliant: Yes.** Portant's eSignatures meet the requirements of Canada's Personal Information Protection and Electronic Documents Act (PIPEDA) and the federal and provincial Electronic Transactions Acts (ETAs). Together these laws make electronic signatures legally recognised, enforceable, and secure across Canada. ## Overview of PIPEDA and the Electronic Transactions Acts PIPEDA and the ETAs set the standards for electronic signatures, electronic records, and the protection of personal data. **PIPEDA** (Personal Information Protection and Electronic Documents Act) - **Location:** Nationwide. Covers private-sector organisations that collect, use, or disclose personal information in commercial activities. - **Key point:** Confirms that electronic signatures are valid and that personal data tied to electronic transactions must be handled securely. **Electronic Transactions Acts (ETAs)** - **Location:** Varies by province and federal jurisdiction. Each province has adapted its own version. - **Key point:** Establishes electronic signatures and records as legally equivalent to paper records. ## When and where these laws apply - **Type of transactions:** Most commercial transactions that traditionally need a written agreement, including contracts, financial transactions, and other business documents. - **Jurisdictions:** PIPEDA applies federally. ETAs cover both federal and provincial jurisdictions. Provinces like Ontario, British Columbia, and Alberta have their own privacy laws that operate alongside PIPEDA. - **Consent:** All parties must consent to conducting the transaction electronically and to using electronic signatures. ## Compliance requirements and how Portant meets them | Compliance requirement | Description | Portant's compliance features | |------------------------|-------------|-------------------------------| | **User consent** | Parties must agree to electronic transactions and signatures. | Portant prompts users to confirm consent before signing. | | **Document integrity** | Documents must remain secure and unaltered after signing. | Signed documents are locked and cannot be edited. | | **Audit trails** | Records of the signing process serve as proof of validity. | Portant keeps logs of each action in the signing process. | | **Time stamping** | Verifiable timestamps are required for legal authenticity. | Every signed document is timestamped. | | **Data protection** | Personal data must be protected and handled lawfully under PIPEDA. | Portant uses encryption and secure storage. | | **Role-based access control** | Access must be limited to authorised individuals only. | Document access and management are restricted to designated users. | ## Practical considerations 1. **Get clear consent.** Canadian law requires all parties to agree to use electronic means. Portant's consent prompts help confirm each user's agreement. 2. **Keep documents tamper-proof.** Portant locks signed documents so they cannot be altered, preserving authenticity. 3. **Maintain accurate audit trails.** See [Audit trail](/docs/send/esignatures/audit/) for how to enable a full signing audit on a workflow. 4. **Check provincial variations.** Each province has slightly different requirements under its own Electronic Transactions Act. If your transactions fall under stricter provincial laws, check those first. 5. **Watch for exceptions.** Some documents (wills, powers of attorney, some family law documents) may still need a handwritten signature. Verify whether your document type is in scope. ## Conclusion Portant's eSignatures comply with PIPEDA and Canada's provincial Electronic Transactions Acts. With consent, document security, audit trails, and data protection built in, signatures created through Portant are legally valid, secure, and enforceable across Canada. If you have questions about compliance, [get in touch](/docs/help/ask-for-help/). ================================================================================ # eSignature compliance › EU (eIDAS regulation) Section: Send and sign URL: https://www.portant.co/docs/send/compliance/eu/ ================================================================================ **Is Portant compliant: Yes.** Portant's eSignatures meet the requirements of the EU's eIDAS Regulation (Electronic Identification, Authentication and Trust Services) at the Simple Electronic Signature (SES) level, with several Advanced Electronic Signature (AES) features also supported. This page covers when eIDAS applies, the three signature levels, and how Portant lines up. ## Overview of the eIDAS Regulation The eIDAS Regulation (EU Regulation No. 910/2014) provides the framework for secure electronic identification and trust services across all EU member states. It sets the legal standards for electronic signatures, electronic seals, and other trust services so that electronic transactions can move freely within the EU. - **Location:** Applies to all European Union member states. - **Purpose:** Gives electronic signatures the same legal recognition as handwritten signatures when they meet the right criteria. - **Key components:** Categorises electronic signatures into three levels: Simple Electronic Signature (SES), Advanced Electronic Signature (AES), and Qualified Electronic Signature (QES). ## When and where eIDAS applies - **Type of transactions:** Most commercial, governmental, and personal transactions that traditionally need a written signature, including contracts, agreements, and acknowledgments. - **Jurisdictions:** All EU member states. Electronic signatures that meet eIDAS criteria are legally binding across the EU. - **Consent:** All parties must agree to use electronic signatures. ## Compliance requirements and how Portant meets them | Compliance requirement | Description | Portant's compliance features | |------------------------|-------------|-------------------------------| | **User consent** | Parties must consent to use electronic signatures. | Portant prompts users to confirm consent before signing. | | **Document integrity** | Documents must remain secure and unaltered after signing. | Signed documents are locked and cannot be modified. | | **Audit trails** | Records of the signing process provide evidence of validity. | Portant maintains logs of every stage in the signing process, with timestamps. | | **Time stamping** | Verifiable timestamps support legal authenticity. | Every signed document is timestamped. | | **Data protection** | Data handling must align with EU GDPR. | Portant uses encryption and secure storage to comply with GDPR. | | **Role-based access control** | Access must be limited to authorised individuals. | Viewing, signing, and management permissions are restricted to designated users. | ## eIDAS signature levels Under eIDAS, electronic signatures fall into three levels of assurance. Portant fully supports SES and includes several features compatible with AES, covering most everyday business use cases. | Signature level | Description | Portant's compliance | |-----------------|-------------|----------------------| | **Simple Electronic Signature (SES)** | Basic level, suitable for most business transactions. | **Compliant.** Portant provides SES functionality with consent, integrity, and audit trails. | | **Advanced Electronic Signature (AES)** | Higher security level. Requires strict identification and control criteria to uniquely identify the signer. | **Partial compliance.** Portant supports audit trails, integrity verification, and timestamping, but does not include biometric verification or advanced signer identification, which are needed for full AES compliance. | | **Qualified Electronic Signature (QES)** | Highest level. Legally equivalent to a handwritten signature in court. Requires a qualified certificate from a trust service provider. | **Not compliant.** Portant does not currently provide QES, which requires certificates from a qualified trust service provider. | **Note:** Portant's eSignatures primarily sit at the SES level, which covers most transactions. For higher-assurance use cases that require AES or QES, you may need additional verification methods or an external qualified provider. ## Practical considerations 1. **Get clear consent.** All parties must agree to use electronic means. Portant's interface includes consent prompts to support this. 2. **Lock signed documents.** Portant's document integrity feature seals signed documents to preserve their authenticity. 3. **Keep comprehensive audit trails.** See [Audit trail](/docs/send/esignatures/audit/) for how to enable a full signing audit on a workflow. 4. **Pick the right signature level.** SES suits most transactions and is fully supported. AES is partially supported. QES requires an external qualified trust service provider. 5. **Watch for exceptions.** Certain legal documents (wills, property transfers, notarised documents) may still need a handwritten signature. ## Conclusion Portant's eSignatures meet the EU's eIDAS Regulation at the SES level, with partial support for AES. That covers the legal requirements for most business transactions across the EU. For high-assurance transactions that require AES or QES, additional verification or an external qualified provider may be necessary. If you have questions about compliance, [get in touch](/docs/help/ask-for-help/). ================================================================================ # eSignature compliance › UK (eIDAS and ECA 2000) Section: Send and sign URL: https://www.portant.co/docs/send/compliance/uk/ ================================================================================ **Is Portant compliant: Yes.** Portant's eSignatures meet the requirements of the UK's retained eIDAS Regulation and the Electronic Communications Act 2000 at the Simple Electronic Signature (SES) level, with several Advanced Electronic Signature (AES) features also supported. Together these laws confirm the legal validity of electronic signatures in the UK. ## Overview of UK electronic signature law **eIDAS Regulation** (EU Regulation No. 910/2014, retained in UK law) - **Location:** UK and European Union (retained into UK law after Brexit). - **Key point:** Sets three levels of electronic signatures (Simple, Advanced, Qualified) that ensure legal recognition and security for electronic transactions. **Electronic Communications Act 2000** - **Location:** United Kingdom. - **Key point:** Recognises electronic signatures as legally valid where there is intent to authenticate, supporting the enforceability of electronic agreements. ## When and where these laws apply - **Type of transactions:** Most commercial, personal, and governmental transactions that traditionally need a written signature, including contracts, agreements, and acknowledgments. - **Jurisdictions:** eIDAS was retained in UK law post-Brexit and applies alongside the Electronic Communications Act 2000. - **Consent:** All parties must agree to use electronic signatures. ## Compliance requirements and how Portant meets them | Compliance requirement | Description | Portant's compliance features | |------------------------|-------------|-------------------------------| | **User consent** | Parties must agree to electronic transactions and signatures. | Portant prompts users to confirm consent before signing. | | **Document integrity** | Documents must remain unaltered after signing. | Signed documents are locked and cannot be modified. | | **Audit trails** | Logs of the signing process serve as proof of authenticity. | Portant maintains detailed logs of each action during signing. | | **Time stamping** | Verifiable time and date are required for legal authenticity. | Every signed document is timestamped. | | **Data protection** | Personal data must be protected under UK GDPR. | Portant uses encryption and secure storage. | | **Role-based access control** | Controls who can access, sign, and manage documents. | Document access and management are restricted to authorised users. | ## eIDAS signature levels eIDAS categorises electronic signatures into three levels: Simple Electronic Signature (SES), Advanced Electronic Signature (AES), and Qualified Electronic Signature (QES). Portant fully supports SES and includes several features compatible with AES, covering most everyday business use cases. | Signature level | Description | Portant's compliance | |-----------------|-------------|----------------------| | **Simple Electronic Signature (SES)** | Basic level, suitable for most business transactions. | **Compliant.** Portant provides SES functionality with consent, integrity, and audit trails. | | **Advanced Electronic Signature (AES)** | Higher security level. Requires strict identification and control criteria to uniquely identify the signer. | **Partial compliance.** Portant supports audit trails, integrity verification, and timestamping, but does not include biometric verification or advanced signer identification. | | **Qualified Electronic Signature (QES)** | Highest level. Legally equivalent to a handwritten signature in court. Requires a qualified certificate from a trust service provider. | **Not compliant.** Portant does not currently provide QES, which requires certificates from a qualified trust service provider. | **Note:** SES covers most business transactions in the UK. AES or QES may be needed for high-assurance transactions that require unique signer identification. For full AES or QES compliance, you may need to add external verification or a qualified trust provider. ## Practical considerations 1. **Confirm user consent.** Portant's consent prompt confirms each user's intention to sign electronically. 2. **Keep documents secure.** Portant's document integrity feature locks the signed document to prevent modifications. 3. **Maintain comprehensive audit trails.** See [Audit trail](/docs/send/esignatures/audit/) for how to enable a full signing audit on a workflow. 4. **Choose the right signature level.** SES suits most transactions and is fully supported. AES is partially supported. QES requires an external qualified trust service provider. 5. **Watch for exclusions.** Certain legal documents (wills, deeds, property transfers) may still need a handwritten signature. ## Conclusion Portant's eSignatures support the UK's retained eIDAS Regulation and the Electronic Communications Act 2000, providing legally valid signatures for a broad range of transactions. Consent, document security, audit trails, timestamping, and role-based access are all built in. If you have questions about compliance, [get in touch](/docs/help/ask-for-help/). ================================================================================ # eSignature compliance › Australia (Electronic Transactions Act) Section: Send and sign URL: https://www.portant.co/docs/send/compliance/australia/ ================================================================================ **Is Portant compliant: Yes.** Portant's eSignatures meet the requirements of the Australian Electronic Transactions Act (ETA), the law that puts electronic documents and signatures on the same legal footing as paper-based ones. The ETA applies at both the federal level (Electronic Transactions Act 1999) and at state and territory levels. ## Overview of the Electronic Transactions Act - **Location:** Australia-wide, with federal and state-specific adaptations. - **Purpose:** Confirms that electronic records and signatures are legally recognised in the same way as handwritten signatures and paper documents. ## When and where the ETA applies The ETA applies to a broad range of transactions, provided all parties consent to use electronic means. - **Type of transactions:** Most business, commercial, and personal transactions where documents would traditionally need a written signature, including contracts, agreements, and acknowledgments. - **Jurisdictions:** The federal ETA covers Commonwealth government agencies. Each state and territory has its own ETA covering electronic transactions in that jurisdiction. - **Consent:** All parties must agree to conduct the transaction electronically, either explicitly or implicitly. ## Compliance requirements and how Portant meets them | Compliance requirement | Description | Portant's compliance features | |------------------------|-------------|-------------------------------| | **User consent** | Parties must agree to the use of electronic means. | Portant prompts users to confirm consent before signing. | | **Document integrity** | Documents must remain unaltered after signing. | Signed documents are locked and cannot be modified. | | **Audit trails** | Records of the signing process serve as proof. | Portant logs each stage of the signing process, with timestamps. | | **Time stamping** | A verifiable time and date should accompany each signature. | Every signature is timestamped. | | **Data protection** | Data must be securely stored and handled to protect personal information. | Portant uses encryption and secure storage. | | **Role-based access control** | Limits who can access, sign, and manage documents. | Document access is restricted to authorised users. | ## Practical considerations 1. **Get user consent.** All parties must agree to sign electronically. Portant's interface prompts for consent. 2. **Keep documents secure.** Portant's document integrity feature locks signed documents to prevent post-signature modifications. 3. **Keep audit trails for the record.** See [Audit trail](/docs/send/esignatures/audit/) for how to enable a full signing audit on a workflow. 4. **Check state and territory variations.** The ETA is a federal law, but states and territories may have unique requirements. Highly regulated transactions might need a closer look at the local variation. 5. **Watch for exceptions.** Some legal documents (wills, powers of attorney, documents that need a notary) may still require handwritten signatures. ## Conclusion Portant's eSignatures meet the Australian ETA's requirements through consent, document integrity, audit trails, timestamping, data protection, and role-based access. Signatures created in Portant are legally enforceable across Australia for a wide range of transactions. If you have questions about compliance, [get in touch](/docs/help/ask-for-help/). ================================================================================ # eSignature compliance › New Zealand (ETA 2002) Section: Send and sign URL: https://www.portant.co/docs/send/compliance/new-zealand/ ================================================================================ **Is Portant compliant: Yes.** Portant's eSignatures meet the requirements of New Zealand's Electronic Transactions Act 2002 (ETA), the law that puts electronic signatures and records on the same legal footing as their paper equivalents. ## Overview of the Electronic Transactions Act 2002 - **Location:** New Zealand. - **Purpose:** Confirms that electronic signatures and records are legally equivalent to handwritten signatures and paper documents when they meet the requirements set out in the Act. - **Scope:** Most types of contracts, agreements, and transactions, both business and personal. Some document types are excluded. ## When and where the ETA applies - **Type of transactions:** Commercial, personal, and governmental transactions where documents traditionally need a written signature, including contracts, acknowledgments, and approvals. - **Jurisdictions:** Applies to transactions in New Zealand. - **Consent:** All parties must agree to conduct the transaction electronically and to use electronic signatures. ## Compliance requirements and how Portant meets them | Compliance requirement | Description | Portant's compliance features | |------------------------|-------------|-------------------------------| | **User consent** | All parties must agree to use electronic signatures. | Portant prompts users to confirm consent before signing. | | **Document integrity** | Signed documents must remain unaltered after signature. | Signed documents are locked and cannot be modified. | | **Audit trails** | Records of the signing process provide evidence of authenticity. | Portant maintains detailed logs of each step in signing, with timestamps. | | **Time stamping** | A verifiable date and time enhance legal authenticity. | Every signed document is timestamped. | | **Data protection** | Personal data must be securely managed and stored. | Portant uses encryption and secure storage. | | **Role-based access control** | Document access is limited to authorised individuals. | Viewing, signing, and management permissions are restricted to designated users. | ## Practical considerations 1. **Confirm consent from all parties.** Each party must agree to use electronic signatures. Portant's consent prompts confirm each user's intent to sign electronically. 2. **Keep documents secure.** Portant's document integrity feature locks signed documents to maintain their authenticity. 3. **Keep comprehensive audit trails.** See [Audit trail](/docs/send/esignatures/audit/) for how to enable a full signing audit on a workflow. 4. **Watch for document exceptions.** Some documents (wills, property transactions, powers of attorney) may still need handwritten signatures. 5. **Maintain data protection.** Personal data tied to electronic signatures must be handled securely. Portant uses encryption and secure storage to support this. ## Levels of assurance The ETA does not categorise electronic signatures into formal levels in the way the EU's eIDAS Regulation does. Portant's eSignatures provide assurance features comparable to a basic electronic signature, with several features that suit higher-assurance requirements when paired with extra verification. ## Conclusion Portant's eSignatures comply with New Zealand's Electronic Transactions Act 2002 through user consent, document integrity, audit trails, timestamping, and secure data protection. Signatures created in Portant are legally enforceable for a wide range of business transactions in New Zealand. If you have questions about compliance, [get in touch](/docs/help/ask-for-help/). ================================================================================ # eSignature compliance › Israel (Electronic Signature Law 2001) Section: Send and sign URL: https://www.portant.co/docs/send/compliance/israel/ ================================================================================ Portant's eSignatures meet the requirements of Israel's Electronic Signature Law 2001 at the Basic Electronic Signature level, with several features compatible with Secure Electronic Signatures. Portant also adheres to Israel's Protection of Privacy Law 1981 when handling personal data tied to electronic transactions. ## Overview of Israel's Electronic Signature Law The Electronic Signature Law 2001 sets the legal framework for electronic signatures in Israel. It defines three types of signature based on the level of assurance: 1. **Basic Electronic Signature.** Any digital means of signing a document. 2. **Secure Electronic Signature.** A digital signature that ensures authenticity, integrity, and signer identification. 3. **Certified Electronic Signature.** A secure electronic signature backed by a certificate from a recognised certification authority. ## When and where the law applies - **Type of transactions:** Most commercial, governmental, and personal transactions where traditional written signatures are required, including contracts, agreements, and official forms. - **Consent:** All parties must agree to use electronic signatures. - **Exceptions:** Certain documents (wills, real estate transactions, some legal agreements) may still require handwritten signatures. ## Compliance requirements and how Portant meets them | Compliance requirement | Description | Portant's compliance features | |------------------------|-------------|-------------------------------| | **User consent** | All parties must agree to use electronic signatures. | Portant prompts users to confirm consent before signing. | | **Document integrity** | Signed documents must not be altered after signing. | Signed documents are locked and cannot be modified. | | **Signer identification** | The signature must be linked to the signer. | Audit trails and metadata track signer information and actions throughout the signing process. | | **Time stamping** | A verifiable date and time of signing supports legal authenticity. | Every signed document is timestamped. | | **Data protection** | Personal data must be handled securely under the Protection of Privacy Law. | Portant uses encryption and secure storage to protect personal data. | ## Compliance with signature types | Signature type | Description | Portant's compliance | |----------------|-------------|----------------------| | **Basic Electronic Signature** | A digital representation of a signature suitable for general business transactions. | **Compliant.** Portant provides fully compliant Basic Electronic Signature capabilities. | | **Secure Electronic Signature** | Ensures authenticity, integrity, and identification using advanced security features. | **Partial compliance.** Portant supports document integrity, audit trails, and timestamps, but does not include biometric verification or cryptographic tools required for full Secure Electronic Signature compliance. | | **Certified Electronic Signature** | A secure electronic signature backed by a certification authority, legally equivalent to a handwritten signature in court. | **Not compliant.** Portant does not currently offer certified signatures backed by a recognised certification authority. | ## Data protection and privacy Portant adheres to data protection requirements under the Protection of Privacy Law 1981: - **Data security.** Portant uses encryption and secure servers to protect user data during the signing process. - **Access control.** Role-based access ensures that only authorised individuals can view, sign, and manage documents. - **Retention.** Signed documents and related data are stored securely and accessible only to authorised users. ## Practical considerations 1. **Get user consent.** Make sure every party agrees to conduct the transaction electronically. Portant's consent prompts support this. 2. **Pick the right signature type.** Use Portant's Basic Electronic Signature (or its Secure-compatible features) for general transactions. Certified Electronic Signatures require an external certification authority. 3. **Keep documents tamper-proof.** Portant locks signed documents so they cannot be modified after signing. 4. **Handle sensitive data carefully.** Comply with the Protection of Privacy Law by storing and managing personal information securely. 5. **Watch for exclusions.** Some transactions (wills, real estate contracts) may fall outside the scope of electronic signatures and still need handwritten signatures. ## Conclusion Portant's eSignatures comply with Israel's Electronic Signature Law 2001 at the Basic Electronic Signature level, with features compatible with Secure Electronic Signatures. The platform also adheres to data protection standards under the Protection of Privacy Law 1981. If you have questions about compliance, [get in touch](/docs/help/ask-for-help/). ================================================================================ # Payments Section: Send and sign URL: https://www.portant.co/docs/send/payments/ ================================================================================ Drop a payment link into any document Portant generates, so the recipient can pay an invoice, accept a quote, or pay a deposit on a contract without leaving the page. ## In this section 1. **[Add online payment links](/docs/send/payments/payment-links/)**: connect Stripe and add payment links to documents and emails. 2. **[Add Stripe payment links to the eSign portal](/docs/send/payments/stripe/)**: collect payment as part of the signing flow. ## Where payments fit in * [Invoices use case](/docs/use-cases/invoices/): automated invoicing with a paying customer at the other end. * [Quotes use case](/docs/use-cases/quotes/): pair payment links with eSignatures to collect a deposit on acceptance. * [eSignatures](/docs/send/esignatures/): when a signed document is also a paid one. ================================================================================ # Payments › Add online payment links Section: Send and sign URL: https://www.portant.co/docs/send/payments/payment-links/ ================================================================================ Connect Stripe to your workflow and add a payment link or button to any document or email Portant generates. Each output gets its own unique link, so the amount, currency, and description can change per row. [Watch the video](https://www.youtube.com/watch?v=DVhsk4LPeFY) ## Connect your Stripe account On the right side of any document or email block, you'll see the section to accept payments via Stripe. Click **Add**. ![](/docs/assets/images/personalise-documents-add-online-payment-links_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FjBL7lgMBqDZW6wN3TObL_2Fpika-1720625384) Click **Connect**. ![](/docs/assets/images/personalise-documents-add-online-payment-links_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FNbxtwfHSa5KRYyOKJStH_2Fpika-1720626279) Sign in to your Stripe account, or create a new one. ![](/docs/assets/images/personalise-documents-add-online-payment-links_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FxFw0GbOITfoknBpl4HgJ_2Fpika-1720626304) Once Stripe is set up, click **Refresh** to sync the connection. ![](/docs/assets/images/personalise-documents-add-online-payment-links_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FJVgrwj31WXl5IrRY1UkY_2Fpika-1720626904) You can now add payment links from this Stripe account to any of your workflows. > **Note:** On a Teams account, you can mark a Stripe account as the one used for shared Team workflows. Only Team Editors can change this. ## Customise your payment link Set the currency, amount, and description for the payment. These can be static values, or you can use `{{tags}}` from your source so each output has its own amount and description. ![](/docs/assets/images/personalise-documents-add-online-payment-links_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FmRm45fxB6ak5p6wNyAFg_2Fpika-1720627141) Once the details are set, you can insert the link or button into your document. Expand the row to preview the Stripe payment button. ![](/docs/assets/images/personalise-documents-add-online-payment-links_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FRMx2MZb2r6muFZOnm2q7_2Fpika-1720627295) The button is inserted as an image, so you can crop it to hide the payment-method logos under the button if you want a cleaner look. ![](/docs/assets/images/personalise-documents-add-online-payment-links_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FCXh76YZX6hU2Nk6Bbykw_2FScreenshot_2020) > **Note:** When you insert the payment button, it's added at the end of your document. Move it where you want it after. You can also change the link display text. Expand the row: ![](/docs/assets/images/personalise-documents-add-online-payment-links_7_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FclvIqQeJ0aMDsgBdbH2W_2Fpika-1720627349) Now the link can read something like `Pay online` instead of the raw URL. ## What the recipient sees When the document is generated, Portant creates a payment link unique to that output. When the recipient clicks the link, they go to a Stripe checkout page. ![](/docs/assets/images/personalise-documents-add-online-payment-links_8_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FR9QsrBuH71WndmzrNUrY_2Fpika-1720653746) The branding and colours on the checkout page come from your Stripe settings: . ![](/docs/assets/images/personalise-documents-add-online-payment-links_9_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FPKS5ZBMoh7ilcj3rbHvU_2Fpika-1720653854) ## Payment fees Two fees apply: the Stripe processing fee, and the Portant fee. The Stripe fee is set by Stripe. The Portant fee depends on your plan. | Tier | Fee | | ----- | ------------------ | | Free | 5% + Stripe fees | | Pro | 1% + Stripe fees | | Teams | 0.5% + Stripe fees | ## Related * [Add Stripe payment links to the eSign portal](/docs/send/payments/stripe/) * [Invoices use case](/docs/use-cases/invoices/) * [Quotes use case](/docs/use-cases/quotes/) ================================================================================ # Payments › Add Stripe payment links to the eSign portal Section: Send and sign URL: https://www.portant.co/docs/send/payments/stripe/ ================================================================================ Send signers straight to a Stripe payment page after they sign. Useful when a signed document also needs to be paid for, like a contract with a deposit, an invoice that needs settling, or a service agreement with an upfront fee. ## Step 1: Copy the Stripe payment link First, connect your Stripe account inside the workflow. See [Add online payment links](/docs/send/payments/payment-links/) for the full setup. Once Stripe is connected, you'll see a **Stripe payment link** option in the block. Click **Copy** to grab the link. ![](/docs/assets/images/personalise-documents-add-stripe-payment-links-to-your-esign-portal_0_AD_4nXfBmYdjnMG40ODNfdHD0OLR2fWfskTHny5Xyp8GoYGkJzUJB414qcEtV7qGfE-Oxu2Je0XURPXH) ## Step 2: Paste it into the confirmation page > **Note:** The custom confirmation page is a Teams feature. For more on customising the eSign portal, see [Whitelabeling your eSign portal](/docs/reference/team/whitelabeling-esign-portal/). * Open the **Signature request** block in your workflow. * Find the **Custom confirmation page** field. * Paste the Stripe payment link you copied in step 1. ![](/docs/assets/images/personalise-documents-add-stripe-payment-links-to-your-esign-portal_1_AD_4nXe5atZlJjfv5cIgpnb3AkObaoa_uuxvXE0Ki5hyw-zbgcsLEbdg9CKpZsGII5qaIHLLepvhEnvd) ## Step 3: How it runs end to end Once configured, here's what the signer sees: 1. The signer signs the document. ![](/docs/assets/images/personalise-documents-add-stripe-payment-links-to-your-esign-portal_2_AD_4nXfE57mqJM2c4z-la-AwZNMtvq_Ecu-4e969xLhniBTfPmLg6fAMZ6B8V4s-9-3BdNATwI-dUdrZ) 2. They're taken straight to the Stripe payment page and can pay right away. ![](/docs/assets/images/personalise-documents-add-stripe-payment-links-to-your-esign-portal_3_AD_4nXfA489ePmx4XLk7idVOYJQCPSHQSQIdmnD58hpfBldgJB32Q1cY7B0fGcwFHaS2B5oII8pVG7Ya) That keeps the signing and payment steps in one flow, so you don't have to chase the recipient with a separate invoice. ## Related * [Add online payment links](/docs/send/payments/payment-links/) * [eSignatures](/docs/send/esignatures/) * [Invoices use case](/docs/use-cases/invoices/) * [Quotes use case](/docs/use-cases/quotes/) ================================================================================ # Outputs Section: Manage URL: https://www.portant.co/docs/manage/outputs/ ================================================================================ Every document Portant generates lands in the Outputs tab. This is where you find finished files, see their status, and control where they get saved and what they're called. ## What an output is An output is one document produced by a workflow run. If a workflow runs five times, you get five outputs. Each one keeps a record of the source row, the file it created, and any extra steps that followed (an email sent, a signature requested, a payment link opened). ## What you can do from the Outputs tab - Open the generated file in Google Drive or OneDrive. - See the status of each run (draft, signatures requested, completed, completed with error). - Search and filter to find a specific output. - Re-run, review, or delete an individual output. - Change the folder where future outputs are saved. ## Pages in this section 1. [Customise output file names](/docs/manage/outputs/file-names/). Use tags so each file is named after the row it came from. 2. [Auto-file output files](/docs/manage/outputs/auto-filing/). Build folder structures from your data. 3. [Change the output folder](/docs/manage/outputs/folder/). Pick where new outputs are saved by default. 4. [Save outputs to OneDrive](/docs/manage/outputs/onedrive/). Send Microsoft Word and PowerPoint outputs to OneDrive. 5. [Search and filter outputs](/docs/manage/outputs/search/). Narrow the list by name, status, or date. 6. [Delete outputs](/docs/manage/outputs/delete/). Tidy up files you no longer need. ## Related - [Templates](/docs/templates/google-docs/) for the template types that produce these outputs. - [File formats](/docs/manage/file-formats/) for how to convert outputs to PDF, Word, PowerPoint, or Excel. ================================================================================ # Outputs › Customise output file names Section: Manage URL: https://www.portant.co/docs/manage/outputs/file-names/ ================================================================================ Give every output a name that matches the data it came from, so you can spot the right file in a list of hundreds. You set the rule once, and every future run follows it. ## Set the output name If you haven't built a workflow yet, start with the [Quickstart](/docs/getting-started/quickstart/), then come back here. 1. Open your workflow and click into the template block. ![](/docs/assets/images/outputs-customize-output-file-names_0_AD_4nXc7jrPmIFRqLDYWHT1nE1UZsYRlwfV62vJMpjwfItJr8vYPgXI9nACoYM3epsxopiaG2wxx0X_1) 2. On the right, find the **Output Name** field. ![](/docs/assets/images/outputs-customize-output-file-names_1_AD_4nXfqsVZh0YfhK8h8sOIdD_N5AIzT_VxnbYZUErjsNCS0Q3lXTrs3XG9Ej9m3Xx9l6UBnxK_QSBJ3) 3. Type plain text, insert tags from your source, or mix the two. In the example below the name is "Client" followed by `{{Contact First Name}}` and `{{Contact Last Name}}`, so each file is named after the client on that row. Press Enter to save. ![](/docs/assets/images/outputs-customize-output-file-names_2_AD_4nXcwgE_noxYBjNbDNFnPtxltwW0Um4uq8Ak7bangagvGDoowoIZMd_4Xs1JoubjellJrVOzzAXYU) The result on the next run looks like this: "Client: Jerry Burke". ![](/docs/assets/images/outputs-customize-output-file-names_3_AD_4nXdMHegicS53xjOSHd0igAvR9MHlgif866C9EEq1dhEyLak-hnbmtKGSnOA5uSqq_7sojOMFfE7u) ## Related - [Auto-file output files](/docs/manage/outputs/auto-filing/) to build folder structures from tags as well. - [Tags overview](/docs/features/tags/) for what you can put inside `{{ }}`. ================================================================================ # Outputs › Auto-file output files Section: Manage URL: https://www.portant.co/docs/manage/outputs/auto-filing/ ================================================================================ Sort generated documents into folders automatically, using values from your source. For example, you can have Portant create one folder per customer and drop each new document into the right one when the workflow runs. ## Build folders from tags If you haven't built a workflow yet, start with [How to create your first workflow](https://www.portant.co/guide-article/how-to-create-your-first-workflow), then come back here. 1. Open your workflow and go to the **Outputs** tab. ![](/docs/assets/images/outputs-auto-filing-output-files_0_6517241992512cbafddee090_RtvZGkMO1mATyQ0ip9Smr1AuMTaAJv1LmrjdxYYrGb-diO3dD8mljft) 2. Click **Save to Google Drive**. ![](/docs/assets/images/outputs-auto-filing-output-files_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FYybqbAnOXji3InipKUNT_2Fimage.png_1.png) 3. Click **Change Folder** and pick the parent folder where outputs should live. ![](/docs/assets/images/outputs-auto-filing-output-files_2_651724194a3072d60e6ab8a6_FeZMVHEGj78PtzppwFp4FHGHVq7C1z06OH330MfVBWSQHWPEwOeb3Xa) 4. Choose the folder you want. ![](/docs/assets/images/outputs-auto-filing-output-files_3_6517241a3d62a4e28557901b_fmOKyQtq5DPceHD0Be8I8690tSSr3AjS6kuvrviaFpfSNQ4nV0nR1kw) > **Note:** If a single folder is enough, you can stop here. 5. In the **Custom Folders** section, use the blue tag button to insert tags from your source. Separate folder layers with a forward slash (`/`). ![](/docs/assets/images/outputs-auto-filing-output-files_4_6517241957a643ae56d6feb3_0i9h3cFSUksadiizWce39JB7Ji8ZrwKaTcwZg7UhnF8w7HvVk7aUn7n) In the example below, one tag creates a folder per company, and a second tag creates a folder per employee inside it. ![](/docs/assets/images/outputs-auto-filing-output-files_5_65172419be212f1c6b6e38d4_ST-3EJOWieuA5eu2jzEAgNaTVP2kvubwE85ok1bD3mJcwA9FVHFM097) > **Note:** Folder names don't have to be tags. You can type plain text, or mix tags and text. 6. Click **Save**. The folder path appears on each row in the Outputs tab. ![](/docs/assets/images/outputs-auto-filing-output-files_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FMJ8qmhmmmflgjJJ8TZlW_2Fimage.png_6.png) ## What happens on re-runs If a folder with the same name already exists from a previous run, Portant will use that folder instead of creating a new one. So if "Acme/John Smith" already exists, the next "Acme / John Smith" output is filed into it. ## Related - [Change the output folder](/docs/manage/outputs/folder/) to set the parent folder. - [Customise output file names](/docs/manage/outputs/file-names/) to name the files inside those folders. - [Tags overview](/docs/features/tags/) for what you can use inside the folder path. ================================================================================ # Outputs › Change the output folder Section: Manage URL: https://www.portant.co/docs/manage/outputs/folder/ ================================================================================ Pick where new outputs are saved. You can choose any folder in your Google Drive, including folders inside shared drives, so the right people see the files as soon as they're generated. ## Change the folder If you haven't built a workflow yet, start with [How to create your first workflow](https://www.portant.co/guide-article/how-to-create-your-first-workflow), then come back here. 1. Open your workflow and go to the **Outputs** tab. ![](/docs/assets/images/outputs-changing-output-folder_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F0gPuNZK027LpY2QT7aAv_2Fimage.png_0.png) 2. Click **Save to Google Drive**. ![](/docs/assets/images/outputs-changing-output-folder_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FtntHMCLvXiPgHtifjYmE_2Fimage.png_1.png) 3. Click **Change Folder** to pick the location for your outputs. ![](/docs/assets/images/outputs-auto-filing-output-files_2_651724194a3072d60e6ab8a6_FeZMVHEGj78PtzppwFp4FHGHVq7C1z06OH330MfVBWSQHWPEwOeb3Xa) 4. Select the folder you want. ![](/docs/assets/images/outputs-auto-filing-output-files_3_6517241a3d62a4e28557901b_fmOKyQtq5DPceHD0Be8I8690tSSr3AjS6kuvrviaFpfSNQ4nV0nR1kw) > **Note:** This can be a folder in a shared drive, so your team has access automatically. From now on, every output from this workflow is saved into that folder. ## Related - [Auto-file output files](/docs/manage/outputs/auto-filing/) to file outputs into subfolders based on values from your source. - [Customise output file names](/docs/manage/outputs/file-names/) to control what each file is called inside the folder. ================================================================================ # Outputs › Save outputs to OneDrive Section: Manage URL: https://www.portant.co/docs/manage/outputs/onedrive/ ================================================================================ If you work in Microsoft 365, you can send your workflow outputs straight to OneDrive instead of Google Drive. Word and PowerPoint outputs land in the folder you choose, ready to open and edit. ## How it works When your template is a Microsoft Word or PowerPoint file and you've connected the Microsoft integration, you can pick a OneDrive folder as the destination for that workflow's outputs. Each run saves the generated file into the folder you select on the **Outputs** tab. ![Selecting a OneDrive folder as the output destination on a Portant workflow](/docs/assets/images/duplicated/manage-outputs-onedrive/screenshot-01.png) > **Note:** Save to OneDrive may currently be limited to files up to 4MB. If you don't see the option, check the Outputs tab and that your Microsoft integration is connected. ## Connect your OneDrive 1. Open your workflow and go to the **Outputs** tab. 2. Click the option to **Save to OneDrive**, or connect Microsoft if you haven't already. 3. Authorise Portant to access your OneDrive when prompted. 4. Pick the OneDrive folder where outputs should be saved. After setup, every run of the workflow writes its Microsoft outputs into that folder. You can then open them with **Edit in OneDrive** like any other file in your account. ## Related - [Auto-file output files](/docs/manage/outputs/auto-filing/) for building subfolder structures from tags. - [Microsoft Word templates](/docs/templates/microsoft-word/) and [Microsoft PowerPoint templates](/docs/templates/microsoft-powerpoint/) for the template types that produce OneDrive-friendly outputs. ================================================================================ # Outputs › Search and filter outputs Section: Manage URL: https://www.portant.co/docs/manage/outputs/search/ ================================================================================ Find a specific document in the Outputs tab without scrolling. You can narrow the list by file name, automation status, or the date the output was created. ## Open the filter bar 1. Open the workflow and go to the **Outputs** tab. ![](/docs/assets/images/outputs-search-and-filter-your-outputs_0_9-lAogXJXVwQi8hQLHAz2MQVG6E-P3JA-QPF7siQrzrY4WkUzvO5FmQ34k7M7dk0uf97gymtmpnKVwbm) 2. Click the filter icon in the top right of the Outputs tab. ![](/docs/assets/images/outputs-search-and-filter-your-outputs_1_Bu31tgpq22ewsB34n-Gv-YpD4IDm2z5NlvtNc8ijXOLEBGD8SJ9KAh7huVcK2dE7Hr2xtlUgYpB0HyWj) 3. A bar appears with three filters: name, status, and date created. ![](/docs/assets/images/outputs-search-and-filter-your-outputs_2_iFkDci-CVyz-84OLS8ELhJ2a1tcgSx1voAh75ADy0mO3mRZyOenoH28dZ4K2cXqHmD2PWj5iRyvMC2uC) ## Filter by name Type any part of the file name into the **Filename** field. The list updates as you type. ![](/docs/assets/images/outputs-search-and-filter-your-outputs_3_edzW_50XaM9gefX9jy9mx76sKzlvbGFpNwHW8uh-C-2WP4uajgvV7qqrjz6RcAOOsTa71I3U4bwL74nH) ## Filter by status Use the **Status** dropdown to show only outputs in a particular state. ![](/docs/assets/images/outputs-search-and-filter-your-outputs_4_XosiVxH4kYw4plBieUBS4YcMVyAZooV-oq0umYP-fzcqKwENT0LzpnugmDTek0WuRaV-9kBYCalOvD4n) What each status means: - **Show all.** Every output in the workflow. - **Draft.** Outputs waiting to be reviewed. - **Signatures Requested.** Outputs sent for signing but not yet fully signed. - **Completed.** Outputs that finished every step in the workflow without error. - **Completed with Error.** Outputs that hit at least one error along the way. ## Filter by date created Use the **From** and **To** fields to limit the list to a date range, for example everything created last week. ![](/docs/assets/images/outputs-search-and-filter-your-outputs_5_e2WoK-1WdW_8JaMJA0a_mANbw6R_xeCl1laOl0i2JNxqcshriRUMIdZR2kyfxA0OLG14BpoTRMec0i4P) ## Related - [Customise output file names](/docs/manage/outputs/file-names/) so filtering by name actually finds what you want. - [Delete outputs](/docs/manage/outputs/delete/) once you've located the ones you no longer need. ================================================================================ # Outputs › Delete outputs Section: Manage URL: https://www.portant.co/docs/manage/outputs/delete/ ================================================================================ Remove outputs you no longer need so the Outputs tab stays focused on the work that matters. Deleting an output clears it from Portant's record, but the file in Google Drive or OneDrive stays put unless you delete it there too. ## Delete an output 1. Sign in at [app.portant.co](https://app.portant.co), open the workflow you want to clean up, and go to the **Outputs** tab. ![](/docs/assets/images/deleting-outputs-in-portant_0_AD_4nXcBKUzwBIY_ngIxF4LbbI4xYaeK8EFbKdHlhJ_EHqtaO4bUDvWHVKw3gZBgpAjle_-GEFaDCdm2) > **Note:** If the list is long, use the search bar to narrow it down. See [Search and filter outputs](/docs/manage/outputs/search/). 2. Find the output row you want to remove. ![](/docs/assets/images/deleting-outputs-in-portant_1_AD_4nXd3bZXZ0psxAgHL_1Jx_A5z9j6YZc6VtnptT43mf0Q4iAxSbfHGfq202ju1kwJYrZyVlUTJFcQS) 3. Click the three-dot menu on the right and choose **Delete**. The row disappears from the Outputs tab. ![](/docs/assets/images/deleting-outputs-in-portant_2_AD_4nXcweJA-sQUw4cqJ-Jtl33CHPvfP12-bai7bkn843irgpWTRtEXotxQSpKEqGb6z-BF9Xe1I_c09) ## The file in Drive isn't deleted Removing an output from Portant doesn't remove the underlying file from Google Drive or OneDrive. To delete the file completely, open the Drive folder link from the Outputs tab and delete the file there too. ![](/docs/assets/images/deleting-outputs-in-portant_3_AD_4nXePB_1KWHb2AP06ciAC646P7ekE23-ppCFKwhg_wcBTQXJUt5foRgYWT1MugEU-6ni5VYK6-7xR) ## Related - [Search and filter outputs](/docs/manage/outputs/search/) to find the right rows before deleting. - [Auto-file output files](/docs/manage/outputs/auto-filing/) to keep new outputs organised so you don't have to delete as often. ================================================================================ # File formats Section: Manage URL: https://www.portant.co/docs/manage/file-formats/ ================================================================================ Portant builds documents from Google Docs, Google Slides, Google Sheets, Microsoft Word, Microsoft PowerPoint, and fillable PDF templates. From any of those, you can also save the output as a different file type so you send the right format for the job. ## Pick the right format for the job - **Word (.docx).** Best when the recipient needs to edit the document. Generated from a Google Doc or a Microsoft Word template. - **PDF.** Best when the document is final and you want it to look the same on every device. Can be generated from any document template (Google Docs, Google Slides, Microsoft Word, or Microsoft PowerPoint). - **PowerPoint (.pptx).** Best when the recipient needs to present or edit slides. Generated from a Google Slides or Microsoft PowerPoint template. - **Excel (.xlsx).** Best when the output is a spreadsheet that someone will open in Excel. Generated from a Google Sheets workflow. If the recipient won't be editing the document, default to PDF. It's the safest format for sharing, signing, and printing. ## Pages in this section - [Microsoft Word (.docx)](/docs/manage/file-formats/word/) - [Microsoft PowerPoint (.pptx)](/docs/manage/file-formats/powerpoint/) - [PDF](/docs/manage/file-formats/pdf/) - [Microsoft Excel (.xlsx)](/docs/manage/file-formats/excel/) ## Related - [Templates](/docs/templates/google-docs/) for the template types each format is built from. - [Outputs](/docs/manage/outputs/) for what happens to the file once it's generated. ================================================================================ # File formats › Microsoft Word (.docx) Section: Manage URL: https://www.portant.co/docs/manage/file-formats/word/ ================================================================================ Save your workflow's outputs as Word files, or send them as Word attachments by email. Useful when the person on the other end needs to edit the document. Word outputs can be generated from a Google Doc or a Microsoft Word template. ## Save the output as a Word file If you haven't built a workflow yet, start with [How to create your first workflow](https://www.portant.co/guide-article/how-to-create-your-first-workflow), then come back here. 1. In your template block, click **More options**. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-microsoft-word-.docx_0_AD_4nXdFX9GQpenmPJumV7vp8arIF9nDDp6nsOrytOo7ihRLqz7971YqeQSzW7JlZGqM2S71WMTJvtD-) 2. Toggle **Create Microsoft Word copy** on. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-microsoft-word-.docx_1_AD_4nXdv3fEcxUi0m_Mty1sCKy_UKu-HqY0WIbL0LMfk0AwVey_II7ekmN708UWC68nxvr7fCtEm-Zo-) Every run of the workflow now produces a Word version of the document alongside the original. ## Send a Word file as an email attachment 1. In your email block, click **Add Attachments**. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-microsoft-word-.docx_2_AD_4nXcR_ppvtc5ry9_SpWb2wOyarXruf2KeO7sX7JEdnQmpsQuI6YEtkoknENNAvd6SAIuGLs6Xfbwf) 2. Choose **Attach as Word**. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-microsoft-word-.docx_3_AD_4nXebA4UQqJjiZSWJs5QNxZnCktJKn9WNzy6MufwhOXNin4cp3C9Xv-aLA4w0jMrpM679YfkpJf4O) The attachment shows up at the bottom of the email body in the editor. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-microsoft-word-.docx_4_AD_4nXfHeWDMjKGo_dI7mHvvVHARwYPo-3SXrD29DYBrWzJvVJqOTyB5mYI4RXdQW2Fj2Bt5_iv3TC3n) When the workflow runs, the contact receives the Word file by email. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-microsoft-word-.docx_5_AD_4nXcdbN1rlMawkiZBwBSzmfh_u4FZZZivlvGo8kBmiiOatd7BBbOzYlWeaToPRgeDAfLpPSlKJiiT) ## Related - [Google Docs templates](/docs/templates/google-docs/) and [Microsoft Word templates](/docs/templates/microsoft-word/) for the templates that produce Word outputs. - [PDF outputs](/docs/manage/file-formats/pdf/) for when you'd rather send a non-editable file. ================================================================================ # File formats › Microsoft PowerPoint Section: Manage URL: https://www.portant.co/docs/manage/file-formats/powerpoint/ ================================================================================ Save your slide outputs as PowerPoint files, or send them as PowerPoint attachments by email. Useful when the recipient needs to present or edit the deck. PowerPoint outputs can be generated from a Google Slides or Microsoft PowerPoint template. ## Save the output as a PowerPoint file If you haven't built a workflow yet, start with [How to create your first workflow](https://www.portant.co/guide-article/how-to-create-your-first-workflow), then come back here. 1. In your Google Slides template block, click **More options**. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-microsoft-powerpoint_0_AD_4nXeqdUfz5ulZjiN8MDzDGIXOVKK7wacxP7Alpd3RFpfjIM4d5qC9NzSaMPIfMATd9g9j1fCNl_vS) 2. Toggle **Create Microsoft PowerPoint copy** on. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-microsoft-powerpoint_1_AD_4nXfMLF90xny5QkO931fL-9ND6cUjhUWJN-XAbcAtORI4dl9WBI4iyW4465gk5H33DFJ5ahY0CvH8) Every run now produces a PowerPoint version of the deck alongside the original. ## Send a PowerPoint file as an email attachment 1. In your email block, click **Add Attachments**. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-microsoft-powerpoint_2_AD_4nXfWKJeZOWqn0yYI_0BekAvgmBtohM93Xs-PhIYgoPuuF1xNqWvoDEmtfODqQL3-Ni4-vFglymKw) 2. Choose **Attach PowerPoint**. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-microsoft-powerpoint_3_AD_4nXdo4LyFZKgltgt9_3ByjOqv6rzGCSWfic0pXRDyox-XNV_4gtPAZNW2RQIuPxFJTonoFaZB478V) The attachment appears at the bottom of the email body in the editor. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-microsoft-powerpoint_4_AD_4nXenLnu2wY8BI-VN_zqNdh38xfVgw677EJyy0NtMOWruESNv0ROPNQOAOPcWZbGgnzMKwl8U3Ni3) When the workflow runs, the contact receives the PowerPoint file by email. ## Related - [Google Slides templates](/docs/templates/google-slides/) and [Microsoft PowerPoint templates](/docs/templates/microsoft-powerpoint/) for the templates that produce PowerPoint outputs. - [PDF outputs](/docs/manage/file-formats/pdf/) for when the deck is final and shouldn't be edited. ================================================================================ # File formats › PDF Section: Manage URL: https://www.portant.co/docs/manage/file-formats/pdf/ ================================================================================ Send a final, locked-down version of your document. PDFs look the same on every device, which makes them the safest format for sharing, signing, and printing. You can generate PDF outputs from any document template (Google Docs, Google Slides, Microsoft Word, or Microsoft PowerPoint). ## Create a PDF from Google Docs If you haven't built a workflow yet, start with the [Quickstart](/docs/getting-started/quickstart/), then come back here. 1. Open the template block in your workflow. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-create-pdf-outputs_0_1OUOHc0VYmCrAGh6q4-fsXa1C2ec9kM2FIMlT73Xhx2h9qiRWtOHtqfsFM96L69fC-uQyAGlfpubwIHa) 2. On the right, toggle **Create PDF Copy** on. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-create-pdf-outputs_1_hwTgtP9wObJDM5VMO5tHFQ0_HvMGsWNWfYPdX2bn-P-OVwojLMn21fwzT_OqfGFvWU8Ee9u6CTKWlqnU) After the workflow runs, you'll find the PDF either in the **Outputs** tab or in your Google Drive folder. To open it from the Outputs tab, find the row and click its dropdown. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-create-pdf-outputs_2_rzTSNr6mNnGIBCp2I1Jz6v4SZWzFL9xFGI1h-UxWBLYMVn6xS6yewAk-famJGNbQal29EPL8FMsh7wAS) To open it in Google Drive, click the folder link in the top right of the Outputs tab. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-create-pdf-outputs_3_KzOOF-9DNfCGjr8wdKrpax9XZ6HuA-edo7BeVJtHbz76uRpCKlcT9DN9SB5UL1AvtX7Oe6rZA4bIFitU) ## Create a PDF from Google Slides 1. Open the Slides template block in your workflow. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-create-pdf-outputs_4_Xow8CWcPi5W_mt516IJjeg0yoYNyi347c_yBKEmhUW77GT9azsVx55g_tSjSl8EFXWyDimdxGLr80YMK) 2. On the right, toggle **Create PDF Copy** on. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-create-pdf-outputs_5_o2bgaPaabr0Ube_xI7glb_RJFTA3Pl6phqzBOrD6LGC5fNIsLcQwrolEfJd9V9iEOlZYbV5Xw5483hZ6) The PDF is available from the Outputs tab or your Google Drive folder, the same as for Google Docs. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-create-pdf-outputs_6_hZ6NjaG8B_x-AyGLGUh4rCmhOoCbAyLUuepMQUnVlFMQYEfLdTqwKWGNIfCSly9kprUH39M3_drwfKFM) ![](/docs/assets/images/automation-converting-docs-to-different-file-types-create-pdf-outputs_7_SOsJSY2-d7oKswlyoiOv2_aQsI0lbqgFRnGqkdAz-AHIOV7V87J6sMqpia3bT-C_3BNGqLCWoxoZWo5_) ## Save only the PDF (no Google Docs or Slides copy) If you only want the PDF and don't need the editable original, toggle on **Remove Google Docs output file** or **Remove Google Slides output file** in the same template block. Each run will then keep only the PDF. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-create-pdf-outputs_8_9Mxtk2qQV9f3MBcaxT71CLuDsXe0MM5DYzWMLEU2v2DyNGXYao2RVvr9PioBtKnY3qxgDC1MfSZp7O9S) ## Related - [Templates](/docs/templates/google-docs/) for the template types you can convert to PDF. - [Word outputs](/docs/manage/file-formats/word/) and [PowerPoint outputs](/docs/manage/file-formats/powerpoint/) for when the recipient needs an editable file instead. ================================================================================ # File formats › Microsoft Excel (.xlsx) Section: Manage URL: https://www.portant.co/docs/manage/file-formats/excel/ ================================================================================ Save your spreadsheet outputs as Excel files. Useful when the person on the other end works in Excel rather than Google Sheets. Excel outputs are generated from a Google Sheets workflow. ## Save the output as an Excel file If you haven't built a workflow yet, start with [How to create your first workflow](https://www.portant.co/guide-article/how-to-create-your-first-workflow), then come back here. 1. In your Google Sheets template block, click **More options**. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-save-an-output-as-a-microsoft-excel-file-.xlsx_0_AD_4nXf2TIMQQ5FRAqReOQXp-xAGrgd1Shd8Ouvs0Ttmz_5dz8SpdZyaA4H-RctKrKiWKI0DxdqXT6QU) 2. Toggle **Create Microsoft Excel copy** on. ![](/docs/assets/images/automation-converting-docs-to-different-file-types-save-an-output-as-a-microsoft-excel-file-.xlsx_1_AD_4nXd57l1Hb40ps2s88kQUEap5tZRPYqcUCCxWEywvJ5dUtAoo8r6vVykRFzKbzDNMgWyrYjXBDPPY) Every run of the workflow now produces an Excel version of the spreadsheet alongside the original. ## Related - [Google Sheets data merge](/docs/manage/data-merge/google-sheets/) for setting up the source data behind your spreadsheet outputs. - [PDF outputs](/docs/manage/file-formats/pdf/) for when you'd rather send a non-editable snapshot of the data. ================================================================================ # Automation Section: Manage URL: https://www.portant.co/docs/manage/automation/ ================================================================================ Once your workflow is built, automation is what runs it for you. A new row, a new HubSpot deal, a new form response, Portant picks it up and produces the document without you opening anything. ## In this section 1. **Workflow filters**, only run the workflow on rows that match your rules. 2. **Re-run an automation**, re-process a row after you've fixed the data or the template. 3. **Auto-create from Google Sheets**, trigger a new document each time a row is added. 4. **Auto-create from Google Forms**, trigger a new document each time someone submits a response. 5. **Review and approve documents**, add a manual approval step before anything goes out. ================================================================================ # Automation › Workflow filters Section: Manage URL: https://www.portant.co/docs/manage/automation/workflow-filters/ ================================================================================ Workflow filters let you run a workflow only when a row, response, or record matches the rules you set. Use them to skip data that isn't ready, or to route different cases to different workflows. ## When to use a filter A single filter is great when you only want one workflow to run on a subset of your data (for example, only deals where the stage is "Closed Won"). When you want different outputs for different cases, build a separate workflow for each case and add a filter to each one. For example, if you have one form for customer service and want to route enquiries to the right team: 1. Add a question in the form that identifies the team (Shipping, Finance, Operations, Sales). 2. Build one workflow per team and add a filter that targets the answer to that question. 3. Each workflow runs only when its filter matches, so a single form can drive several different outcomes without making the form more complicated. ## Add a condition Open the workflow's source and click **Add condition** in the right-hand menu. ![](/docs/assets/images/automation-workflow-filters_0_63e06337678a1740e23033f4_Source_20Filter_20Conditions.png_0.png) In the modal that opens, click **Add condition** again to choose the field you want to check and the operator to use. ![](/docs/assets/images/automation-workflow-filters_1_63e06a8ac6567a13a4579ecd_Source_20Filter_20Conditions_20_E2_80_93_202.png_1.png) The operators available are: - **IS**, the field equals a value you specify. Example: "Question X IS 5" is true when the answer to Question X is 5. - **IS NOT**, the field does not equal the value. Example: "Column X IS NOT 6" is true when the value is anything other than 6. - **IS EMPTY**, the field has no value. Use this to skip rows where someone hasn't filled in a key answer. - **IS NOT EMPTY**, the field has any value at all. ## Add multiple conditions You can stack as many conditions as you need. After your first condition, click **AND** or **OR** to add another, and you can mix the two operators. - **AND** requires every condition to be true for the workflow to run. "A AND B" only runs when both A and B match. - **OR** requires at least one condition to be true. "A OR B" runs when either A or B matches. That's it. Test your filter with a few sample rows or responses to make sure the right ones run through. ================================================================================ # Automation › Re-run an automation Section: Manage URL: https://www.portant.co/docs/manage/automation/re-run/ ================================================================================ Re-running an automation is the fastest way to recover a document that didn't process, or to remake a document after you've fixed the source data or template. ## Re-run a workflow item Open the workflow's outputs page. ![](/docs/assets/images/automation-re-run-an-automation_0_65170b3f224a405f4f582a56_9emjt0NwMMWcrEwg09zeniBCXsfG51RuJ8syxJ7WesQJtoGX3OLCVXu) You'll see every item the workflow has produced. On the right-hand side of each row, click the three-dot menu and choose **Rerun**. ![](/docs/assets/images/automation-re-run-an-automation_1_65170b3f98371a9a4d77e43a_CvvxrlEOHTEDP3TFG3YSqsYEKFnWKAar8EQWysaJjJGnrKZwZ2Kh2UA) Portant will pull the latest data from the source, run it through the current document template, and produce a new document. If your workflow includes emails or signature requests, those will be sent again as part of the rerun. ## Resend a signature request Sometimes you don't need a new document, you just need to nudge someone who hasn't signed yet. Open the outputs page, expand the row, and click the resend button next to the signature request. ![](/docs/assets/images/automation-re-run-an-automation_2_65170b3fcdcfc63a4b1ecb5e_Xqr5Q7fiAoBF7zgBuFwEETvSaiMyRKD7bjSQzUYKIswqLrx_3s_c-kH) > **Note:** Signature requests expire after 30 days. ================================================================================ # Automation › Auto-create from Google Sheets Section: Manage URL: https://www.portant.co/docs/manage/automation/sheets-auto-create/ ================================================================================ Set Portant to watch a Google Sheet and create a new document each time a new row appears. No clicking required. ## Turn on auto-create Open the options menu in the top-right corner of the Data Merge box. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-data-merge-settings-for-google-sheets-sources_2_60f7f4793a070594060260c1_Screen_20Shot_202021-07-21_20at_208.17.09_20pm.png_2.png) Scroll to the **Google Sheets Automation** section and pick how often Portant should check the sheet (hourly or daily). ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-data-merge-settings-for-google-sheets-sources_3_60a22678c98ebefabac514c5_Screen_20Shot_202021-05-17_20at_206.15.51_20pm.png_3.png) When Portant finds a new row in the source sheet, it creates a new document straight away. ## Confirm it's running Once auto-create is on, you'll see an indicator above the **Data Sources Table** so you know the automation is active. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-automatically-create-documents_2_60f80b1d49906e99ce0991b9_Screen_20Shot_202021-07-21_20at_209.54.26_20pm.png_2.png) ================================================================================ # Automation › Auto-create from Google Forms Section: Manage URL: https://www.portant.co/docs/manage/automation/forms-auto-create/ ================================================================================ Set Portant to create a new document every time someone submits a Google Form response. No manual step needed. ## Turn on auto-create In the Data Merge box, tick the checkbox to automatically create documents on new responses. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-forms-source-data-merge-settings-for-google-forms_0_60f80a648cce2d067c61382c_Screen_20Shot_202021-07-21_20at_209.51.38_20pm.png_0.png) ## Confirm it's running Once it's on, you'll see an indicator above the **Data Sources Table** so you know the automation is active. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-automatically-create-documents_2_60f80b1d49906e99ce0991b9_Screen_20Shot_202021-07-21_20at_209.54.26_20pm.png_2.png) ================================================================================ # Automation › Review and approve documents Section: Manage URL: https://www.portant.co/docs/manage/automation/review-approve/ ================================================================================ Add a manual checkpoint to your workflow so a human can review, edit, or approve each document before it moves on. Useful for quality control, compliance, formatting touch-ups, or final sign-off. [Watch video](https://www.youtube.com/watch?v=NtMtIrE9iWE) ## Why use a review block Automation handles the repetitive 90%, but the last 10% often needs a human eye. A review block is the right fit when: - **Quality control** matters and someone needs to confirm the document is accurate and complete. - **Compliance** requires a person to sign off (common in healthcare, finance, and legal work). - **Formatting** needs a polish that data alone can't deliver. - **Final approval** is required before the document is sent or shared. You can also assign approval to specific team members and notify them automatically when a document is waiting. ## Add a review block Click the **plus** button after a document template block. ![](/docs/assets/images/automation-review-and-approve-documents_1_AD_4nXc1QSFtWdZOiUBXY2T6RCarGoATcYCVB1LnaR8LNaETufpAdXp4XvdpmlbgruhN-mruaAOfVDc1) Select **Review Documents** from the modal. ![](/docs/assets/images/automation-review-and-approve-documents_2_AD_4nXfqqyxMFOXGOEqSoyQoZ5igc7jm9tX0XiF7DYxrz9cFAQt2qggC9kejh4WHrAg2GXvoUjmH3Jw2) Choose the team members you'd like to notify whenever a document is waiting for review. ![](/docs/assets/images/automation-review-and-approve-documents_3_AD_4nXc-7pSMwwQmoa1wzqPq7Du5EvfF2sUdjT7sUz8BuLNqWGaLaBjKtervPPFpqDNApEUwjPKEaGIF) If you need multiple sign-offs, tick each approver and enable **Require all selected team members to approve documents**. The document will only move forward once everyone has approved. ![](/docs/assets/images/automation-review-and-approve-documents_4_AD_4nXcWOLrXbWZUoR6p3MoVQByytdcACmLWLODDzdWNpC0jjXT5t4LOsmD2Fnsa6gDGwW5KueYUUqCg) > **Note:** On the Pro plan, notifications can only be sent to yourself. That's it. From now on, every document the workflow produces will pause at the review block until someone logs in and approves it. ![](/docs/assets/images/automation-review-and-approve-documents_0_AD_4nXdE0KldStsBlnSMT7JgJagoOj62ElCZpOhUC-6WVTI-YqpSJ7A1aNrRe2B2nvUnOjB-_6UFJiVy) ## Where you can add a review block A review block has to come **after a document block**. If the option doesn't show up when you click the plus icon, add a document block first, then click the plus button after it. ## Review documents When a workflow includes a review block, every document it creates pauses at that step. You can see this in the workflow view. ![](/docs/assets/images/automation-review-and-approve-documents_5_AD_4nXe-2Ycmyl1p9rhJQa_O6txLKDdJH5FwCoplgO3mz6s9_vBFtU7X86X347vGcSHjTMWSnFleEm2l) You'll also see a **Review** button next to each output in the **Outputs** tab. ![](/docs/assets/images/automation-review-and-approve-documents_6_AD_4nXfvyQSXIjI013u3dV0Tz0T3xfMNOR7lh-otb3AnOIbRDv0Z0K7e2yuNpvMAN88K2yYxuZEbCMNI) If specific approvers are assigned, they'll get an email like this one: ![](/docs/assets/images/automation-review-and-approve-documents_7_AD_4nXdSBs8grmaoeW0UxpSw_ykzAEgd5i6XVS2q2dno5GDVfiNFLZGO1wL8Syu8rU7SVTGgpe16TCsx) Either button takes the approver to the review screen, where they can **delete**, **review**, **edit**, and **approve** any of the held documents. When you're ready, click **Approve and Process**. The document moves to the next step in the workflow. ![](/docs/assets/images/automation-review-and-approve-documents_8_AD_4nXcvrj_fdd3RgnTe-tJSPc3l9wgdXyrXuDiEej2hrN_phjgudDlzPIV0_dZ07QMEEniLSVa8tGsO) > **Note:** The Outputs tab shows each document's status and the names of its reviewers. ![](/docs/assets/images/automation-review-and-approve-documents_9_AD_4nXf8ng7SY5ftzIZRVACixZbOzIPExNtX3E5v_c9PKsGv6z3J69-Bxt3kvQkIHBUv6VcQHhcJBwPM) ## Reviewing documents in HubSpot If you trigger your workflow from HubSpot, the review step works the same way. See the [HubSpot integration guide](/docs/sources/hubspot/) for details. ================================================================================ # Data merge Section: Manage URL: https://www.portant.co/docs/manage/data-merge/ ================================================================================ Data Merge is the original Portant Google Workspace add-on. It runs inside Google Docs, Slides, Sheets, and Forms, and lets you connect a sheet, form, or Trello board to a template, add tags, and produce documents in bulk. This is the legacy add-on flow. If you're starting from scratch today, the modern source-based workflow in the Portant web app supports more sources (HubSpot, Pipedrive, Webhooks, and others) alongside Sheets and Forms. The add-on is still maintained and a great fit if you want to do everything from inside Google Workspace. This guide walks through the full setup: 1. Install and open the add-on 2. Connect a source 3. Add tags to your template 4. Edit the data merge settings 5. Customise the output documents 6. Share output documents via email 7. Start the merge ## Step 1: Install and open the add-on Install the add-on on your Google Workspace account. Click **Add-ons** > **Get Add-ons** and search for "Portant Data Merge", or use [this direct link](https://gsuite.google.com/marketplace/app/portant_data_merge/1016888648275). ![](/docs/assets/images/portant-add-ons-data-merge_0_60f7b68dce2e383911072bd0_Installing_20Portant_20Data_20Merge_20_1_.gif_0.png) Click **Portant Data Merge** and select **Install**. ![](/docs/assets/images/portant-add-ons-data-merge_1_60f7b6b4ba5c3d26196c26cc_Installing_20Portant_20Data_20Merge2_20_1_.gif_1.png) Google will ask you to **continue**, then to pick which Google account you want to install on. Google will also list the permissions Portant needs. Here's what each one is for, in plain English: - **See, edit, create and delete all of your Google Drive files**, so we can create new folders and files in your Drive. We never delete anything. - **View and manage your Google Slides presentations**, so we can insert tags into the presentation you have open. - **See, create and edit all Google Docs documents that you have access to**, so we can insert tags into the document you have open. - **See, edit, create and delete your spreadsheets in Google Drive**, so we can read your sheet data and place it into created documents. - **View and manage your forms in Google Drive**, so we can read responses and place them into created documents. - **Connect to an external service**, so the add-on can talk to our servers. - **Allow this application to run when you are not present**, so automations can run when you don't have the app open. - **Display and run third-party web content in prompts and sidebars inside Google applications**, so we can show the add-on UI inside Google. Click **Allow**, then **Done**, and close the marketplace window. ### Open the add-on Click **Add-ons** > **Portant Data Merge** > **Start**. ![](/docs/assets/images/portant-add-ons-data-merge_2_60f7b7f3ec04febf1eedb0ae_Open_20Portant_20Data_20Merge.gif_2.png) ## Step 2: Connect a source When you open the add-on, the home screen shows the sources you can connect to. ![](/docs/assets/images/portant-add-ons-data-merge_3_60f7bb2883cf27e47b99d9fd_Portant_20Data_20Merge_20Home_20Screen.png_3.png) Pick the source that fits your use case: - **Google Sheets**, best when you already have a dataset to create documents from. - **Google Forms**, best when you want to create a document each time someone submits a form. - **Trello**, useful if you're driving documents from a kanban workflow. > **Tip:** If the integration you need isn't here, click **External Apps** at the bottom to vote on integrations you'd like us to add. ### Connect and set up your source Each source has its own setup steps: - [Set up a Google Sheets source](/docs/manage/data-merge/google-sheets/) - [Set up a Google Forms source](/docs/manage/data-merge/google-forms/) Pick the file or board you want to connect and click **Continue**. ## Step 3: Customise your template Once you've connected a source, Portant imports the column headers, questions, or card fields into a table. We call this the **Data Source Table**. Each column, question, or field shows up as a row. ### Source table header ![](/docs/assets/images/portant-add-ons-data-merge_4_609616891855661630f6fec5_Screen_20Shot_202021-05-08_20at_202.40.20_20pm.png_4.png) 1. **File name**, click it to open the source in a new tab. 2. **Refresh**, refresh the rows after you've added or renamed a column, question, or field. ### Add a tag to your template ![](/docs/assets/images/portant-add-ons-data-merge_5_60f7d004e2555640311c9b62_Add_20a_20Tag_20_1_.gif_5.png) 1. Place your cursor in the document where you want the tag to appear. 2. Click the **Insert** button next to the tag in the Data Source Table. 3. Portant inserts the tag inside curly brackets, like `{{Tag}}`. > **Tip:** Format the tag in the document exactly how you want the data to look (size, colour, font). Portant will keep that styling when it inserts the value. > **Note:** Missing field values are replaced with blanks in the output. ### Edit a tag name ![](/docs/assets/images/portant-add-ons-data-merge_6_60f7d13822986e4ecc658924_Customise_20a_20Tag.gif_6.png) To shorten or rename a tag: 1. Click the source row to open the options. 2. Type the new name into the text box. 3. Press enter or click the row again. The tag icon turns solid blue when the name is saved. > **Note:** Tag names need to be unique across the source. ### Add an image ![](/docs/assets/images/portant-add-ons-data-merge_7_60f7d7f59d72cdef5169bd61_Adding_20Images.gif_7.png) 1. Click the source row to open the options. 2. Tick **Insert as image**. The tag icon changes to an image icon. 3. Click **Insert** to add a placeholder image. 4. Move and scale the placeholder where you want the image to appear. Portant will keep the source image's aspect ratio. > **Note:** Supported formats are .jpg, .jpeg, .png, and .gif. Inserted images keep their original aspect ratio. If a source image has a different ratio to the placeholder, Portant scales the height to fit while keeping the placeholder width. ![](/docs/assets/images/portant-add-ons-data-merge_8_609cbde3abaac5bac9ab7053_Image_20constraints.png_8.png) Portant supports these image sources: - Any public image URL - Any Google Drive image URL you have access to - Any image uploaded via Google Forms > **Note:** When using a Form to collect images, Portant inserts one image per question. If multiple images are uploaded, only the first is used. You can limit uploads to one in [form settings](https://support.google.com/a/users/answer/9308632?hl=en). ## Step 4: Data merge settings Once your tags are in, set up how the merge will run and which rows it should use. ![

An example data merge box for a Google Sheets data source

](/docs/assets/images/portant-add-ons-data-merge_9_60f7d90aec04febf69ee5a07_Screen_20Shot_202021-07-21_20at_206.21.16_20pm.png_9.png) The main settings sit on the front of the Data Merge box. Advanced options live in the menu in the top-right corner. Each source has its own settings page: - [Google Sheets data merge settings](/docs/manage/data-merge/google-sheets/settings/) - [Google Forms data merge settings](/docs/manage/data-merge/google-forms/settings/) ## Step 5: Output document settings Customise the name, type, and location of the output files. The Output Document box sits below the Data Merge box. ### Change the file name ![](/docs/assets/images/portant-add-ons-data-merge_10_60f7ef425a2435eb4fd511bd_Screen_20Shot_202021-07-21_20at_207.56.04_20pm.png_10.png) In multiple-document mode, you can use `{{tags}}` in the file name so each output gets a different name. Either paste the tag in, or place your cursor in the file name field and click **Insert** in the data source table. ### Create PDF copies (Pro) PDF output requires Portant Pro. Click the Pro icon and add your payment details to enable it. The same upgrade also removes Portant branding from emails. Once Pro is on, tick **Create PDF documents**. Portant will create a PDF subfolder inside your output folder and save a PDF copy of every document. > **Tip:** You can rename or move the output folders inside Google Drive. Portant remembers where they are. If you delete the folder or move it to trash, Portant will create a new one with the same name. ### Open the output folder The Output Document box has a link to the output folder in the top-right corner. That's where Portant saves your documents. ### Change the output folder To save outputs somewhere else, open the **Options** menu in the top-right of the Data Merge box. ![](/docs/assets/images/portant-add-ons-data-merge_11_60f7f4793a070594060260c1_Screen_20Shot_202021-07-21_20at_208.17.09_20pm.png_11.png) Scroll to the **Output Folder** section and click **Change Folder**. Pick the new location. ![](/docs/assets/images/portant-add-ons-data-merge_12_60f7f3dbfc8a70280358fbac_Screen_20Shot_202021-07-21_20at_208.15.28_20pm.png_12.png) ## Step 6: Share documents via email Each merge can email your output documents to specific people automatically. ### Set up an email In the **Share via email** box (under **Document outputs**), tick **Automatically email created docs**. The email modal will open. ![](/docs/assets/images/portant-add-ons-data-merge_13_60f8c542485e64d7e024acae_Open_20Email_20Modal_20_1_.gif_13.png) You'll see the standard email fields (To, Subject, Body) on the left, and source tags, attachments, and sending conditions on the right. **To.** If a tag includes "email" in its name, Portant places it in the **To** field for you. You can add other addresses, and you can add multiple tags. **Subject.** Use `{{tags}}` to personalise the subject line. Place your cursor in the field and click **Insert** next to the tag you want. **Body.** Same idea. Place your cursor in the body and insert the tags you want. **Portant branding.** Free emails include "via Portant Data Merge" in the sender name and a Portant footer at the bottom. Portant Pro removes both. > **Tip:** Emails are sent through your Gmail account, so you'll see them in your Gmail Sent folder. ### Email attachments ![](/docs/assets/images/portant-add-ons-data-merge_14_60f938f28582237fdc1df21f_Screen_20Shot_202021-07-22_20at_207.22.38_20pm.png_14.png) When you share a Google Doc or Slides file, recipients can have one of three access levels: **Viewer** - View the document - Download, copy, or sync it **Editor** - Edit the document - Invite or remove collaborators - See other collaborators - Make a copy - Delete the file **Commenter** - Comment on the document - View the document - Download, copy, or sync it You can also attach a PDF if you have Portant Pro. ### Sending conditions ![](/docs/assets/images/portant-add-ons-data-merge_15_60f9395504560be3c5266812_Screen_20Shot_202021-07-22_20at_207.23.37_20pm.png_15.png) Below the attachments box, tick **Send emails based on defined rules** to only send the email when the source data meets your conditions. ![](/docs/assets/images/portant-add-ons-data-merge_16_60f93969e1d0878c6bc37551_Screen_20Shot_202021-07-22_20at_207.24.04_20pm.png_16.png) Pick a field, set the rule, and add as many rules as you need. Name the rule in the top-right corner and click **Save**. For more on this, see [conditional logic for emails](/docs/features/conditional-logic/emails/). ### Secondary emails ![](/docs/assets/images/portant-add-ons-data-merge_17_60f93cd1cf838a1dac1c3b34_Screen_20Shot_202021-07-22_20at_207.39.16_20pm.png_17.png) Once you've added the first email, tick **Add secondary email** in the **Share via email** box to add another. The same modal opens for the second email. > **Tip:** Useful for approval flows. Pair this with the Google Form source's pre-filled links and send the first email as a draft and the second as a final document. ### Email quotas ![](/docs/assets/images/portant-add-ons-data-merge_18_60f93d036a773fc9329861d7_Screen_20Shot_202021-07-22_20at_207.40.03_20pm.png_18.png) Google sets quotas based on your account type. The current quota is shown at the bottom of the **Share via email** box and the email settings modal. Limits are based on the number of recipients, not unique emails, and they reset every 24 hours (often around 1 PM PST). - Free Gmail accounts: 100 recipients per 24 hours. - Google Workspace: 1,500 recipients per 24 hours (400 for new sign-ups, until you're out of trial). > **Tip:** If your email ends in @gmail.com, you're on a free Gmail account. ## Step 7: Start the merge When everything is set up, click **Create Documents**. ![](/docs/assets/images/portant-add-ons-data-merge_19_60f7fa03d967c1af47c2af6a_Click_20Create_20Documents.gif_19.png) A progress bar appears above the Data Sources Table. Portant will: 1. Check the document for any tag errors. 2. Pull the source data. 3. Show the total document count and progress. ### Open the output folder Click the status bar to open the folder where Portant is saving the documents (you can do this while the merge is still running). ![](/docs/assets/images/portant-add-ons-data-merge_20_60f7fc371e962c5a6c9eb74a_Open_20Folder_20from_20Progress_20Bar.gif_20.png) ### Resolve tag errors If Portant finds a bad tag, the merge stops and asks if you want to fix it. You can highlight the problem tag in the document, or click **Ignore** to keep going. ![](/docs/assets/images/portant-add-ons-data-merge_21_60f80547bf06342a407b4993_Checking_20bad_20tags.gif_21.png) Once you've fixed the tag, click **Create Documents** again to restart. ### Stop a merge To stop the automation, click the **X** next to the progress bar. Anything Portant has already created stays in the output folder. ![](/docs/assets/images/portant-add-ons-data-merge_22_60f8071a530a31f0e0bda0ec_Stopping_20Annimation.gif_22.png) ================================================================================ # Data merge › Set up a Google Sheets source Section: Manage URL: https://www.portant.co/docs/manage/data-merge/google-sheets/ ================================================================================ Connect a Google Sheet to a Portant Data Merge template so you can produce documents from any dataset you already have. ## Connect to an existing sheet After picking Google Sheets on the home page, click **Choose File** to open the file picker. Find the sheet you want to use and click **Select**. If the spreadsheet has more than one sheet, pick the one with your data from the dropdown, then click **Continue**. > **Note:** Portant can only source data from one sheet per template. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source_0_607a165acfedc76a2e1dca09_ixwyPFy5vNk12tdTpwTeawGrtmvIddguAW1pYzsji-gfvE0_7KIFQFi) > **Tip:** Click the file name after you've selected it to open the sheet in a new tab. Handy for double-checking the data. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source_1_607a16573c1e009dfc99f212_GU_bnBHMsSAU2DKAknHONu709EWLuJRBIxALAFxk3JOAAA4jo7eDYNB) > **Note:** Portant expects column headers in the first row of the sheet. ## Create a new sheet If you don't have a sheet yet, click **Create new**. Portant creates a new Google Sheet with your file name, connects it to the template, and adds a few rows of sample data so you can test straight away. ================================================================================ # Data merge › Sheets data merge settings Section: Manage URL: https://www.portant.co/docs/manage/data-merge/google-sheets/settings/ ================================================================================ Once you've added your tags, the Data Merge settings control how the merge runs and which rows get used. ## Choose the type of merge ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-data-merge-settings-for-google-sheets-sources_0_60f7d90aec04febf69ee5a07_Screen_20Shot_202021-07-21_20at_206.21.16_20pm.png_0.png) There are two merge types for a Google Sheets source: - **Create multiple documents**, one document per row. - **Combine into one document**, multiple rows of data into a single document. This option is only available for Sheets sources. ## Filter the rows used ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-data-merge-settings-for-google-sheets-sources_1_60f7d985de0f6ffd83e3fa3c_Screen_20Shot_202021-07-21_20at_206.20.09_20pm.png_1.png) Pick which rows Portant should use for the merge: - **All rows**, every row in the sheet (apart from the header). - **Latest rows**, anything added since the last merge run. - **Custom rows**, a specific range of rows. - **A single row**, one row only. - **Condition**, only rows that match a rule (for example, "Column A equals Yes"). For more on this, see [conditional logic for documents](/docs/features/conditional-logic/documents/). ## Other options ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-data-merge-settings-for-google-sheets-sources_2_60f7f4793a070594060260c1_Screen_20Shot_202021-07-21_20at_208.17.09_20pm.png_2.png) Open the options menu in the top-right of the Data Merge box for more settings. ### Auto-create ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-data-merge-settings-for-google-sheets-sources_3_60a22678c98ebefabac514c5_Screen_20Shot_202021-05-17_20at_206.15.51_20pm.png_3.png) Portant checks the source sheet hourly or daily, and creates a new document any time a new row appears. For more on this, see [auto-create from Google Sheets](/docs/manage/automation/sheets-auto-create/). ### Document links ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-data-merge-settings-for-google-sheets-sources_4_60fa06f3abbc0f69cbef0d45_Screen_20Shot_202021-07-23_20at_2010.01.36_20am.png_4.png) When this is on, Portant writes the document (and PDF) URL into the next column of your sheet, alongside the row that produced it. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-data-merge-settings-for-google-sheets-sources_5_60fa079a2d484d10467e02a5_Screen_20Shot_202021-07-23_20at_2010.04.29_20am.png_5.png) ### Data grouping ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-data-merge-settings-for-google-sheets-sources_6_60e53259c96f3f012945434a_ezgif.com-gif-maker.gif_6.png) Portant adds extra rows to tables in your template so all related rows from your sheet land together (great for invoices and quotes with multiple line items). For more on this, see [line items > data grouping](/docs/features/line-items/data-grouping/). > **Note:** These options are only available in **Create multiple documents** mode. ================================================================================ # Data merge › Set up a Google Forms source Section: Manage URL: https://www.portant.co/docs/manage/data-merge/google-forms/ ================================================================================ Connect a Google Form to a Portant Data Merge template so you can create a new document each time someone submits a response. ## Connect to an existing form After picking Google Forms on the home page, click **Choose File** to open the file picker. Find the form you want to use and click **Select**. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source_0_607a165acfedc76a2e1dca09_ixwyPFy5vNk12tdTpwTeawGrtmvIddguAW1pYzsji-gfvE0_7KIFQFi) > **Tip:** Click the file name after selecting it to open the form in a new tab. Useful for double-checking the questions. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source_1_607a16573c1e009dfc99f212_GU_bnBHMsSAU2DKAknHONu709EWLuJRBIxALAFxk3JOAAA4jo7eDYNB) ## Create a new form If you don't have a form yet, click **Create new**. Portant creates a new Google Form with your file name, connects it to the template, and adds a few sample questions so you can test straight away. ================================================================================ # Data merge › Forms data merge settings Section: Manage URL: https://www.portant.co/docs/manage/data-merge/google-forms/settings/ ================================================================================ Once you've added your tags, the Data Merge settings control how the merge runs and what happens when a new response comes in. ## Automatically create documents ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-forms-source-data-merge-settings-for-google-forms_0_60f80a648cce2d067c61382c_Screen_20Shot_202021-07-21_20at_209.51.38_20pm.png_0.png) The main job of a Google Forms source is to create a new document each time someone submits a response. Tick the checkbox in the Data Merge box to turn it on. An indicator appears above the data sources table to confirm it's running. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-automatically-create-documents_2_60f80b1d49906e99ce0991b9_Screen_20Shot_202021-07-21_20at_209.54.26_20pm.png_2.png) For more on this, see [auto-create from Google Forms](/docs/manage/automation/forms-auto-create/). ## Check document tags Below the auto-create checkbox, click the button to check your tags. Portant scans the document for any tags it doesn't recognise and highlights them so you can fix them. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-forms-source-data-merge-settings-for-google-forms_2_60f80c1378aaeb0a9e06dcd3_Check_20Bad_20tags_20in_20a_20Google_20Form_20Source.gi_2.png) ## Document links ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-forms-source-data-merge-settings-for-google-forms_3_61650757d0380907e3f4a506_Screen_20Shot_202021-10-12_20at_202.55.39_20pm.png_3.png) In the options menu (top-right of the Data Merge box), turn on **Document Links** to have Portant write the document (and PDF) URL into the response sheet, next to the row that triggered it. ## Response number and timestamp tags ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-forms-source-data-merge-settings-for-google-forms_4_61650786f223467baa2d9c46_Screen_20Shot_202021-10-12_20at_202.48.44_20pm.png_4.png) At the bottom of the source table, you'll find two extra tags that aren't questions in your form: - **Timestamp**, the time the response was submitted. The format and timezone can be changed in the [timezone, date and time settings](/docs/manage/data-merge/advanced/timezone-date-time/). - **Response number**, the unique response number, starting from 1. ================================================================================ # Data merge › Edit response and pre-filled response links Section: Manage URL: https://www.portant.co/docs/manage/data-merge/google-forms/response-links/ ================================================================================ Edit and pre-filled response links let respondents update an existing answer or submit a new one with their previous answers already filled in. Useful for approval flows, repeat submissions, or letting people fix typos without starting from scratch. ## Where to find the links Open the email settings by ticking **Automatically email created docs** in the **Share via email** box. When the email modal opens, the Form response links sit on the right, under the template tags. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-forms-source-edit-response-and-pre-filled-response-links_0_60f8c542485e64d7e024acae_Open_20Email_20Modal_20_1_.gif_0.png) ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-forms-source-edit-response-and-pre-filled-response-links_1_6100df7f57819a4bc6bda602_Screen_20Shot_202021-07-28_20at_202.37.13_20pm.png_1.png) ## Edit response link The edit response link lets a respondent change the answers they've already submitted. When they click the link, the form opens with their original answers pre-filled. They can change anything and click **Submit**, and the original row in the response sheet is updated with the new answers. > **Note:** This updates the original row, it doesn't create a new one. Edited answers are marked with a small triangle in the top-right corner of the cell: ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-forms-source-edit-response-and-pre-filled-response-links_2_6100de28458eea1f4e3a26d6_Screen_20Shot_202021-07-28_20at_202.33.26_20pm.png_2.png) Portant then recreates the document and saves it in the output folder. The original document stays in the folder too. If **Document Links in Spreadsheet** is on, the link in the response sheet is updated to the new document. You can see the previous answer by right-clicking the cell and choosing **Show edit history**. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-forms-source-edit-response-and-pre-filled-response-links_3_6100fa9764e814a885893ed4_Screen_20Shot_202021-07-28_20at_204.34.02_20pm.png_3.png) ## Pre-filled response link The pre-filled link lets a respondent submit a new response with their previous answers already filled in. When they click the link, the form opens with the original answers in place. They can change anything they want and click **Submit**, and a new row is added to the bottom of the response sheet. Portant then creates a new document from the new row and saves it in the output folder. ================================================================================ # Data merge › Insert images via data merge Section: Manage URL: https://www.portant.co/docs/manage/data-merge/inserting-images/ ================================================================================ Portant Data Merge can drop images straight into your template. Mark a source row as an image, place a placeholder where you want it, and Portant will replace it with the right image at run time. ## Add an image ![](/docs/assets/images/portant-add-ons-data-merge-inserting-images_0_60f7d7f59d72cdef5169bd61_Adding_20Images.gif_0.png) 1. Click the source row to open its options. 2. Tick **Insert as image**. The tag icon changes to an image icon. 3. Click **Insert** to add a placeholder image to your template. 4. Move and scale the placeholder where you want the image to appear. Portant will keep the source image's aspect ratio when it inserts the real image. In Google Docs, images can only be placed as **in-line** images. Wrap, break, behind, and in-front layouts aren't supported in a data merge. If you need layered images, use a Google Slides template instead. ![](/docs/assets/images/portant-add-ons-data-merge-inserting-images_1_6191a3518fa52f5b5f899d31_Screen_20Shot_202021-11-13_20at_2012.08.47_20pm.png_1.png) > **Note:** Supported formats are .jpg, .jpeg, .png, and .gif. ## How sizing works Portant never distorts an image to fit the placeholder. If the source image has a different aspect ratio, Portant scales the height to match the ratio while keeping the placeholder width. ![](/docs/assets/images/portant-add-ons-data-merge-inserting-images_2_609cbde3abaac5bac9ab7053_Image_20constraints.png_2.png) ## Supported image sources - Any public image URL - Any Google Drive image URL you have access to - Any image uploaded via Google Forms > **Note:** When using a Google Form to collect images, Portant inserts one image per question. If multiple images are uploaded, only the first is used. You can limit uploads to one in [form settings](https://support.google.com/a/users/answer/9308632?hl=en). ================================================================================ # Data merge › Advanced settings Section: Manage URL: https://www.portant.co/docs/manage/data-merge/advanced/ ================================================================================ The advanced settings cover the bits of Portant Data Merge you'll touch less often, but that matter when you need them: tag names, timezones, output folders. ## In this section - [Editing tag names](/docs/manage/data-merge/advanced/tag-names/), shorten or rename tags to make templates easier to format and read. - [Timezone, date and time format settings](/docs/manage/data-merge/advanced/timezone-date-time/), choose how dates and times appear and which timezone they're in. - [Editing the output folder](/docs/manage/data-merge/advanced/output-folder/), change where output documents are saved. ## Related - [Conditional logic for documents](/docs/features/conditional-logic/documents/), only generate a document when the source row matches your rules. - [Conditional logic for emails](/docs/features/conditional-logic/emails/), only send an email when the conditions are met. - [Line items > data grouping](/docs/features/line-items/data-grouping/), group repeated rows from a sheet into one document. ================================================================================ # Data merge › Edit tag names Section: Manage URL: https://www.portant.co/docs/manage/data-merge/advanced/tag-names/ ================================================================================ Source field names can be long, technical, or just hard to format around. Editing the tag name in Portant changes how the tag looks in your document, without changing anything in the source. ## Edit a tag name ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-editing-tag-names_0_60f7d13822986e4ecc658924_Customise_20a_20Tag.gif_0.png) 1. Click the source row to open its options. 2. Type the new tag name into the text box. 3. Press enter or click the row again. The tag icon turns solid blue when the name is saved. > **Note:** Tag names need to be unique across the source. You can't reuse a name that already belongs to another row or tag. ================================================================================ # Data merge › Timezone, date and time formats Section: Manage URL: https://www.portant.co/docs/manage/data-merge/advanced/timezone-date-time/ ================================================================================ Set the timezone, date format, and time format Portant uses when it inserts dates and times into your documents. ## Change the date or time format Open the Data Merge settings by going to **Data Merge > Options**. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-data-merge-settings-for-google-sheets-sources_0_60f7d90aec04febf69ee5a07_Screen_20Shot_202021-07-21_20at_206.21.16_20pm.png_0.png) Scroll to the **Date and Timezone** section. Pick the date and time formats you want from the dropdowns. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-timezone-date-and-time-format-settings_1_610270343978c94735bc1a1e_Screen_20Shot_202021-07-29_20at_2012.45.11_20pm.jpeg_1.png) ## Change the timezone The timezone setting lives in the same **Date and Timezone** section. Pick your timezone from the dropdown and Portant will insert any timestamp tags using that timezone. ================================================================================ # Data merge › Edit the output folder Section: Manage URL: https://www.portant.co/docs/manage/data-merge/advanced/output-folder/ ================================================================================ Choose where Portant saves your output documents. You can rename the folder, move it inside Google Drive, or pick a completely different folder from the settings. ## Rename the folder When you create a merge, Portant creates an output folder in the same location as your template. The default name is `[Template name] [Outputs]`. Click **Open** in the top-right of the Document Outputs box to jump to the folder. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-editing-the-output-folder_0_6183618ad82101f28a6dfdfa_Screen_20Shot_202021-11-04_20at_203.28.46_20pm.png_0.png) Click the folder name at the top of the page and select **Rename**. Type the new name and click **OK**. Portant will keep saving documents in the renamed folder. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-editing-the-output-folder_1_618362e549d1252e268cdccc_Screen_20Shot_202021-11-04_20at_203.34.05_20pm.png_1.png) ## Move the folder You can move the output folder anywhere in your Google Drive. Portant will remember the new location. Click **Open** in the top-right of the Document Outputs box. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-editing-the-output-folder_0_6183618ad82101f28a6dfdfa_Screen_20Shot_202021-11-04_20at_203.28.46_20pm.png_0.png) Click the folder name at the top of the page and select **Move to**. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-editing-the-output-folder_2_61836434f556c41c65d61470_Screen_20Shot_202021-11-04_20at_203.39.50_20pm.png_2.png) Pick the new location and click **Move here**. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-editing-the-output-folder_3_618364cff556c46b6fd616a1_Screen_20Shot_202021-11-04_20at_203.41.22_20pm.png_3.png) > **Tip:** Click the **New Folder** icon in the bottom-left to create a new folder while you're at it. ## Change the folder To save outputs in a different folder altogether, open the Data Merge settings via **Data Merge > Options**. ![](/docs/assets/images/portant-add-ons-data-merge-how-to-set-up-a-google-sheets-source-data-merge-settings-for-google-sheets-sources_0_60f7d90aec04febf69ee5a07_Screen_20Shot_202021-07-21_20at_206.21.16_20pm.png_0.png) Scroll to the **Output Folder** section and click **Change Folder**. The current folder is shown in blue. ![](/docs/assets/images/portant-add-ons-data-merge-advanced-settings-editing-the-output-folder_5_618365f824fc6d0d04270e2c_Screen_20Shot_202021-11-04_20at_203.44.37_20pm.png_5.png) ================================================================================ # Quotes Section: Use cases URL: https://www.portant.co/docs/use-cases/quotes/ ================================================================================ Generate personalised quotes from your CRM, spreadsheet, or form responses, then send them out as a PDF or for signature without rekeying anything. A Portant quote workflow takes data from a source (Google Sheets, Google Forms, HubSpot, Webhooks), drops it into a Google Doc, Slide, or Word template, and produces a finished quote you can email or send for eSignature. ![Quote document generated from a Portant workflow with a repeating line item table](/docs/assets/images/duplicated/use-cases-quotes/screenshot-01.png) ## How a quote workflow fits together Most quotes have three moving parts: 1. **Customer details** at the top of the document (name, company, contact, quote number, valid-until date) 2. **A list of products or services** in a table that can grow or shrink depending on what's being quoted 3. **A total** with subtotals, tax, and a grand total In Portant, the customer details come from regular [tags](/docs/features/tags/) you place in the template. The product list comes from [line items](/docs/features/line-items/), which use a single table row that expands at merge time (see [repeating tables](/docs/features/line-items/repeating-tables/)). Totals are calculated from the line items using [tag formulas](/docs/features/tags/formulas/). ## Set up the workflow 1. Create a new workflow and pick the source that holds your quote data. For deals and contacts, that's usually [HubSpot](/docs/sources/hubspot/). For a sales sheet, [Google Sheets](/docs/sources/google-sheets/). For inbound requests, [Google Forms](/docs/sources/google-forms/) or a [webhook](/docs/sources/webhooks/). 2. Add a template block and choose your quote document (Google Docs, Google Slides, or Word). 3. Place tags for the customer details in the body of the document. 4. Add a table for the products. Put one row of line item tags inside it (name, quantity, unit price, total). Portant will repeat that row for every line item in the source. 5. Add a totals row beneath the repeating row with `{{=SUM(Line Total)}}` or your own formula. For source-specific guides on grouping line items into one document, see: - [HubSpot: add multiple line items into a single document](/docs/sources/hubspot/add-multiple-line-items-into-a-single-document/) - [Google Sheets: group rows into one document](/docs/sources/google-sheets/data-grouping/) - [Webhooks: group payload arrays into one document](/docs/sources/webhooks/webhook-data-grouping/) ## Send the quote Once the document looks right, decide how it leaves Portant: - Email it as a PDF using a [Send via email](/docs/send/email/) block. - Send it for signature with an [eSignature](/docs/send/esignatures/) block when the quote needs to be accepted. - Save the output to a Drive or OneDrive folder using [Outputs](/docs/manage/outputs/). ## Related - [Line items overview](/docs/features/line-items/) - [Repeating tables](/docs/features/line-items/repeating-tables/) - [Tags](/docs/features/tags/) - [eSignatures](/docs/send/esignatures/) ================================================================================ # Proposals Section: Use cases URL: https://www.portant.co/docs/use-cases/proposals/ ================================================================================ Turn proposal data from your CRM, spreadsheet, or form into a polished, branded document, then deliver it by email or for signature. A proposal usually mixes static narrative content (about your company, your approach, your terms) with personalised sections that need to change for every prospect (name, scope, pricing, timelines). Portant keeps the static parts in your template and fills in the personalised parts from a source. ![Personalised proposal generated from a Portant workflow](/docs/assets/images/duplicated/use-cases-proposals/screenshot-01.png) ## What you'll need - A source with the deal or prospect data, such as [HubSpot](/docs/sources/hubspot/), [Google Sheets](/docs/sources/google-sheets/), or [Google Forms](/docs/sources/google-forms/) - A proposal template in Google Docs, Google Slides, or Word - Optional: an eSignature step if you want the prospect to accept and sign ## Build the workflow 1. Create a new workflow and connect your source. 2. Add a template block and select your proposal document. 3. Drop [tags](/docs/features/tags/) where personalised text needs to appear (client name, project scope, dates, contact details). 4. For pricing tables, package options, or scope items that vary by deal, use a [repeating table](/docs/features/line-items/repeating-tables/) so one row in the template expands to as many rows as the source has line items. 5. Use [tag formulas](/docs/features/tags/formulas/) for subtotals or grand totals beneath the repeating row. 6. If sections of the proposal should only appear for certain deals (for example, optional add-ons or region-specific terms), use [conditional logic for documents](/docs/features/conditional-logic/documents/). ## Send the proposal - For a PDF you'll attach to an email, add a [Send via email](/docs/send/email/) block. - For a proposal that needs to be accepted, send it for [eSignature](/docs/send/esignatures/) and let Portant track when it's been signed. - Generated documents land on the [Outputs](/docs/manage/outputs/) tab and can be auto-filed into a Drive or OneDrive folder. ## Related - [Line items overview](/docs/features/line-items/) - [Tags](/docs/features/tags/) - [Conditional logic for documents](/docs/features/conditional-logic/documents/) - [eSignatures](/docs/send/esignatures/) ================================================================================ # Contracts Section: Use cases URL: https://www.portant.co/docs/use-cases/contracts/ ================================================================================ Generate contracts from data you already have, send them out for signature, and keep a record of what was signed and when. Portant connects a source (CRM, form, spreadsheet) to a contract template. Personalised fields fill in automatically, the contract goes out for eSignature, and the signed PDF lands back in your outputs. ![Contract workflow built in Portant with template, tags, and an eSignature step](/docs/assets/images/duplicated/use-cases-contracts/screenshot-01.png) ## What you'll need - A source with the counterparty details, for example [HubSpot](/docs/sources/hubspot/), [Google Sheets](/docs/sources/google-sheets/), or [Google Forms](/docs/sources/google-forms/) - A contract template in Google Docs or Word - Recipients who will sign the contract ## Build the workflow 1. Create a workflow and connect your source. 2. Add a template block and select your contract document. 3. Place [tags](/docs/features/tags/) where personalised content needs to appear: party names, addresses, effective dates, fees, signing authority. 4. If parts of the contract are only relevant for some deals (jurisdiction-specific clauses, optional schedules), gate those sections with [conditional logic for documents](/docs/features/conditional-logic/documents/). 5. Add an [eSignature](/docs/send/esignatures/) block, then drop signature, date, and any text or checkbox placeholders into the document where the signers need to fill them in. ## Sending and tracking - Customise the signature request email so the recipient understands what they're signing. - Once everyone has signed, Portant emails the final PDF to all parties and stores a copy on your Outputs tab. - For longer review cycles, see [signature link expiry](/docs/send/esignatures/expiry/) and [resend signature requests](/docs/send/esignatures/resend/). ## Related - [Tags](/docs/features/tags/) - [Conditional logic for documents](/docs/features/conditional-logic/documents/) - [eSignatures](/docs/send/esignatures/) - [Compliance and esigning laws](/docs/send/compliance/) ================================================================================ # Invoices Section: Use cases URL: https://www.portant.co/docs/use-cases/invoices/ ================================================================================ Generate invoices from a Google Sheet (or any other source), email them as PDFs, and keep a record of what was sent and what's been paid, all in one workflow. This guide walks through a Sheets to invoice workflow end to end: building the template, adding line item totals, emailing the PDF, and turning on auto-create so new rows produce new invoices automatically. ## What you'll learn 1. Create a new workflow 2. Customise your invoice template 3. Add calculations for totals 4. Share invoices via email 5. Set up file settings 6. Add a Record outputs block 7. Run the automation 8. Start from a template in the gallery ## Create a new workflow Click "+ Add Workflow" in the top right of your dashboard. ![](/docs/assets/images/use-cases-invoices_0_6525b4f54232c67ea1302fa9_PvnK8zoaFtZtwvIXr1Cy0vla9MBwbvzHcSNFR8LD2bECkdrt0LZryU-) Choose a source. For this example the invoice data lives in a Google Sheet. ![](/docs/assets/images/use-cases-invoices_1_6525b4f55824b3ba5795939c_8TWhmf0Nh3_wTDs_VcU5dOQ0ZZ4hPallZuqlXLLuDIcr1sXnkThjsLQ) With the source connected, click the plus icon to add a template block. ![](/docs/assets/images/use-cases-invoices_2_6525b4f4a57b0641da597533_XyIVZFveZX1LBUm9a9zoHFZxdV5T2VvbwqUnJTToy9-EzRKz8qLfUN1) Select a Google Doc template. ![](/docs/assets/images/use-cases-invoices_3_6525b4f461baa3fb6f12127a_Xw150dtVMMN8JEAgdNgzWgK150CmIRnG0U5vaJ3-Gz0-D6_LYVH1ekU) ## Customise your invoice template When the template opens, you'll see a source table on the right. Each row is a column from your sheet, and each one has a copy button so you can paste the matching tag into the template. ![](/docs/assets/images/use-cases-invoices_4_6525b4f48e8c43a311ad912f_cOdIwHEzQIoi9smbCXaWwuioUHyq6-i2nw1Lc2IbR1dR1bmSz-iLPy0) > A `{{tag}}` is how Portant marks where source data should be inserted. See [tags](/docs/features/tags/) for the full reference. Set the Output Name for each generated file. You can use tags here too. In this example we're using `{{Invoice Number}}` and `{{Customer Name}}`. Press Enter to save the new naming pattern. ![](/docs/assets/images/use-cases-invoices_5_6525b4f6d3786344ea50bb86_zMCfVBVl8mx1yMn3ntOl2WmDYFYUD3qWXW5oTO1rR-BRsJOEUKHBlqn) Turn on "Create PDF copy" so a PDF version of each invoice is saved to your Outputs tab and your Drive folder. ![](/docs/assets/images/use-cases-invoices_6_6525b4f4f9df919ea1851961_4cdFMwLoiAggXMsRwSqkKYO1csosAsqSXmi6BDmkC73JLcbnuGoj1ZQ) ## Add calculations for totals When your invoice has multiple line items, you'll usually want a subtotal, average, or total. Portant supports a few formulas inside tags. These work on fields that are part of a [data group](/docs/features/line-items/data-grouping/). **Sum** adds all field values within a group: ``` {{=SUM(Field name)}} ``` **Average** averages all field values within a group: ``` {{=AVG(Field name)}} ``` **Maximum** returns the largest value in a group: ``` {{=MAX(Field name)}} ``` **Minimum** returns the smallest value in a group: ``` {{=MIN(Field name)}} ``` For more, see [tag formulas](/docs/features/tags/formulas/). ## Share invoices via email Click "Share document via Gmail" to add an email block. > You can also send invoices through [Outlook](/docs/send/email/outlook/). ![](/docs/assets/images/use-cases-invoices_7_6525b4f457a0defc2e8efaac_welyVcqLqF1XOhC69_axqgzw4UgICs6zd67XjQLC42fTwPnEi-z-lJj) ![](/docs/assets/images/use-cases-invoices_8_6525b4f6ffcd94972da0545a_GE-diHNWMF5um7bqv_BFkN_KEmrTxuan9PDr0DOww7CpURO7w30BgYC) Build the email body. Use tags to personalise the recipient address, subject, and content. ![](/docs/assets/images/use-cases-invoices_9_6525b4f6b37d89728092d083_StZPekDRckdQr6PcnyNNT2rGccUJTTY64wmHW47MxhbZZMMx8fKjhKP) > You can also add an email block by clicking the plus icon between blocks. ![](/docs/assets/images/use-cases-invoices_10_65294c0c532f1fa906429728_H1Ys3s3DOhqtmaon9KpgrOWhFTjoQAR_4hxCpXKy5is1e33QAmjBz53) ## Customise the file settings Click "Add attachments" in the email block. ![](/docs/assets/images/use-cases-invoices_11_6525b4f64ea2fd17ae768b0c_wljsmrdBJM31_jRFPhnUoEPpsGDKt_eqrOXrMRQRd-CIieYDF7AEKZl) Pick the format you want to send. For invoices, PDF is usually the right choice. ![](/docs/assets/images/use-cases-invoices_12_6525b4f461f8baff8f39a70c_SkXXu8r-lq_rydXiIQh6G0oGe4OCyAiW6Ohu2vi1j70Cu_Y_TRTCRY2) Save your changes. ![](/docs/assets/images/use-cases-invoices_13_6525b4f5a43386c0b96fae83_5JqaRUo94l0reizB2_AweFVEzG-q03kvlBO_HSRVyxXh0tnVtWarf1h) For more on file types, see [file formats](/docs/manage/file-formats/). ## Set up a Record outputs block A Record outputs block writes a link to each generated file back into your source sheet. You'll know which rows have been processed and where the output lives. ![](/docs/assets/images/use-cases-invoices_14_6525b4f60c8ab9c9f5fa5528_UyUJ54GfPsBjCWl-Kv42f8ov_LT05wovy50jajqLM1HTzFpog65LoH-) The block adds new columns to your sheet with the output links. ![](/docs/assets/images/use-cases-invoices_15_6525b4f7315d96abb5e6230b_MHlUHT6nEMKDRKm54NO-iMvVT_TWKOMMdisd3G1Hsxm9kxaH3TNPFzK) Because we turned on "Create PDF copy", the generated PDFs also show up on the [Outputs](/docs/manage/outputs/) page. ![](/docs/assets/images/use-cases-invoices_16_6525b4f4d8e9ce77bf7db786_CHrWq-cauZ2q5K4TNXESrdAMrVtSxgSbkC0n5ObuwUTa0xIQnZEqzsJ) ## Run the automation Click the lightning icon to see all the blocks in your workflow. Green ticks mean every block is set up correctly. ![](/docs/assets/images/use-cases-invoices_17_6525b4f415e2cd917496adc0_sJwko_gBUKOFP4U9WcpF38tEWgpIXeQVDSMSaZbU8X0JrXg7HqNxvIc) Click "Automate", then "Start". Portant will generate an invoice for each row. ![](/docs/assets/images/use-cases-invoices_18_6525b4f5586d94cb329b6b6f_sRbtt085hdndwEVC1c6dozEKC8ifxTeKbO1jMgrqGNCiOWfw1mHOXSg) You can also run the workflow on a specific range of rows instead of all of them. Pick "Custom range" from the dropdown. ![](/docs/assets/images/use-cases-invoices_19_6525b4f5980499d48e3304d1_UvevwPCSlf9n5-2cuBrb2CTRe_KP0IxPsVPlog9pR_G9yNEZe0k16zg) To have Portant run automatically every time a new row is added, switch on Auto-create. See [auto-create from a Google Sheet](/docs/manage/automation/sheets-auto-create/) for details. ![](/docs/assets/images/use-cases-invoices_20_6525b4f4d9d6537fa076a138_anndwxlHS_V34bP7UhdrKPmjI6syYnsr7EF-CGtOgI-bzTIQhgsoXfj) ## Start from a template in the gallery If you'd rather not build from scratch, the [template gallery](https://app.portant.co/templates) has a ready-made invoice workflow with the source sheet and template prewired. Open the gallery and pick the Invoice Workflow. ![](/docs/assets/images/use-cases-invoices_21_65294c10db833920ec9adeba_XwYqrfj2qn5MeKAuGq4etTe9GS79Lr4MkYCaJmibv1iJxSGs0bADcMB) Click "Copy Workflow". ![](/docs/assets/images/use-cases-invoices_22_65294c0ce58053b985ce0713_LgDQ54gPbgNfP4bb6GYgLqMMEqhStPrqHn8vbfWxehRmPMkfE3yHbmr) Portant copies the workflow into your account. ![](/docs/assets/images/use-cases-invoices_23_65294c0e3da2c9890a47a63e_e3kd4amRlcJny8fZPUT3VEFUelLOBO_QgGYSWdVWymP3z3Xngr6p6b0) All blocks are configured and ready to customise. ![](/docs/assets/images/use-cases-invoices_24_65294c0e02a5d4b75a5a9fd5_aaLleGJgVZKzbF5Oieva-MASWSHu2k-TzRKQLMSV_7Dsaxsf72QZGD_) From here, edit each block to match your own data and template. ## Related - [Line items overview](/docs/features/line-items/) - [Repeating tables](/docs/features/line-items/repeating-tables/) - [Tags](/docs/features/tags/) - [eSignatures](/docs/send/esignatures/) - [Payment links](/docs/send/payments/payment-links/) ================================================================================ # Quarterly business reviews Section: Use cases URL: https://www.portant.co/docs/use-cases/quarterly-business-reviews/ ================================================================================ Generate a personalised QBR for every customer straight from your CRM, so account managers spend their time talking to clients instead of building decks. This guide uses [HubSpot](/docs/sources/hubspot/) as the source, but the same pattern works with [Google Sheets](/docs/sources/google-sheets/) or any other source that holds your customer data. ![](/docs/assets/images/use-cases-quarterly-business-reviews_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F8KLPpqEibeCM1kSW54XS_2Fimage.png_0.png) ## What you'll learn 1. Connect HubSpot to Portant 2. Create a new workflow 3. Customise your QBR template 4. Generate your first report 5. Automate QBR creation from HubSpot ## Step 1: Connect HubSpot to Portant If this is your first HubSpot workflow, install the Portant app for HubSpot first. See [HubSpot source](/docs/sources/hubspot/) for setup. ![](/docs/assets/images/use-cases-quarterly-business-reviews_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FXJpGBHJLD9felWGK9RWe_2Fimage.png_1.png) ## Step 2: Create a new workflow 1. Sign in to Portant. 2. Click "New Workflow" in the top right. 3. Choose HubSpot as the source. 4. Pick the primary object the QBR should be built from: - **Contact** for reviews focused on individual relationships and engagement - **Company** for account-level performance across a customer - **Deal** for pipeline performance, revenue, and stage progress See [HubSpot source](/docs/sources/hubspot/) for more on selecting the right object. ![](/docs/assets/images/use-cases-quarterly-business-reviews_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F9GVOnGizAriGXUvVEDlv_2Fimage_20_1_.avi_2.png) ## Step 3: Customise your QBR template With HubSpot connected, add a template block and pick the document the QBR will use. ![](/docs/assets/images/use-cases-quarterly-business-reviews_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Few5Q9meQAy63bp4pbeJJ_2Fimage-3.avif_3.png) Choose a Google Doc, Slide, or email template that matches your QBR layout. ![](/docs/assets/images/use-cases-quarterly-business-reviews_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FAV3DyZOc4r2NQpnJDhUG_2Fpika-1725704902) Drop in HubSpot property [tags](/docs/features/tags/) where personalised content needs to appear, for example `{{Customer Name}}` or `{{Health Score}}`. To choose which HubSpot fields are available as tags, click "Manage HubSpot Fields". You can also customise the output file name and format using tags. ## Step 4: Generate your first report ![](/docs/assets/images/use-cases-quarterly-business-reviews_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FOtdaTnUOPKrmoNWFM4F8_2Fimage.png_5.png) To generate a QBR manually: 1. Open the matching record in HubSpot (a deal, contact, or company). 2. In the right panel, click "Actions" and choose your Portant workflow. 3. Portant generates the report and adds a link to the side panel. ![](/docs/assets/images/use-cases-quarterly-business-reviews_6_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F7nTH7kWIxZtEspQoQhyr_2Fimage.png_6.png) ## Step 5: Automate QBR creation from HubSpot Once the workflow runs cleanly on a single record, hand it off to a HubSpot workflow so reports get generated on a schedule or based on a trigger. 1. In HubSpot, build a workflow with the trigger you want (for example, "Last QBR was 90+ days ago" or "Deal stage = Renewal"). 2. Add the Portant action and select the workflow you just built. 3. Submit a test record so you can confirm the report generates as expected. See [HubSpot source](/docs/sources/hubspot/) for more on triggering Portant from a HubSpot workflow. ## Related - [HubSpot source](/docs/sources/hubspot/) - [Tags](/docs/features/tags/) - [Line items overview](/docs/features/line-items/) (for QBR sections built from a list of records, like deals or invoices) ================================================================================ # Incident reports Section: Use cases URL: https://www.portant.co/docs/use-cases/incident-report/ ================================================================================ Turn an incident form into a fully formatted report PDF, then route it for signature, all without retyping a single field. This guide builds the workflow on top of [Google Forms](/docs/sources/google-forms/) so anyone in the team can submit an incident and the report is generated automatically. The same pattern works with Google Sheets, Microsoft Forms, or webhooks. ## What you'll learn 1. Create a new workflow 2. Customise your incident report template 3. Add a signature request (optional) 4. Add the email block for the signed copy 5. Turn on the workflow and test it ## Create a new workflow Click "Add Workflow" in the top right. ![](/docs/assets/images/use-cases-incident-report_0_6526f2eb03896103ca486ef9_RuP5O6HsR8qYRlfDC7ObqwbPrj1sVFXozsiMF-zyGBFn-yUiQHRM4a6) Choose Google Forms as the source. ![](/docs/assets/images/use-cases-incident-report_1_6526f2efbfc6acfa20322d82_YGT3aZyQu8TmiuiIFYEHaJyn2ri0MjVBwkj0R9yaJNPXrIZeJcNUI6A) Pick the form from your Google Drive. ![](/docs/assets/images/use-cases-incident-report_2_6526f2ee4ae603a66c2f7e11_QHwOiR-fe1MbeW5MkF9QAl_j9dwuoVgLhuXKzbbrW03h6ht9O6jlXjZ) Once the form is connected, Portant lists the responses on the right. If there are no responses yet, the section will be empty. Add a template block by clicking "Connect" on the right. ![](/docs/assets/images/use-cases-incident-report_3_6526f2e60c248b2605778b7f_pgKBCU7q3ZSc_C_Marmv_h63Ja_uaSftNhZbnty4DX7wnXt2z9TByoN) Choose Google Docs as the template type. ![](/docs/assets/images/use-cases-incident-report_4_6526f2e6dd2c658b79911fb1_n8Tq3QLHMy-hAmTfSYMy8ZpgabdK6I8UKNTBqrokASPhS7KlrzZq-aJ) ## Customise your incident report template Portant opens the template alongside a source table. Each row in that table is one of your form questions. ![](/docs/assets/images/use-cases-incident-report_5_6526f2e677a71de3438f75fc_tg794x3JBXOvFuV_vgVLeaSS86weJxEkWDdkt6bxDPDONUtwDiljkLZ) To insert a form answer, click "Copy" next to the question and paste the `{{tag}}` into the document where you want the answer to appear. ![](/docs/assets/images/use-cases-incident-report_6_64f8aa58859fe139e96217d0_e_yxMND4hJV-yIpP91Y-rYfjy_pfeKe-Fj-1k_vaSWEjH-PnG_WVT6L) > You can also [add image tags](/docs/features/tags/images/) to documents and presentations, and edit a tag's display name by clicking on the row. Set the Output Name for each generated document. Tags work here too, which is useful for naming files like "Incident Report - {{Date}} - {{Reporter Name}}". ![](/docs/assets/images/use-cases-incident-report_7_6526f2e67b2c30a3c276675f_1_9cv92CjPZ-ubdnewUre7TSzhoySHj2-BvnAtwQ6dn6Bx5VhjxlWdy) Beneath the Output Name field is the option to save each output as a [PDF](/docs/manage/file-formats/pdf/). PDFs are stored on the Outputs tab. ![](/docs/assets/images/use-cases-incident-report_8_6526f2e67f19e90c05ab2a0e_lqKFl5hOlx-mslBpZm3wEDG9W-TF7Gy_gz9UlP9SFN1snrAE19175Gf) ![](/docs/assets/images/use-cases-incident-report_9_64f8aa58d80f0d0c18b0de47_ED1-oCcAZNh3wB7ke_o6xlNPCnfm_-jmp3uysVYVAWaC7C5rm1Q7m0b) > Free accounts include a Portant watermark in the PDF footer. To remove it, [upgrade to Pro or Teams](https://app.portant.co/settings/billing). That's the document side done. Next, you can add a signature step so the right people sign off on each report. ## Add a signature request (optional) Click "Add" to insert a signature request block. ![](/docs/assets/images/use-cases-incident-report_10_6526f2e6692cb25898f0a709_QJbnwpV4I01KtPH_-qJjBwgnhVvDAGSXAKtSwsNBuG0dyPw0Cf-FCmW) Click "Insert" to add signature and date placeholders to the document. ![](/docs/assets/images/use-cases-incident-report_11_6526f2e9fd96b258b90fed35_wcYnM2Nqlcbjd9GQv8DnDfSbAmfuJ3kxxis8JygVwfKlJ5LQIvSAk3X) When inserting the placeholder, choose "Move with text" so it sits inline with the rest of the document and moves with surrounding content. ![](/docs/assets/images/use-cases-incident-report_12_652ec7b86e88ac34381eba3a_LynRfbOv3FkVg6F3WONKSiAdMdPTKRfRqd7elmmJBnmGVK8zBAFkbNj) ![](/docs/assets/images/use-cases-incident-report_13_652ec7b62f999181433de1cf_4vQ23wZWZ2ZRRtH8UceeVLT_nswi64R9ONdf656KU6Dac7sIipv6iFR) > You can also insert placeholders for text fields and checkboxes the signer needs to fill in. Customise the signature request email so the signer knows what they're signing. For more, see [customise the signature request email](/docs/send/esignatures/customise-email/). ![](/docs/assets/images/use-cases-incident-report_14_6526f2e7120d6daa7288ab9f_z7w9C_js7jfgVVkYMUG_DCZCqGoI5khlD-h2YX8PtuhgFRvfGIPRfwd) When you add a signature request, Portant adds an email block too. This block sends the final signed PDF to the recipients. ![](/docs/assets/images/use-cases-incident-report_15_6526f2e629498d7988f8a794_wxpCxPCk8FpiL_A5ovVNpeIBOFOiLy0H4DWiR7dx2QXSaLFiTNbHbPQ) Customise the email body the same way you did the signature request. ![](/docs/assets/images/use-cases-incident-report_16_6526f2e777a71de3438f7615_jngwtpU709BZbMBcR2lDd1jD4d8VvToEv5larerm4dXziwKlxQmgwck) ## Turn on the workflow and test When the workflow is set up, click "Automate" in the top right and switch Auto-create on. Every new form response will now run through the workflow and produce a new report. ![](/docs/assets/images/use-cases-incident-report_17_652ec7b6dfb3953d7eeed334_XI1nBWVQCSF7s-IZ5tRZ9tMJjsIJgNKN-enzjfCWC5pmFA617ZSC8JC) In the same panel you can also process older form responses with "Process Existing Responses". Choose all responses or pick a custom range. To test, submit a response in your form. A new document should appear on the Outputs tab within a few seconds. ![](/docs/assets/images/use-cases-incident-report_18_6526f2e77fcfd6fec490eaa0_9GmUlehWNWIvJrqTI_bT601ADgDKk6_ZDWm8CMeLqFc8_T65qtKaL0j) That's it. Every incident reported through your form now produces a fully formatted report, ready to sign. ## Related - [Google Forms source](/docs/sources/google-forms/) - [Tags](/docs/features/tags/) - [eSignatures](/docs/send/esignatures/) - [PDF outputs](/docs/manage/file-formats/pdf/) ================================================================================ # Form responses to PDFs Section: Use cases URL: https://www.portant.co/docs/use-cases/convert-form-responses-to-pdfs/ ================================================================================ Turn every Google Form submission into a formatted PDF, automatically. Pick a form, design the document once, and let Portant produce a new PDF every time someone hits Submit. ## What you'll learn 1. Create a new workflow 2. Pick a Google Form as the source 3. Customise a document with the form answers 4. Turn on the workflow ## Create a new workflow Click "Add Workflow" in the top right. ![](/docs/assets/images/getting-started-quickstart_0_6425053d71f3384e5ed1c4b5_Form_20to_20PDF.png_0.png) ## Pick a Google Form as the source Adding a workflow starts with picking a source or a template. For this guide we're starting from a [Google Forms](/docs/sources/google-forms/) source, but you could just as easily start from the document template instead. ![](/docs/assets/images/getting-started-quickstart_1_6425064c71f33844e1d1cd1b_Form_20to_20PDF_20_E2_80_93_201.png_1.png) Pick a Google Form from your Drive, or create a new one. ![](/docs/assets/images/getting-started-quickstart_2_6425065628c3f842d8da3fb9_Form_20to_20PDF_20_E2_80_93_202.png_2.png) Once a form is connected, Portant lists the responses on the right. If there are none yet, that section will be empty. From here you can open the form to edit it, copy the public link, or click "Change selected file" to swap the form. ## Customise a document with the form answers Add a template block by clicking "Connect" on the right. ![](/docs/assets/images/getting-started-quickstart_3_64250723596eeca6672bfd2d_Form_20to_20PDF_20_E2_80_93_203.png_3.png) Choose Google Docs or Google Slides as the template, then either create a new file or pick an existing one. ![](/docs/assets/images/getting-started-quickstart_4_642508098054c58c38775f18_Form_20to_20PDF_20_E2_80_93_204.png_4.png) > You can also generate an [email](/docs/send/email/) directly from the form response. When the document opens, the source table on the right lists every form question. ![](/docs/assets/images/getting-started-quickstart_7_642508d9aeb353d642aaab96_Form_20to_20PDF_20_E2_80_93_205.png_7.png) To insert an answer into the document, click "Copy" next to the question and paste the `{{tag}}` where you want the answer to appear. ![](/docs/assets/images/getting-started-quickstart_8_62c5aabc080621d0ef34b7b0_Portant_20Workflow_20-_20Copy_20Tag_20-_20Form.gif_8.png) You can also [add image tags](/docs/features/tags/images/) to documents and presentations, and edit a tag's display name by clicking on the row. Set the Output Name for each generated file. Tags work here too, which is useful for naming files like `{{Submission Date}} - {{Name}}`. ![](/docs/assets/images/getting-started-quickstart_9_6425096e7c31857c02e285ec_Form_20to_20PDF_20_E2_80_93_206.png_9.png) Below the Output Name field is the option to save each output as a [PDF](/docs/manage/file-formats/pdf/). ![](/docs/assets/images/getting-started-quickstart_10_62c5ad3462b6215283caced4_Portant_20Workflow_20-_20Save_20as_20PDF.gif_10.png) > Free accounts include a Portant watermark in the PDF footer. To remove it, [upgrade to Pro or Teams](https://app.portant.co/settings/billing). ## Turn on the workflow Click "Automate" in the top right and switch Auto-create on. Every new form response will run through the workflow and produce a new document. ![](/docs/assets/images/getting-started-quickstart_15_64250ace654f2a24875c8a72_Form_20to_20PDF_20_E2_80_93_207.png_15.png) > In the same panel you can process older form responses with "Process Existing Data". Choose all responses or pick a custom range. To test, submit a response in your form. A new document should appear on the Outputs tab within a few seconds. ![](/docs/assets/images/getting-started-quickstart_16_64250b35a127acd903ed49d9_Form_20to_20PDF_20_E2_80_93_208.png_16.png) That's it. Every form submission now produces a PDF, automatically. ## Related - [Google Forms source](/docs/sources/google-forms/) - [PDF outputs](/docs/manage/file-formats/pdf/) - [Tags](/docs/features/tags/) ================================================================================ # Team Section: Teams and billing URL: https://www.portant.co/docs/reference/team/ ================================================================================ Run Portant with the people you work with. Once you're on a Team plan you can invite members, share workflows, organise them into folders, set permissions, and put your own brand on the eSign portal. ## In this section 1. **Create your team**: name your workspace and invite members. 2. **Share workflows**: make a workflow available to your teammates. 3. **Folders in the workflows tab**: keep things tidy as you grow. 4. **Manage team permissions**: control who can build, run, and view. 5. **Whitelabel the eSign portal**: show your logo and colours to signers. ================================================================================ # Team › Create your team Section: Teams and billing URL: https://www.portant.co/docs/reference/team/creating-your-team/ ================================================================================ Set up a Portant team so you can share workflows, manage members, and track usage in one place. This page covers naming your team, inviting members, and where the shared document quota lives. ## Name your team After you sign up to a Team plan, the next time you log in to Portant you'll be asked to name your team. ![](/docs/assets/images/teams-creating-your-team_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FJY9agvewXFDsOSdYJIiX_2Fpika-1706235295) Enter the name and click **Create Team**. > You can change the team name at any time. You'll then land on the [team management page](https://app.portant.co/settings/team). ![](/docs/assets/images/teams-creating-your-team_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FRe7lgwfhEqwZ5FpL6td2_2Fpika-1706235473) To rename the team later, click the pencil icon next to the team name. ## Invite a team member Click the blue **Invite** button in the top right of the page. ![](/docs/assets/images/teams-creating-your-team_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FXm9HeqpRkBPRbR8PNDRm_2Fpika-1706512363) Enter the email address of the person you want to invite and pick their role. ![](/docs/assets/images/teams-creating-your-team_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FYOSI9k80KSN4DAosbLbl_2Fpika-1706259744) > The person you invite doesn't need an existing Portant account. For more on what each role can do, see [team permissions](/docs/reference/team/managing-team-permissions/). ## Manage your team Once someone is on your team, you can see their: - Linked accounts (Google Drive, Gmail, HubSpot, and so on) - Date last logged in - Usage quota ## Team document quota Your document quota is shared across everyone on the team. On the team page you can see the total usage for the period and the breakdown by member. ================================================================================ # Team › Share workflows Section: Teams and billing URL: https://www.portant.co/docs/reference/team/sharing-workflows/ ================================================================================ Sharing a workflow with your team means anyone on the team can run it (with the right permissions), so you're not the bottleneck when you're away or your team grows. This page covers how to share a workflow, the file permissions Portant sets, and how to find shared workflows. ## Share a workflow with your team Before you can share, you need to be on the [Teams plan](https://www.portant.co/pricing) and have [added members to your team](/docs/reference/team/creating-your-team/#invite-a-team-member). From the workflows list, click the kebab icon (⋮) on the workflow and select **Share workflow with team**. ![](/docs/assets/images/teams-sharing-workflows_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2Fkwq2OJYxhd1BXwcGJXYh_2Fpika-1706518528) Once shared, every team member can access the workflow with the [permissions the Owner or Admin set for them](/docs/reference/team/managing-team-permissions/). You can also share from inside a workflow by clicking the **Share** button next to the workflow name. ![](/docs/assets/images/teams-sharing-workflows_1_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FkY85Uow6LYH2VDRGgJXv_2Fpika-1706518927) ## File and folder permissions to run a workflow When you share a workflow, Portant automatically shares the underlying files and folders with your team members based on their [Portant permission level](/docs/reference/team/managing-team-permissions/). | | Workflow file permission | Output folder permission | | ----------- | ------------------------ | ------------------------ | | Viewer | View | View | | User/Runner | View | Editor | | Editor | Editor | Editor | | Admin | Editor | Editor | | Owner | Editor | Editor | To run a workflow, a member needs at least **View** access to every file in the workflow (Source and Template) **and** **Editor** access to the output folder. To check this at any time, click the **Share** button. ![](/docs/assets/images/teams-sharing-workflows_2_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2F8IBsQEHNPUGRX5HbI4U4_2Fpika-1707703276) Each team member is listed with their access marked **valid** or **invalid**. If anyone is missing access, click **Grant Access** to fix it. ![](/docs/assets/images/teams-sharing-workflows_3_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FymzP0cqxac28ahWQXhkv_2Fpika-1707703547) ## Find your shared workflows When you join a team, three tabs appear at the top of your workflow list. ![](/docs/assets/images/teams-sharing-workflows_4_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FTH6dIxsqASPIYRjik4Py_2Fpika-1706519536) - **All workflows**: your personal and team workflows together. - **Personal workflows**: only the ones you own. - **Team workflows**: only the ones shared with the team. ## Remove a workflow from a team Click the kebab icon (⋮) on the workflow and select **Remove from team**. ![](/docs/assets/images/teams-sharing-workflows_5_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FyPwn5tpO9in81bxoj54O_2Fpika-1706519130) > **Note**: removing a workflow from the team doesn't change Google Drive permissions. Check the Source and Template files, the output folder, and any output files to make sure the right people still have access. ================================================================================ # Team › Folders in the workflows tab Section: Teams and billing URL: https://www.portant.co/docs/reference/team/creating-folders-in-the-workflows-tab/ ================================================================================ Group your team's workflows into folders so they're easier to find as the list grows. This page covers creating a folder and adding workflows to it. ## Create a folder Open the **Team** tab in the workflows list. ![](/docs/assets/images/teams-creating-folders-in-the-workflows-tab_0_AD_4nXe9WKw1LdmY4JMZ8sM3qA39OP2b8Y2j_dBgc38L4kH9KBe-CBEIh2PKNV36_jHThIstGaGB_cYU) Click **Create Folder**. ![](/docs/assets/images/teams-creating-folders-in-the-workflows-tab_1_AD_4nXcmN5JmWhTtYXO0JWYNjkpUhC6pkGPg5EHl8MHLVzghaFoqtE3DDyWETsVPkjLWOlKgfjKbY5eU) Add a name, pick a colour, and click **Create**. ![](/docs/assets/images/teams-creating-folders-in-the-workflows-tab_2_AD_4nXfCYDvwI2eEZFtrYYCStLtuNuGmQADNBUHp8LrF4iAQ9ueXC0N_cEMzTM2TJXGt7abvvJKPGiT_) ## Add a workflow to a folder Find the workflow you want to move and click the three dots in its top right corner. ![](/docs/assets/images/teams-creating-folders-in-the-workflows-tab_3_AD_4nXe94UE9f9AFcE_WsjLdVt-ymKGdvIbLmPbsWUb0e4sC1acnwzTHhaLkiJuJ-AJzPyyaPaqoCWtm) Click **Add to Folder**. ![](/docs/assets/images/teams-creating-folders-in-the-workflows-tab_4_AD_4nXe9vrHFCQ75Xf-65IWvr8TlcCVm5YvkfUifhHiZAxHcofafZpOnwqguQWPddf43rtR9cJE3ZWAG) Select the folder you want, or create a new one from this menu. ![](/docs/assets/images/teams-creating-folders-in-the-workflows-tab_5_AD_4nXefoP279AhSvkl9XuvTG_nB23aiSyMYuV0Beh28766OFaFlNR6IJwWayc-FxlkggxWn_OhFgT2U) The workflow now sits inside the folder you chose. ![](/docs/assets/images/teams-creating-folders-in-the-workflows-tab_6_AD_4nXcINKb6VZdfGzMm-vDG4_tpf9kMl4loOU2dGCeIP7exMURyQINSSA7lw4ZlT73JnZE4uSOaNA97) ================================================================================ # Team › Manage team permissions Section: Teams and billing URL: https://www.portant.co/docs/reference/team/managing-team-permissions/ ================================================================================ Portant Teams uses five roles so you can decide who can build, run, and view workflows. This page covers what each role can do, the file access Portant grants when someone joins, and how to change a member's role. [Watch video](https://www.youtube.com/watch?v=7wXhoGMafYg) ## Team roles Every team has one Owner (the person who bought the plan). All other roles can be assigned to anyone you invite. > To change the team Owner, contact support. | Role | Manage billing | Manage users | Create workflow | Run workflow | View workflow | | --------------- | :------------: | :----------: | :-------------: | :----------: | :-----------: | | **Owner** | ✅ | ✅ | ✅ | ✅ | ✅ | | **Admin** | - | ✅ | ✅ | ✅ | ✅ | | **Editor** | - | - | ✅ | ✅ | ✅ | | **User/Runner** | - | - | - | ✅ | ✅ | | **Viewer** | - | - | - | - | ✅ | What each role can do: - **Owner**: full control, including billing, users, permissions, and workflows. - **Admin**: same as Owner, but can't manage billing. - **Editor**: can create, edit, and run workflows. - **User/Runner**: can run workflows that someone else has set up, and can view the outputs. Can't edit workflows. - **Viewer**: can view workflows and outputs but can't run or edit them. ## File permissions When someone joins a team, Portant grants the following access on the files in shared workflows. | App | Owner / Admin / Editor | User / Runner / Viewer | | --------------------------------------------------- | ----------------------------------- | ----------------------------------- | | **Google Sheets, Forms** (Source) | ✏️ Edit access | 👀 View access | | **HubSpot, Copper, Tally, Glide, Excel** (Source) | Not changed by Portant (managed in the source app) | Not changed by Portant (managed in the source app) | | **Google Docs, Slides, Sheets, PDFs** (Template) | ✏️ Edit access | 👀 View access | | **Gmail, Outlook** (Email) | ✏️ Edit access | 👀 View access | | **Google Drive folder** (Output) | ✏️ Edit access | ✏️ Edit access | > **Note**: these are the permissions Portant sets when someone joins a team. You can change them later in the source app (for example, in Google Drive). ## Change a team member's role The role defaults to **Editor** when you invite someone. To change it later, go to the [team management page](https://app.portant.co/settings/team). In the **Role** column of the team members table, pick the new role from the dropdown. ![](/docs/assets/images/teams-managing-team-permissions_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FpqYps1MRTClfJopboNlc_2Fpika-1706520297) The same dropdown also has the option to remove someone from the team. ================================================================================ # Team › Whitelabel the eSign portal Section: Teams and billing URL: https://www.portant.co/docs/reference/team/whitelabeling-esign-portal/ ================================================================================ Put your own brand on the page signers see when they receive a Portant signature request. Teams plans can set the brand colour, logo, and a custom redirect URL for after a signer is done. ## Set your brand colour and logo Open your settings page. ![](/docs/assets/images/teams-whitelabeling-esign-portal_0_652ec20e6f55ae90fd8b6529_WancebN0VaM7-hxf9EwygF7h4bJuCUQrlK4s6aXWmAx7RX4RrAwAtE1) Select the **Team** tab. ![](/docs/assets/images/teams-whitelabeling-esign-portal_1_652ec20d97e25371cacc4298_zYOG_UhHOABqU6z5G1yBddJijJVO7Oy7qUHC2NelyejmJEANTfpzXqN) > You can also reach the team settings from inside a workflow by opening the signature request block and clicking **Custom eSign Portal Branding**. ![](/docs/assets/images/teams-whitelabeling-esign-portal_2_652ec20e9be3247d99198118_6FKBtPA2ZzfQNP30NcKlBgk6opwtsO0kaV1CXxG-FbiN1fuGhgfh8aR) The first field is the team name. Enter the name and click **Save**. ![](/docs/assets/images/teams-whitelabeling-esign-portal_3_652ec20da9e18948b1e77616_BaBReDrzghDb01sXGJPLE0HRYXXQnFtlyOuJYyuZzBmGrIXR7Sst1mZ) You can invite up to 5 team members from this page by entering their email addresses. ![](/docs/assets/images/teams-whitelabeling-esign-portal_4_652ec20e02edb9197a106352_RiXUP19h0l0gVk15NownnlyVIzE0clDGmKfbfMAHqP8iIsPfsdPQ3Gm) Click **Invite**. ![](/docs/assets/images/teams-whitelabeling-esign-portal_5_652ec20d8dbc41bc7322c862_QbGSEYQeOh4UQn1sdsMoyAt0cLL6IT3Mvq3XwRhQOVcKDueMeCWgqZ8) Pick a role for each member. They can be Admin or Editor. ![](/docs/assets/images/teams-whitelabeling-esign-portal_6_652ec20e81f4b81eb24653c2_VUWugbloBZSXnE0wq4SgTYdd7UEhGv70e3W35HYEfw5Nuw3T863Mb_Q) To remove someone, click **Remove Access**. ![](/docs/assets/images/teams-whitelabeling-esign-portal_7_652ec20d87094bd5c6966323_W1s1xqcrZ7xZ2x5w7QUVoEJdZM0-u0M0NpTEOQSoBRHES5Sxko3hHL2) Now set the brand colour. If you don't know the hex code, you can grab one from a [colour picker](https://htmlcolorcodes.com/). ![](/docs/assets/images/teams-whitelabeling-esign-portal_8_652ec21001bce842445e7cdd_Z_DlZFcYdmufKFwNT_EPmfK9zXUaZBupIbksUfSAeewIne0-81XLFX8) Then upload your brand logo. ![](/docs/assets/images/teams-whitelabeling-esign-portal_9_652ec20eb03e4202ed2ba446_lkcTDWfYl4twQd2Y25MEhh9_bFpbsB2EXOR6fVNyCCMj4AWw3ke_8gi) When recipients open a signature request, your brand colour and logo appear on the signing portal. ![](/docs/assets/images/teams-whitelabeling-esign-portal_10_652ec20e20e77477ebd79ef5_InzSgAQbKXnOQYhuB1z7reuQ19W4mwtMgxUNo8JfqsJkFrQvo8f8_Zd) ## Send signers to a custom URL after signing Open the signature request block in your workflow. ![](/docs/assets/images/teams-whitelabeling-esign-portal_11_652ec20d81f4b81eb24653ab_cA8WPfffmfrmPgXrD90DXgPjcqZMnLF3DwlxVgEqN3Fuj1lnm6FjC3x) On the right, find the **Custom Confirmation Page** field. ![](/docs/assets/images/teams-whitelabeling-esign-portal_12_652ec21001bce842445e7ce1__BezUIbqPIhXwMqnM5hnkslNSMm2N-oly-Ru45D_MZe4G3UKiUrznci) Enter the URL you want signers to land on after they sign, then press **Enter**. > The URL must include `https://` to work. ![](/docs/assets/images/teams-whitelabeling-esign-portal_13_652ec20d9c57b945b1621ef4_BA6LcsZDLvxNju_xmm_ZKP5Pqd-zSiCnv3RkS2uVt9K8VIj2Q-K7vE7) From now on, every signer is redirected to that URL once they finish signing. ![](/docs/assets/images/teams-whitelabeling-esign-portal_14_652ec20d2a7bd3d02bf769a9_hK8p7rKNTS5roUay5w1k04gETPoVV8jzs0fllpxROqhp1XM4UNmwF9B) ================================================================================ # Account Section: Teams and billing URL: https://www.portant.co/docs/reference/account/ ================================================================================ Account settings cover the things that apply across every workflow you build. This is also where you'll find the bulk-management tools for tidying things up. ## In this section 1. [Global formatting settings](/docs/reference/account/global-formatting-settings/): set default date, number, and time zone formats. 2. [Change language settings](/docs/reference/account/change-language-settings/): pick the language Portant uses. 3. [Delete multiple workflows at once](/docs/reference/account/delete-multiple-workflows-at-once/): clean up old workflows in bulk. ================================================================================ # Account › Global formatting settings Section: Teams and billing URL: https://www.portant.co/docs/reference/account/global-formatting-settings/ ================================================================================ Set the default date, number, and time zone formats for your account, so every workflow you build uses the same conventions without having to set them up each time. Useful if you generate documents for customers in different countries. These defaults apply unless you override them on a specific source field. The time zone setting is also used whenever a tag inserts a timestamp. ## Set your global formatting Sign in at [app.portant.co](https://app.portant.co), then click the **Settings** icon in the bottom left corner. ![](/docs/assets/images/settings-how-to-set-up-your-accounts-global-formatting-settings_0_AD_4nXd9ayl3wnLA3ln8qmdHJqchrQw8zAQ92qlU2UTle5EqFp9xNmVzqDLYq4KNoxlkE15ZS1pcEX1r) Open the **Formatting** tab. ![](/docs/assets/images/settings-how-to-set-up-your-accounts-global-formatting-settings_1_AD_4nXcxIlBqacY_bGZrdEQL7ZgC8NtSMw_RvPiGxiydtGQ0Ioz1dJ7fGqjFU9cuP-9drF0dqoaOQphR) Use the dropdowns for **Date**, **Numbers**, and **Time Zone** to pick the formats you want. ![](/docs/assets/images/settings-how-to-set-up-your-accounts-global-formatting-settings_2_AD_4nXfXEeYoJi0RnRZfloE-LPYWdreBrN9ZN5aYb2FfuO8r4qbXzVCkwREt3WNrLoHkS2gXhlkDRJei) Click **Save** to apply the changes across your account. ![](/docs/assets/images/settings-how-to-set-up-your-accounts-global-formatting-settings_3_AD_4nXflRPHyWuK5FYOjlUfOq3XDJs-Oo3jNxxAfqvBLAlhRE00w7DPfdqXKyuHRl36r1u5XNgPOwV4w) ================================================================================ # Account › Change language settings Section: Teams and billing URL: https://www.portant.co/docs/reference/account/change-language-settings/ ================================================================================ Change the language Portant uses for the app interface and the eSign portal. Your selection is saved against your account, so it sticks across devices. ## Change your language Click the **Settings** icon in the bottom left corner of the main Portant page at [app.portant.co](https://app.portant.co). ![](/docs/assets/images/settings-change-language-settings_0_AD_4nXersAL1j_-zEu_h9-HGpDhTZLk0-nTv-JmxprRsTxTHUAP6Ax0wnAfQbCvxuegZj-zkVG0goCRH) Open the **Language** tab. ![](/docs/assets/images/settings-change-language-settings_1_AD_4nXdYJs6BQwPcRNZ8eNYloH78ckGQk8OL7wNwJcAzNXkU6pgxnGtZFeMnuxuJdG49abd69CLnqf98) Click the dropdown to see the available languages. ![](/docs/assets/images/settings-change-language-settings_2_AD_4nXcPOUi0PQlUliW86iQ7nrpTVfYe51PgGK_nhos6dEvCviLGc9X52r3_iIQoYwavqYB7moSOaT1F) Pick the language you want to use. ![](/docs/assets/images/settings-change-language-settings_3_AD_4nXdRuaC8UEOxPOM1ctV_1xVef1a7zMLxkWSa7wo9ca60quIV3-BN2m6ywwNPMI1vY_q4gUa3WFN0) Click **Save** to apply the change. ![](/docs/assets/images/settings-change-language-settings_4_AD_4nXe47HOiOX-MUe-0jPlldDMEa5cvQIhbuBIUthm5Db39Cvi2OLv32nxDMOxuCdxVrbQJ42fyhICC) > **Note:** The eSign portal also follows the language you've chosen here. ================================================================================ # Account › Delete multiple workflows at once Section: Teams and billing URL: https://www.portant.co/docs/reference/account/delete-multiple-workflows-at-once/ ================================================================================ If your workflow list has built up over time, you can select several workflows and delete them in one go instead of one at a time. ## Delete workflows in bulk 1. **Open the Portant app.** Sign in at [app.portant.co](https://app.portant.co) to land on your workflow dashboard. ![](/docs/assets/images/delete-multiple-workflows-at-once_0_AD_4nXeNaYB2vBTW7C4EXyzrNvuZ93rXmqmuG5QjY8-y9eq3QLYYogF_T2Ho00ojEvCnERB1uViQobgJ) 2. **Switch to list view.** Click the list icon to display your workflows as a list. List view makes it easier to select several workflows at once. ![](/docs/assets/images/delete-multiple-workflows-at-once_1_AD_4nXeh58RphVL3aFpmzS7bS241iVjqYWMBsrDarvyNEzs5xWli-BwLiUgtQTNL16kRN1ekmRk8_EM9) 3. **Select the workflows.** Tick the checkbox next to each workflow you want to remove. ![](/docs/assets/images/delete-multiple-workflows-at-once_2_AD_4nXfqGr5LISHLmNHC24BIi8oBRKULGB3l-QvC8NkpMrQubFoyL3TdxBVjLM1tR9jNmoqxAcNoSH1w) 4. **Click Delete.** Once your selection is set, click the **Delete** button. ![](/docs/assets/images/delete-multiple-workflows-at-once_3_AD_4nXdnUv8YLpkTufuHR-0RiN3C59-7IdZ_4Fmf9PpfZJ7-nsmYdjBQ6eeCaF2z2I82e7z9DO_2TDyo) 5. **Confirm the deletion.** A confirmation prompt appears. Review your selection and confirm to permanently delete those workflows. ![](/docs/assets/images/delete-multiple-workflows-at-once_4_AD_4nXfTG_LGP3oG-eCkL51sHA_jxt0bqYCLqtaYfq07Rzdktas19Pzs5HRZo2bA-50utiLF2Vw_LGrX) That's it. Deleted workflows can't be recovered, so make sure your selection is right before you confirm. ================================================================================ # Billing Section: Teams and billing URL: https://www.portant.co/docs/reference/billing/ ================================================================================ Manage your Portant plan, payment method, billing details, and invoices. ## In this section 1. **Update billing**: change your card, edit billing info, and download invoices. ================================================================================ # Billing › Update billing Section: Teams and billing URL: https://www.portant.co/docs/reference/billing/update-billing/ ================================================================================ Manage everything to do with your Portant subscription from one place: change plans, update your payment method, edit your billing details, and download past invoices. ## Open your billing settings Your billing settings live at [app.portant.co/settings/billing](https://app.portant.co/settings/billing). ![](/docs/assets/images/billing-update-billing_0_6424e126a778ae9f3a78d701_Billing_20Settings_20-_201.png_0.png) This page shows your current plan and the next renewal date. It's also where you upgrade. If you're on a paid plan, you'll see a **Manage** button next to **Current Plan**. Clicking it opens the full billing portal in a new tab. ![](/docs/assets/images/billing-update-billing_1_6424f980e35304564434795b_Billing_20Settings_20-_202.png_1.png) From here you can change plan, update your card, change the email address invoices are sent to, edit billing details (including tax info), and view your invoice history with PDF downloads. ## Update your plan In the **Current Plan** section, click **Update plan** and pick the new plan. The new plan starts straight away, and we credit you for the time left in your current billing cycle. ## Update your payment method In the **Payment method** section, click **Add payment method** and enter the new card details. You need to add the new method first, then set it as the default, and finally remove the old one. ## Update your invoice email address In the **Billing information** section, click **Update information** and change the email address. > All future invoices will be sent to this address. ## Update your billing details Same place: **Billing information** > **Update information**. This is where to add or edit tax information that needs to appear on your invoices. ## Cancel your subscription In the **Current Plan** section, click **Cancel plan** and confirm. You'll keep access to your paid plan until the end of the current billing period. ## View and download invoices Scroll down to the **Billing history** section. Click the date of an invoice to open it in a new tab, where you can view the details or download a PDF. ================================================================================ # Partners Section: Teams and billing URL: https://www.portant.co/docs/reference/partners/ ================================================================================ Refer teams to Portant and earn a recurring commission on every paying customer you bring in. ## In this section 1. **Partner program**: how it works, how to join, and how payouts work. ================================================================================ # Partners › Partner program Section: Teams and billing URL: https://www.portant.co/docs/reference/partners/partner-program/ ================================================================================ The Portant Partners Program is for HubSpot solution partners and sales-focused agencies who help clients automate sales documents and revenue operations. You earn 20% recurring commission on every paying customer you refer, and pick up tools and resources to grow your practice. ## How to join ![](/docs/assets/images/partners-partner-program_0_spaces_2FPksGGRu3iiruaw3YMfz1_2FwHwxUywVSKEGmqExoZ3t_2Fpika-1748515023) Apply at [portant.co/partner-program](https://www.portant.co/partner-program). If you qualify, we'll set you up with a dedicated **Partner Portal** where you can track referrals, grab your unique referral link, download marketing assets, and see your revenue share. Anyone you refer through your link, or any HubSpot account you're added to, is tracked automatically for commission. ## Program levels There are three levels in the program. ### Agency Partner The starting level, granted automatically when you join. Covers 1 to 5 referrals. ### Platinum Partner Reached at 10 referrals. Adds co-marketing opportunities and early access to new features. ### Diamond Partner Reached at 25 or more referrals. Adds feature collaboration, direct account support, and joint sales enablement. ## Benefits by level | Benefit | Agency Partner | Platinum Partner | Diamond Partner | | --------------------------- | :------------: | :--------------: | :-------------: | | Revenue share | 20% | 20% | 20% | | Promotional materials | ✅ | ✅ | ✅ | | Partner-exclusive features | ✅ | ✅ | ✅ | | Client management portal | ✅ | ✅ | ✅ | | Portant testing sandbox | ✅ | ✅ | ✅ | | Client insights & analytics | ✅ | ✅ | ✅ | | Co-marketing activities | ❌ | ✅ | ✅ | | Feature collaboration | ❌ | ❌ | ✅ | ## Revenue sharing Partners earn **20% commission** on every paying customer they refer. You can earn by: - Sharing your referral link from the Partner Portal. - Being added to a client's HubSpot account and the connected Portant workspace. Referrals are tracked automatically. Commissions are paid quarterly. ## Partner resources ### Partner Portal Manage clients, track commissions, and get partner-only updates from the Portant team in one place. ### Product previews and betas Partners get early access to new Portant features, including automation, reporting, and integrations. ### Marketing collateral Sales decks, feature explainers, and case study templates you can use when pitching Portant. ### Co-marketing opportunities Platinum and Diamond partners can be featured on the Portant blog, in webinars, and across our social channels. ### Verified Partner badge A Portant Partner badge for your website, proposals, or email signature. ### Partner directory Get listed on our [public partner directory](https://portant.co/partners) so prospects can find you for inbound work. ## Help clients close deals faster ### Quote-to-cash automation Reduce friction across the sales cycle, from quote generation to signature, all inside HubSpot and Google Docs. ### Contract lifecycle management Automate approvals, versions, and storage with Portant's CLM features, built for revenue teams. ### Proposal automation HubSpot's quote tool isn't always flexible enough. With Portant, your clients keep their existing Google Docs or Microsoft Word templates, so proposals look exactly the way they want. ## Apply Join the network of consultants, agencies, and HubSpot experts already growing with Portant. [Apply here](https://portant.co/partner-program). ================================================================================ # Developers overview Section: Developers URL: https://www.portant.co/docs/developers/ ================================================================================ Build with Portant via the REST API and webhooks. Use this section to create workflows programmatically, send data into Portant from your own app, and listen for events when documents are created, signed, or sent. ## In this section 1. **[Tutorial: create a workflow](/docs/developers/tutorial-create-a-workflow/)**: a worked example using cURL. 2. **[Webhooks overview](/docs/developers/webhooks/)**: send data in and listen to events. - [Send data to Portant via webhooks](/docs/developers/webhooks/send-data-to-portant/) - [Listen to events from Portant via webhooks](/docs/developers/webhooks/listen-to-events/) 3. **[API reference](/docs/developers/api/)**: Workflows, Source, Document, Google File, Outgoing Webhook, Team, and Owner. ================================================================================ # Tutorial: create a workflow Section: Developers URL: https://www.portant.co/docs/developers/tutorial-create-a-workflow/ ================================================================================ A worked example of using the Portant Developer API to create a workflow, run it via its webhook source, and listen for events when documents are created. All requests use cURL. Replace `` with the token the Portant integrations team gave you. > **Tip**: before you start, build and run a workflow in the Portant Workflow web app so you're familiar with how workflows work. We recommend a Google Docs template, which also confirms your account is correctly authorised with Google's APIs. This tutorial assumes you've finished the steps in the [Developers overview](/docs/developers/) guide. ## Step 1. Create a workflow We'll name the workflow "Developer Workflow" and create it with the [Workflows POST](/docs/developers/api/workflows/#create-a-workflow) endpoint. ```bash curl --location --request POST 'https://api.portant.co/v0/workflows/' \ --header 'Authorization: ' \ --header 'Content-Type: application/json' \ --data-raw '{ "name": "Developer Workflow" }' ``` A successful request returns `201 Created` with a JSON body that looks like this: ```json { "id": "wkf_", "name": "Developer Workflow", "icon": "DocumentText", "color": "#cccccc", "status": "INCOMPLETE", "autoCreate": true, "owner": { "id": "usr_", "name": "Your Name", "email": "you@email.com" }, "team": null, "source": { "id": "src_", "sourceType": "WEBHOOK", "sourceFields": [], "webhookUrl": "https://webhooks.portant.co/" }, "documents": [], "outgoingWebhook": null, "createdByApi": true, "createdAt": "2024-08-13T17:49:28.639426+10:00", "updatedAt": "2024-08-13T17:49:28.659242+10:00" } ``` Save the `id` value. You'll use it in the next requests. If you open `https://app.portant.co/w/wkf_/` with that ID, you'll see your new workflow in the web app. Two fields matter most here: `source.webhookUrl` and `status`. ![New workflow opened in the Portant web app after the API call](/docs/assets/images/duplicated/developers-tutorial-create-a-workflow/screenshot-01.png) `source.webhookUrl` is the address you'll POST data to in order to start an automation once the workflow is complete. Save this too. `status` is `"INCOMPLETE"` because the workflow has no template documents yet. A workflow needs both a source and at least one template to be runnable. We'll add a template next. ## Step 2. Create a template document To add a template, copy an existing Google Docs file into the workflow. ```bash curl --location --request POST 'https://api.portant.co/v0/workflows/wkf_/documents/' \ --header 'Authorization: ' \ --header 'Content-Type: application/json' \ --data-raw '{ "file_id": "1frlTt7Jj8HuXWHkS9o0mshLaym6NQBImsAIhw4Iiew4" }' ``` `file_id` is the ID of a file in Google Drive that you have access to. You can find a file's ID in its URL. The example ID above comes from [this public Portant document](https://docs.google.com/document/d/1frlTt7Jj8HuXWHkS9o0mshLaym6NQBImsAIhw4Iiew4/edit), so you can use it for testing. The response looks like this: ```json { "id": "doc_", "documentType": "GOOGLE_DOCS", "file": { "id": "1MvPvT3cLilEw6ktXxjOYFUGrZH6JO8dm5Gpj8GExMcc", "name": "Developer Workflow - [Template]", "url": "https://docs.google.com/document/d/1MvPvT3cLilEw6ktXxjOYFUGrZH6JO8dm5Gpj8GExMcc/edit?usp=drivesdk", "mimeType": "application/vnd.google-apps.document" }, "outputName": "Developer Workflow - {{Timestamp}}", "createPdfCopy": false, "removeOutput": false, "enablePdfPassword": false, "pdfPassword": "", "pdfPasswordPreventCopy": false, "previewUrl": "https://preview.portant.co/doc_LcQWshvjR9XLzQ" } ``` A new template has been added to your workflow with a copy of the file you supplied. The document resource has a set of options that change how output documents are created. You can change them with a PATCH request to the [Document](/docs/developers/api/document/) endpoint. If you GET the [workflow](/docs/developers/api/workflows/#retrieve-a-workflow) again, the status is now `"COMPLETE"`. Before we run the first automation, let's also wire up event notifications. ## Step 3. Listen for automation events To get notified when an automation runs, register an outgoing webhook on the workflow. For testing, you can spin up a temporary webhook at [webhook.site](https://webhook.site/). ```bash curl --location --request POST 'https://api.portant.co/v0/workflows/wkf_/outgoing-webhook/' \ --header 'Authorization: ' \ --header 'Content-Type: application/json' \ --data-raw '{ "webhookUrl": "https://webhook.site/" }' ``` You'll get a `201 Created` response with the URL you registered. The workflow is ready to run. ## Step 4. POST data to the webhook source To start an automation, POST a JSON body to the workflow's webhook source URL (the one returned in Step 1). ```bash curl --location --request POST 'https://webhooks.portant.co/' \ --header 'Content-Type: application/json' \ --data-raw '{ "Name": "Jeremy the Koala" }' ``` The endpoint returns `200 OK` with an empty JSON body. Within a minute, your webhook.site inbox should show an event with a link to the new document in your Google Drive. In the Portant Workflow web app, the new output also appears in the workflow's outputs page. That's it: you've created and run your first workflow through the Developer API. For details on every endpoint and resource, browse the rest of the API reference. If you have questions or feature requests, get in touch with the customer success or integrations team. (And yes, Jeremy is the Portant mascot. 🐨) ================================================================================ # Webhooks Section: Developers URL: https://www.portant.co/docs/developers/webhooks/ ================================================================================ Use webhooks to wire Portant into your own systems without polling. Send data **into** Portant from your app to start an automation, and have Portant **send events out** when documents are created, signed, or completed. ## In this section 1. **[Send data to Portant via webhooks](/docs/developers/webhooks/send-data-to-portant/)**: turn an HTTP request into a document. 2. **[Listen to events from Portant via webhooks](/docs/developers/webhooks/listen-to-events/)**: get notified when something happens. ================================================================================ # Webhooks › Send data to Portant via webhooks Section: Developers URL: https://www.portant.co/docs/developers/webhooks/send-data-to-portant/ ================================================================================ Sending data to a workflow created with the Developer API works the same way as it does for any webhook source created in the Portant Workflow web app. POST a JSON body to the workflow's `source.webhookUrl` and Portant will run the automation. For full details on the webhook source format, see the existing [webhook source documentation](https://app.gitbook.com/s/PksGGRu3iiruaw3YMfz1/sources/webhooks "mention"). ================================================================================ # Webhooks › Listen to events from Portant via webhooks Section: Developers URL: https://www.portant.co/docs/developers/webhooks/listen-to-events/ ================================================================================ Have Portant POST events to your own server when an automation runs. Add the **Send Webhook Events** block to your workflow and Portant will fire a request for every source item processed. ![](/docs/assets/images/portant-developers-webhooks-listen-to-events-from-portant-via-webhooks_0_spaces_2FZdS4qbDBVIvxbL5leJPW_2Fuploads_2FemI4hpduqLG7RKTw8rkZ_2FScreenshot_2020) Events are sent **per source item**. A source item is a single unit of source data (for example, one row in Google Sheets). If an automation runs over multiple source items, Portant sends one webhook per item. ## Payload schema Every event Portant sends shares the same top-level shape. The contents of `data` change based on `event_type`. | Field | Description | | ------------ | --------------------------------------------------------------------------------- | | `event_id` | A unique ID generated for this event. | | `event_type` | The type of event. Determines what's in `data` (see the event types below). | | `data` | The event payload. Schema varies by `event_type`. | **Schema example** ``` { "data": { ... // Determined by the type of event }, "event_id": "325d36e717d9ec0943a55857ae2d4988ce33fe4165330e4f", "event_type": "" } ``` ## Types of events Portant currently sends four event types. Which ones you receive depends on your workflow: for example, you only get `EMAILS_CREATED` if your workflow includes an email block. ### Documents created The automation created new documents (Google Docs, Google Slides, or PDFs). **Workflow configuration** The workflow must contain a template block (Google Docs or Google Slides). **Schema** | Field | Description | | --------------------- | -------------------------------------------------------- | | `documents` | An array of all documents created for this source item. | | `documents.id` | The Google Drive ID for the file. | | `documents.url` | The Google Drive URL for the file. | | `documents.name` | The file name as it appears in Google Drive. | | `documents.mimetype` | The MIME type of the file (see below). | **MIME types** | Mimetype | Description | | ---------------------------------------------- | --------------------- | | `application/vnd.google-apps.document` | Google Docs file | | `application/vnd.google-apps.presentation` | Google Slides file | | `application/pdf` | PDF document | **Example payload** ``` { "data": { "documents": [ { "id": "12XXXXX..................", "url": "https://docs.google.com/document/d/12XXXXX................../edit?usp=drivesdk", "name": "Invoice #1200", "mimetype": "application/vnd.google-apps.document" }, { "id": "13XXXXX..................", "url": "https://drive.google.com/file/d/13XXXXX................../view?usp=drivesdk", "name": "Invoice #1200", "mimetype": "application/pdf" } ] }, "event_id": "325d36e717d9ec0943a55857ae2d4988ce33fe4165330e4f", "event_type": "DOCUMENTS_CREATED" } ``` ### Emails created The automation created and sent emails. This event doesn't fire for signature requests. **Workflow configuration** The workflow must contain an email block (Gmail). **Schema** | Field | Description | | -------------------- | ----------------------------------------------------------------- | | `emails` | An array of all emails created for this source item. | | `emails.message_id` | The Gmail message ID. | | `emails.to` | A comma-separated string of recipient addresses. | | `emails.subject` | The email subject line. | **Example payload** ``` { "data": { "emails": [ { "to": "contact@portant.co", "subject": "Hello World", "message_id": "18xxxx........." } ] }, "event_id": "eac17961e3edcfafcc064015131e8a518c9f375005b8cec2", "event_type": "EMAILS_CREATED" } ``` ### Signatures requested The automation sent signature requests. **Workflow configuration** The workflow must contain a signature request block. **Schema** | Field | Description | | --------------------------- | -------------------------------------------------------------------------------------------------------- | | `documents` | An array of documents created for this source item. Same shape as the `Documents created` event. | | `recipients` | An array of signature request recipients in the workflow. | | `recipients.email` | The recipient's email. | | `recipients.order` | The order in which this recipient signs. | | `recipients.status` | The current status. Always `"PENDING"` for this event. | | `recipients.signature_url` | The URL to the signature portal where the recipient can complete the request. | **Example payload** ``` { "data": { "documents": [ { "id": "10XXXXX.................", "url": "https://drive.google.com/file/d/10XXXXX................./view?usp=drivesdk", "name": "Employment Contact", "mimetype": "application/pdf" } ], "recipients": [ { "email": "bwlockley@gmail.com", "order": 1, "status": "PENDING", "signature_url": "https://sign.portant.co/xxxxxxxxxxxxx" } ] }, "event_id": "66de24a8c20fa439d47d92a683861f6852c2924632623377", "event_type": "SIGNATURES_REQUESTED" } ``` ### Signatures completed Every signature request in the automation has been completed. **Workflow configuration** The workflow must contain a signature request block. **Schema** Same as the `Signatures requested` event. The `recipients.status` field is `"COMPLETED"` for every recipient. **Example payload** ``` { "data": { "documents": [ { "id": "10XXXXX.................", "url": "https://drive.google.com/file/d/10XXXXX......../view?usp=drivesdk", "name": "Employment Contact", "mimetype": "application/pdf" } ], "recipients": [ { "email": "bwlockley@gmail.com", "order": 1, "status": "COMPLETED", "signatureUrl": "https://sign.portant.co/xxxxxxxxxxxxx" } ] }, "event_id": "72c32ca744baea46b4be710f052b14a9b73a29d77076e586", "event_type": "SIGNATURES_COMPLETED" } ``` ================================================================================ # API reference Section: Developers URL: https://www.portant.co/docs/developers/api/ ================================================================================ The Portant API exposes the same primitives you use in the app: workflows, sources, documents, teams, and outgoing webhooks. Use it to build Portant into your own product or to drive automations beyond what no-code tools cover. ## Endpoints 1. **[Workflows](/docs/developers/api/workflows/)**: list, create, read, update, and archive workflows. 2. **[Source](/docs/developers/api/source/)**: read the data source for a workflow. 3. **[Document](/docs/developers/api/document/)**: manage template documents on a workflow. 4. **[Google file](/docs/developers/api/google-file/)**: the Google Drive files behind a workflow. 5. **[Outgoing webhook](/docs/developers/api/outgoing-webhook/)**: register and update event subscriptions. 6. **[Team](/docs/developers/api/team/)**: read team membership context. 7. **[Owner](/docs/developers/api/owner/)**: read account context. For a worked example, start with the [tutorial: create a workflow](/docs/developers/tutorial-create-a-workflow/). ================================================================================ # API reference › Workflows Section: Developers URL: https://www.portant.co/docs/developers/api/workflows/ ================================================================================ A Workflow represents the stages of an automation that, in its simplest form, transform source data into output documents. ## Fields
FieldTypeEditableDescription
idStringfalseThe unique ID of the workflow. Used to reference the workflow in all requests.
nameStringtrueThe name of the workflow.
colorStringtrueThe colour of the workflow icon in Portant Workflow as a hex string, prefixed with #.
iconStringtrueThe name of the icon used in Portant Workflow.
statusStringfalseThe current status of the workflow. One of:
- "COMPLETE": the workflow is runnable.
- "INCOMPLETE": the workflow needs more configuration before it can run.
- "ARCHIVED": the workflow is no longer usable.
autoCreateBooleanfalseWhen true, the workflow listens for source events and creates a new automation each time one arrives.
ownerOwnerfalseThe owner of this workflow.
teamTeamfalseThe team this workflow belongs to.
sourceSourcefalseThe source of data for this workflow.
documentsDocumentfalseThe template documents for this workflow.
outgoingWebhook

Outgoing

Webhook

falseThe outgoing webhook of this workflow, used to listen for automation events.
createdByApiBooleanfalseTrue when the workflow was created via the Developer API.
createdAtStringfalseAn ISO 8601 timestamp for when the workflow was created.
updatedAtStringfalseAn ISO 8601 timestamp for when the workflow was last updated.
### Example ```` ```json { "id": "wkf_kGQK9PBWDT1JCr", "name": "Invoice Workflow", "icon": "DocumentText", "color": "#cccccc", "status": "COMPLETE", "autoCreate": true, "owner": { "id": "usr_DsH4TGYXs4XPpB", "name": "Blake Lockley", "email": "blake@portant.co" }, "team": null, "source": { "id": "src_NZHJYjlgrvklHb", "sourceType": "WEBHOOK", "sourceFields": [ "Order Number", "LineItem.Name", "LineItem.Price", ], "webhookUrl": "https://webhooks.portant.co/50c7912b14c7acbe9df32521ec60a27c" }, "documents": [ { "id": "doc_5LGGqC5S78RNS0", "documentType": "GOOGLE_DOCS", "file": { "id": "1uNfBHAKhcgRsiftb7xRpTJRS0k9LY1iX1gUnTOE0zU4", "name": "Complete Workflow Please - [Template]", "url": "https://docs.google.com/document/d/1uNfBHAKhcgRsiftb7xRpTJRS0k9LY1iX1gUnTOE0zU4/edit?usp=drivesdk", "mimeType": "application/vnd.google-apps.document" }, "outputName": "Document for {{First Name}}", "pdfPassword": "jeRe/\/\eyWaZH3re", "enablePdfPassword": true, "enablePdfPreventCopy": false, "previewUrl": "https://preview.portant.co/doc_5LGGqC5S78RNS0" } ], "outgoingWebhook": { "id": "owc_XY1Ys4gqrpX8cp", "webhookUrl": "https://webhook.site/d22c56ab-40ac-4f9a-93ef-02520235c0da" }, "createdByApi": true, "createdAt": "2024-08-12T16:20:44.346666+10:00", "updatedAt": "2024-08-12T16:20:48.408357+10:00" } ``` ```` ## Endpoints ### List all workflows ``` GET /workflows/ ``` Return every Workflow owned by, or shared with, the team of the API user. #### Responses | Status | Body | | ---------------- | ---------------- | | 200 OK | Array\ | | 403 Unauthorised | Error | ### Create a workflow ``` POST /workflows/ ``` Create a new workflow. #### Request A *partial* Workflow object as JSON. The only required field is `name`. ``` { name: "A simple workflow" } ``` You can also create a complete workflow in one POST by including the optional subcomponents and their required fields. Fields suffixed with `?` are optional. ``` { name: "A complete Workflow from Scratch", color?: "#...", icon?: "...", source?: { "sourceFields": ["Field Name 1", "Field Name 2"] }, document?: { fileId: "" }, outgoingWebhook?: { webhookUrl: "" } } ``` #### Responses | Status | Body | | ---------------- | -------- | | 201 Created | Workflow | | 400 Bad Request | Error | | 403 Unauthorised | Error | ### Retrieve a workflow ``` GET /workflows// ``` Retrieve a specific workflow by ID. #### Responses | Status | Body | | ---------------- | -------- | | 200 OK | Workflow | | 403 Unauthorised | Error | | 404 Not Found | Error | ### Update a workflow ``` PATCH /workflows// ``` Update a specific workflow by ID. #### Request A *partial* Workflow object as JSON. Fields suffixed with `?` are optional. ``` { name?: "...", color?: "#...", icon?: "..." } ``` #### Response | Status | Body | | ---------------- | -------- | | 200 OK | Workflow | | 400 Bad Request | Error | | 403 Unauthorised | Error | | 404 Not Found | Error | ### Delete a workflow ``` DELETE /workflows// ``` Delete a specific workflow by ID. The workflow isn't actually deleted; its status is set to `"ARCHIVED"`. Archived workflows can be restored by contacting the customer success team. #### Response | Status | Body | | ---------------- | ----- | | 204 No Content | | | 400 Bad Request | Error | | 403 Unauthorised | Error | | 404 Not Found | Error | ================================================================================ # API reference › Source Section: Developers URL: https://www.portant.co/docs/developers/api/source/ ================================================================================ The Source represents where a workflow's data comes from. For workflows created via the Developer API, the source is always a Webhook source. ## Fields
FieldTypeDescription
idStringThe ID of the source.
sourceTypeStringThe source type. For workflows created by the Developer API this is always "WEBHOOK".
sourceFieldsArray<String>The names of source fields used in this workflow. You can supply these when you create the workflow if you know them ahead of time. Otherwise they reflect the keys of the last webhook event the workflow received.

Nested fields are represented with a . between the parent and child fields.
webhookUrlStringThe webhook address of the workflow source. POST source data here to start an automation.
### Example ``` { "id": "src_NZHJYjlgrvklHb", "sourceType": "WEBHOOK", "sourceFields": [ "Order Number", "LineItem.Name", "LineItem.Price", ], "webhookUrl": "https://webhooks.portant.co/50c7912b14c7acbe9df32521ec60a27c" }, ``` ## Endpoints ### Get a source ``` GET /workflows//source/ ``` Retrieve the source for a specific workflow. #### Responses | Status | Body | | ---------------- | ------ | | 200 OK | Source | | 403 Unauthorised | Error | ================================================================================ # API reference › Document Section: Developers URL: https://www.portant.co/docs/developers/api/document/ ================================================================================ A Document represents a template configuration on a workflow. It points to a Google Drive file that gets copied to produce each output. ## Fields
FieldTypeDescription
idStringThe ID of the document.
documentTypeStringThe template type. Either "GOOGLE_DOCS" or "GOOGLE_SLIDES", depending on the file selected.
fileGoogle FileThe Google Drive file used as the template. This file is copied to create the output document.
outputNameStringA templated string used to name each output created from this template.
createPDFCopyBooleanWhen true, Portant also creates a PDF copy of the output document.
removeOutputBooleanWhen true, the original output document (Google Docs or Slides) is removed after the PDF copy is created.
enablePdfPasswordBooleanWhen true, the generated PDF is encrypted with a password.
pdfPasswordStringA templated string used to generate the PDF password. Only used when enablePdfPassword is true.
PdfPasswordPreventCopyBooleanWhen true, content can't be copied from the password-protected PDF.
previewUrlStringA URL to the embedded editor used by non-Portant users to make changes to this document via source fields. Assumes the user can already access the underlying Google File.

Note: this feature is not yet implemented and may change.
### Example ``` { "id": "doc_5LGGqC5S78RNS0", "documentType": "GOOGLE_DOCS", "file": { "id": "1uNfBHAKhcgRsiftb7xRpTJRS0k9LY1iX1gUnTOE0zU4", "name": "Complete Workflow Please - [Template]", "url": "https://docs.google.com/document/d/1uNfBHAKhcgRsiftb7xRpTJRS0k9LY1iX1gUnTOE0zU4/edit?usp=drivesdk", "mimeType": "application/vnd.google-apps.document" }, "outputName": "Document for {{First Name}}", "createPdfCopy": true, "removeOutput": false, "enablePdfPassword": false, "pdfPassword": "Password-{{Secret Number}}", "pdfPasswordPreventCopy": false, "previewUrl": "https://preview.portant.co/doc_5LGGqC5S78RNS0" } ``` ## Endpoints ### List all documents for a workflow ``` GET /workflows//documents/ ``` List all documents for a specific workflow. #### Responses | Status | Body | | ---------------- | ---------------- | | 200 OK | Array\ | | 403 Unauthorised | Error | ### Create a document for a workflow ``` POST /workflows//documents/ ``` Create a new document for the workflow. #### Request A *create* Document object as JSON. The payload may include an optional `file_id` for a Google Drive file the requesting user has access to. ``` { file_id?: "1uNfBHAKhcgRsiftb7xRpTJRS0k9LY1iX1gUnTOE0zU4" } ``` If you omit `file_id`, a new document is created from scratch. #### Responses | Status | Body | | ---------------- | -------- | | 201 Created | Document | | 400 Bad Request | Error | | 403 Unauthorised | Error | ### Get a document ``` GET /workflows//documents// ``` Retrieve a specific document on a specific workflow. #### Responses | Status | Body | | ---------------- | -------- | | 200 OK | Document | | 403 Unauthorised | Error | ### Update a document ``` PATCH /workflows//documents// ``` Update a specific document by ID. #### Request A *partial* Document object as JSON. The payload may include any of the document's editable fields. The selected file can't be changed once a document is created. ``` { "outputName"?: "New outputName for {{First Name}}", "pdfPassword"?: "NewPassword-{{Secret Number}}", "enablePdfPassword"?: true, "enablePdfPreventCopy"?: true, } ``` #### Responses | Status | Body | | ---------------- | -------- | | 200 OK | Document | | 400 Bad Request | Error | | 403 Unauthorised | Error | ================================================================================ # API reference › Google file Section: Developers URL: https://www.portant.co/docs/developers/api/google-file/ ================================================================================ A Google File represents a file in the user's Google Drive. ## Fields
FieldTypeDescription
idStringThe file ID as it appears in Google Drive.
nameStringThe name of the file.
urlStringThe URL of the file.
mimeTypeStringThe MIME type of the file.
### Example ``` { "id": "1uNfBHAKhcgRsiftb7xRpTJRS0k9LY1iX1gUnTOE0zU4", "name": "Complete Workflow Please - [Template]", "url": "https://docs.google.com/document/d/1uNfBHAKhcgRsiftb7xRpTJRS0k9LY1iX1gUnTOE0zU4/edit?usp=drivesdk", "mimeType": "application/vnd.google-apps.document" } ``` ================================================================================ # API reference › Outgoing webhook Section: Developers URL: https://www.portant.co/docs/developers/api/outgoing-webhook/ ================================================================================ An OutgoingWebhook represents the configuration for an external endpoint that automation events are sent to. "Outgoing" refers to events leaving the Portant platform for an external destination. For details on the events Portant sends, see [Listen to events from Portant via webhooks](/docs/developers/webhooks/listen-to-events/). ## Fields
FieldTypeDescription
idStringThe ID of the outgoing webhook configuration.
webhookUrlStringThe webhook address that events will be POSTed to.
### Example ``` { "id": "owc_XY1Ys4gqrpX8cp", "webhookUrl": "https://webhook.site/d22c56ab-40ac-4f9a-93ef-02520235c0da" }, ``` ## Endpoints ### Get an outgoing webhook ``` GET /workflows//outgoing-webhooks/ ``` Retrieve the outgoing webhook configuration for a specific workflow. #### Responses | Status | Body | | ---------------- | --------------- | | 200 OK | OutgoingWebhook | | 403 Unauthorised | Error | ### Create an outgoing webhook ``` POST /workflows//outgoing-webhooks/ ``` Create the outgoing webhook configuration for a specific workflow. #### Request The body must contain a single `webhookUrl` field with the URL you want to receive events at. ``` { webhookUrl: "https://..." } ``` #### Responses | Status | Body | | ---------------- | --------------- | | 201 Created | OutgoingWebhook | | 400 Bad Request | Error | | 403 Unauthorised | Error | ### Update an outgoing webhook ``` PATCH /workflows//outgoing-webhooks/ ``` Update the outgoing webhook configuration for a specific workflow. #### Request The body must contain a single `webhookUrl` field with the URL you want to receive events at. ``` { webhookUrl: "https://..." } ``` #### Responses | Status | Body | | ---------------- | --------------- | | 200 OK | OutgoingWebhook | | 400 Bad Request | Error | | 403 Unauthorised | Error | ================================================================================ # API reference › Team Section: Developers URL: https://www.portant.co/docs/developers/api/team/ ================================================================================ The team a workflow belongs to. A read-only resource provided as context. ## Fields
FieldTypeDescription
idStringThe ID of the team.
nameStringThe name of the team.
### Example ``` { "id": "tea_Xs4XPpBDsH4TGY", "name": "Portant", } ``` ================================================================================ # API reference › Owner Section: Developers URL: https://www.portant.co/docs/developers/api/owner/ ================================================================================ The user who owns a specific workflow. A read-only resource provided as context. ## Fields
FieldTypeDescription
idStringThe user ID of the owner.
nameStringThe full name of the workflow's owner.
emailStringThe email address of the workflow's owner.
### Example ``` { "id": "usr_DsH4TGYXs4XPpB", "name": "Blake Lockley", "email": "blake@portant.co" } ``` ================================================================================ # Ask for help Section: Help URL: https://www.portant.co/docs/help/ask-for-help/ ================================================================================ If you're stuck, this is the fastest way to get hold of us. The pages below explain how to reach the team and how to gather the details that help us solve issues quickly. ## Get in touch - [Support tickets](/docs/help/support-tickets/): how to start a chat or email the team. - [How to request an account transfer](/docs/help/account-transfer/): move your account to a different email address. ## Help us help you - [Support codes](/docs/help/support-codes/): how to copy the support code from an output item so we can find it. - [Screenshots](/docs/help/screenshots/): how to take a screenshot on Mac or PC. - [Developer console](/docs/help/developer-console/): how to open the browser developer console to capture an error. ## Common questions - [Common questions](/docs/help/common-questions/): the issues we get asked about most often. - [400 error](/docs/help/common-questions/400-error/): how to fix the 400 error in the document preview. - [Microsoft permissions issue](/docs/help/common-questions/microsoft-permissions/): grant admin consent for the Microsoft 365 integration. - [API developer key is invalid](/docs/help/common-questions/invalid-api-key/): clear the error caused by being signed into multiple Google accounts. ================================================================================ # Support tickets Section: Help URL: https://www.portant.co/docs/help/support-tickets/ ================================================================================ The fastest way to talk to the Portant team is the chat icon in the bottom right of the app. If you'd rather email us, send a note to [support@portant.co](mailto:support@portant.co). ![](/docs/assets/images/getting-started-ask-for-help-support-tickets_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FQVENQpRC1aE63AaRmzmb_2FCleanShot_20202) If your message is about a specific automation, please include a [support code](/docs/help/support-codes/) so we can find the exact item. ================================================================================ # Support codes Section: Help URL: https://www.portant.co/docs/help/support-codes/ ================================================================================ A support code is a unique reference for a single automation item. When you share one with the team, we can pull up the exact item, see what happened, and work out what went wrong much faster. ## Copy a support code Open the **Outputs** page for the workflow. ![](/docs/assets/images/getting-started-ask-for-help-support-codes_0_65170b3f224a405f4f582a56_9emjt0NwMMWcrEwg09zeniBCXsfG51RuJ8syxJ7WesQJtoGX3OLCVXu) Find the item you want help with. Items with errors have a yellow status icon, which makes them easier to spot. On the right hand side of the row, click the three dots icon, then choose **Copy Support Code**. ![](/docs/assets/images/getting-started-ask-for-help-support-codes_1_65170b3f98371a9a4d77e43a_CvvxrlEOHTEDP3TFG3YSqsYEKFnWKAar8EQWysaJjJGnrKZwZ2Kh2UA) The support code is now on your clipboard. Paste it into our [support chat](/docs/help/support-tickets/) when you message us, and we'll take it from there. ================================================================================ # Screenshots Section: Help URL: https://www.portant.co/docs/help/screenshots/ ================================================================================ A screenshot is often the quickest way to show us what's happening on your screen. Here's how to take one on Mac and on Windows. ## On a Mac Two shortcuts cover most cases: - **Whole screen:** press **Command + Shift + 3**. The screenshot is saved to your desktop as a PNG. - **Part of the screen:** press **Command + Shift + 4**, then click and drag to select the area. Release the mouse and the screenshot saves to your desktop. ## On a PC On most PCs, **Windows logo key + PrtScn** captures the whole screen. If your keyboard doesn't have a PrtScn key, try **Fn + Windows logo key + Space Bar**. To find the screenshots, open File Explorer from the taskbar, then go to **Pictures → Screenshots**. ## Send the screenshot Once you have the file, drag it into our [support chat](/docs/help/support-tickets/) or attach it to your email. ================================================================================ # Developer console Section: Help URL: https://www.portant.co/docs/help/developer-console/ ================================================================================ The developer console is a built-in browser tool that logs what's happening on a page (JavaScript errors, network requests, security warnings). When you share a screenshot of the console, the Portant team can usually pinpoint the cause of an issue much faster. This page shows how to open the developer console in Chrome, Edge, Firefox, and Safari. Take a [screenshot](/docs/help/screenshots/) of the Console tab once it's open and send it to us via [support](/docs/help/support-tickets/). ## Chrome Use the keyboard shortcut **Ctrl + Shift + J** (Windows) or **Cmd + Option + J** (Mac), then go to the **Console** tab. ![](/docs/assets/images/getting-started-ask-for-help-developer-console_0_642a9904daa796b7bb8d1f85_217975527ScreenShot2016-11-28at33846PM.png_0.png) If you'd rather use the menu, open the Chrome menu, choose **More Tools → Developer Tools**, then switch to the **Console** tab. ![](/docs/assets/images/getting-started-ask-for-help-developer-console_1_642b9a416339fe87fe0510f6_Screenshot_202023-04-04_20at_201.31.48_20pm.png_1.png) ## Edge Press **F12** to open the developer tools, then go to the **Console** tab. ![](/docs/assets/images/getting-started-ask-for-help-developer-console_2_642a99042733f1d75feea00a_217779428EdgeConsole.png_2.png) ## Firefox Use the keyboard shortcut **Ctrl + Shift + I** (Windows) or **Cmd + Option + I** (Mac). The developer toolbox opens at the bottom of the window with the Web Console active. ![](/docs/assets/images/getting-started-ask-for-help-developer-console_3_642b9d05ad38a46f9740c69c_Screenshot_202023-04-04_20at_201.43.45_20pm.png_3.png) You can also open it from the menu: **Tools → Browser Tools → Web Developer Tools**. ![](/docs/assets/images/getting-started-ask-for-help-developer-console_4_642b9d4a764628779cf8ae0d_Screenshot_202023-04-04_20at_201.44.58_20pm.png_4.png) ## Safari Safari hides the Develop menu by default, so turn it on first. Open the **Safari** menu in the Mac menu bar and choose **Settings**. ![](/docs/assets/images/getting-started-ask-for-help-developer-console_5_642b9ef4ad38a4c0ff40e5ac_Screenshot_202023-04-04_20at_201.50.11_20pm.png_5.png) Go to the **Advanced** tab and tick **Show Develop menu in the menu bar**. ![](/docs/assets/images/getting-started-ask-for-help-developer-console_6_642b9f18d2094b151cf4ffda_Screenshot_202023-04-04_20at_201.50.43_20pm.png_6.png) With the Develop menu enabled, open it from the Mac menu bar and choose **Show JavaScript Console**. ![](/docs/assets/images/getting-started-ask-for-help-developer-console_7_642b9f3b9bd04879ea4fdadc_Screenshot_202023-04-04_20at_201.51.20_20pm.png_7.png) The console appears in the bottom half of the browser window. ![](/docs/assets/images/getting-started-ask-for-help-developer-console_8_642b9f5ca887ae0791f2c6d8_Screenshot_202023-04-04_20at_201.51.51_20pm.png_8.png) Once the Develop menu is enabled, you can also use the shortcut **Option + Command + C**. ================================================================================ # Common questions Section: Help URL: https://www.portant.co/docs/help/common-questions/ ================================================================================ The issues we see most often, with the steps to fix each one. - [400 error](/docs/help/common-questions/400-error/): the document preview shows a 400 error, usually caused by an anti-tracking browser extension. - [Microsoft permissions issue](/docs/help/common-questions/microsoft-permissions/): your Microsoft 365 admin needs to grant consent for the Portant integration. - [API developer key is invalid](/docs/help/common-questions/invalid-api-key/): caused by being signed in to several Google accounts in the same browser. ================================================================================ # Common questions › 400 error Section: Help URL: https://www.portant.co/docs/help/common-questions/400-error/ ================================================================================ You'll usually see a 400 error in the spot where the Google Doc or Slides template should appear. It's normally caused by an anti-tracking extension or a pop-up blocker stopping Portant from talking to Google. ## What the error looks like ![](/docs/assets/images/getting-started-ask-for-help-common-questions-400-error_0_651f0d2f9223bac5041aaabc_pika-1696533670336-1x.png_0.png) ## Fix the 400 error In your anti-tracking extension or pop-up blocker, add the following sites to the allow list (or turn the extension off entirely): - `app.portant.co` - `accounts.google.com` - `drive.google.com` - `docs.google.com` Once those are added, do a hard refresh (**Ctrl + F5** on Windows, **Cmd + Shift + R** on Mac) to make sure the page reloads from scratch. If the error is still showing after that, send us a [support ticket](/docs/help/support-tickets/) with a [screenshot](/docs/help/screenshots/) and we'll look into it. ================================================================================ # Common questions › Microsoft permissions issue Section: Help URL: https://www.portant.co/docs/help/common-questions/microsoft-permissions/ ================================================================================ If you can't connect your Microsoft 365 account to Portant and you're seeing a permissions error, it usually means your organisation needs an admin to grant consent before the integration can be used. ## Have your admin grant consent Send your Microsoft 365 administrator the link below. Opening it lets them approve Portant on behalf of the whole organisation in one step. [Admin consent URL](https://login.microsoftonline.com/common/adminconsent?client_id=d14f6ac4-0ea8-4f25-8213-16c0df300efa&redirect_uri=https://api.portant.co/auth/microsoft-login-oauth-callback/) After your admin clicks the link and approves the permissions, they'll see a confirmation page that looks unfinished. That's expected: the consent has gone through. ![](/docs/assets/images/getting-started-ask-for-help-common-questions-resolving-microsoft-permissions-issue_0_spaces_2FPksGGRu3iiruaw3YMfz1_2Fuploads_2FO3yGOdvnN8l23udZ8sKC_2FScreenshot_2020) Once consent is granted, you can connect your Microsoft account in Portant without seeing the error again. ## More from Microsoft For background on how admin consent works in Microsoft Entra, see Microsoft's guide: [Grant admin consent in Microsoft Entra](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/grant-admin-consent?pivots=portal). If you're an admin and you'd rather assign access to specific users or groups instead of the whole tenant, see [Approving Portant in Microsoft 365 (Entra ID)](/docs/getting-started/sign-up/microsoft-365-entra-id/). ================================================================================ # Common questions › Approve Portant in Microsoft 365 (Entra ID) Section: Help URL: https://www.portant.co/docs/help/common-questions/microsoft-365-entra-id/ ================================================================================ Some Microsoft 365 organisations need an admin to approve a new app before users can sign in. If that's your tenant, this page covers how to request approval, how an admin approves Portant, and how to assign users when required. ## When you'll need this You'll likely need admin approval if: - You see "Administrator approval required" when you try to sign in. - Your organisation restricts Enterprise Applications. - Sign in still fails after you've been approved (you may also need user assignment). - Your security policies require explicit user assignment. ## Ask your admin to approve Portant If you're not an admin, the fastest path is to forward the request to whoever manages Microsoft 365 in your organisation. You can copy the email below. ### Sample email to send your admin **Subject:** Approval request for Portant application (Microsoft Entra) Hi {{Admin Name}}, I'm trying to sign in to an application called **Portant**, which we use to generate and manage documents (proposals, contracts, and PDFs). Our Microsoft tenant requires administrator approval for new Enterprise Applications, so I'm seeing an "administrator approval required" message at sign in. Could you please approve access to the **Portant** application for our tenant? You can manage this in the Microsoft Entra admin center under: **Enterprise Applications → Portant → Users and groups**. Portant has a guide for the admin steps here, and the team can help if anything is unclear: [support@portant.co](mailto:support@portant.co). Thanks for the help. {{Your Name}} ## Admin steps If you're a Microsoft Entra admin, follow the steps below. ### Prerequisites - Global Admin or Application Admin role. - Access to the Microsoft Entra admin center. ### 1. Open the Microsoft Entra admin center Go to [entra.microsoft.com](https://entra.microsoft.com). ### 2. Open Enterprise Applications Select **Enterprise applications**, then search for and open **Portant**. ### 3. Approve access (if prompted) If admin consent hasn't been granted yet, you can either approve Portant when prompted at sign in, or review and approve permissions from the Portant app page. ### 4. Assign users to Portant Some tenants require users to be explicitly assigned before they can sign in. 1. Open **Users and groups**. 2. Click **Add user or group**. 3. Select the users or groups you want to give access to. 4. Leave **Role** as **Default Access**. 5. Click **Assign**. ### 5. Confirm sign in Once approved and assigned: 1. Ask the user to return to Portant. 2. Click **Sign in with Microsoft**. 3. Sign in should now go through. ## Why user assignment is sometimes required Some organisations turn on **User assignment required** for Enterprise Applications. When this is on, users can't sign in until they've been added to the app. You can check this under **Enterprise Applications → Portant → Properties**. ## Summary If users can't sign in with Microsoft: 1. Request admin approval for Portant. 2. Make sure Portant has been approved in Entra. 3. Assign the user (or their group) to the Portant Enterprise App if required. 4. Retry sign in. ================================================================================ # Common questions › API developer key is invalid Section: Help URL: https://www.portant.co/docs/help/common-questions/invalid-api-key/ ================================================================================ If you see "The API developer key is invalid" in Portant, it almost always means your browser is signed in to more than one Google account at the same time. Here's how to clear it. ![](/docs/assets/images/getting-started-ask-for-help-common-questions-resolve-api-developer-key-is-invalid-error_0_653bbf6016d5ce46167c8586_3PzVrqQ1Jk7jxmMul4yKjEg1qFLeg74y089nFCSoq73aNl02kURWdBv) ## Quickest fix: open Portant in an incognito window Open a private or incognito window in your browser and sign in to Portant from there. Because incognito windows don't carry your existing Google sessions, the right account is used straight away. ## If that doesn't work: clear your browser cache Sometimes the browser holds an old version of the API key. Clearing cookies and cached data fixes this. ### Chrome 1. Click the three dots in the top right and choose **History**. 2. Click **Clear browsing data**. 3. Tick **Cookies and other site data** and **Cached images and files**, then clear. ### Firefox 1. Click the three lines in the top right and choose **Settings**. 2. Go to **Privacy & Security** and scroll to **Cookies and Site Data**. 3. Click **Clear Data**, tick both options, then clear. ### Safari 1. Click **Safari** in the top menu bar and choose **Settings**. 2. Open the **Privacy** tab and click **Manage Website Data**. 3. Click **Remove All**. Once your cache is clear, reload Portant and try the action again. If you're still seeing the error, send us a [support ticket](/docs/help/support-tickets/) and we'll take a closer look. ================================================================================ # Request an account transfer Section: Help URL: https://www.portant.co/docs/help/account-transfer/ ================================================================================ If you've changed email addresses (a new domain, a personal-to-work switch, or merging two accounts), the Portant team can move your account so your workflows, settings, and history come with you. > **Note:** Account transfers are available on Pro, Teams, and Enterprise plans. ## How to request a transfer Get in touch with us using either of the options below and let us know which email address you'd like the account moved to: - **Email:** [contact@portant.co](mailto:contact@portant.co) - **Support chat:** open the chat from app.portant.co ## After the transfer Once we've moved the account, there are a few things to check on your end so everything keeps running. ### 1. Workflow access Your existing workflows were created under the old account, so when you sign in with the new email, make sure you still have access to: - The **templates** the workflows use. - The **sources** the workflows pull from. - The **output folders** the workflows save to. Output folders were also created by the old account, so we recommend going to the **Outputs** tab and changing each output folder over to the new email. ![](/docs/assets/images/getting-started-ask-for-help-how-to-request-a-transfer-of-your-portant-account_0_AD_4nXfFGG9SJY2eXffhcdkIbQ9S27cZSsRuyltFI6-4FGkuVNECubu9E7737MYHHJWhsV3qZsHJ3CRS) ### 2. Remove the old Google permissions Portant may still try to use the previous account's Google permissions, which can cause errors when automations run. To prevent that, remove Portant's access from the old Google account. 1. Open the [Google Permissions page](https://myaccount.google.com/u/1/permissions). 2. Search for **Portant**. ![](/docs/assets/images/getting-started-ask-for-help-how-to-request-a-transfer-of-your-portant-account_1_AD_4nXfRrR8U81BYElWdwuEDVUHNadNFLFZWv0gk5qsirDzIDjMcl3xtvDiYRkYEEMJ9XMmavMqoYRZT) 3. Choose **Delete all connections that you have with Portant**. ![](/docs/assets/images/getting-started-ask-for-help-how-to-request-a-transfer-of-your-portant-account_2_AD_4nXe0aJNkRJ_RrtIS2xMLiGJI53lEWjP9naNnRk7bm8pgsFYTlqURAIs6LDgv22cAHKwY9oeujnN7) 4. Click **Confirm**. ![](/docs/assets/images/getting-started-ask-for-help-how-to-request-a-transfer-of-your-portant-account_3_AD_4nXeOO_yQ97f0f6k68_DFgKL4pQDquSle02ZNNdCFHei3m0_xXUiOUp5MbJDaBShwHM1ch0_LuV3h) ### 3. Reconfigure email aliases Email aliases set up under the old account don't carry over, so set them up again on the new account to avoid emails failing to send. See [Send from aliases](/docs/send/email/aliases/) for the steps.