# Call Tracking

> How Edesy call tracking works - dynamic number insertion on your website, a pool of Indian tracking numbers, UTM and click-ID capture, call-to-visit matching, reports, a Google Ads offline-conversion CSV and a webhook.

Source: https://edesy.in/docs/call-tracking

Edesy call tracking tells you which ad, keyword, campaign or website sent each phone call. A small script on your site shows every visitor a tracking number from your pool in place of your normal number and remembers where that visitor came from. When someone calls the number, Edesy forwards the call to your team and credits it to that visit.

> **Ready to start?** Sign in at [forwarding.edesy.in](https://forwarding.edesy.in), open **Call tracking** and create a pool. See the [Quick Start](https://edesy.in/docs/call-tracking/getting-started/quick-start).

## How it works

1. **Create a pool.** Name it, list the website domains the script may run on, and enter the phone number your site shows today. See [Number Pools](https://edesy.in/docs/call-tracking/pools/number-pools).
2. **Add tracking numbers.** Add Indian numbers from your account. Each one gets the pool's forwarding setup, so a call to any of them rings your team.
3. **Install the snippet.** Paste one `<script>` tag into the `<head>` of every page. See [Install the Snippet](https://edesy.in/docs/call-tracking/getting-started/install-the-snippet).
4. **Visitors see a tracking number.** The script swaps your number for one from the pool and stores the visit's UTM tags, click IDs, landing page and referrer.
5. **Calls are matched to visits.** When the number rings, Edesy finds the visit that held it. See [Attribution Rules](https://edesy.in/docs/call-tracking/pools/attribution-rules).
6. **Read the results.** Reports by source, medium, campaign, website, day or match type, a calls CSV, a [Google Ads offline-conversion CSV](https://edesy.in/docs/call-tracking/data/google-ads-export) and the [`call_tracking.call.completed` webhook](https://edesy.in/docs/call-tracking/data/webhook).

## At a glance

| Item | Detail |
|---|---|
| Portal | [forwarding.edesy.in](https://forwarding.edesy.in) → **Call tracking** |
| Install | `<script async src="https://voice-api.edesy.in/v1/public/ct/edesy-ct.js" data-key="ctk_...">` |
| 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 |
| Lease | 30 minutes by default (5 to 240); renewed while the page is open |
| Cooldown | 30 minutes by default before a released number is shown again |
| Match types | Exact, grace (within the cooldown), repeat caller (90 days), unattributed |
| Limits per pool | Up to 50 allowed domains and 10 website numbers to replace |
| When numbers run out | Show your normal number (default), or reuse the oldest lease |
| Bot filter | Crawlers, ad reviewers, uptime monitors and scripts never take a number |
| Exports | Calls CSV, Google Ads offline-conversion CSV (gclid calls, 30 s or longer by default) |
| Webhook | `call_tracking.call.completed`, once per call on a tracking number |
| Price | No tracking fee. Calls Rs 1.00/min (forwarding rate) plus number rental. Prices exclude 18% GST |

## What call tracking does not do today

- It does not upload conversions to Google Ads for you. The Google Ads export is a CSV file you upload in Google Ads yourself.
- It does not send events to Google Analytics 4 or push to a `dataLayer`. Use the calls CSV, the reports or the webhook.
- The Google Ads export covers calls with a `gclid`. Calls that only carry `gbraid` or `wbraid` are captured and shown, but are not in that CSV.
- It does not transcribe or score calls. Recording follows your forwarding settings.

## API endpoints

All management endpoints sit under `https://voice-api.edesy.in/v1` and take your API key as `Authorization: Bearer sk_...`.

| Method and path | What it does |
|---|---|
| `GET /call-tracking/pools`, `POST /call-tracking/pools` | List or create pools |
| `GET`, `PATCH`, `DELETE /call-tracking/pools/{id}` | Read, update or delete a pool |
| `GET`, `POST /call-tracking/pools/{id}/numbers` | List numbers, or add up to 100 at a time |
| `DELETE /call-tracking/pools/{id}/numbers/{numberId}` | Remove a number |
| `GET /call-tracking/pools/{id}/health` | Pool size, numbers in use, exhausted visits, suggested size |
| `GET /call-tracking/reports/calls?group_by=utm_campaign` | Grouped report |
| `GET /call-tracking/calls`, `GET /call-tracking/calls.csv` | Tracked calls, as JSON or CSV |
| `GET /call-tracking/exports/google-ads.csv?pool_id=...` | Google Ads offline-conversion CSV |

## FAQ

**What is dynamic number insertion?**
A script on your website replaces your phone number with a tracking number picked for each visitor. Because only that visitor sees that number for the length of their visit, a call to it can be tied back to the ad or page that brought them.

**Do I pay extra for call tracking?**
No. There is no tracking fee. Calls to tracking numbers are billed at the forwarding rate, Rs 1.00/min, and each number in the pool has its normal monthly rental. Prices exclude 18% GST.

**How many numbers do I need?**
Enough for the visitors who are on your site at the same time, plus the lease and cooldown each one holds. See [Number Pools](https://edesy.in/docs/call-tracking/pools/number-pools) or use the [number pool calculator](https://edesy.in/tools/call-tracking-number-pool-calculator).

**What happens if every number is in use?**
By default the visitor sees your normal number and the call is simply not tracked. You can switch the pool to reuse the oldest lease instead.

**Does it work with Google Ads?**
Yes. The script captures `gclid`, `gbraid` and `wbraid`, and the reports page exports calls with a `gclid` in Google Ads' offline-conversion import format. You upload the CSV in Google Ads. See [Google Ads Export](https://edesy.in/docs/call-tracking/data/google-ads-export).

**Will my site break if the script fails?**
No. If the script cannot load, the pool is paused or no number is free, visitors see your normal number.

## Next steps

- [Quick Start](https://edesy.in/docs/call-tracking/getting-started/quick-start)
- [Install the Snippet](https://edesy.in/docs/call-tracking/getting-started/install-the-snippet)
- [Number Pools](https://edesy.in/docs/call-tracking/pools/number-pools)
