WPForms is installed on over 6 million WordPress sites — and exactly zero of them ship with a default integration that sends lead submissions to Google Ads, Meta, and LinkedIn as server-side conversions. The hook to do it has been in WPForms since the plugin’s early versions: wpforms_process_complete. It fires server-side after every successful submission, carries the entry ID, and runs regardless of ad blockers, AJAX behaviour, or whether any browser pixel ever loaded.
Most WPForms tracking tutorials still point at the thank-you-page redirect or a GTM dataLayer event. Both fail for AJAX-submitted forms — the WPForms default. The fix is a server-side handshake that uses wpforms_process_complete as the capture point and the WPForms entry ID as the canonical event_id, then fans the same conversion to Google Ads Enhanced Conversions for Leads, Meta CAPI Lead, and LinkedIn CAPI Lead in parallel.
The Two Failure Modes Most WPForms Tutorials Still Recommend
The dominant guidance online for WPForms conversion tracking falls into two patterns, both of which structurally lose conversions on a B2B site.
Pattern 1: The thank-you-page redirect. WPForms’ own documentation recommends configuring the form to redirect to a thank-you URL after submission, then placing a Google Ads conversion tag on that URL. The pattern requires a full page load. WPForms forms by default submit via AJAX — the form sends data, displays a success message, but the URL never changes. No page load means no thank-you page, which means no conversion fires. To make this approach work you have to disable AJAX on the form, which degrades the user experience the AJAX setting was added to provide.
Pattern 2: The GTM dataLayer event. Most agency tutorials show how to wire WPForms confirmations into Google Tag Manager via a dataLayer.push() in the success callback, then have GTM fire Google Ads, Meta Pixel, and LinkedIn Insight events from there. Every step in this chain runs in the browser. The GTM container is a third-party script that 31.5% of global users block. The dataLayer push lives in JavaScript that ad blockers can also block independently. The outbound conversion network requests can be blocked individually. Each step compounds the loss multiplicatively, not additively. By the time the platform receives the conversion, the population of submissions that survived the funnel is materially smaller than the population that actually submitted the form.
Why wpforms_process_complete Is the Right Capture Point
WPForms exposes a clean PHP action hook called wpforms_process_complete that fires after a form submission has been validated, processed, stored as a WPForms entry, and the notification email sent. It receives four parameters in this order:
$fields— the array of submitted field values, keyed by field ID$entry— the raw entry data including any meta the form collected$form_data— the form configuration, including form ID and field types$entry_id— the unique numeric ID of the submission row in the WPForms database
Two facts about this hook matter more than the rest. First, it fires regardless of how the form submitted — AJAX or page reload, both end up at wpforms_process_complete. Second, the entry ID is unique, server-generated, and persists for the lifetime of the WPForms database — making it the canonical event_id for browser/server deduplication. Nothing else in the WPForms data model has those two properties simultaneously.
The Cost of Browser-Pixel-Only Tracking on a B2B Site
Browser-only tracking is not a stylistic choice in 2026. For B2B WordPress sites running paid ads, it is a budget hole.
Ad blockers. 31.5% of global users run ad blockers (Statista), and B2B audiences — developers, marketers, IT decision-makers — block at materially higher rates. Every blocked browser is invisible to the WPForms client-side conversion event. The lead is captured in the WPForms entries table; the conversion never reaches the ad platform.
Safari ITP and B2B sales cycles. Safari first-party cookies expire after 7 days under ITP. B2B sales cycles routinely run 3 to 6 months — between 12 and 25 times the cookie window. Any returning visitor beyond a week loses the original-touch attribution entirely, which means even submissions that do reach Google Ads or Meta are credited to whatever the last touch happened to be, not to the campaign that originally generated the lead.
Smart Bidding starvation. Google Ads deprecated Enhanced CPC on March 31, 2025 — Smart Bidding is now mandatory for all Search and Display campaigns. Smart Bidding requires 30 conversions per month minimum (50 for Target ROAS) for the algorithm to calibrate. B2B WordPress sites running browser-pixel-only WPForms tracking systematically fall below this threshold once ad-blocker loss and ITP loss are subtracted. The campaigns stay in permanent learning phase.
LinkedIn ROAS amplifies the loss. LinkedIn Ads CPCs typically run $5–$15+ per click — the highest CPC of any major paid channel. Every WPForms lead generated by a LinkedIn click that fails to deliver back to LinkedIn as a Conversions API event is a $5–$15 click that the campaign’s optimisation engine cannot learn from. Multiply by the lead volume of a typical B2B site and the visible ad-spend efficiency drops 20–40% from what an accurate conversion signal would deliver.
You may also be interested in: Your Gravity Forms Lead Submissions Are Missing From Meta and Google Ads. Here’s the Server-Side Fix B2B WordPress Sites Keep Overlooking
The Architecture: One Hook, Three Destinations
The pattern is simpler than the failure modes it replaces.
- Capture. Hook into
wpforms_process_complete. Pull the entry ID, the form ID, the email and phone fields, plus the gclid / fbclid / li_fat_id captured at the WordPress entry point earlier in the session. - Hash. SHA-256 the email and phone fields per the platform requirements (Google Ads Enhanced Conversions for Leads, Meta CAPI, and LinkedIn CAPI all expect normalized lowercase email hashed with SHA-256).
- Fan out. Send the same conversion to Google Ads (Conversion API for Leads), Meta (Conversions API Lead event), and LinkedIn (Conversions API Lead event) in parallel — using the WPForms entry ID as the canonical event_id on every copy.
- Optionally send a deduplicated browser copy. If a browser pixel still fires from the WPForms success callback, attach the same entry ID as event_id. The platform deduplicates within a 48-hour window. The server copy guarantees delivery; the browser copy adds nothing if the server copy succeeded.
- Stream to BigQuery. Same payload, separate destination. Lead data lives in your warehouse independent of any ad platform’s reporting.
The entire delivery happens before the visitor’s browser has finished rendering the success message. Ad blockers cannot reach an authenticated server-to-server API call. Safari ITP cannot expire data that is captured at the moment of submission. Smart Bidding receives the full conversion volume that the WordPress site actually generated, not the subset that survived the browser.
Run This Audit This Week
Quantify the gap before architecting anything. Pick a 30-day window and pull three numbers:
- WPForms: WPForms → Entries → filter by date, count submissions for the relevant form(s)
- Google Ads: Conversions column for the lead conversion goal in the same window
- Meta Events Manager and LinkedIn Campaign Manager: the Lead event count for the same window
If any of the three platform counts is more than 15% below the WPForms entry count, server-side delivery is the gap. A 15% gap is normal channel variance and consent loss. Anything above is structural — ad blockers, AJAX failure, ITP expiry, or all three at once. Document the number per platform. That gap, multiplied by your average click cost, is the budget that Smart Bidding and LinkedIn auction-side optimisation cannot see.
You may also be interested in: LinkedIn Conversions API for WordPress: B2B Tracking Without GTM
Here’s How You Actually Do This
Transmute Engine™ is a first-party Node.js server that runs on your subdomain (e.g., data.yourdomain.com). The inPIPE WordPress plugin already hooks into the WordPress action surface for WooCommerce orders — adding wpforms_process_complete to the same capture pattern is a configuration change, not a development project. Every B2B WordPress site running WPForms gains server-side delivery to Google Ads Enhanced Conversions for Leads, Meta CAPI Lead, LinkedIn CAPI Lead, and BigQuery in the same architecture that handles WooCommerce purchases — no separate sGTM container, no GTM expertise, and no developer time required from the site owner.
Key Takeaways
- WPForms ships on 6 million WordPress sites with zero default server-side conversion delivery to Google Ads, Meta, or LinkedIn. The platform’s documentation recommends the thank-you-page redirect approach, which fails for AJAX submissions (the WPForms default).
wpforms_process_completeis the canonical capture point. It fires after validation and storage, receives the entry ID, and runs regardless of browser state, AJAX behaviour, or ad-blocker presence.- The WPForms entry ID is the canonical event_id for browser/server deduplication across Google Ads, Meta CAPI, and LinkedIn CAPI within their 48-hour deduplication windows.
- Smart Bidding requires 30 conversions per month (50 for Target ROAS). Browser-pixel-only WPForms tracking on a B2B site systematically falls below this threshold once ad-blocker and ITP losses are subtracted.
- Audit WPForms entry count vs Google Ads, Meta, and LinkedIn lead conversion counts for the same 30-day window. A platform gap above 15% indicates missing server-side delivery — and missing budget visibility for the optimisation algorithms running your campaigns.
Frequently Asked Questions
It is the WPForms PHP action hook that fires after a form submission has been validated, processed, stored as an entry, and notifications sent. It receives four parameters: the fields array, the entry array, the form data array, and the entry ID. Because the hook executes server-side after validation, it captures every successful submission regardless of whether any browser JavaScript ran, whether the visitor uses an ad blocker, or whether the form submitted via AJAX or page redirect.
WPForms documentation officially recommends the thank-you-page redirect approach with a Google Ads conversion tag on the redirect URL. That approach predates Enhanced Conversions for Leads and assumes a full page load after submission — which AJAX-submitted forms (the WPForms default) bypass entirely. WPForms has never shipped a built-in Conversions API integration despite the wpforms_process_complete hook being available since the plugin’s early versions. Server-side delivery is implementable but is not the default path.
No, as long as you use a canonical event_id on both copies. The WPForms entry ID is unique per submission and is the natural choice. Send the same event_id with the browser pixel (via the form’s success callback) and with the server-side Conversions API call. Google Ads, Meta CAPI, and LinkedIn CAPI all deduplicate against matching event_ids within a 48-hour window. The browser copy reaches the platform when the visitor isn’t blocked; the server copy reaches the platform always. The platform reports one conversion per entry.
Yes — and AJAX is exactly the use case where wpforms_process_complete becomes essential. AJAX submissions never trigger a page load, so the thank-you-page redirect tracking method captures nothing. wpforms_process_complete fires on the server after the AJAX request completes, regardless of what happens in the browser. The conversion event is sent to Google Ads, Meta, and LinkedIn from the server, then a browser-side success callback can fire a deduplicated copy if needed.
GTM operates entirely in the browser. It listens for a dataLayer.push() event triggered by WPForms’ confirmation script, then fires whatever tags you configured. Every step happens client-side, which means ad blockers can block the GTM container, the dataLayer push, or the outbound conversion event independently. wpforms_process_complete runs on the WordPress server before any browser code executes. The conversion is captured before ad blockers ever enter the picture, and is delivered via authenticated server-to-server API calls, which ad blockers cannot reach.
Close the WPForms server-side gap once and ship every lead to every platform. Visit seresa.io to see how Transmute Engine routes wpforms_process_complete events to Google Ads, Meta, LinkedIn, and BigQuery — without GTM, without a developer, and without a single browser pixel in the critical path.



