Skip to content

For GTM engineers

You built the GTM machine. Not one tool in it can tell you which play produced the revenue.

LeadJourney is the measurement layer under the stack: every click captured server-side, one journey per person however they arrived, closed revenue joined to the play that started it, and an endpoint for every part of it.

  • REST API, webhooks, Zapier, Make, n8n
  • No warehouse, no dbt project
  • MCP server for the assistant you use

Rated by the people who build the pipeline machine

  • Trustpilot4.9 out of 5 on Trustpilot
  • G25.0 out of 5 on G2
  • Capterra5.0 out of 5 on Capterra

Measuring their go-to-market on LeadJourney

  • Trading.de logo
  • Swedish Cold logo
  • Trustfactory logo
  • MLK Digital logo
  • CPC AG logo
  • DaxoMedia logo
  • Contentbär logo
  • Hivebuy logo
  • OBVIOUS logo

One quarter, five plays

Your workspace
Which plays actually closedLast quarter, by the play that started the journey
PlayLeadsClosed
Cold sequence, ICP list A412$18,000
LinkedIn Ads, ABM Q396$184,000
Job change signal58$97,000
Google Ads, category terms143$41,000
Webinar follow-up77$12,000

786 leads, $352,000 closed. The play with the most leads produced the least revenue, and both columns are counted off the same journeys.

Why the machine cannot report on itself

Every tool in the stack reports on its own step. Nobody owns the line from signal to revenue.

The enrichment run counts rows, the sequencer counts replies, the ad platform counts leads, the CRM counts deals, and the one number the whole build exists for, which play produced the money, is not in any of them.

  • Every tool grades its own homework. Each one reports the step it owns, in its own definition of a conversion, and no two of them agree on what a lead is.
  • The CRM's source field is whatever the form could read, so a nine-touch journey that started on a paid ad closes as Direct or as the sequencer that sent the last email.
  • The signal that started it is gone by the time it closes. Sixty or ninety days later the job change, the ad and the visit that actually began the deal are three systems away from the closed-won record.
  • The ad platforms optimise on the wrong end. They learn from the form fill you sent them, not from the eleven per cent of those forms that ever became a customer.
  • "Which play worked?" is an export. A spreadsheet, two CSVs and a VLOOKUP, redone every time someone asks, and stale the moment it is pasted.
  • So you build the join yourself. A warehouse, a scheduled script, an identity table and a modelling argument, and now it is a system you maintain instead of a play you shipped.
  • And it still cannot be defended. When the number is questioned you rebuild the query rather than opening the record, which is the difference between a report and a receipt.

The machine produces pipeline and cannot prove which part of it did. So the plays that get funded are the ones that are easiest to count, not the ones that close.

What LeadJourney does instead

One measurement layer under the whole stack, and an endpoint for every part of it.

One script on your own tracking subdomain captures every click server-side and keeps the platform click IDs. Leads your plays create are posted in through the API and joined to the journey that already existed. The attributed source is written back onto the CRM record, closed revenue is sent on to the ad platforms, and every step is a row you can read, export or query from an assistant.

Case studies

What changes once the attribution is right

One measured result per customer, with the person, the role and the company behind it.

  • Portrait of Karsten Guhr

    Tax and accounting

    54% better lead quality after using LeadJourney for marketing

    Karsten Guhr

    Managing Director

    Read the story
  • Portrait of Nikita Yatsun

    SEO agency

    €500k MRR reached profitably, scaling an SEO agency on performance marketing

    Nikita Yatsun

    Managing Director

    Read the story
  • Portrait of Florian Buck

    Klickkraft GmbH

    Business coaching

    €10-20k in monthly Meta spend, tied to qualified leads and revenue per ad

    Florian Buck

    Managing Director

    Read the story
  • Portrait of Marc Richard

    LinkedIn growth agency

    2x customer retention, once every LinkedIn touchpoint was tracked to revenue

    Marc Richard

    CEO

    Read the story
  • Portrait of Andreas Malkow

    Digital publishing

    Which article produced the lead and the revenue, across AI and organic search

    Andreas Malkow

    CEO & Head of PR

    Read the story
  • Portrait of Philipp Nessmann

    SEO and GEO agency

    Proven ROI on every retainer, from organic and AI search leads through to revenue

    Philipp Nessmann

    Managing Director

    Read the story
  • Getreach

    Backlinks marketplace (SaaS)

    0 to 100k in revenue from paid ads alone, inside the first month

    Getreach

    getreach.com

    Read the story

