If you run Google Ads or Meta campaigns for a business that uses Plannit, you probably want every successful form submission on their website to count as a conversion. This lets the ad platforms measure your campaign results and optimize delivery toward people who are likely to submit a request.
You can set this up today with Google Tag Manager (GTM), without waiting for a thank-you page. Every time a Plannit form embedded on the website is submitted successfully, the widget pushes a job-added event into the page's data layer (dataLayer). You use that event to trigger your Google Ads conversion and your Meta Lead event, exactly as you would on a thank-you page.
How it works
When a visitor submits a Plannit form and the request is created successfully, the widget pushes a job-added event to the page's dataLayer. GTM listens for that event and fires your ad tags.
The event looks like this:
window.dataLayer.push({ event: 'job-added', url: 'https://www.example.com/contact', hostname: 'www.example.com', accountId: '<Plannit business account id>', contactId: '<Plannit contact id>'});The event carries these values:
event — always
job-added. The same value is used for every form type (message, quote, job request, appointment); the form type is not included.url — the full URL of the page where the form was submitted, including the query string.
hostname — the hostname of that page.
accountId — the Plannit business account id (the
businessvalue in the widget script). Empty if unavailable.contactId — the id of the Plannit contact for this request. Use it as the deduplication key in your ad tags. Empty if no contact is returned.
The payload contains no personal data — no name, email or phone. Please do not add any personal data to your ad tags.
The event is not pushed when there is no GTM or data layer on the page, when form validation fails, or when the submission returns an error.
Where the event fires (and where it doesn't)
The job-added event fires for the Plannit call-to-action widgets that contain a form (Send a message, Request a quote, Request a job, Contact us, Book an appointment, and their large and inline variants), because the widget is loaded directly into the website's page — the push reaches the site's own data layer.
It does not fire for:
The Plannit virtual assistant (chatbot), which runs in its own frame.
The Plannit-hosted business page (it is not the merchant's site or GTM container).
Links to Plannit used off-site, such as a Google Business Profile or a social media post.
Any page where the Plannit script is blocked (ad blocker, content security policy, consent manager) or hasn't finished loading when the visitor clicks.
Before you start
A GTM container installed on the website, with the snippet in the
<head>of every page, as Google recommends. A site that only has gtag.js (no GTM) still receives the push, but nothing will react to it — GTM is required.The Plannit widget script installed on the site, as shown on the business's integration page.
Access: admin access to the Google Ads account, to Meta Business Manager / Events Manager, and publish rights on the GTM container.
Consent: if the site has a consent banner (Google Consent Mode v2, Quebec Law 25), ad tags only fire once the visitor consents, so some conversions will not be counted. This is expected.
Step 1 — Set up Google Tag Manager
Create the trigger. In GTM, go to Triggers → New → Trigger Configuration → Custom Event.
Event name:
job-added(exact match, case-sensitive; leave regex matching off).This trigger fires on: All Custom Events (or Some Custom Events with a Page Path condition if you want a separate conversion per form — see Limitations below).
Suggested name:
CE - Plannit job-added.
Create the variable. Go to Variables → User-Defined Variables → New → Data Layer Variable.
Data Layer Variable Name:
contactId, and name the GTM variablecontactIdtoo, so{{contactId}}works in the tags below.Optional: do the same for
accountId.
Step 2 — Google Ads, end to end
Create the conversion action in Google Ads: Goals → Conversions → Summary → + Create conversion action → Conversions on a website.
Category: Submit lead form.
Set it up manually with Google Tag Manager (not a URL rule, not a GA4 import).
Count: One (recommended by Google for leads).
In the tag setup step, choose Use Google Tag Manager and note the Conversion ID and Conversion label.
Add a Conversion Linker in GTM: Tags → New → Conversion Linker, trigger All Pages. Not needed if a Google tag already loads on every page; adding it is harmless.
Add the conversion tag in GTM: Tags → New → Google Ads → Google Ads Conversion Tracking.
Enter the Conversion ID and Conversion Label from step 1.
Transaction ID:
{{contactId}}(for deduplication).Trigger:
CE - Plannit job-added.
Preview, submit a test form (see the testing checklist below), then Submit / Publish the container.
Verify in Google Ads: Goals → Conversions → Summary, in the Status column. It can take several hours to update (Google mentions up to 48 hours).
Use it for bidding: make the action a Primary conversion action and make sure the campaign's goals include it, so Smart Bidding optimizes on it. Set any other action measuring the same lead (for example an old thank-you page action) to Secondary.
Step 3 — Meta, end to end
Pixel / dataset: in Events Manager, pick or create the dataset (pixel) for the website and note its ID.
Base pixel (PageView) on All Pages: either already on the site (theme, CMS plugin) or added as a GTM Custom HTML tag with Meta's base code, firing on All Pages. Install it once only.
Lead tag in GTM: Tags → New → Custom HTML, trigger
CE - Plannit job-added:<script>fbq('track', 'Lead');</script>If the base pixel is itself a GTM tag, use Advanced Settings → Tag Sequencing → "Fire a tag before … fires" to run the base pixel first, so
fbqexists whenLeadfires.Optional (only if you also use the Conversions API): pass the same id as the server event's
event_idso Meta can deduplicate:<script>fbq('track', 'Lead', {}, { eventID: '{{contactId}}' });</script>Domain verification: in Business settings → Brand safety → Domains, verify the website's domain.
Test Events: Events Manager → the dataset → Test events, open the site, submit a test form, and confirm a browser
Leadevent.Ads Manager: run a campaign with the Leads objective, conversion location Website, and select the pixel/dataset with the Lead event in the ad set.
Testing checklist
A test submission creates a real request for the business in Plannit. Use a test business account, or warn the business first and clean up the test request afterwards.
In GTM, click Preview (Tag Assistant) and enter the URL of the page with the Plannit form.
Submit a test form, and close the thank-you message.
In the Tag Assistant event timeline, check that
job-addedappears and that its Data Layer tab showscontactId.On that event, check that the Google Ads Conversion Tracking tag and the Meta Lead tag appear under Tags Fired.
For Meta, the Meta Pixel Helper browser extension shows the
Leadevent, and Events Manager → Test events shows it too.Publish the container, then check the Google Ads status and Meta Events Manager over the next few hours.
Troubleshooting
No job-added event in Preview
GTM is not installed on that page, or the Plannit script is not loaded (blocked or missing).
The submission failed (validation or an error). Check the Network tab: the request to create the job must return a success response.
The link wasn't handled by the widget and the visitor went to the Plannit-hosted page instead. Check the URL after the click.
The event appears but the tag doesn't fire
The trigger event name has a typo or wrong case.
An extra trigger condition (such as Page Path) isn't met.
The tag is paused, or the container hasn't been published (tags only firing in Preview is expected until you publish).
Double counting
Set the Google Ads Count to One.
Set Transaction ID to
{{contactId}}(andeventIDfor Meta if you use CAPI).Use one trigger per conversion; set other actions measuring the same lead to Secondary.
Make sure the Meta base pixel is installed only once.
Fewer conversions than requests in Plannit
Ad blockers and browser privacy features can block GTM, the Plannit script or the ad tags.
Consent was refused (Google may model part of these with Consent Mode).
The widget is embedded inside an iframe (for example a site-builder HTML embed), so the push goes to the iframe's data layer instead of the page's.
The request came from an off-site link, the Plannit-hosted page, or the virtual assistant.
Limitations
Same event for all form types. The
job-addedevent does not say which form was submitted. If you need a separate conversion per form, add a Page Path condition to the trigger — one trigger and one conversion per page/form.Call-to-action widgets only. The event is not sent by the virtual assistant, the Plannit-hosted page, or links used off-site.
Ad blockers can block GTM, the Plannit script, or the ad tags.
Consent. No consent means no conversion (Google may model part of them with Consent Mode).
No personal data is sent, so enhanced conversions (Google) and advanced matching (Meta) are not available through this event.
gtag.js-only sites receive the push, but nothing listens to it — the site needs GTM.