Features
How dynamic number insertion works
The technical explanation of LeadJourney's call tracking – how a visitor gets their own number, what the script actually changes on your page, how many numbers a pool needs, and what it means for your NAP consistency and SEO.
Dynamic number insertion (DNI) is what lets a phone call be attributed to the ad that produced it. Each visitor is shown a different phone number from a small pool, so when that number rings, LeadJourney knows exactly which session – and therefore which campaign, ad and keyword – is on the other end.
In short
Buy a handful of numbers, group them into a pool, and tell the pool which number on your site to replace. The tracking script then hands each visitor their own number for the length of their session, and the call is forwarded to your real line.
How a visitor gets their own number
The visitor lands on your site
The tracking script identifies the session and its traffic source – campaign, ad, keyword, referrer.
Your number gets swapped
The script asks LeadJourney for a free number from the pool and replaces the numbers you configured. The assignment is tied to that visitor's click ID, and it's stored in their browser, so it survives a page change.
The visitor calls
The call is forwarded to your real number. Because LeadJourney knows who saw which number, the call attributes back to that exact session.
Everything lands in LeadJourney
The call appears in the Calls overview with its recording, transcript, AI summary and the full customer journey.
What the script actually changes on your page
This is the part worth understanding precisely, because it decides whether your displayed number changes at all. The script touches three things, and each behaves differently:
The link target of every tel: link, and any element you mark with data-lj-phone or .lj-phone.
Visible text — rewritten only when the text is itself a phone number, or when you list that number as a swap target.
| What | What happens |
|---|---|
tel: links | The href is always swapped to the pool number. The link's visible text is only replaced if that text looks like a phone number – at least seven digits and nothing but digits, spaces, brackets, +, - and . |
| Text on the page | Only replaced if you've configured the number as a swap target in the pool. The script then searches the page text for it, including the display variants you list. |
| Elements you mark | Anything matching [data-lj-phone] or .lj-phone always has its text replaced, and its href too if it's a link. |
New content added to the page later – a sticky header, a modal, a lazy-loaded block – is handled as it appears.
Can the displayed number stay the same?
Yes. If your call-to-action is a link whose text is not a phone number – "Call us now", a
button, a phone icon – then only the href changes and the visitor sees exactly what you
designed. Nothing on the page is rewritten unless the text itself is a number, you configured it
as a swap target, or you marked the element with data-lj-phone.
So you can run call tracking entirely in the background on a click-to-call button, and leave every printed number on the page untouched.
Nothing is touched when DNI is off
Dynamic number insertion is a switch under Call Tracking → Setup. With it off, your site is never modified – you can still buy numbers, forward calls and see the call log. The switch alone isn't enough either: the pool also needs a live number to swap in.
NAP consistency and SEO
The usual worry: local SEO rewards a consistent Name, Address, Phone across your site, your Google Business Profile and your citations. A number that changes per visitor looks like it breaks that.
In practice it doesn't have to, because you control exactly what gets replaced:
- Keep your NAP number as text in the footer, on the contact page and in your structured data, and don't add it as a swap target. The script won't touch it – it only rewrites page text for numbers you explicitly configure.
- Swap the call-to-action instead. Put the tracking number behind the button or the
tel:link people actually tap, while the printed NAP number stays as it is. - Structured data is never modified. The script works on rendered text and
hrefattributes, not on your JSON-LD, so the phone number a search engine reads from your markup stays the one you published.
If you do want the displayed number swapped
Some teams deliberately swap the visible number because it gives cleaner attribution for people who read the number and dial it on another device. That's a legitimate trade-off – just keep your primary NAP number consistent in your Google Business Profile, your structured data and your citations, and treat the swapped number as an additional line rather than a replacement.
Pools: one per website
A pool is a group of numbers that serves one website. It carries the website URL, the numbers
in it, and the swap targets – the numbers displayed on that site that should be replaced,
including their display variants for sites that write the same number inconsistently
(+49 30 1234567, 030 1234567, 0049301234567).
How many numbers does a pool need?
Each visitor holds a number for their whole session plus ten minutes afterwards, so the pool has to cover your peak number of simultaneous visitors – not your monthly total.
| Monthly website visitors | Recommended pool size |
|---|---|
| up to 5,000 | 4 numbers |
| 5,000 – 15,000 | 6 numbers |
| 15,000 – 40,000 | 8 numbers |
| 40,000 – 100,000 | 12 numbers |
| 100,000 – 250,000 | 16 numbers |
| more than 250,000 | 25 numbers |
Four numbers is the minimum. With fewer, visitors start sharing a number and a call can be attributed to the wrong session. When the pool is exhausted, LeadJourney returns a shared number and the script leaves your page alone rather than showing a number it can't attribute.
Setting it up
The Call Tracking → Setup screen walks through it in seven sections:
- Tracking script – the same snippet as the rest of LeadJourney. If it's already installed for form tracking, you're done; call tracking and DNI run through it.
- How every visitor gets their own number – the explainer above.
- Pools & numbers to replace – create a pool per website and list the numbers to swap.
- Verify installation – enter a page URL and LeadJourney checks that the script is live and numbers are actually being swapped.
- Lead creation – whether a tracked call automatically becomes a lead. New callers become leads with the call's full attribution; repeat callers attach to their existing lead. With it off, you link calls to leads by hand.
- Call recording – record answered calls for playback, transcript and AI summary, with an optional announcement before the call connects.
- Email notifications – who gets told when a number needs documents, when a regulator rejects them, or when forwarding minutes run low.
Buying numbers takes paperwork in some countries
Many European countries require a registered subscriber with a verified local address before a number goes live, and some want a proof document such as a utility bill or business registration. Germany and Austria require all three. Plan a few days for this rather than expecting numbers to be live immediately.
Common questions
Related articles
Lead Overview
Every lead in one table, with first- and last-touch source, CRM status, tags, revenue and full journey. Click any lead to see its complete timeline of clicks, conversions and sales – the person behind the numbers.
Attribution models
All six attribution models in LeadJourney – Last Click, First Click, Linear, Time Decay, U-Shaped and Progressive – what each one credits, when to use it, and the Conversion Window and Attribution Date settings that decide which conversions count and on what day.