Skip to main content
← BlogGOOGLE ADS11 MIN READ

Law Firm Ad Tracking: From $300 Clicks to Signed Cases

Stop measuring leads. Track click to intake to signed case and feed case values back to Google Ads so bidding optimizes toward cases.

Ariful IslamAriful IslamFounder · computer engineer ·
inX

Injury and mass-tort keywords are the most expensive clicks in advertising. A single click can run into the hundreds of dollars. And most firms spending that money still report on "leads" — a number that counts a solicitor cold-call and a $50,000 case exactly the same.

Why is cost per lead the wrong KPI for a law firm?

Because leads aren't cases, and in legal the gap between the two is enormous. A campaign with a $150 cost per lead can be quietly losing money while a campaign with a $900 cost per lead prints it — if the second one signs cases and the first one generates junk.

Worse: when your Google Ads conversion is "phone call" or "form fill," Smart Bidding optimizes toward whoever is most likely to call — not the same population as people with signable cases. Google will happily find you cheaper callers while your cost per case climbs.

A $300 click that signs a $50,000 case beats ten cheap clicks that produce nothing. Every time. But the algorithm can only learn that if you feed the signed case back into the account.

What does the full tracking chain look like for a law firm?

Five stages, with attrition at every one:

  1. Click. Someone searches "car accident lawyer near me" and clicks your ad. This is where the money leaves.
  2. Contact. A call, form, or chat. Most firms stop measuring here. That's the mistake.
  3. Intake. Your team screens for statute of limitations, liability, jurisdiction, injury severity, existing representation.
  4. Qualified consult. The ones who pass get an attorney consultation.
  5. Signed case. A fee agreement — the only stage that pays for the other four.

If your reporting ends at stage two, you're navigating with a third of the map. I've seen accounts where the "worst" campaign by cost per lead was the only one actually signing cases.

Five-stage flow from an expensive search click through contact, intake screening and a qualified consult to a signed fee agreement, the only stage that pays for the rest.
If your reporting ends at contact, you're navigating with a third of the map.
  1. Click — Where the money leaves the account
  2. Contact — Call, form or chat — most firms stop here
  3. Intake — Statute, liability, jurisdiction, severity
  4. Qualified consult — Screened claimants reach an attorney
  5. Signed case — The only stage that pays for the other four

How do you track phone calls with intake quality scoring?

You need call tracking with dynamic number insertion, and then you need to score every call — because raw call volume is the junkiest metric in legal marketing.

Dynamic number insertion (CallRail-class software) shows each visitor a unique tracking number tied to their session, so when they call, the platform knows which campaign, keyword, and Google click ID (gclid) drove it. But a connected call is not a conversion. Score every call:

  1. Spam / solicitor / wrong number — not a conversion. Ever.
  2. Wrong practice area or jurisdiction — tag it; a pattern here means your keywords or geo-targeting are off.
  3. Screened, didn't qualify — track internally, don't send to Google.
  4. Qualified consult booked — your first real conversion signal.
  5. Signed case — the one that matters, imported later with a value.

Forms and chat get the same treatment: fire an event on submission, but the valued conversion is the qualified or signed outcome. Most intake tools can fire a webhook on a status change — that's your event.

Three-column call-scoring model separating dispositions that are never conversions, those tracked internally only, and the qualified and signed outcomes sent to Google Ads.
Raw call volume is the junkiest metric in legal marketing; the disposition is what bidding should learn from.
Never a conversionTrack internally onlySend to Google Ads
Spam and solicitor callsWrong practice areaQualified consult booked
Wrong numbersOutside your jurisdictionSigned case, with a value
Bot and test form entriesScreened, didn't qualifyAverage fee per case type
A pattern means bad keywords or geoSigned case as primary conversion

How do you get the Google click ID into your intake CRM?

Capture the gclid the moment someone lands, and write it into the intake record at first contact. This is the single discipline that makes cost-per-case tracking possible, and it's the one most firms skip.

The intake CRM category here is software like Clio Grow, Litify, or Lead Docket — tools that manage the pipeline from first contact to signed retainer. Whichever you run, it needs a custom field for the click ID, filled automatically, not by an intake specialist copy-pasting on a good day. The capture is simple:

// Capture gclid (and iOS variants) on landing
var params = new URLSearchParams(window.location.search);
['gclid', 'wbraid', 'gbraid'].forEach(function (key) {
  var val = params.get(key);
  if (val) {
    document.cookie = key + '=' + val + '; max-age=7776000; path=/';
  }
});
// Then read the cookie into a hidden field on every intake form

For phone calls, your call tracking platform already holds the session's gclid — push it to the CRM via integration or webhook when the call record is created.

How do you import signed cases back into Google Ads?

When the fee agreement is signed, upload that outcome to Google Ads as an offline conversion — matched by the stored gclid, or by hashed email and phone through enhanced conversions for leads — with a value appropriate to the practice area.

Google accepts click-based conversion imports up to 90 days after the click, which covers most retention cycles. For matters that sign slower, use a staged setup: import "qualified consult" as an early secondary signal, and layer signed cases on top as the primary, valued conversion.

On values: you don't need the settlement amount — use your average fee per case type. If a signed MVA case averages $15,000 in fees and a workers' comp case $6,000, import those as the values. Now target ROAS bidding will pay $300 for the click that tends to become a $15,000 case and stop chasing the $8 clicks that never sign.

