Skip to content
W3Bullhorn
W3Bullhorn
Book a demo

Form Bridge

Keep the form you already built

Some agencies have spent years on an application form: conditional logic, file rules, routing, a layout the brand team signed off. Form Bridge leaves it exactly where it is and carries its submissions into Bullhorn, against the right job, with the CV attached.

Your form plugin keeps its own entry. Nothing about the form changes for a visitor.

Supported

Which form plugins

One adapter each, because no two of them agree on anything — not the hook, not what a ticked box looks like, and not what counts as spam.

Form plugin

Gravity Forms

The adapter reads the submitted entry after Gravity Forms has finished with it, and takes the consent field’s own ticked value rather than inferring consent from the field being present.

Not yet tested against Gravity Forms itself

Gravity Forms is commercial and has no free edition, so the adapter was written against its published documentation and exercised against a stand-in for those documented shapes. That proves the adapter does what it says with them; it proves nothing about what Gravity Forms really sends. We will not describe this one as working until it has been run against a real licence, at both its oldest supported and its current version.

Form plugin

WPForms

WPForms runs the hook the bridge listens on only for an entry it has not already marked as spam — a honeypot, a failed CAPTCHA, a direct POST, Akismet and its own country and keyword filters all stop it first. So spam is not bridged because the hook never fires for it, and the adapter checks the entry’s spam reason as a second, independent guard.

Tested against WPForms Lite from wordpress.org. The Pro-only parts, including its entry store, are not tested: on Lite there is no stored entry to reference, which the adapter handles rather than assumes.

Form plugin

Contact Form 7

The bridge runs before Contact Form 7 sends its own mail, and only for a submission that is still clean: validation passed, the acceptance boxes were ticked, no spam filter fired and the uploads are in place. An invalid, unaccepted or spam submission never reaches that point at all.

Why we do not wait for the mail to be sent

The obvious hook is the one that fires once Contact Form 7 has sent its email. We deliberately do not use it: on a site whose mail is not configured that hook never runs, so every application would silently fail to reach Bullhorn while the form told the candidate it had worked. Tested — a submission on a site with no mail transport ends in a mail failure and that hook never fires.

Form plugin

Fluent Forms

Fluent Forms has a trap in it worth knowing about. Its submission hook does not mean ‘a legitimate submission’: a submission flagged as spam by Akismet or CleanTalk is still inserted, and unless an administrator has chosen to skip processing, that same hook fires for it.

So the hook alone proves nothing. The adapter reads the stored submission’s own status and accepts only the one a fresh, clean submission is inserted with. Spam is refused, and so is every other state — trashed, already read, a payment state, or anything the plugin adds in future.

Tested against Fluent Forms from wordpress.org.

Form plugin

Elementor Forms

Nothing has to be added to the form widget. The bridge listens on the hook Elementor fires once per submission for every form, after validation and after the form’s own actions have run, so a form with no mapping is simply ignored.

That also keeps the add-on out of the widget’s own action loop, where an exception becomes an error message shown to the candidate.

Tested against PRO Elements, not Elementor Pro

Elementor Forms is a widget of Elementor Pro. The adapter was verified against PRO Elements, a GPL redistribution, on the development site — not against the commercial Elementor Pro build. The code should be the same; the distinction matters to anyone relying on it, so it is stated rather than glossed.

The part that is easy to get wrong

A ticked box means a ticked box, and nothing else

Every form plugin represents a ticked consent box differently — as 1, as "on", as a list containing a value, as the label of the box itself — and none of them represents an unticked one the same way twice. Guessing with a truthy cast is how a site ends up recording consent that was never given. Each adapter names the exact values its plugin uses for "ticked", and the bridge accepts only those: a value of an unexpected shape, an empty list, or a value the adapter did not name is not consent. Consent is never inferred from a field merely being present.

  • A closed set of affirmative values per plugin, not a truthy cast
  • An unexpected shape is treated as no consent, not as yes
  • The wording agreed to is recorded with a timestamp
  • Global Privacy Control honoured as an opt-out

It reads one thing about the request, and keeps none of it

The only header the bridge looks at is the Global Privacy Control signal a browser sends to say "do not sell or share my data". It is honoured as an opt-out. Nothing else about the request is read and no part of the value is stored.

Licensing

What a lapsed licence does

Worth knowing before you build your application flow on it.

  • New submissions stop being bridged. That is the whole of it.
  • Applications already queued keep being delivered. Rows in the delivery queue are not gated, so nothing in flight is stranded.
  • Your mappings and your stored rows are untouched. Nothing is deleted and nothing needs rebuilding when you renew.
  • Your form still works and still keeps its entries. A visitor sees no difference; the form plugin behaves exactly as it always did.
  • Export and erasure still cover everything held. A subject access or erasure request is answered whatever the licence says.

FAQ

Questions about Form Bridge

Short answers here. Anything else, ask us directly.

Do we have to replace our form?

No. That is the entire point. The form stays where it is and keeps its own entries; the bridge carries the submission onward.

Does the candidate notice anything?

No. The form behaves as it always did, including its confirmation.

What about the CV?

It travels with the application, as it does from the plugin’s own form.

Can we use it for a form that is not an application?

It is built for applications against a job. If you want something else carried into Bullhorn, raise it on a demo rather than assuming.

Which form plugin should we use?

Whichever you already run. We would rather bridge the form your team knows than have you learn a new one.

Where does candidate data live?

In Bullhorn. Bullhorn stays the system of record: applications are delivered into it rather than kept as a second candidate database on your website.

Put your Bullhorn jobs on your own website

See W3Bullhorn working with your own Bullhorn jobs, on a short call with a specialist who knows Bullhorn and WordPress.

Book a demo How it works