Skip to content New SourceLoop MCP: chat with your attribution data in Claude, ChatGPT & Cursor
SourceLoop
API reference

Products

Revenue and conversions broken down by product or plan. REST endpoints, parameters, and response schemas for the SourceLoop attribution API.

Endpoint Method Path Permission
Get products Per-product sales for a connected store GET /v1/products metrics:read

Base URL https://app.sourceloop.ai/api/v1

Get products

Per-product sales for a connected store

GET /v1/products

Requires metrics:read

Revenue, units, orders and margin per product, NET of refunds.

Margin covers only the share of revenue whose cost the merchant has set, and `meta.cost_coverage_pct` reports that share. Below 100 the margin describes part of the catalogue rather than all of it.

An empty list with `meta.no_data_reason` means no store is connected or no orders were placed, which is not the same as selling nothing.

curl -s -X GET "https://app.sourceloop.ai/api/v1/products?website=acme.com&period=last%2030%20days&platform=shopify" \
  -H "Authorization: Bearer $SOURCELOOP_API_KEY"
const res = await fetch(
  "https://app.sourceloop.ai/api/v1/products?website=acme.com&period=last%2030%20days&platform=shopify",
  {
    method: "GET",
    headers: {
      Authorization: `Bearer ${process.env.SOURCELOOP_API_KEY}`,
    },
  },
);

const data = await res.json();
import os, requests

res = requests.get(
    "https://app.sourceloop.ai/api/v1/products?website=acme.com&period=last%2030%20days&platform=shopify",
    headers={"Authorization": f"Bearer {os.environ['SOURCELOOP_API_KEY']}"},
)
data = res.json()

Query parameters

websitestring

Website domain, e.g. acme.com. Required only when the key covers more than one.

periodstring

Plain-language period: "last 30 days", "yesterday", "July 2026", or "2026-07-01..2026-07-31". Ignored when from/to are given.

Example last 30 days

platformstring

Default shopify

limitinteger

Default 100

Responses

  • 200 One row per product
  • 429 Too many requests for this workspace in the current minute. Wait Retry-After seconds and repeat the request unchanged.

Track every conversion to its true source

Capture and send full attribution data from every signup, lead, booking, and sale to your CRM and ad platforms, so you know exactly what's driving revenue.

Without SourceLoop

Untagged

Kayden Floyd

kayden@abc.com

  • SourceUnknown
  • MediumUnknown
  • CampaignUnknown
  • Landing pageUnknown
Journey
No touchpoints captured

With SourceLoop

Auto-tagged

Kayden Floyd

kayden@abc.com · Acme Co.

  • Channel Paid Social
  • CampaignFree_demo
  • Landing page/pricing
Journey
Synced to HubSpot Google Ads Meta