Dynamic Number Insertion

Dynamic Number Insertion for Indian Websites

Dynamic number insertion (DNI) shows each website visitor their own tracking number, so a call can be tied to the ad, keyword or page that brought them. On Edesy you paste one script tag; it captures UTM tags and click IDs such as gclid and matches each call to the visit. No tracking fee: calls Rs 1.00/min plus rental.

1 tag

Script install

30 min

Default lease

Rs 0

Tracking fee

Rs 1.00

Per minute of calls

UTM, gclid, fbclid, msclkid

All visitors or paid only

Falls back to your number

No tracking fee

Dynamic number insertion spec

Install One async script tag in the <head>: https://voice-api.edesy.in/v1/public/ct/edesy-ct.js with your pool key (data-key="ctk_..."), about 3 KB gzipped
What it swaps Elements marked data-edesy-ct, tel: links and written numbers in common Indian formats; content added later is swapped too
Website numbers to replace Up to 10 per pool
Allowed domains Up to 50 per pool; example.com (with www.) or *.example.com
Who gets a number All visitors, or paid traffic only (a click ID or a paid utm_medium)
Captured per visit utm_source, utm_medium, utm_campaign, utm_term, utm_content, gclid, gbraid, wbraid, fbclid, msclkid, landing page, referrer, first touch (90 days)
Lease 30 minutes by default (5 to 240), renewed every 60 seconds while the page is open
Cooldown 30 minutes by default before a released number is shown to anyone else
Call matching Exact (lease live), grace (within the cooldown), repeat caller (90 days), or unattributed
Pool full Show your normal number (default) or reuse the oldest lease
Bot filter Crawlers, ad reviewers, uptime monitors and scripts never take a number
Consent Optional data-consent="required"; nothing runs until EdesyCT.consent()
Failure mode Script blocked, pool paused or no free number: the page keeps its own number
Outputs Reports, calls CSV, Google Ads offline-conversion CSV, call_tracking.call.completed webhook
Not offered GA4 or dataLayer sync; automatic upload to Google Ads (the export is a CSV)
Price No tracking fee. Calls Rs 1.00/min (forwarding rate) plus monthly rental per pool number

Prices exclude 18% GST.

How dynamic number insertion works on Edesy

From pool to attributed call

  1. Step 1 of 6: Create a pool

    In forwarding.edesy.in, open Call tracking, list your website domains and the number your site shows today, and choose all visitors or paid traffic only.

  2. Step 2 of 6: Add tracking numbers

    Add Indian numbers from your account. Each one gets the pool's forwarding setup, so every tracking number rings your team.

  3. Step 3 of 6: Paste the script tag

    Add one async tag to the head of every page, directly or through a tag manager.

  4. Step 4 of 6: Each visitor sees their own number

    The script swaps your number for a free pool number and stores the visit's UTM tags, click IDs, landing page and referrer.

  5. Step 5 of 6: Calls are matched to visits

    When a tracking number rings, the call is forwarded and credited to the visit that held it: exact, grace or repeat caller.

  6. Step 6 of 6: Read and export results

    See calls by source, campaign, site or day, download the calls CSV or the Google Ads CSV, or receive a webhook per call.

Install: one script tag

Copy your exact tag from the pool's Install tab. Mark a number with data-edesy-ct if it is split across elements or unusually formatted.

<!-- In the <head> of every page -->
<script async src="https://voice-api.edesy.in/v1/public/ct/edesy-ct.js" data-key="ctk_XXXXXXXXXXXXXXXXXXXXXXXX"></script>

<!-- Optional: mark a number explicitly -->
<a data-edesy-ct href="tel:+912240001234">+91 22 4000 1234</a>

<!-- Optional: read the visitor's number in your own code -->
<script>
  document.addEventListener('edesy-ct:ready', (e) => console.log(e.detail.display));
</script>

How long a visitor holds a number, and how many you need

A tracking number belongs to one visitor at a time. It stays theirs while the page is open, for the lease after they leave (30 minutes by default), and then rests for the cooldown (30 minutes) before anyone else sees it. A call during the lease is an exact match; a call during the cooldown is a grace match for the same visit.

So each tracked visitor ties up a number for roughly minutes on site + lease + cooldown. Pool size follows from your busiest hour:

numbers needed ≈ tracked visitors in the peak hour × (minutes on site + lease + cooldown) ÷ 60, plus about 20%
Tracked visitors in peak hour Minutes on site Lease + cooldown Numbers needed (+20%)
10 3 30 + 30 14
40 3 30 + 30 51
40 3 15 + 15 27
100 3 30 + 30 126

Most businesses start with paid traffic only, so organic and direct visitors keep your normal number and the pool only covers ad clicks. The pool's Health tab shows numbers in use, visits that found the pool full and a suggested pool size. Work out your own numbers with the call tracking number pool calculator.

Built so tracking never breaks your site

What the script does, and what it leaves alone

Finds your number in any format

tel: links and text such as +91 22 4000 1234, 022-4000-1234 or 02240001234 are swapped, keeping your site's separators.

Safe fallback

If the script is blocked, the pool is paused or every number is in use, visitors simply see your normal number.

Bots don't take numbers

Crawlers, ad reviewers, uptime monitors and scripts get no tracking number, so they never use up the pool.

Locked to your domains

The pool only answers your listed domains (up to 50), matched on whole labels.

Minimal data kept

Landing pages keep only campaign parameters; other query values such as form fields are dropped. IPs are kept as a network prefix.

Works with SPAs and consent banners

Content added later is swapped too. With data-consent="required" nothing runs until you call EdesyCT.consent().

DNI or one number per campaign?

Edesy supports both; many businesses use both

DNI, all visitors

Every website visit is attributed, including organic and direct. Needs the most numbers.

DNI, paid traffic only

Only ad clicks (click ID or paid utm_medium) take a number. A smaller pool, focused on ad spend.

Fixed number per campaign

One number per print ad, hoarding, listing or flyer, where there is no website visit to track.

Dynamic number insertion: FAQ

Want help sizing your pool?

Tell us your monthly website visitors and ad channels. We'll suggest a pool size and setup.

See which ad made your phone ring

Create a pool, add numbers and paste one tag. New accounts get a Rs 20 welcome credit; no card needed. No tracking fee.