Track events
Track Contact
Fire Contact when a visitor clicks a link to start a conversation — phone (tel:), WhatsApp (wa.me/), Messenger (m.me/), or email (mailto:). Essential for service businesses where the conversion is a call or message, not a form submit.
Quick start
Contact needs no payload at all — this alone tracks every phone-link click on the page:
document.querySelectorAll('a[href^="tel:"]')
.forEach(function (el) {
el.addEventListener('click', function () {
adsping('track', 'Contact');
});
});Every match field you add raises your Event Match Quality — the full example below covers WhatsApp, Messenger and email links too.
Full example
Pick the tab for your stack — they all send the same event.
<script>
document
.querySelectorAll('a[href^="tel:"], a[href^="mailto:"], a[href*="wa.me/"], a[href*="m.me/"]')
.forEach(function (el) {
el.addEventListener('click', function () {
adsping('track', 'Contact', {
email: '[email protected]',
phone: '+1 415 555 1234',
firstName: 'Jane',
lastName: 'Doe',
city: 'San Francisco',
state: 'CA',
zipCode: '94107',
country: 'US',
dateOfBirth: '1990-01-15',
gender: 'f',
externalId: 'crm-12345'
});
});
});
</script>- HTML — place the snippet at the end of the
<body>(e.g. the footer), so every contact link on the page exists when it runs. - React / Next.js — render
<ContactLinkTracker />once in your layout; it attaches (and cleans up) the click listeners for all contact links. - Google Tag Manager — paste the HTML snippet into a Custom HTML tag, triggered on All Pages.
- Most visitors who click a phone link are anonymous — pass the match fields only when you know the visitor. AdsPing SHA-256-hashes every personal field before it reaches Meta.
Parameters
| Field | Type | Description |
|---|---|---|
emailrecommended | string | Email address, any case. The strongest match signal. |
phonerecommended | string | Any format — AdsPing normalizes it to E.164 by country.+1 415 555 1234 |
firstName | string | Given name, plain text.Jane |
lastName | string | Family name, plain text.Doe |
city | string | City name, plain text.San Francisco |
state | string | State / region code.CA |
zipCode | string | Postal / ZIP code.94107 |
country | string | ISO-3166 alpha-2 code.US |
dateOfBirth | string | YYYY-MM-DD.1990-01-15 |
gender | string | 'f' or 'm'.f |
externalId | string | Your own customer / user id, from your CRM or auth session.crm-12345 |
| Field | Type | Description |
|---|---|---|
fbp / fbc | string | Meta browser cookies — read by pb.js, fbc even built from ?fbclid= in the URL. |
client_ip_address | string | Visitor IP, captured on AdsPing's server. |
client_user_agent | string | Visitor browser, captured on AdsPing's server. |
external_id | string | Anonymous visitor id pb.js sets on first visit (your externalId is sent in addition). |
About Event Match Quality (EMQ)
Meta scores each event 0–10 on how well it can match the event to a person. Every field you send adds signal. On top of what you pass, AdsPing attaches the things it can read server-side — so you never paste these:
fbp+fbc— Meta browser cookies, read by pb.js (it even buildsfbcfrom?fbclid=in the URL).client_ip_address+client_user_agent— the visitor’s IP and browser, captured on AdsPing’s server. Meta requires these for website events; they’re sent in plaintext (not hashed).external_id— an anonymous visitor id pb.js sets on first visit.
Every personal field (email, phone, name, address) is SHA-256 hashed before it leaves AdsPing — Meta only ever receives the hash. The more real fields your payload carries, the closer you get to EMQ 10/10.
Test it
- Click a phone or email link on your site.
- Open your pixel’s Report → Recent events in AdsPing.
- A Contact row appears within ~10 seconds with a green Success badge and its EMQ score.
✓ Contact is live.
Every call, WhatsApp, or messenger click is now a conversion signal in Meta — perfect for service businesses where the phone is the sale.