Why connecting channels to revenue is hard
Most teams can already see which channels bring visitors and signups. The harder question is which channels bring customers who pay, and that answer is split across three tools that were never built to talk to each other.
Your analytics tool knows that a visitor arrived from a LinkedIn ad, read two pages, and signed up. Your CRM knows that a deal was created three weeks later and closed for $12,000. Your billing system knows that the customer has paid four invoices since. None of them knows all three facts, so each one tells a partial story. Google Analytics can credit a campaign with a signup, but it can't see the trial that turns into a paid plan two weeks later inside Stripe. Stripe can see every payment, but it has no idea which campaign started the relationship.
The work is mostly matching, and it follows the same steps every time:
- Agree on what counts as revenue and which tool's number you'll treat as official.
- Make sure the channel, or an ID both tools share, gets saved when someone signs up or pays.
- Match each paying customer back to the channel that brought them.
- Compare channels on customers and revenue, not on visits and signups.
- Act on what you find, then run it again next month.
This is good work for an AI agent. It means reading several tools' records, joining them carefully, and noticing where the joins break, which is tedious for a person to do by hand every month. It also rewards someone who knows your business well enough to say what a real customer is.
Kite is an AI marketer. It researches your business, builds a growth strategy, and ships the work that brings you new customers. You can work with Kite in your browser or in Slack. Here's how it connects your channels to revenue.
How Kite connects your marketing channels to revenue
Kite starts with what it already knows from researching your business: your plans and pricing, whether you sell through a free trial, a free plan, or a sales team, and which channels you use to reach people. That lets it propose what counts as a paying customer and which tools hold each part of the answer before it reads a single record.
Next, Kite checks what your tracking actually captures. It looks for the campaign and source on your signups, the original source on your CRM contacts, and any ID your app saves on Stripe customers. That check decides how precise the match can be. Then Kite reads the visits, leads, deals, and payments, matches them, and ranks your channels by the customers and revenue they produce.
Once the report is done, Kite tells you how much of your revenue it could trace, what's missing, and which fixes would close the gap. It makes the fixes it's allowed to make and runs the same report again on the schedule you choose, so each month's numbers can be compared with the last.
- Decide what counts as revenue and which number is official
- Check that the channel gets saved when someone signs up
- Follow each customer back to the channel that brought them
- Compare channels on paying customers, not signups
- Fix the gaps and keep the report running
Decide what counts as revenue and which number is official
Before Kite counts anything, it agrees with you on what a paying customer is and which tool's number wins when two tools disagree. Without that, the same question gets a different answer each time someone asks it.
A paying customer usually means someone with an active paid subscription or a completed purchase that wasn't refunded. Kite leaves out customers still in a free trial, invoices fully covered by a coupon, test accounts, and your own staff. For a business that sells through a sales team, the right measure may be closed-won deals in HubSpot or Salesforce instead of payments in Stripe. Kite proposes the definition that fits how you sell, and you confirm it or change it.
Tools also disagree with each other all the time. Google Analytics may record 140 purchases in a month while Stripe records 162, because some buyers block tracking and some renewals never touch your website. Kite picks which number to treat as official for each measure, explains why, and records that choice in your team's knowledge base. The next report, and anyone who asks Kite about revenue later, uses the same definition.
Check that the channel gets saved when someone signs up
The match between a channel and a customer only works if something connects them, and that connection has to be saved at the moment someone signs up, fills out a form, or checks out. Kite checks what your tools already record before it promises any numbers.
In Google Analytics, Kite reads your key events, custom dimensions, and attribution settings, then runs a quick source report to look for common problems. These include Stripe's checkout page showing up as a referral, a large share of visits marked as "(not set)", and the same campaign tagged with three different spellings. In HubSpot or Salesforce, it checks whether contacts carry an original source or lead source, and whether your forms pass the campaign through. In Stripe, it reads recent checkout sessions and customers to see whether your app saves a user ID, the visitor's Google Analytics ID, or the campaign itself.
If you use Segment to send events to your other tools, Kite reads how many conversion events each destination received and how many failed. A signup event that reaches Segment but never arrives in Google Analytics makes every channel look worse than it is, and Kite would rather find that before the report than after.
What Kite finds here decides the method. When the campaign is saved on the Stripe record, Kite groups customers by it directly. When both tools share an ID, it follows each customer back one person at a time. When nothing is shared, it compares signups from each channel in a given week against the customers who appear in the weeks after, and it tells you that this shows a pattern rather than a person-by-person match.
Follow each customer back to the channel that brought them
Kite matches each paying customer to the channel that brought them, using the most reliable identifier your tools share. Your own user ID or the Google Analytics client ID saved in Stripe is the most reliable. Email works between your CRM and Stripe, but it can't be used on the Google Analytics side, because Google doesn't allow email addresses in Analytics.
For a self-serve product, Kite reads Google Analytics or PostHog for visits and signups by channel, campaign, and landing page. It then reads Stripe for the customers, subscriptions, invoices, and charges behind them. For a product sold through a sales team, Kite reads the contacts, companies, and deals in HubSpot or Salesforce, credits each deal to the source of the people on it, and only counts deals created after the person first arrived. It checks the company as well as the contact, because deals are often created on the company record and never linked to the person who filled out the form.
Kite also has to choose which touch gets the credit. First-touch credit answers the question "which channel first brought this person to us?", which usually fits a question about finding new customers. Last-touch credit answers "which visit came right before they signed up?" When the two disagree for a large channel, Kite shows both. An ad that introduces people who later come back through a Google search is doing real work, even if search gets the last click.
Every match ends with a count of the customers Kite couldn't trace and the reason for each, so you know how much of your revenue the report covers.
Playbooks for this step
- How to see which campaigns and landing pages lead to Stripe customers with Google AnalyticsMatch Google Analytics campaigns and landing pages to Stripe customers and rank them by paying customers and revenue per visit.
- How to see which Typeform leads become HubSpot opportunitiesFollow each form response to its HubSpot contact and the deals created after it, and see which forms and answers lead to pipeline.
Compare channels on paying customers, not signups
Kite ranks your channels by paying customers and revenue, then sets that ranking beside the one by signups. The comparison between the two is usually the most useful thing in the whole report.
Say your LinkedIn ads bring 400 signups a month and your podcast sponsorship brings 60. On signups alone, LinkedIn wins easily. But if 12 of the LinkedIn signups pay and 15 of the podcast listeners do, the podcast is producing more customers from a much smaller audience, and that changes where next quarter's budget should go. When your ad accounts are connected, Kite can set each channel's spend beside its revenue so you can see what a customer costs you through each one.
Kite is careful with small numbers. A channel with three customers hasn't proven much yet, so Kite marks rows like that instead of ranking them above channels with real volume. It also allows for the delay between signing up and paying. If your trial lasts 14 days, people who signed up last week haven't had their chance to pay yet, so Kite marks recent groups as still converting rather than counting them as failures. When a channel's customers cancel or ask for refunds unusually soon, Kite says so, because a channel that brings customers who leave in the first month isn't a win.
When a channel brings plenty of signups that rarely pay, the reason is often inside the product rather than in the ad. Kite can compare what paying customers did in their first weeks with what everyone else did, which tells you whether the channel is bringing the wrong people or the right people who never reach the moment that makes them buy.
Fix the gaps and keep the report running
Kite closes each report with the tracking fixes that would let the next one trace more customers, and it makes the ones it's able to make. The first report is rarely the most precise one, and that's fine, because each fix makes every report after it better.
Typical fixes include saving the campaign and landing page on the Stripe checkout session, passing your user ID into Stripe's client reference ID, adding a custom dimension in Google Analytics, or adding a hidden campaign field to a lead form. Kite creates a Google Analytics custom dimension once you agree. On a website Kite builds and hosts, it can change the signup form or checkout code too, and it shows you the change before anything is published. On a site it doesn't host, Kite writes up the exact change for your developers.
From there, the ranking points to the next piece of work. Kite can propose changes to a landing page that gets signups but few customers, suggest moving budget toward the channels that bring paying customers, or plan more of the content that brings the buyers who stay. If you'd like the report every month, Kite runs it on a schedule and delivers each one where you choose, in the Kite web app, in a Slack channel, or by email. When the results need more room than a message, Kite publishes them as a dashboard you can share by link, and the dashboard refreshes its data each time you open it.
What you get
A definition of revenue your team agrees on
What counts as a paying customer, which tool's number is official for each measure, and why, saved in your team's knowledge base so every later report uses it.
A channel table
For each channel, campaign, or lead source: visits, signups or leads, paying customers or closed-won deals, revenue, and the rate at which signups become customers, ranked by customers.
The signup and customer comparison
The channels that rank well on signups but poorly on customers, and the reverse, with what Kite thinks explains each gap.
The method and its limits
Which matching method Kite used, which touch got the credit, the date range, how many customers it couldn't trace, and which rows are too small to trust.
The tracking fixes
The specific changes to your site, your CRM, Google Analytics, or Stripe checkout that would let the next report trace more customers, with the ones Kite has already made marked as done.
How to get started
Start by asking Kite the question you actually want answered, in the Kite web app or in Slack. You might ask, "Which of our channels brought in paying customers last quarter?" or "Our LinkedIn ads bring lots of signups. Do any of them pay?"
Kite uses what it knows about your business to propose the date range, what counts as a paying customer, and which tools hold each part of the answer. Confirm the plan or change it, and Kite starts.
You'll need to connect the tools that hold your data through OAuth. For a self-serve product, that's usually Google Analytics or PostHog and Stripe. For a product sold through a sales team, it's HubSpot or Salesforce, plus Stripe if your billing runs there. If your website is one Kite built and hosts, its built-in analytics already record where visitors came from and which forms they submitted, so you don't need a separate analytics tool for that part.
Reading reports, CRM records, and payments is routine work, so Kite runs the analysis and posts what it found. It doesn't change any of your billing records. Changes to your live website wait for your approval, and you can give Kite more room to act on its own once you trust its work.
Integrations used to connect marketing channels to revenue
Connecting channels to revenue takes three kinds of records: where people came from, what happened to them in your sales process, and whether they paid. Most teams have each of these in a different tool, and Kite reads them through the accounts you connect.
See where visitors and signups came from
Kite reads visits, signups, and key events by channel, campaign, and landing page in your Google Analytics 4 property, checks your attribution settings, and adds the custom dimensions that let a visit be matched to a customer.

