ConnectWise Manage pod
The FormNode pod surfaces tagged forms inside the ConnectWise Manage company record, so technicians launch onboardings, offboardings, and approval flows without leaving the PSA. The pod auto-resolves the right FormNode organization from the company ID CW passes in, then renders the list of forms tagged for the toolbox.
How it works
ConnectWise Manage supports embedding external content as a pod in the Setup Tables → Company Pod configuration. CW iframes the URL you give it and substitutes its own context variables (company ID, member ID, etc.) into the URL using {{Variable}} syntax. FormNode reads the CW company ID from the URL, looks it up in your organization integration mappings, and renders the matching tenant's toolbox forms.
Setup
1. Tag forms for the toolbox
Open any form you want surfaced in the pod. Click Settings on the form and toggle Toolbox Form. Tagged forms will appear in the pod for any organization the form is associated with. There's also a Pin to Toolbox toggle right below it — pinned forms rise to the top of the pod list for the technician.
Forms without the Toolbox Form tag are unaffected — they continue to live at their direct URLs and customer portals as normal.
From the dashboard, open Settings → Toolbox to see every toolbox-tagged form across your workspace, plus the pod URL and a live preview.
2. Map your ConnectWise companies to FormNode organizations
For the pod to know which tenant's forms to show, each FormNode organization needs to know its corresponding CW company ID. Open an organization in the dashboard, then go to Integration mappings and add:
- Key:
cw.companyId - Value: the ConnectWise company RecID (the numeric internal ID, not the company identifier string)
Repeat for each customer organization. If you store the CW ID under a different key already (legacy from earlier setup), the pod will fall back to scanning all integration-mapping values for a numeric match — but the canonical cw.companyId key is preferred.
Optional: map child companies or subsites
Use parent and child organizations when a customer rolls up under one company but needs site-specific forms, mappings, or routing. Common MSP examples are branch offices, departments, legal subsidiaries, or separate locations with their own approval contacts.
In Settings → Organizations, create the parent company first, then create each child organization with that parent selected. The child inherits parent integration mappings by default, and any mapping set on the child overrides the parent.
For a ConnectWise subsite, add this mapping to the child organization:
- Key:
cw.siteId - Value: the ConnectWise site ID for that branch or subsite
Then include a site/subsite parameter in the pod URL. FormNode prefers the child organization when both the parent company ID and child site ID are present:
https://app.formnode.io/toolbox/{your-workspace-slug}?embed=1&companyId={{Company.RecID}}&companyName={{Company.CompanyName}}&siteId={{Site.ID}}3. Copy the pod URL
Open Settings → Toolbox. Near the top you'll see your workspace's pod URL with a Copy button. The shape:
https://app.formnode.io/toolbox/{your-workspace-slug}?embed=1&companyId={{Company.RecID}}&companyName={{Company.CompanyName}}The {{Company.RecID}}placeholder is CW Manage's own variable syntax — leave it as written. CW will substitute the actual company ID before iframing the URL. The embed=1 query flag tells FormNode to render in compact pod mode (no header chrome, sized for the CW pod frame).
4. Add the pod in ConnectWise Manage
In CW Manage, navigate to System → Setup Tables → Company Pod Configuration. Add a new pod with these values:
- Type: External
- Name: FormNode (or anything you want technicians to see)
- URL: the pod URL you copied — including the
{{Company.RecID}}placeholder - Method: GET
Save. Open any company record in CW. The FormNode pod renders inline with the list of toolbox-tagged forms scoped to that customer. Click a form, fill it out, submit — the technician never leaves the PSA.
What technicians see
Inside the pod, each toolbox form appears as a clickable card with the form's name and description. Click a card and the form opens in a new tab (CW pod limitations on iframe nesting make a new tab the better UX). Submissions still flow through the form's configured webhook, so any n8n automations behind the form work identically to a direct submission.
If a customer has no toolbox forms tagged, the pod shows an empty state with a link to the FormNode dashboard so the technician (with the right permissions) can request the form be added.
Auto-prefill from CW context
When a form is launched from the pod, FormNode auto-prefills any field whose name matches a CW context key. The current keys passed through:
cwCompanyId— CW company RecIDcompanyName/cwCompanyName— CW company namesiteId/cwSiteId— CW site or subsite IDcontactId/cwContactId— CW contact IDticketId— CW ticket or record IDcwMemberId— the technician's CW member ID
Add a hidden field, mark it as a System field, and set its ConnectWise context key to one of those names. The submission payload will include the CW context automatically — useful for routing tickets back to the originating technician.
URL context keys use values like companyId and cwCompanyId. Organization integration mappings use canonical keys like cw.companyId and cw.siteId.
Troubleshooting
Pod loads but shows "No company match"
FormNode received a CW company ID but no organization in your workspace has that ID in its integration mappings. Open the org you expected to match and confirm cw.companyId is set to the same RecID CW is sending. Settings → Toolbox shows the last few resolution attempts and what value came in, which is the fastest way to diagnose a mismatch.
Pod loads but is empty even with a match
The matching organization has no forms tagged for the toolbox. Open one of its forms, go to Settings, toggle Toolbox Form, and refresh the pod.
CW shows the URL with literal {{Company.RecID}} in it
CW Manage didn't substitute the variable. Two common causes: (1) the pod was added with the placeholder typed as plain text rather than using CW's variable picker, or (2) CW's variable substitution is configured for a different scope. Edit the pod, retype the URL using CW's variable picker for Company.RecID, and save.