Integrations

Native where it matters, an endpoint for everything you built yourself.

One-click connections for the ad platforms, the channels and the six CRMs most teams run. Everything else in your stack, the enrichment tables, the signal tools and the sequencer, talks to LeadJourney through the REST API, a signed webhook, Zapier, Make or n8n. Open any tile for what exactly moves.

Ad platforms

Spend, campaign structure and click IDs come in. Closed deals go back out as offline conversions.

All traffic channels

Organic channels

Unpaid clicks from search and social, attributed per post, per video and per keyword.

All traffic channels

AI search engines

The traffic your analytics still files under direct. No setup, the tracking script separates it.

All traffic channels

CRM and sales

Lead stage and deal value flow in. Every campaign sees the revenue it actually produced.

All CRM and sales tools

What you get

The measurement layer, as a component rather than another dashboard.

Server-side capture on your own subdomain

One script, in the site or the tag manager, running from a tracking subdomain you own. Every visit is recorded server-side with its channel, campaign, ad, keyword and click ID, so the record does not depend on a third-party script surviving the browser. See server-side tracking.

Click IDs, so a broken parameter stops costing you the source

gclid, fbclid, li_fat_id and msclkid identify the click even when the UTM is missing, mistyped or stripped by a redirect. Naming conventions stay useful for reporting instead of being load-bearing for attribution. See UTM and click ID tracking.

Post a lead in, read the journey back out

A lead your play created outside the website goes in with one call and is joined to the journey that already existed, matched on the click ID or the email. Then read back every touch behind it. Zapier, Make and n8n cover the same ground without code. See the API docs.

  • Make
  • n8n

Attribution written onto the objects your plays already touch

First touch, campaign, ad, keyword, click ID and touch count on the contact, the attributed source and amount on the deal, in HubSpot, Pipedrive, Close and Attio natively and in Salesforce and 100+ others by webhook. Your routing and your scoring can read it like any other field. See CRM integration.

Closed revenue back to the platforms, on the stage change

When a deal reaches the stage you chose, the outcome and its amount go back to Google, Meta, LinkedIn and Microsoft through their conversion APIs, with the click ID attached. The algorithms stop optimising for form fills and start optimising for the leads that close. See offline conversion tracking.

An MCP server, so the assistant can read the journeys

Connect LeadJourney to Claude or any MCP client and ask which plays closed, which campaigns spent without closing anything, what is behind a named deal. It is one OAuth connection, and the answers come back as tables you can paste. See the MCP server.

You could build this

You know exactly how to build this layer. That is the problem, not the argument for it.

Capture the click, keep the identifiers, stitch the identities, join the CRM, model the credit, push the outcomes back to four platforms, and keep it all running while every one of those APIs changes under you. It is a perfectly good build, and it is a system with your name on it forever. This is the same layer, maintained, live in minutes, with an API on the front of it.

The layer, in detail

What happens between the signal and the closed deal.

Your workspace
The last hour, as it landsSignals, clicks and outcomes arriving in one layer
Live
  • Click captured server-sideLinkedIn Ads · ABM Q3li_fat_id storedCaptured
  • Lead posted in from your sequenceNora Beck · matched on emailJoined, not createdMatched
  • Source written onto the contactNora Beck · 6 fieldsLinkedIn Ads, ABM Q3Written
  • Closed won sent to the ad platformNorthwind · position-based$61,000Sent
  • Consent declined, nothing storedVisitor · no cookie, no identifiersNot trackedSkipped

Every row is also a line in the log, with the rule that produced it and a timestamp.

