Google Ads Tracking Setup for WordPress
Quick answer: Use the free container builder wizard to select Google Ads and your events, enter your tracking ID, then import the generated file into Google Tag Manager - no manual tag setup needed for any of the 21 events below.
Conversion tracking tags using Google Ads' native GTM tag type. This container uses a native GTM tag type for this platform.
Build my Google Ads container →
Events you can track
conversion events
- Google Ads Form Submission event setup
- Google Ads HubSpot Form Submission event setup
- Google Ads Contact Form 7 Submission event setup
- Google Ads WPForms Submission event setup
- Google Ads Gravity Forms Submission event setup
- Google Ads Comment Submission event setup
- Google Ads Newsletter Signup event setup
- Google Ads User Login event setup
- Google Ads User Registration event setup
- Google Ads Calendly Booking Scheduled event setup
- Google Ads Live Chat Started event setup
engagement events
- Google Ads Page View event setup
- Google Ads Scroll Depth event setup
- Google Ads Outbound Link Click event setup
- Google Ads File Download event setup
- Google Ads Phone Number Click event setup
- Google Ads Email Link Click event setup
- Google Ads WhatsApp Click event setup
- Google Ads Site Search event setup
- Google Ads Video Play event setup
- Google Ads Video Complete event setup
How the container is built
Page View uses GTM's native Page View trigger. The other 20 events each get their own Custom Event trigger, matched to a dataLayer.push({event: '...'}) call with the same name as the event key (e.g. purchase, add_to_cart) - every Google Ads tag is then wired to its matching trigger automatically.
For that reason, events other than Page View generally require your site to actually push the matching dataLayer event - the container listens for it rather than generating it. Use GTM's Preview mode after import to confirm each event fires as expected.
Exception: HubSpot Form Submission, Contact Form 7 Submission, WPForms Submission, Gravity Forms Submission are detected automatically from each form plugin's own native browser event, so this container includes a small Custom HTML "bridge" tag for each one and there's no dataLayer code to add for those specifically.
Requirements:
- A WordPress site with Google Tag Manager installed
- A Google Ads tracking ID/account to enter in the wizard
- A way to push dataLayer events for anything beyond Page View and the auto-detected form events above (a data layer/ecommerce tracking plugin, or custom code)
Frequently asked questions
What is Google Ads tracking for WordPress?
Conversion tracking tags using Google Ads' native GTM tag type.
Do I need to write code to set up Google Ads tracking?
No. The container builder wizard walks you through selecting events and entering your tracking ID, then generates a ready-to-import Google Tag Manager container JSON file - no manual tags, triggers, or variables to configure by hand.
How many Google Ads events can I track?
This guide covers 21 trackable events. The free tier lets you generate a container covering up to 3 events at once; unlocking full access covers all of them in a single container.
Does the generated container use a native GTM tag or Custom HTML?
Google Ads has a native tag type in Google Tag Manager, so the generated container uses that built-in tag rather than a Custom HTML workaround.
How do I import the container into Google Tag Manager?
In GTM: Admin > Import Container > choose the downloaded JSON file > select "Merge" into a new workspace. Verify everything fires correctly in Preview mode before publishing to your live container.
Does this work with GTM server-side tracking or Google Ads's Conversions API?
This builds a standard client-side (browser) GTM Web Container for Google Ads - it covers the events that fire from the customer's browser. If you're also running a GTM server-side container or Google Ads Conversions API to recover conversions lost to ad blockers, Safari ITP, and iOS App Tracking Transparency, the two set ups complement each other: this container still handles the client-side/browser-side events that feed into your server-side setup, it doesn't replace it.