> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.pixalate.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.pixalate.com/_mcp/server.

# Supply chain (SCO) reports

> How to use the Pixalate Analytics supply chain object (SCO) validation and verification reports for domains, mobile apps and CTV apps. Default columns, breakdowns by node and seller, comparing chains, reason codes and crawl cadence.

The supply chain object (SCO) reports in the Pixalate Analytics dashboard break your traffic down by supply path, so you can compare the ways you buy or sell the same inventory and keep the best chains. There are three reports, under **SPO Reports**: **Mobile SCO**, **CTV SCO** and **Domain SCO**.

> **Info**
>
> The SCO reports are available to all Analytics dashboard subscribers as a beta program.

For what validation and verification mean, see [SCO validation and verification](/compliance/sco). To check SCOs from code, use the [SCO API](/apis/sco-api).

## Read the default view

![Mobile SCO report](/_fern-img/af7d85f5dd0e373ccf75d7c1d8390c8fee8236ccb0f0e1c8235bc95fdcc018dd.webp)

The SCO reports (Mobile SCO, CTV SCO and Domain SCO) are under **SPO Reports** in the Analytics dashboard's Reports menu. They show supply chain performance in aggregate, with the chains that pass and fail validation and verification broken out.

The default columns include:

* App or site
* The supply chain object that was passed
* Reason and error codes
* Chain length

The header lets you narrow the scope, for example by valid or incomplete chain %, unauthorized direct sellers, or a specific number of nodes. From there, compare SCO data with other metrics such as gross ads, IVT % and viewability.

Start with the chains that miss your criteria, such as IVT over 10% or no complete flag. Then consolidate paths and remove redundant ones based on validation and verification results, performance or spend.

All the usual report tools work here: date ranges, filters, **Add Column**, save, schedule and export. See [Run and customize reports](/analytics/reports).

## Break down by dimension

| Dimension                                                    | What it tells you                                                                                                                                                                                                                          |
| ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Individual nodes** (up to 4, in standard or reverse order) | Order the chain from the inventory through nodes 1–4, or reverse it. Shows unexpected entities in the SCO. If you find one, talk to the adjacent reseller.                                                                                 |
| **Seller**                                                   | How many chains involve a seller, and where problems such as high IVT, low viewability or reason codes appear. Work with the seller to repair or remove broken or poorly performing chains.                                                |
| **Seller type** and **seller domain**                        | Isolate roles in the chain. Direct relationships may carry less exposure to some IVT types, so focus on chains with intermediaries. The seller domain shows the owner domain for an entity, which gives you someone to contact.            |
| **Chain length**                                             | The number of nodes in the SCO. Buying directly from the publisher gives a chain length of 1; each intermediary adds one. Longer chains are more likely to fail validation, so capping the number of nodes helps keep validation rates up. |
| **Supply path completeness**                                 | Whether the chain is marked complete. Incomplete chains carry a higher IVT rate. Work with the intermediary to make sure every node and the complete flag are passed.                                                                      |

## Compare chains for one app or domain

Filter to a single app or domain and compare its chains:

* **Buying efficiency:** if your company has rules on chain length or completeness, find the broken chains and the ones longer than expected, turn those paths off, and move spend elsewhere.
* **Cost savings:** add IVT rate to cut wasted spend and clawbacks. Some partnerships set an IVT % threshold above which the seller pays. Find the chains with inflated IVT and block that node, or use pre-bid measures for that partnership, so you can keep trading the inventory without blocking the publisher. Add ad spend to estimate what you'd save by dropping a chain.

## Filter by reason and error codes

Reason and error codes tell you what's broken in an SCO or which data is missing or passed incorrectly.

* **Valid SCO** means a complete chain where every node passed, with the correct seller and ad system ID and the correct seller type.
* Codes are split into **validation** (is the SCO well-formed?) and **verification** (do the sellers match ads.txt, app-ads.txt and sellers.json?). Each calls for a different fix.
* More than one code can appear on an SCO if it has several problems.
* In the dashboard, validation errors map to a single label: **SCO deserialization failed**.

For every code, what it means and how to fix it, see [SCO error and reason codes](/compliance/sco-error-codes).

## How often Pixalate re-crawls

Pixalate verifies SCOs against crawled ads.txt, app-ads.txt and sellers.json files:

| File                    | Crawl window                           |
| ----------------------- | -------------------------------------- |
| ads.txt and app-ads.txt | Crawled within a rolling 30-day window |
| sellers.json            | Crawled within a rolling 7-day window  |

When one of these IVT types is flagged, Pixalate retries crawling the relevant file the next day, so an updated file is picked up quickly:

| IVT type                                         | File retried the next day |
| ------------------------------------------------ | ------------------------- |
| SCO Unauthorized Direct Seller                   | ads.txt and app-ads.txt   |
| SCO Unauthorized Direct Seller Publisher Missing | sellers.json              |

For these IVT types, see [Reported IVT types](/analytics/ivt-types) and the [IVT Taxonomy](/trust/ivt-taxonomy).

## What you can do with the reports

* Check that the SCOs being passed match what you expect from your buying paths.
* Find sellers and partners that aren't authorized (as a direct seller or as a reseller), then block them or work with them and the publisher to fix ads.txt.
* Reduce clawbacks by cutting specific paths instead of blocking an inventory source entirely.
* Find weak links in chains and work with those sellers to fix their sellers.json files or SCOs.
* Reduce IVT, since SCO verification failures correlate with IVT.

To block problem supply paths pre-bid, see the [SPO data feeds](/data-feeds/spo).

## Related

* [SCO validation and verification](/compliance/sco)
* [SCO error and reason codes](/compliance/sco-error-codes)
* [SCO API](/apis/sco-api)
* [SPO data feeds](/data-feeds/spo)

Questions? Contact [support@pixalate.com](mailto:support@pixalate.com).