Signals in

Leads from outside the website, joined to the journey that already existed.

Your plays create leads in places a website script never sees: a sequencer reply, an enrichment run, a form on somebody else's domain, a call. Post them in with one call and they are matched to the anonymous journey that started them rather than beginning a new one, so the paid click from six weeks ago stays attached.

  • Matched on the click ID when you have it, on the email when you do not
  • Anything with a webhook, plus Zapier, Make and n8n for the rest
  • One journey per person, stitched across sessions and devices
  • Retries and failures shown as rows, not swallowed
  • n8n
Your workspace
The endpoints your plays will useFrom the public reference at /docs/api
CallWhat it doesReturns
POST /conversions/track-leadPost a lead from any playThe lead, joined
POST /conversions/trackReport an outcome and its valueThe conversion
GET /leads/findLook a person upThe journey behind them
POST /subscriptionsSubscribe to changesA webhook per event
GET /recent/clicksPoll what came inClicks, leads, conversions

Paths are shortened here: each one sits under /v1/workspaces/{workspace}. The full reference, with bodies and example responses, is on the API docs page.

Built to be called

Every part of it is an endpoint, a webhook or a table in your warehouse.

This is the part that decides whether a measurement tool survives contact with a stack that is mostly automations. Leads and conversions go in, journeys and attributed revenue come out, subscriptions push changes at you, and the whole thing streams into BigQuery if you would rather query it yourself.

  • Token per workspace, JSON in and out, documented request and response bodies
  • Webhook subscriptions, so a stage change reaches your automation
  • Recent leads, conversions and clicks for anything that polls
  • BigQuery export for the team that wants SQL on top of it
Your workspace

Which plays produced closed revenue last quarter, and what did each one cost per closed deal?

You

Closed revenue by the play that started the journey

LinkedIn Ads, ABM Q3
$184,000 · 96 leads
Job change signal
$97,000 · 58 leads
Google Ads, category terms
$41,000 · 143 leads
Cold sequence, ICP list A
$18,000 · 412 leads
Webinar follow-up
$12,000 · 77 leads

The cold list produced 52% of the leads and 5% of the revenue. Ask for it per closed deal and the ranking holds.

  • Show me the 96 ABM journeys
  • What did the cold list cost per closed deal?

Ask it directly

The question you were going to write a query for.

Atlas is the analyst on your journeys and your CRM revenue, in the app, in Slack and through the MCP server in the assistant you already have open. It answers with the records behind the answer, and it shows the gaps as gaps instead of rounding them into a channel.

  • Plain language in, a table and the records out
  • In Claude or any MCP client, one OAuth connection
  • Every answer lists what it counted
  • Unattributed leads shown as unattributed, with the reason

What changes

The questions your stack cannot answer today

Every one of these is a report in LeadJourney, an endpoint, or a sentence you type at an assistant. None of them is an export.

  • Which of my plays produced closed revenue last quarter, not leads?

  • This deal closed sixty days late. What actually started it?

  • Is the cold list worth the seats, or is it the ad campaign underneath it?

  • Can the ad platforms optimise on qualified leads instead of form fills?

  • Which campaigns spent money and closed nothing at all?

  • Can I post a lead from my own automation and keep its journey?

  • Can I read attributed revenue per lead out of this thing with SQL?

Live in 21 minutes

Three steps, and none of them is a migration

One script, two OAuth connections and a mapping screen. Your plays, your forms and your routing stay exactly as they are.

  1. 1About 5 minutes

    Install on your own subdomain

    Add one script to the site or the tag manager and point a tracking subdomain at us. From that moment every visit is recorded first-party with its channel, campaign and click ID, whatever the browser does with third-party cookies.

  2. 2About 15 minutes

    Connect the CRM, the ad accounts and your automations

    One-click OAuth for HubSpot, Pipedrive, Close and Attio, a signed webhook for Salesforce and anything custom, and the four ad platforms for spend and their conversion APIs. Everything you built yourself comes in through the API, Zapier, Make or n8n.

  3. 3Same day

    Map the stages and the model

    Choose which CRM stages count as qualified, opportunity and won, which of them go back to the ad platforms, which fields the attribution is written to, and the default model. Change any of it later without losing history.

