---
title: "Custom attribution models: when and how to build your own"
canonical: "https://www.owox.com/blog/articles/how-to-leverage-attribution"
updated: "2026-10-05"
---

# Custom attribution models: when the standard ones are wrong and how to build your own

A custom attribution model is a credit rule you write because the standard ones encode assumptions your business does not share. This guide defines it, shows the three kinds of customisation that actually get used, gives runnable SQL for a weighted model, and lays out how an analyst, a marketer and a CMO share the result.

[Marketing Attribution](/blog/topics/attribution) · Updated October 1, 2026 · [Vlad Flaks](/team/vlad-flaks) · 10 min read

![Custom attribution models: when the standard ones are wrong and how to build your own](https://cdn.owox.ai/www/webflow/69e64aaa205229d1cdbe6f05_CUSTOM-ATTRIBUTION-MODELS.png/public)

Every standard attribution model encodes an assumption. Last click assumes the final session did the work. Linear assumes every session mattered equally. Position-based assumes the first and last touch matter twice as much as the middle. For a lot of businesses one of those is close enough. For the rest, the assumption is wrong in a way that is specific and knowable: brand search always arrives last, display never gets a click, the lead form is the moment that matters and no standard model has a slot for it.

A custom attribution model is what you build when you can name the assumption you disagree with. This guide explains what one is, the three kinds of customisation that cover almost every real case, the SQL to build a weighted model in your own warehouse, and how the work splits between the analyst who builds it, the marketer who acts on it and the CMO who has to trust it.

**_Note:_** _Originally published in 2017. Fully rewritten in October 2026: the process section built on a retired OWOX product was replaced with the SQL and the governed Data Mart version, and the roles section was kept._

## What a custom model is

A custom attribution model is a rule for splitting a conversion’s value across the touchpoints that preceded it, written for one business rather than chosen from a menu. The [standard models](/blog/articles/marketing-attribution-models) are custom models somebody else wrote: last click is “100% to the last touch”, linear is “equal shares”. Writing your own means stating the rule in your own terms, usually as **weights** on positions, channels or funnel stages, and then applying it to every path.

Three things distinguish a custom model from a configured one. **It is explicit**: the weights are written down, so anyone can read why a channel got its share. **It is yours**: it reflects what you know about your funnel and your channels rather than what a platform assumes about the average advertiser. And **it is testable**: because the rule is explicit, you can change one weight, re-run it and see what moves.

What a custom model is not is a better algorithm. A weighted rule does not learn from data the way [data-driven attribution](/blog/articles/data-driven-attribution) does. It is the right choice when you have a belief about your channels that the data is too thin to learn, or when the number has to be explainable to someone who will not accept “the model decided”.

## When you need one

Most teams should start with a standard model and a comparison report. A custom model earns its upkeep when one of these is true.

*   **A channel’s role is structural, not incidental.** Brand search is almost always the last paid click before a purchase. Under last click it looks like your best channel; under any model that credits demand creation it looks like what it is, the receipt. A channel factor fixes that in one line.
*   **There is a step in the funnel that matters more than the purchase.** In lead generation the form submission is the moment marketing hands over to sales; everything after it is sales’ work. A model that credits the touch that produced the lead, rather than the last touch before the deal closed, matches how the business actually runs.
*   **The standard models give answers nobody will act on.** If every multi-touch model moves credit by a few percent and the CMO shrugs, a model that encodes the team’s own view of the channels, and can be argued with, is more likely to change a budget.
*   **The data is too thin for an algorithmic model.** Markov and Shapley need volume. A few hundred conversions a month will produce noise; a weighted rule will produce a stable number.

## The Turning Point

OWOX Data Marts

See your first report built in real time. _15 minutes._

1.  Connect your data warehouse
2.  Pick your metrics
3.  Get a live Google Sheets report

In the time it takes to write a ticket. Then imagine never writing that ticket again.

[Book a Demo](/book-a-call)

We'll use your actual use case

## Three ways to customise

Almost every custom model in use is one of three customisations, or a combination. Knowing which one you want is most of the design.

![A flowchart showing the roles of an Analyst, Marketer, and CMO in data-driven attribution. It highlights data connection, ad performance evaluation, and goal monitoring.](https://cdn.owox.ai/www/webflow/6790cd3d7271537bd67faead_44048.png/public)

### Position weights

The position-based model’s 40 / 20 / 40 is a set of position weights, and it is the easiest thing to change. A business that cares about demand creation might run 60 / 20 / 20; one that sells on a long cycle might flatten it towards linear. The W-shaped model used in B2B is a position-weight model with an extra slot: 30% to the first touch, 30% to the touch that created the lead, 30% to the touch that created the opportunity, 10% to the rest.

### Channel factors

A channel factor multiplies a touch’s weight up or down because of what channel it is. This is the **custom factor** people search for: brand search at 0.5 because it harvests demand rather than creating it, upper-funnel display at 1.5 because its contribution is systematically under-credited by click-based models, affiliate at 0.3 because the touch is often a coupon site visited after the decision. Factors are applied before the path’s weights are normalised, so the credits still sum to the conversion’s value.

### Funnel-stage credit

Instead of positions in a path, credit the touch that moved the user to each stage of your funnel: visit, lead, qualified lead, opportunity, customer. Each stage carries a weight, and the touch that preceded the stage transition earns it. This is the model that fits lead generation, subscription businesses and anything with a CRM pipeline, because the stages are the business’s own and the credit follows the handoffs between teams.

## Build it in SQL

The customisation is a few lines once the paths exist. The query below extends the `touches` table from the [attribution models guide](/blog/articles/marketing-attribution-models): one row per session in a converting user’s path, with `uid`, `channel`, `touch_no`, `touches` and `path_rev`. That guide builds it from the GA4 BigQuery export; here it is referred to as `t`.

The model combines position weights (40 / 20 / 40) with channel factors, then normalises within each path so that every conversion’s revenue is distributed exactly once. Change the weights in the `CASE` and the factors in `f`; nothing else needs to move.

```
WITH f AS (
  SELECT 'google / cpc'
    AS ch, 1.0 AS factor
  UNION ALL
  SELECT 'brand / cpc', 0.5
  UNION ALL
  SELECT 'display / cpm',
    1.5
),
p AS (
  SELECT
    uid, channel, path_rev,
    CASE
      WHEN touch_no = 1
        THEN 0.4
      WHEN touch_no
        = touches
        THEN 0.4
      ELSE 0.2
        / (touches - 2)
    END
    * COALESCE(
        f.factor, 1.0)
      AS wt
  FROM t
  LEFT JOIN f
    ON f.ch = t.channel
),
n AS (
  SELECT
    channel,
    path_rev * wt
      / SUM(wt) OVER (
          PARTITION BY uid)
      AS credit
  FROM p
)
SELECT
  channel,
  SUM(credit) AS total
FROM n
GROUP BY channel
ORDER BY total DESC
```

The normalisation in `n` is what makes the model honest: whatever weights and factors you choose, the credits in a path divide the path’s revenue and no more. It also removes the edge cases (a one-touch path gets 100%, a two-touch path splits evenly) without special handling.

A funnel-stage model needs one more input, the stage each session reached, which comes from your CRM or your event data joined to the session. The shape is the same: a weight per stage, the touch before each transition earns it, normalise per path. [Building an attribution model in BigQuery](/blog/articles/build-attribution-model-bigquery) covers getting ad cost onto the same sessions, so the output can be return on spend rather than credited revenue.

## Who does what

A custom model is three people’s work, and the division is the part teams most often get wrong. The page has argued this since 2017 and it has not changed.

### The analyst builds it

The analyst brings the sources together, sessions, ad spend, CRM stages, into one warehouse table, writes the model, and checks it. The check is simple and worth writing down: if a stage’s transition probability is above 90% or below 5%, something is mis-tagged, and if a channel’s credit under the custom model differs from last click by more than a factor of three, look at the factor before you believe the result. [Consistent UTM tagging](/blog/articles/how-to-use-utm-tags) is the prerequisite for all of it.

### The marketer acts on it

The marketer’s job is to turn credited revenue into budget decisions, and the cleanest instrument is a **correction factor** per campaign: revenue under the custom model divided by revenue under last non-direct click.

![A campaign performance table comparing sessions, revenue attributed to the last non-direct click model, revenue under a custom multi-touch model, and the resulting correction factor per campaign](https://cdn.owox.ai/www/webflow/6790cd3d9242586ff3f93169_44042.png/public)

A factor above 1 means the campaign is under-credited today: it does work early in the journey that another campaign gets paid for. A factor below 1 means it is over-credited, typically because it is last in line. Multiply each campaign’s target [cost per acquisition](/marketing-metrics/cost-per-acquisition) by its factor and the bidding reflects the model without anyone rebuilding a dashboard. Some campaigns’ cost per conversion will rise; the project’s overall cost per conversion is what should fall.

![A comparison bar chart of cost and revenue when campaigns are managed by last non-direct click versus by a multi-touch model: the same cost, more revenue under the multi-touch model](https://cdn.owox.ai/www/webflow/6790cd3f713b0dbf3b4dc117_44044.png/public)

### The CMO tests it

The CMO’s job is not to admire the model but to prove it pays, and the proof is a controlled reallocation. Split the audience into two segments that do not overlap but both see marketing, such as regions. Manage segment A’s budget by the old model and segment B’s by the custom one, and compare [return on ad spend](/marketing-metrics/return-on-ad-spend) over 30 to 90 days.

![A line chart comparing performance trends of two user segments over time, showing the impact of advertising budget reallocation.](https://cdn.owox.ai/www/webflow/6790cd3eb907d8126ea8a230_44038.png/public)

If segment B pulls ahead after the reallocation, the model has earned its place. If it does not, the weights were a belief, not a fact, and the test has told you so cheaply.

## Publish it and ask for it

A custom model that lives in one analyst’s notebook is a liability: the next person re-runs it with different weights, or copies the output into a spreadsheet and the two drift. The fix is to publish the query once, with its weights and its definition of a conversion, as a governed Data Mart in [OWOX Data Marts](https://www.owox.com/app-signup), and let every report and every question read from it. The analyst still owns the SQL; the product publishes and schedules it, delivers it to Google Sheets and Looker Studio, and logs every query that reads it.

![Data Mart catalogue of the Marketing Leadgen Data Model in OWOX Data Marts: Web Sessions, Touchpoints, Stage Transitions, Opportunities, Lead, Ad Spend, Campaign and Account – the governed tables a funnel-stage attribution model is built on and read from](https://cdn.owox.ai/www/content-marketing-article/how-to-leverage-attribution/screens/1.png/public)

That is also what lets the marketer skip the dashboard. Against the [Marketing Leadgen Data Model](/data-models/marketing-leadgen), whose Data Marts hold ad spend, campaigns, leads, opportunities and the touchpoints between them, the question a marketer actually has can be asked in plain language:

> **Data Model:** Marketing Leadgen · Ad Spend, Campaign, Lead, Opportunities, Touchpoints and Stage Transitions Data Marts **Prompt:** _“Which campaigns produced the leads that became opportunities last quarter, and what did each of those leads cost us?”_

The same question asked of an [AI assistant](/product/ai-assistants) with raw warehouse access, and asked of the published Data Marts, gives two different kinds of answer.

*   **Ungoverned**: the model sees the raw CRM and ad tables, guesses which timestamp marks the lead, joins spend to leads on whatever campaign name matches, and returns a plausible number with no way to check it.
*   **Against the Data Marts**: the model reads the analyst’s join between touchpoints, stage transitions and spend, applies the analyst’s definition of a lead, and returns the number with the query behind it.

The prompt is the interface; the governed Data Mart is the guarantee. [Governed MCP analytics](/blog/articles/governed-mcp-analytics) walks through that chain of control, and the hub’s [build section](/blog/articles/marketing-attribution-models) shows the Data Mart definition and the run log that make it concrete.

> **Free guide:** [The Ultimate Guide to Marketing Attribution Modeling: Everything You Need to Know](/guides/ultimate-guide-to-marketing-attribution-modeling) →

## Key takeaways

*   A custom attribution model is an explicit, written-down credit rule. Build one when you can name the assumption in the standard models that your business does not share.
*   Three customisations cover nearly every case: position weights, channel factors and funnel-stage credit. Pick the one that matches the belief you hold.
*   The model is a few lines of SQL on top of a path table, and the per-path normalisation is what keeps it honest.
*   The analyst builds and checks it, the marketer turns it into correction factors on target CPA, the CMO tests it with a segment reallocation over 30 to 90 days.
*   Publish it as a governed Data Mart so the weights have an owner and a log, and so the number can be asked for in plain language with the query behind it.

## Your New Normal

Turn your data into decisions.

Governed data marts give you the clean foundation ML needs to actually work.

*   No AI hallucinations
*   Analyst-governed definitions
*   Every number traces to SQL

[Get started free](https://www.owox.com/app-signup)

## FAQ

## Frequently Asked Questions

What are the various types of attribution modeling?

Rule-based models (first touch, last touch, last non-direct click, linear, time decay, position-based), algorithmic models (data-driven, Markov chains, Shapley values) and custom models, which apply weights you define to positions, channels or funnel stages. A custom model is the right choice when you can name the assumption in a standard model that your business does not share.

What are the common challenges faced in attribution modeling?

Collecting every touchpoint in one place, including CRM stages and offline conversions; choosing a model whose assumptions fit the business; and getting a number the team will act on. A custom model written as SQL in your own warehouse addresses the second and third: the weights are explicit, so they can be argued with and tested.

What is attribution modeling?

Attribution modeling is the process of determining the value of each touchpoint a customer interacts with before making a purchase. This process helps businesses to allocate their marketing budgets appropriately.

## Who wrote this

![Vlad Flaks](https://cdn.owox.ai/www/webflow/6a6bbf472a2f787534923471_1720202969781.jpg/public)

[Vlad Flaks](/team/vlad-flaks) · CEO & Founder

Vlad Flaks is the CEO and co-founder of OWOX, where he leads the company's mission to make analytics infrastructure accessible to every data team. With over a decade of experience building analytics products, Vlad has guided OWOX from a marketing analytics tool to a full warehouse-native analytics platform. He writes about the future of analytics, data democratization, and building a SaaS company in the data space.

[LinkedIn](https://www.linkedin.com/in/vladflaks/) · [All articles](/team/vlad-flaks)

[Marketing Attribution](/blog/topics/attribution)

## Related articles

[Marketing Attribution · Marketing attribution models: how each one works and how to build your own · October 1, 2026](/blog/articles/marketing-attribution-models)

[Marketing Attribution · Data-driven attribution: how Google's model works in GA4, Google Ads and Search Ads 360 · October 1, 2026](/blog/articles/data-driven-attribution)

[Marketing Attribution · Best marketing attribution software in 2026: seven tools compared · October 1, 2026](/blog/articles/top-marketing-attribution-software)

[See all articles →](/blog/articles)

## Book a call

You are booked. The invitation is on its way to , with the calendar invite and the meeting link.

[Reschedule](#)

[Cancel](#)

## Links

Pages this page links to, on this site and on docs.owox.com. Where the page has a Markdown twin, its address follows the link.

- [Marketing Attribution](https://www.owox.com/blog/topics/attribution) — /blog/topics/attribution.md
- [Vlad Flaks](https://www.owox.com/team/vlad-flaks) — /team/vlad-flaks.md
- [standard models](https://www.owox.com/blog/articles/marketing-attribution-models) — /blog/articles/marketing-attribution-models.md
- [data-driven attribution](https://www.owox.com/blog/articles/data-driven-attribution) — /blog/articles/data-driven-attribution.md
- [Book a Demo](https://www.owox.com/book-a-call) — /book-a-call.md
- [Building an attribution model in BigQuery](https://www.owox.com/blog/articles/build-attribution-model-bigquery) — /blog/articles/build-attribution-model-bigquery.md
- [Consistent UTM tagging](https://www.owox.com/blog/articles/how-to-use-utm-tags) — /blog/articles/how-to-use-utm-tags.md
- [cost per acquisition](https://www.owox.com/marketing-metrics/cost-per-acquisition) — /marketing-metrics/cost-per-acquisition.md
- [return on ad spend](https://www.owox.com/marketing-metrics/return-on-ad-spend) — /marketing-metrics/return-on-ad-spend.md
- [OWOX Data Marts](https://www.owox.com/app-signup)
- [Marketing Leadgen Data Model](https://www.owox.com/data-models/marketing-leadgen) — /data-models/marketing-leadgen.md
- [AI assistant](https://www.owox.com/product/ai-assistants) — /product/ai-assistants.md
- [Governed MCP analytics](https://www.owox.com/blog/articles/governed-mcp-analytics) — /blog/articles/governed-mcp-analytics.md
- [The Ultimate Guide to Marketing Attribution Modeling: Everything You Need to Know](https://www.owox.com/guides/ultimate-guide-to-marketing-attribution-modeling) — /guides/ultimate-guide-to-marketing-attribution-modeling.md
- [Marketing Attribution · Best marketing attribution software in 2026: seven tools compared · October…](https://www.owox.com/blog/articles/top-marketing-attribution-software) — /blog/articles/top-marketing-attribution-software.md
- [See all articles →](https://www.owox.com/blog/articles) — /blog/articles.md
