Skip to Content
GuidesRevenue

Revenue

Revenue answers the question behind every visibility number: does it sell? Skoup reads the store’s orders (Shopify webhooks) and attributes each one, last touch, to an AI surface when its referrer, utm_source or ref points at one (ChatGPT, Claude, Gemini, Perplexity…). Five views share that data:

  • Attribution — orders and revenue from AI vs the whole store, by surface and by product, with the change against the previous period.
  • Orders — the AI-attributed orders themselves, one by one, without any customer data.
  • Traffic — the AI referral visits and conversions measured by Skoup Analytics installed on the brand’s site, with the first AI touch of each conversion. It is the only view of a SaaS brand or a physical establishment, which has no store.
  • Subscriptions (SaaS) — the new subscriptions and new MRR read in the brand’s Stripe (read-only restricted key), the part AI brought and, week by week, the new MRR against AI visibility.
  • Correlation — AI visibility and AI revenue side by side, week by week, with the fixes published each week.

I want to…

I want to…Call
Know how much AI sold this quarterGET /v1/brands/{brand}/attribution?market=FR&period=90d
List the orders ChatGPT broughtGET /v1/brands/{brand}/orders?surface=chatgpt
Read the AI traffic the script measuredGET /v1/brands/{brand}/traffic?market=FR
Know which share of the conversions began with an assistantGET /v1/brands/{brand}/traffic?market=FR — read first_touch
Know which share of the orders began with an assistant (Shopify store, pixel)GET /v1/brands/{brand}/attribution?market=FR — read first_touch
Know how many sign-ups or calls AI brings (SaaS, establishment)GET /v1/brands/{brand}/traffic?market=FR — read ai.key_events and ai.conversion_rate
See whether visibility moves revenueGET /v1/brands/{brand}/correlation?market=FR&category=Gravel
Know how many subscriptions and how much MRR AI brings (SaaS)GET /v1/brands/{brand}/subscriptions?market=FR
Be told of each AI orderorder.attributed

Scope: revenue:read.

Scenario: post every AI sale to Slack

if (event.type === 'order.attributed') { const order = event.data.object await slack.post(`🛒 ${order.ai_surface} brought an order (${order.country})`) }

Pitfalls

  • Attribution is last touch, read from the order itself: a shopper who asked ChatGPT then came back through Google is attributed to Google. The attribution’s first_touch block says the opposite, for the orders the Skoup Analytics pixel joined to their visit (Shopify store, see Skoup Analytics): orders = joined orders, ai_orders those whose buyer first came through an assistant.
  • No customer data, ever: orders carry a country, lines and amounts — no name, e-mail or address.
  • null before data: attribution totals stay null until the first order, traffic blocks until the script measured a first visit (the current day is never counted), correlation weeks are empty until the first order.
  • Traffic and correlation need the Growth plan or above: on Starter they answer 403 plan_feature_unavailable (test mode keys always reach them). Attribution and orders are open to every plan.
  • A conversion depends on the brand: conversion_metric is transactions (the script’s purchase events) for a store and key_events (named events the site sends: sign-up, demo, call, booking…) for a SaaS or an establishment. The counted events are chosen in the app (Settings › Integrations › Skoup Analytics › Key events), every named event by default. A site that never sends the metric returns conversion_rate: null, never 0.
  • first_touch is not ai: the per-surface rows are last touch (the visit that converted); first_touch counts the conversions whose visitor first came through an assistant within the last window_days days, even if they came back through Google. The two never add up. Attribution, orders and correlation only exist for a store: elsewhere they answer 403 capability_unavailable.
  • A subscription is attributed to AI only if its provenance is in Stripe: Skoup reads the metadata of the subscription, then of the customer — keys referrer, utm_source or landing_url (prefixed skoup_ if you want them apart). With Stripe Checkout, pass them in subscription_data[metadata]. Without them the subscription counts in the total but never in the AI share — tracked_share tells how many carry one. MRR is the monthly list price, before discounts and taxes; a tiered or metered price has no MRR. SaaS brands only (403 capability_unavailable otherwise); weeks is empty without the Growth plan.
  • Test orders are excluded. order.attributed is sent once, at creation — a replayed Shopify webhook never sends it again.
Last updated on