How it compares

Build the join yourself, read the platforms' own numbers, or run a layer that already exists.

What you needThe join you buildGoogle AdsLinkedInEach platform's own reportLeadJourney
Time to the first trustworthy answerNo: A quarter, and then maintenancePartly: Today, for that platform aloneYes: About 21 minutes
Leads your plays create off the websitePartly: If you wrote that ingestion tooNo: Invisible, no click to attachYes: One call, joined to the journey
What the revenue is attached toPartly: Whatever your model says todayNo: The platform's own last clickYes: The play that started the journey
Outcomes sent back to the ad platformsPartly: A second project, per platformPartly: Manual uploads, per accountYes: Four conversion APIs, on stage change
Who fixes it when an API changesNo: You do, indefinitelyPartly: The platform, for its own tagsYes: We do, on every platform we connect
Defending a number in the reviewPartly: Rerun the query and hopeNo: Two dashboards that disagreeYes: Open the record, read the events

What changes

What changes once the machine can be measured end to end.

Done:

Plays are ranked by revenue, not by volume

The list that produces four hundred leads and the campaign that produces ninety are compared on the same closed-won number, off the same journeys.

Down:

Spend on plays that close nothing

A campaign that spent and produced no closed revenue is a row you can see in the quarter it happens, not a suspicion in the next planning round.

Done:

The ad platforms learn from your CRM

Qualified and closed stages go back through the conversion APIs with the click ID attached, so the optimisation target stops being a form fill.

Done:

One less system with your name on it

The capture, the identity stitching, the CRM join and the four conversion feeds are somebody else's maintenance, and they still have an API in front of them.

Done:

Attribution becomes a field your automations can read

Source, campaign, click ID and touch count sit on the contact, so routing, scoring and your own conditions can branch on them like any other property.

Lasting:

The number survives the meeting

Every credit has a log entry with the rule and a timestamp behind it, so a disputed figure is a record you open together rather than a query you rebuild.

Original reviews

What our customers wrote, word for word

4.9 out of 5 across 11 public reviews. Quoted as they were left, shortened only by dropping whole sentences.

  • 5 out of 5 starsGoogle

    Before LeadJourney, we had no reliable tracking concept for our five-figure ad spend. We were manually building spreadsheet and CRM reports, inaccurate and time-consuming. Within two days, everything was set up. For the first time, I know exactly what I pay per lead and which campaigns actually bring in the best-qualified prospects.

    Florian BuckCEO, Klickkraft GmbH
  • With LeadJourney we are able to track all our leads and connect them with sales and attribution data to make better decisions. In the first month of using it we scaled from 0 to 100k revenue from paid ads only.

    GetreachBacklinks Marketplace (SaaS)
  • 5 out of 5 starsG2

    LeadJourney finally fixed my Marketing Analytics. It goes way beyond basic Ad Tracking Software. The Customer Journey Report saves hours of digging, and capturing everything from Offline Conversions to AI Search Tracking makes it the Best B2B Attribution Platform available.

    Sascha LenzMarketing Manager
  • 5 out of 5 starsTrustpilot

    Connected LeadJourney for 2 clients, setup took literally 20 minutes each. The data became more accurate, the reports actually make sense. Now clients look at the dashboard and the 'why don't the numbers match?' questions are gone.

    Alexander SamarPerformance Marketing Agency
  • 5 out of 5 starsGoogle

    With LeadJourney, we have finally found a tool that provides us with the data we need to scale our performance marketing campaigns. The most important KPI is no longer lead price but cost per qualified lead.

    Steffen SiesingCEO, Bilanzmanufaktur GmbH
  • 5 out of 5 starsG2

    The ability to track both online and offline conversions in one unified dashboard has given us insights we never had before. Our ROI has improved dramatically since we started integrating LeadJourney with our CRM. We're finally able to see the full customer journey, and it's been a game changer for our strategy.

    Andre WitzelFounder, Trading.de
  • 5 out of 5 starsTrustpilot

    The ability to seamlessly integrate data from multiple channels and see real-time insights has significantly improved our campaign results. We now focus on metrics that truly matter, like ROI and qualified leads.

    Nikita YatsunCEO, RLV Media GmbH