Set "Signed Case" as your primary conversion action and demote raw calls and form fills to secondary. That single change points the bidding system at cases instead of contact volume.

How do you do this without exposing confidential intake details?

By sending the minimum possible data — hashed contact info, an outcome label, and a value — and enforcing that minimum with a server-side tracking layer you control. No injury descriptions, no case facts, no matter notes ever leave your systems.

Plain-language version: normally, tracking scripts run in the visitor's browser and send data straight to Google or Meta, and you have limited visibility into what they collect. Server-side tracking reroutes everything through a server you own — a Google Tag Manager server container on your own subdomain, like track.yourfirm.com. Every event passes through that checkpoint, and the checkpoint only forwards fields you've explicitly allowed.

For a law firm, that architecture solves four problems at once:

  1. Confidentiality by design. The server layer is an allowlist. Google receives a SHA-256 hashed email, a conversion name, a timestamp, and a value — and structurally cannot receive anything you didn't map. A much easier conversation with your managing partner than "the pixel sends what it sends."
  2. Signal you're currently losing. Ad blockers and Apple's browser privacy limits eat a real share of browser-side tracking, and injury claimants are heavily on iPhones. First-party server-side events survive where third-party scripts get blocked.
  3. Longer attribution memory. First-party cookies on your own subdomain outlive third-party ones, so the claimant who clicked your ad, thought it over for two weeks, and came back still attributes correctly.
  4. One source of truth. Google Ads, Local Services Ads, and Meta all get fed consistent, deduplicated events from the same server.

This is why the fix for "we can't send intake data to Google" isn't sending nothing. It's sending the minimum through a pipe you control.

Diagram of intake CRM webhooks, stored click IDs, hashed contact details and average case values passing through a first-party server that forwards only the fields you mapped.
Google receives a hashed email, an outcome label, a timestamp and a value — and structurally nothing else.
LayerWhat sits there
InputsIntake CRM status webhook, Stored gclid, wbraid, gbraid, SHA-256 email and phone, Average fee per case type
track.yourfirm.comAllowlist checkpoint: no injury descriptions, case facts or matter notes leave
DestinationsGoogle Ads offline import, Local Services Ads, Meta CAPI

What changes between mass tort and local practice?

The chain is identical; the economics and failure points differ.

Mass tort runs at national scale with brutal CPCs and high contact volume. Screening criteria are sharp — exposure dates, diagnosis, prior representation — so intake disposition data is the whole game. Retainer values are fairly standardized per tort, which makes value-based imports clean. The risks: manual call scoring collapses at volume (intake statuses must flow to the platforms automatically), and long sign cycles push against the 90-day window — exactly where the staged qualified-consult conversion earns its keep.

Local practice — PI, family, criminal defense — is the opposite: low volume, high variance. You might sign four cases a month, so every mis-scored call skews the data, and one signed case can justify a month of spend. Calls dominate, which makes disciplined call scoring the highest-impact piece. Use tiered proxy values per practice area, and give Smart Bidding longer evaluation periods — small conversion counts need patience.

Frequently asked questions

What is a good cost per signed case for Google Ads?

There's no universal benchmark — it depends on your average fee per case type. The working rule: cost per signed case should sit well below the average fee for that practice area, and you only know the real number once signed cases are imported as offline conversions.

Can I report a signed case to Google Ads weeks after the click?

Yes. Google accepts offline conversion imports up to 90 days after the click when matched by gclid, and enhanced conversions for leads can match on hashed email or phone for slower matters.

Is it ethical to send client data to Google for ad tracking?

Send only the minimum: hashed contact info, an outcome label like "signed case," and a value — never case facts or intake notes. A server-side tracking layer enforces this technically, since it only forwards fields you've explicitly allowed. Your state bar's rules still apply, so review them.

What is server-side tracking for law firms?

It means tracking events route through a server you own, on your own subdomain, before reaching Google or Meta — instead of firing directly from the visitor's browser. You control exactly what's shared, recover conversions lost to ad blockers and iOS privacy limits, and get consistent numbers across platforms.

Should my law firm bid on cost per lead or cost per case?

Cost per case. Make "signed case" your primary conversion with practice-area values and demote calls and form fills to secondary. Bidding toward leads trains Google to find cheap callers; bidding toward cases trains it to find claimants who sign.

Which intake CRM works best for ad tracking?

Any intake CRM with custom fields and webhooks can work — Clio Grow, Litify, and Lead Docket are common in the category. The requirement isn't the brand; it's automatic click ID capture at first contact and webhooks on status changes.

  • law firm
  • legal
  • lead gen
  • offline conversions
SETUP GUIDES

Guides for this topic

How accurate is your conversion tracking?

PLATFORM-REPORTEDconversionsdivided byBACKENDreal orders or leadsequalsaccuracy
TRY IT · YOUR NUMBERS
68%Broken. Something is missing entirely. Worth a free audit.
Reading guides because something is broken?Book 30 minutes with Ariful. We'll find it on the call and send a written fix list within 24 hours.
Get my free audit →
Ariful Islam
WRITTEN BYAriful IslamFounder of Tracking Consulting and a computer engineer (Diploma, BSc, MSc in CSE). 300+ clients and 1,000+ tracking projects since 2019.
About Ariful →
FREE · 30-MIN CALL · WRITTEN AUDIT IN 24H

Want us to check your accuracy for you?

We look at your setup together on the call. Within 24 hours you get a written audit and a prioritized fix list you can hand to any developer. Not a fit? We'll say so.