Kite reads the people and events in your PostHog project to see where each signup came from and what they did in the product before paying, and saves the cohorts it builds so your team can open them.
Make sure your conversions are tracked
Follow leads through your sales pipeline

Kite reads your contacts, companies, and deals, credits each deal to the source of the people on it, and reads the revenue HubSpot attributes to your marketing campaigns.

Kite reads your leads, contacts, opportunities, and campaigns to follow each lead source through to closed-won revenue.
Common questions
Do I need dedicated attribution software?
Most small teams don't need dedicated attribution software to answer which channels bring paying customers. Those products are most useful when you have many paid channels, long buying cycles, and enough volume to support a weighted model across many touches. With a few hundred signups a month, a careful match between your analytics, CRM, and billing system usually answers the question well, using data that's already in the tools you pay for. If you're comparing options, see The best marketing attribution software for small teams Coming soon .
Should I use first-touch or last-touch attribution?
Use first-touch credit when your question is about finding new customers, because it credits the channel that introduced each person. Use last-touch credit when your question is about what closes the deal, such as which landing page or email gets people to sign up. Kite chooses the one that fits your question, says which one it used, and shows both when they tell different stories for a large channel.
Can Kite trace customers who signed up before our tracking was in place?
Kite can usually trace some of them. Google Analytics, HubSpot, and Salesforce often hold a source for older records even when nothing was saved in Stripe, and email can connect your CRM to your billing records. Where no link exists, Kite compares each channel's signups by week with the customers who appeared in the weeks after, which shows a pattern without claiming a person-by-person match. The tracking fixes from the first report make every customer after that traceable.
What about customers who heard about us by word of mouth?
Customers who heard about you from a friend, a podcast, or a private Slack group usually arrive as direct traffic or a branded search, so no tracking tool can see the real source. The most reliable way to capture it is to ask. If your signup form or CRM records an answer to "How did you hear about us?", Kite reads it alongside the tracked source and shows where the two disagree. That gap is often where your best channel is hiding.