Common questions

What a GTM engineer asks before installing anything

The mechanism questions, answered without marketing language.

What is a GTM engineer, and is this page for me?

It is the newer title for the person who builds the go-to-market systems rather than running the plays by hand: the enrichment and list building, the signal triggers, the sequencer, the routing and the CRM automations. If you own that machine, this page is for you. If you own the stack itself and get asked where the leads came from, marketing, revenue and GTM ops is the same product argued for that job. What GTM engineering is, in one guide.

Do you integrate with Clay, Apollo or my sequencer?

Not natively, and we will not pretend otherwise. Those tools reach LeadJourney the way everything else in a built stack does: a POST to the API when a lead is created, a webhook subscription for changes, or Zapier, Make and n8n if you would rather not write it. The six CRMs and the four ad platforms are the native connections, because those are the two ends the attribution has to join. See the API docs.

I post a lead in from my own automation. Does it start a new journey?

No, that is the point of posting it in. If the payload carries the click ID it is joined to that click's journey; if it carries an email that matches an existing person, it is joined to theirs. A lead with neither is kept as its own journey and shown as unattributed rather than guessed at. So a sequence reply from somebody who first arrived on a paid ad six weeks ago stays attached to that ad.

Do I need a warehouse for this?

No. The capture, the identity stitching, the CRM join, the models and the outbound conversions all run in LeadJourney and the reports read from it directly. If you have a warehouse already, this becomes a source rather than a competitor: the journeys and the attributed revenue stream into BigQuery, and everything else is available through the API and webhooks.

What gets written back into the CRM, and can my automations read it?

First touch and last touch channel, campaign, ad, keyword, click ID and touch count on the contact, and the attributed source and amount on the deal, mapped onto property names you choose. They are ordinary fields, so routing rules, scoring and your own workflows can branch on them. Nothing is merged or deleted: the stitching that joins sessions and devices happens on our side. See CRM integration.

How do the closed deals get back to the ad platforms?

Through the conversion APIs of Google, Meta, LinkedIn and Microsoft, server to server, with the stored click ID attached and the stage change as the trigger. You choose which stages go back and what value each carries, so the platforms optimise toward qualified pipeline instead of toward whoever fills in a form. See offline conversion tracking.

Is there rate limiting, and how is the API authenticated?

A token per workspace, sent as a bearer header, with JSON request and response bodies documented endpoint by endpoint including example responses. Plans are priced on tracked events rather than seats, so putting the data in front of everybody who keeps asking you for it does not cost more. The full reference is at /docs/api.

Can I query it from Claude instead of building a dashboard?

Yes. The MCP server is one OAuth connection from Claude or any MCP client, and it reads the journeys, the campaigns and the CRM revenue, so "which plays closed last quarter" comes back as a table rather than as a chart somebody has to build first. It writes as well as reads. See the MCP server.

See it on your own stack

See which of your plays actually closed.

Book a demo and we connect a sandbox to your stack on the call: the capture, a lead posted in from an automation, the fields on the record and the endpoint behind them. Or start the free trial and post your first lead in today.

Your workspace
One deal, from signal to closed wonNorthwind, five of the fourteen events on this journey
EventWhenDetail
Click captured14 Aug, 09:12LinkedIn · ABM Q3
Lead posted in02 Sep, 11:40Your sequence · matched
Source written onto contact02 Sep, 11:406 fields
Stage changed to SQL18 Sep, 16:04Sent to LinkedIn CAPI
Closed won31 Oct, 11:38$61,000 · position-based

The play that started it is still attached seventy-eight days later, because the click ID never left the journey.