Blog · Analytics & tracking
How to connect your CRM, website and ad platforms without breaking your data
Connecting your website, CRM and ad platforms is how you find out which campaigns produce customers rather than clicks. Here's how to design the data flow, and the mistakes that quietly corrupt it.
LS Techno Team5 min readUpdated

Ask most marketing teams which campaign brought in last quarter's best customers and you'll get a pause, then three different answers from three different reports. The ad platform claims one number, analytics shows another and the CRM tells a third story, if anyone has checked it.
The fix isn't another dashboard. It's connecting your website, CRM and ad platforms so the same lead carries the same information through every system. This guide shows how to design that data flow, and the mistakes that quietly break it.
Key takeaways - Capture the source of every lead (UTMs and ad click IDs) on the website, and store it on the CRM record. - Send outcomes (qualified leads, customers, revenue) back to the ad platforms as offline conversions. - Agree one definition of a lead, one naming convention and one owner, then monitor the integrations so they don't fail silently.
Start with the data flow, not the tools
Before connecting anything, draw how a lead should move. For most B2B and service businesses it looks like this:
- Ad click. Someone clicks an ad. The URL carries UTM parameters and an ad click ID.
- Website visit. The website captures those values and keeps them while the visitor browses.
- Form submission. The form sends the contact details and the captured source data to the CRM.
- CRM. The lead is created or updated, assigned to a person and moved through your pipeline.
- Outcome. When the lead qualifies or becomes a customer, the CRM sends that event back to the ad platform.
- Optimization. The ad platform learns which clicks become customers and bids accordingly.
Most stacks do steps 1 to 4 partly and steps 5 and 6 not at all. That's where the value is.
Step 1: Capture the source on the website
Use UTMs consistently
UTM parameters (utm_source, utm_medium, utm_campaign, utm_content, utm_term) tell you where a visit came from. They're only useful if everyone uses them the same way. Write down a short convention:
| Parameter | Rule | Example |
|---|---|---|
| utm_source | Platform, lowercase | google, linkedin, newsletter |
| utm_medium | Channel type from a fixed list | cpc, paid-social, email |
| utm_campaign | yyyy-mm_campaign-name |
2026-10_stack-audit |
| utm_content | Ad or link variant | video-a, footer-link |
Capture ad click IDs
Ad platforms add their own click IDs to the URL (for example gclid for Google Ads, fbclid for Meta and msclkid for Microsoft Ads). These IDs are what let you match a CRM outcome back to the exact click later. Capture them.
Keep the values while the visitor browses
Visitors rarely convert on the page they land on. Store the UTM and click ID values when they arrive (in a first-party cookie or local storage, subject to their consent choices) and read them back when a form is submitted.
Pass them through hidden form fields
Add hidden fields to every form for the UTMs, click IDs, landing page and referrer. Populate them from the stored values. Most form tools and CRMs support this. Make sure your CRM has matching fields to receive them.
Decide first-touch vs last-touch. Store both if you can: the source that first brought the person, and the one that brought them back to convert. Never let a later visit silently overwrite the original source.
Step 2: Get every lead into the CRM, cleanly
- Use native integrations where they exist. A form tool's built-in CRM connector is usually more reliable than a chain of automations.
- Map fields deliberately. Every form field should map to a CRM field with the same meaning. Dropdown values should match exactly.
- Handle duplicates. Decide what happens when an existing contact fills in another form: update the record, add an activity, but don't create a duplicate and don't overwrite the original source.
- Assign an owner and a next step automatically. A lead that sits unassigned for two days might as well not have arrived.
- Avoid iframe forms when you can. Forms embedded in iframes often can't read the page's stored UTMs or trigger tracking properly.
Step 3: Send outcomes back to the ad platforms
This is the step most businesses skip, and the one that changes results. Ad platforms optimize for whatever conversion you give them. If that's "form submitted", they'll find you more people who fill in forms, including students, competitors and spam. If it's "became a qualified lead" or "became a customer", they'll look for more of those.
Two common approaches:
- Offline conversion imports. When a CRM record reaches a stage (for example "Qualified" or "Won"), send the stored click ID, the conversion name, the time and optionally the value to the ad platform. Google Ads supports this through offline conversion imports and enhanced conversions for leads.
- Server-side conversion APIs. Platforms such as Meta offer a Conversions API that accepts events from your server or CRM rather than the visitor's browser, which also makes tracking less dependent on cookies.
Both need consent handled properly and identifiers hashed where the platform requires it. Send only what's needed.
Step 4: Agree on definitions
Integrations fail socially before they fail technically. Get agreement on:
- What counts as a lead, a qualified lead and a customer, in writing.
- Which system is the source of truth for each (usually the CRM for leads and revenue, analytics for behaviour on the site).
- Who owns the integrations, and who gets told when one breaks.
Common mistakes that corrupt your data
- UTMs lost between pages. The visitor lands with UTMs, clicks to another page and the parameters vanish. Fix: store them on arrival.
- Source overwritten. A returning contact's original source is replaced by "direct". Fix: separate first-touch fields that never overwrite.
- Counting thank-you page views as conversions. Refreshes and bookmarks inflate numbers. Fix: fire conversions on successful submission events.
- Duplicate conversions. Browser and server both report the same conversion. Fix: use the platform's deduplication (an event ID) when sending from both.
- Personal data in analytics. Emails or names in URLs or event parameters end up in analytics tools that aren't meant to hold them. Fix: never put personal data in URLs, and review what events send.
- Time zones and currencies. Conversions imported with the wrong time zone or currency don't match. Fix: set them explicitly.
- Silent failures. An API key expires or a field is renamed and leads stop flowing for weeks. Fix: alerts on failed runs and a weekly check with a test lead.
Test it like a customer would
After any change, run a test lead end to end:
- Visit a landing page with test UTMs, browse two pages, then submit the form.
- Check the CRM: is the record created once, with the right owner and all the source fields?
- Move the test record to "Qualified". Check that the conversion reaches the ad platform (allowing for the platform's processing delay).
- Delete or mark the test data so it doesn't pollute reports.
FAQ
Do we need a middleware tool like Zapier or Make?
Not always. Native integrations are usually more reliable. Middleware is useful for simple flows between tools without a native connection. Custom API work makes sense at higher volumes or where data control matters.
Is this compatible with privacy law?
It can be, if tracking respects consent choices, you only move the data you need, and your privacy notice explains it. Your privacy lead should review the setup.
How long does it take to set up?
For a typical website, CRM and one or two ad platforms, one to three weeks, including testing. The planning is usually the longest part.


