Skip to content
GROWTH DEPT.MTA
DocsAttribution models

Concepts

Attribution models

An attribution model splits each order into shares of credit across the touches that led to it. An export asks for one or more models, windows and accounting modes, and every line of the file says which of each it holds.

Models#

Send the id in attribution_options.attribution_models. The file names the model in its attribution_model column.

idNameHow it splits an orderOn for a new brand
northbeam_customClicks only (CO)Splits the order across its touches, leaving out lower-funnel touches when the journey has an upper-funnel one. Lower funnel means Direct, email, SMS, transactional messages, retargeting and branded paid search. Direct is credited only when the journey has nothing but Direct visits. A branded search click counts 0.1 next to 1 for any other touch, unless the brand set another weight.Yes
northbeam_custom__enhClicks + Deterministic Views (C+DV)Clicks only, plus credit for ad views someone recorded: views a partner matched to orders (sent to POST /views) on the days they cover, and otherwise the view-through conversions each platform reports for the day.No
northbeam_custom__vaClicks + Modeled Views (C+MV)Clicks only, plus credit for views estimated from impressions: a regression, fitted per brand, of unpaid orders on each platform's impressions. Until the brand has 28 days of pixel data it uses a view rate per impression from the platforms' own reports.No
first_touchFirst touch (FT)Gives the whole order to the first touch in the lookback.Yes
last_touchLast touch (LT)Gives the whole order to the last touch before it.Yes
last_touch_non_directLast non-direct touch (LNDT)Gives the whole order to the last touch that is not Direct. Direct gets it only when there is nothing else.Yes
linearLinear (LIN)Splits the order across every touch in the lookback, with no funnel rule. A branded search click counts 0.1 next to 1 for any other touch, unless the brand set another weight.Yes

Brands switch models on and off under Settings > Model settings. List attribution models returns the ones a brand has on; a model that is off can still be requested, with the limits described there.

MTA gives branded paid search much less credit than most attribution tools. Someone who searches for your brand by name and clicks your ad has usually decided to buy already, so that click says little about what brought them to you.

  • In Clicks only, Linear and the two view models, a branded search click counts 0.1 next to 1 for any other touch, and the order still adds up to exactly one. An order from an email click and then a branded search click credits about 0.91 to the email and 0.09 to branded search.
  • When branded search is the only touch the model credits, it keeps the whole order.
  • First touch, Last touch and Last non-direct touch give the whole order to one touch and work as before.

Branded search means a Google Ads or Microsoft Ads click on a campaign or ad group whose name has the word "brand" or "branded", and not "non-brand". Shopping and Performance Max campaigns never count, and neither does organic search.

Each brand can change the weight under Settings > Model settings, from 0 (no credit when the order has any other touch) to 1 (the same as any other touch). After a change, MTA recalculates the orders in the lookback.

Lookback#

A touch can earn credit for an order when it started within the brand's lookback before the order: 90 days unless the brand changed it under Settings > Lookback window, which allows 1 to 400 days. GET /exports/account returns it as lookback_days. An order with no touch in the lookback is credited to Unattributed.

Attribution windows#

A window limits an Accrual row to credit from orders placed within that many days of the touch: a 7-day row counts orders up to 7 × 24 hours after the touch. The windows are 1, 3, 7, 14, 30, 60 and 90 days, sent as strings.

  • Windows nest. For the same row, the 7-day figure includes everything in the 1-day figure, and the 30-day figure everything in the 7-day one.
  • Cash snapshot rows ignore the window you send and always carry lifetime. An export request must still list at least one window.
  • A brand can switch windows off. A window that is off keeps the rows computed while it was on, and gets no new ones.

Accounting modes#

Request valueIn the fileCredit is dated onRevenue columnWindows
accrualAccrual performancethe day of the touchattributed_revenue (metric revAttributed)1 to 90
cashCash snapshotthe day of the orderrevenue (metric rev)lifetime

Accrual performance puts each order's credit on the days of the touches that earned it, so a day's spend sits beside the orders it led to, including orders placed later. A recent day's Accrual figures keep rising until its window has passed.

Cash snapshot puts all of an order's credit on the day of the order. Compare with your store's own figures on Cash snapshot; an Accrual day and a store day hold different orders.

Pick the revenue column that matches the mode

attributed_revenue is empty on Cash rows and revenue is empty on Accrual rows. roas and aov use the right one for each row.

Adding up to the store's total#

  • Under every model, an order's shares add up to exactly one order, and its revenue is split to the cent, so the shares add up to the order's revenue.
  • Revenue is the order's gross sales plus shipping and tax, less discounts. Refunds are not taken off; they are in the refunds column.
  • An order with no touch in the lookback is credited to Unattributed. Orders with a tag the brand excludes, under Settings > Exclude orders by tag, are credited to Excluded on Cash rows and left out of Accrual rows. An order tag rule, such as Meta Shops, credits the whole order to its own row.
  • Test orders and orders worth 0 take no credit. Cancelled orders keep theirs, as the store's own totals count them.

So on Cash snapshot, the orders and revenue of every row added together, Direct, Unattributed and Excluded included, equal the store's orders and revenue for those dates, less test and zero-value orders. This holds for every model, the view models too.

Spend sits only on ad platform rows, and the other rows of a platform carry credit without spend. To get a platform's ROAS, add up its spend and its revenue over all its rows first, then divide. Never average a ratio column across rows.

The view models#

Clicks + Deterministic Views and Clicks + Modeled Views both start from Clicks only and add credit for ad views. Credit from daily view counts comes only from the day's pool: orders whose Clicks only credit went entirely to unpaid touches such as Direct, organic search, email, SMS, referrals and Unattributed. A day never gets more view credit than its pool has orders, so this credit never takes an order from a paid click.

Clicks + Deterministic Views

Where a partner's matched views cover a platform on a day (sent to Send matched views), each order with views is credited from its own views:

  • a view counts when it came at most 24 hours before the order;
  • a view within 30 seconds of a paid click on the same platform is that click, and is dropped;
  • once a view counts, the order's unpaid touches get nothing;
  • each paid click and each platform with views gets one equal slot, except that a branded search click's slot counts 0.1, and a platform's slot is split equally across its views.

On other days, a platform's view-through conversions for the day, as Meta, Google Ads and TikTok report them, are spread over the day's pool, capped at its size. Before a brand's pixel has recorded visits, both view models use only the platforms' reported view conversions.

Clicks + Modeled Views

Each brand gets a regression of its daily pool on each platform's impressions over a 1-day view window, with weekday and trend controls and no negative coefficients, fitted on up to 120 days. Meta video views are a second input where they are reported. The fit needs 28 days of orders with pixel data; until then, and for any platform the fit leaves out, the model uses each platform's reported view conversions per impression over the previous 28 days.

The fit is refreshed nightly and applied to every day in the lookback, so older days' Clicks + Modeled Views figures shift slightly each night. This model withholds nothing.

Withheld cells#

Clicks + Deterministic Views withholds a platform row with fewer than 1,000 impressions at its own level on that date. The row keeps spend, impressions and visits, and its orders, revenue and the ratios built from them are empty.

  • An empty cell on such a row means withheld, not zero. Do not fill it with 0.
  • Ad rows can add up to less than their ad set or campaign, which has more impressions. Reconcile across levels on another model.
  • A weekly or monthly line sums the daily cells, so an ad withheld every day stays empty for the week.
  • No other model withholds.

Questions about the API: support@growthdept.ai.