WordPress plugin intelligence profile

MasVirtual Lead Tracking

Connects WhatsApp conversations back to the Google Ads campaign that produced them, and reports qualified leads and closed sales to Ads.

WP PlugIndex snapshot

Current directory snapshot

Tested up to WordPress 7.1
Current version1.4.2
WordPress coverageTested up to WordPress 7.1
Minimum stackWP 6.4 · PHP 8.0
Directory statusactive
Last directory update14 Oct 202620d ago
Active installationsNewAdoption metric — not a quality score
WordPress.org ratingNo WordPress.org ratings yet
Official packageDirect from WordPress.org

Repository metrics are context, not quality scores. Active installations measure adoption and can strongly reflect a plugin’s age and historical popularity. Ratings, recent updates and “Tested up to” metadata also do not guarantee modern code, error-free operation, security, feature completeness or suitability for a particular site. Why active installs don’t tell the whole story →

WP PlugIndex currently records MasVirtual Lead Tracking version 1.4.2 as active, updated 20d ago and tested up to WordPress 7.1.

Overview

About this plugin

Google Ads can optimise for what you report to it, and nothing more. If all you report

is button clicks, that is what it buys you: clicks. The sale that closed three weeks

later, on WhatsApp, by a phone call your CRM never saw, is invisible to the bidding

algorithm.

MasVirtual Lead Tracking closes that loop. It records where every visitor came from, keeps that origin

attached to the lead through your sales funnel, and reports back to Google Ads at each

stage — in the browser for the contact itself, and by offline conversion import for the

qualified lead and the closed sale, which happen weeks later when nobody is on the page

anymore.

The WhatsApp button is part of it because that is where these conversations start, and

because a click that is not measured cannot be attributed. But the button is the input,

not the point: the point is that “campaign arl-transporte produced 3 sales worth

9,600,000” becomes a sentence you can read, and that Google Ads can bid on.

What this version does

  • Captures ad click identifiers (Google, Meta, Microsoft, TikTok), UTM parameters and

the referrer for every visitor, not just paid ones.

  • Stores first touch and last touch separately, because they rarely match.
  • Renders the floating button, with configurable icon, size, color, shape, position

and business hours.

  • Measures clicks on any WhatsApp link on the page, including the ones added by

your theme, an Elementor button or another plugin, and the ones that appear after

the page loads.

  • Routes the click across several recipients, by rotation, by weight or by schedule,

and can create the lead already assigned to a sales rep.

  • Different messages per page, per content type or per traffic source: you can

greet someone who arrived from an ad differently.

  • [mvlt_whatsapp] shortcode and a Gutenberg block.
  • Configurable retention with automatic purging, wired into the WordPress privacy

tools.

  • Reports conversions to Google Ads: in the browser with gtag for what happens on the

page, and through CSV import for what happens weeks later, when a sales rep marks

the sale as won.

  • A diagnostics screen that answers “is this working?” without opening the console,

with every warning explained and a button to simulate an event.

What it does not do yet

The drag-and-drop lead board with columns, and outgoing webhooks to n8n or a CRM, are

coming in the next release. Leads are already stored in full: nothing captured today

is lost when those arrive.

About the reference in the message

