OpenForm
Form tool we use, has normal and typeform-esque form variants. I have integrated the hidden field functionality so our user-id gets added into form submissions
Purpose: Embedded forms used on Pacing site; must receive first-party ID _c_pca.
Official product name is OpnForm (docs, API base).
REST API (submissions export)β
Personal Access Tokens live under Settings β Access Tokens on opnform.com. Send Authorization: Bearer <token> to https://api.opnform.com. Minimum ability for reading submissions: forms-read (also use workspaces-read if you list workspaces/forms by workspace).
| Action | Method | Path |
|---|---|---|
Resolve form (slug from URL path after /forms/) | GET | /open/forms/{slug} β includes numeric id |
List submissions (paginated, per_page max 100) | GET | /open/forms/{id}/submissions?page=1&per_page=100&status=all |
| CSV export | POST | /open/forms/{id}/submissions/export with JSON body { "columns": { ... } } |
Submission payloads use field block UUIDs as keys inside each itemβs data object; file fields return signed file_url values (short TTL).
Repo scriptβ
From repo root (token never committed; use env or a secrets manager):
export OPNFORM_TOKEN="your-token"
export OPNFORM_FORM_SLUG="designer-application-450mtn"
node scripts/resources/opnform/fetch-all-submissions.mjs
Default output directory: exports/opnform/ (gitignored β may contain PII).
fetch-all-submissions.mjs also writes a slim -form.json (field ids + labels only) next to the submissions file. Use it with submissions-json-to-csv.mjs so spreadsheet columns use question titles instead of UUIDs:
node scripts/resources/opnform/submissions-json-to-csv.mjs exports/opnform/<slug>-submissions.json
Full reference: OpnForm docs index and API keys.
Current useβ
- Form helper script updates hidden field
hidden-field1and rewrites OpnForm iframeuser_idparameter with_c_pca, prioritising localStorage over cookie, with a 1s delay after load. - Runs on pages with
.contact-v2-wrap.opnform iframe.
Dependenciesβ
_c_pcaidentity set by GTM logic.- Webflow/DOM availability of the iframe; timing handled via setTimeout.
TODOβ
- Confirm all OpnForm embeds use
user_idparam and are wrapped with.contact-v2-wrap.opnform. - Add defensive retry if iframe loads after 1s.
- Record form owners per workspace (dashboard).
Account Detailsβ
- Notes: Form tool we use, has normal and typeform-esque form variants. I have integrated the hidden field functionality so our user-id gets added into form submissions
- Category: MARKETING_TOOL
- Account type: INTERNAL
- Monthly cost: 18.80 GBP
- Created: December 2025
- Access URL: https://opnform.com/home
- Account owner: Ben Power