Two ways to track calls
PPC TNT supports two call-tracking paths. You can use either or both, and both feed the same Dashboard call and revenue columns.
Built-in Call Tracking (DNI)
- A small tracking script on your site reads the visitor's Google click ID (
gclid) and swaps in a pool number. - PPC TNT records the
gclid→ assigned number → time, so an inbound call can be matched back to the exact click that produced it. - Qualifying calls are uploaded to Google Ads as offline conversions; bad leads can be retracted.
CallRail
- CallRail's inbound call data flows into PPC TNT and feeds the Total Calls column and source attribution.
- After each sync, matched paid-job values are pushed back into CallRail automatically (with a
Verifiedtag). - See the CallRail integration page to connect it.
How built-in attribution works
- Insert a number. The DNI snippet on your landing page swaps the displayed phone number for one from your tracking pool and remembers the visitor's
gclid. - Capture the call. When someone calls that number, your call source reports the call outcome back to PPC TNT.
- Match & evaluate. PPC TNT matches the call to the session that held the number, and the pool's rule decides whether it counts as a conversion.
- Upload to Google. Qualifying conversions are uploaded to Google Ads keyed by the
gclid, so Smart Bidding optimizes toward calls that actually book.
Call sources
A call source is how a call's outcome is reported. Each tracking pool uses one:
Duration
A call counts as a conversion once it runs past a minimum length you set (e.g. 60 seconds), filtering out hang-ups and wrong numbers.
Five9
PPC TNT automatically pulls dispositioned calls from your Five9 reporting engine, so the disposition your agents set (booked, not-a-lead, etc.) decides which calls convert. You give the pool a report folder and name, and the list of dispositions that count as qualified.
A Five9 call converts on disposition or not at all. If you also set a minimum duration, it can only narrow a qualifying disposition — never turn a non-qualifying one into a conversion. See the Five9 integration page for setup detail.
Manual (CSV)
Upload a CSV of call outcomes when you'd rather curate conversions by hand or import from a system PPC TNT doesn't pull from directly. Uploaded values are stored as manual values — the same field as the value box on the call log — which the CRM matcher never overwrites, so they survive the next sync. On a workspace with no CRM connected they feed Revenue, Sold and Close Rate on the dashboard, and they reach CallRail on the nightly push. Where a CRM is connected, jobs remain the authority and manual values are not added on top, so a lead with both is never counted twice.
The call log: checking a pool is actually working
Each pool has a Call log panel. It's the answer to "is this thing on?", and it's designed so you don't have to open Google Ads or wait for an email to find out.
- A date range — today, 7 days, 30 days, or all time, resolved in your own timezone rather than the server's.
- The raw click ID for every call. Not a yes/no — the actual value, because checking attribution means matching a real
gclidagainst Google Ads. - A counts strip across the range, plus per-row detail when you want to see one call in full.
- Download CSV for the whole range, on the spot.
Two failures that used to look like "no calls yet"
Both are now named inline in the log rather than left for you to infer:
| What you see | What it means |
|---|---|
| Every call unmatched | The numbers being dialled aren't ones this pool handed out. Usually the tracking snippet isn't on the page, or the pool's numbers were never swapped in. |
| Matched, but no click ID | The call tied back to a session, but that session had no gclid — so auto-tagging is off in Google Ads, or your final URL is dropping the parameter. |
gbraid / wbraid instead | Shown labelled rather than as a missing gclid. A pool running on these is working — it just can't upload conversions, because those identifiers aren't uploadable. |
Emailed backups are a different report
A pool can also mail an attributed-call report for a date range to the recipients configured on that pool — on demand, nothing scheduled. Recipients live on the pool itself and a request can only narrow that list, never extend it, because the export carries phone numbers and campaign data.
Duplicating a pool
A pool is usually one Google Ads campaign, which means most of a new pool repeats the last one — same destination number, session TTL, call source and its config, Google Ads customer and conversion action, backup recipients. Duplicate pool in the pool header prompts for a name, creates the copy, and selects it so you can start adding numbers.
What a copy is, and isn't:
| Carried over | Not carried over |
|---|---|
| Destination number, session TTL, call source and its full config (including the Five9 report folder, name and dispositions), Google Ads customer and conversion action IDs, backup recipients, and the webhook secret. | Phone numbers. A tracking number belongs to exactly one pool, so a copy has to start empty — the note above the health strip says so, since an otherwise-empty Numbers panel reads as a bug. Sessions and calls also stay with the original as its history. |
The name defaults to <name> (copy), with a numeric suffix if that's taken, so a workspace can't end up showing two identically-named pools.
Google Ads conversion sync & bad-lead retraction
Sending qualified calls back to Google Ads as offline conversions is what makes Smart Bidding chase the right leads. PPC TNT keys each conversion to the gclid captured at call time.
The Meta half of this loop lives elsewhere. Qualified calls are also reported to Meta through the Conversions API, which matches on a hashed phone or email and so does not need a click id at all — unlike Google. See the Meta Advertising guide.
How it fits with the rest of PPC TNT
Call tracking is the bridge between clicks and revenue. Once calls are attributed, the rest of the platform builds on them:
- The Dashboard shows calls, booked jobs, revenue, and ROAS side by side.
- The Negative Keywords tool reads the transcripts of your unqualified calls to build a Google Ads negative-keyword list.
- Conversion sync feeds Google Ads the signal it needs to bid toward booked work, not just form fills.
FAQ
Do I still need CallRail?
No. The built-in DNI tracking is a complete alternative that avoids a separate vendor bill. CallRail still works if you prefer it — its calls flow into the Dashboard and matched job values are pushed back to CallRail automatically.
What is a call source?
How a call's outcome is reported: Duration (converts past a minimum length), Five9 (auto-pulled from your contact center), or Manual (CSV upload). You pick one per tracking pool.
Why does my Five9 pool report 0 conversions?
Almost always because the pool has no qualifying dispositions listed. A Five9 call converts on disposition or not at all — there's no fallback to a duration rule — so until you name the dispositions that mean "real lead", nothing uploads. Every run logs the reason. If the dispositions are set, run Verify report columns next: a renamed column in your Five9 report will break every run.
Why does my duplicated pool have no numbers?
Because a tracking number belongs to exactly one pool, so a copy has to start empty. Everything else — destination number, session TTL, call source and its config, Google Ads IDs, backup recipients — comes across. Add numbers to the copy and it's live.
Where do I get a CSV of calls with their click IDs?
Download CSV in the pool's Call log, which exports the whole selected date range including the raw click ID per call. The emailed backup is a different, narrower report — it deliberately omits click IDs and landing URLs, because it goes to whatever addresses the pool has configured rather than only to you.
The call log shows calls but no click IDs — what's wrong?
The calls matched to a session, but the session never captured a gclid. That means auto-tagging is switched off in Google Ads, or your final URL is stripping the parameter. If you see gbraid or wbraid instead, the pool is working correctly — those identifiers just can't be uploaded as conversions.
How do calls get pushed to Google Ads?
Qualifying calls are uploaded as offline conversions keyed by the Google click ID captured at call time, so Smart Bidding can optimize toward calls that book. Bad leads can be retracted so Google stops chasing lookalikes of them.
Where do I set this up?
Under Vendors → Call Tracking in the app. Create a pool, choose a call source, add your Google Ads customer and conversion-action IDs, and paste the DNI snippet onto your site.