MasVirtual Lead Tracking appends a short reference to the prefilled message, like Ref: [#K7M2QF83].

That is what lets you match the message arriving in WhatsApp with the campaign that

produced it.

Know this before you trust the number: between 15% and 30% of users delete the

prefilled text before sending. Those leads cannot be matched. That is a WhatsApp

limitation, not a plugin one, and the only real mitigation is to push a form as the

primary channel when exact attribution matters.

You can also place the reference mid-message using the {ref} placeholder, which

survives partial deletion better than a trailing line does.

Privacy

Click identifiers are personal data under the GDPR in Europe, and under Law 1581 of

2012 in Colombia. Storing them makes the site operator a data controller.

Add a paragraph to your privacy policy along these lines:

>

When you visit this site we store, for up to 90 days, the advertising identifier

that came with your visit (for example the Google Ads one), the campaign parameters

in the URL, the address of the page you arrived from, and a random identifier for

your browser. We do this to know which campaigns generate real enquiries. If you

contact us on WhatsApp, we associate that data with your message. You may request

access to or deletion of this information by writing to [your contact address].

The plugin reads the Google Consent Mode v2 state and acts accordingly: without

consent it writes no first-party cookie and keeps only the identifiers that do not

depend on cookies.

What it stores in the browser, with consent, is this and nothing else:

  • wl_v — a first-party cookie holding a random browser identifier. The server

writes it, it is HttpOnly and SameSite=Lax, and it expires after the number of

days set as the attribution window. No script reads it, neither this plugin nor any

other on the page.

  • wl_f, wl_l, wl_uid, wl_turno, wl_vp — in localStorage. These are not

cookies and travel in no request: first touch, last touch, the lead reference, the

assigned sales rep, and the browser-proposed visitor identifier used only until the

server issues the wl_v cookie. The proposed value is deliberately named

differently from the cookie, because they are two separate things.

There are no third-party cookies and no identifiers shared with anyone.

Conversion feed (optional, disabled by default). If you enable it, the plugin

publishes one URL per conversion action so that Google Ads can collect conversions on

its own schedule. Each URL serves a CSV containing Google click identifiers, sale

values and the conversion action name. It contains no names, phone numbers or email

addresses.

These URLs carry no secret: they are protected by a username and a randomly generated

48-character password, which is what Google’s Data Manager asks for and which keeps the

secret out of browser histories and server access logs. The password can be rotated at

any time and the previous one stops working immediately.

The previous mechanism, kept only so an older schedule does not break, instead put a

random 48-character key in the URL itself, which made that URL readable by anyone

who knew it. It ships disabled, and if you enabled it before, switch it off and rotate

its key once the new connections are working.

External services

The plugin works without contacting any server of ours: it sends no telemetry, phones

nobody home, and requires no account or key. Everything it captures stays in the

site’s own database.

Two third-party services are involved, both by explicit decision of the administrator:

js). Only if you tick “let MasVirtual Lead Tracking load the Google tag” under

Conversions, which ships disabled. It loads

com/gtag/js and sends Google Ads the conversion event

with the identifier, label, value and currency you configured, plus the click

identifier Google placed in the URL. If your site already loads the tag through Site

Kit, GTM or a theme snippet, the plugin detects it and does not duplicate it. Google

com/terms ·

com/privacy

WhatsApp. me, the

official WhatsApp redirector. Nothing is sent to Meta from the server: it is the

visitor who navigates there on tap, with the number and message in the URL, exactly as

with any WhatsApp link. WhatsApp terms and privacy:

com/legal/terms-of-service ·

com/legal/privacy-policy

About imported conversions

Conversions that happen after the visit — a qualified lead, a closed sale — cannot be

reported from the browser, because the visitor is no longer there. They accumulate and

are uploaded to Google Ads by file.

Every row carries the event time with the site’s UTC offset stated explicitly, and an

order identifier derived from the lead reference. That identifier is what lets you

upload the same file twice without duplicating conversions.

Before writing each row the plugin validates that the conversion is later than the

click, that no more than 90 days have passed, and that the identifier is of a type

Google accepts through this route. Rows that fail are shown on screen with the reason,

never dropped silently: a conversion that disappears without explanation is worse than

an error, because the team believes it was reported.

Rows whose problem can never be fixed — a lead that arrived through an unpaid channel,

a gbraid / wbraid identifier, a conversion already past the 90-day window — are

discarded with their reason recorded in the lead’s history, so the “pending” counter

only ever shows work that still exists. Rows you can still fix, such as an action

missing its Google Ads name, stay pending on purpose.

To automate the upload without a file, GET /wp-json/mvlt/v1/pendientes returns

already-validated conversions and POST /wp-json/mvlt/v1/exportados confirms the

uploads. That is the recommended route with n8n: the Google Ads API PHP library is

heavy and demands OAuth, and it is not worth it below roughly 200 conversions a month.

WordPress.org metadata

Plugin tags

Topics listed for this plugin in the WordPress.org directory.

  • google ads
  • attribution
  • conversions
  • crm
  • leads
Compatibility & maintenance

Compatibility & maintenance

Tested with WP 7.1

Marked as tested with the current WordPress 7.1 release.

Current WordPress releaseWordPress 7.1
WordPress.org Tested up to7.1
Minimum requirementsWordPress 6.4 · PHP 8.0
Update activity14 Oct 202620d ago

“Tested up to” is directory metadata supplied by the plugin author. WP PlugIndex does not turn an older declaration into a claim that the plugin is incompatible.

Changes recorded by WP PlugIndex

Recent tracked changes

Version1.4.11.4.2
Version1.4.01.4.1
WordPress compatibility7.1.17.1.3
Version1.3.01.4.0
WordPress compatibility7.17.1.1
Tracking & source

WP PlugIndex tracks public WordPress.org directory metadata and records selected version, compatibility and availability changes as they are detected.

Plugin watchlist

Watch this plugin

Sign in to your WP PlugIndex account or create a free account. Free accounts can watch up to 5 plugins and see what changed.

Watch limit

Watchlist limit reached

You have reached your current active watch limit.