Tape A, B, and C Explained: CTA and UTP
Tape A, B, and C explained: how a stock's listing venue sets its tape, which SIP plan publishes it, and how to tell which tape a symbol trades on.
Tape A, B, and C are the three consolidated streams that carry every US stock trade and quote, and a symbol's tape is decided by one fact: where the stock is listed. NYSE-listed names go to Tape A. Names listed on other exchanges, including NYSE Arca, NYSE American, Cboe BZX and IEX, go to Tape B. Nasdaq-listed names go to Tape C. Nothing about the price or the venue where a given trade happened changes that assignment.
Tape A, B, and C: which listing venue feeds which tape
A tape is a tier of consolidated data: one shared stream that merges prints and quotes from every exchange and off-exchange reporting facility for a defined set of symbols. The set is drawn by listing venue, never by trading venue. A Tape A stock trades on a dozen or more venues, and all of them report into Tape A for that symbol.
The panel below lists the US exchanges that carry listings, with the tape each one assigns.
| venue | mic_code | tape | tape_number | plan |
|---|---|---|---|---|
| New York Stock Exchange | XNYS | A | 1 | CTA / CQ |
| Cboe BZX | BATS | B | 2 | CTA / CQ |
| Investors Exchange | IEXG | B | 2 | CTA / CQ |
| Long-Term Stock Exchange | LTSE | B | 2 | CTA / CQ |
| NYSE American, LLC | XASE | B | 2 | CTA / CQ |
| NYSE Arca, Inc. | ARCX | B | 2 | CTA / CQ |
| Nasdaq | XNAS | C | 3 | UTP |
The exact SQL behind every number
SELECT
any(name) AS venue,
mic AS mic_code,
multiIf(mic = 'XNYS', 'A', mic = 'XNAS', 'C', 'B') AS tape,
multiIf(mic = 'XNYS', 1, mic = 'XNAS', 3, 2) AS tape_number,
multiIf(mic = 'XNAS', 'UTP', 'CTA / CQ') AS plan
FROM global_markets.stocks_exchanges
WHERE asset_class = 'stocks'
AND mic IN ('XNYS', 'XASE', 'ARCX', 'XNAS', 'BATS', 'IEXG', 'LTSE')
GROUP BY mic
ORDER BY tape_number, venue7 listing venues appear in the exchange registry. One of them, New York Stock Exchange, is the sole source of Tape A symbols, encoded as tape 1 in the raw messages. The middle group, the Arca, American, Cboe and IEX listings, all feed Tape B. Nasdaq listings sit alone on Tape C.
How do I tell which tape a symbol is on?
The reliable way is to read it off the data rather than off a reference table. Every consolidated trade and quote message carries a tape field, encoded 1 for Tape A, 2 for Tape B and 3 for Tape C. Group one session of prints by symbol and the assignment falls out.
| ticker | tape_number | tape | plan |
|---|---|---|---|
| GLD | 1 | A | CTA / CQ |
| HYG | 1 | A | CTA / CQ |
| IWM | 1 | A | CTA / CQ |
| JNJ | 1 | A | CTA / CQ |
| KO | 1 | A | CTA / CQ |
| SPY | 1 | A | CTA / CQ |
| XOM | 1 | A | CTA / CQ |
| AAPL | 3 | C | UTP |
| MSFT | 3 | C | UTP |
| NVDA | 3 | C | UTP |
| QQQ | 3 | C | UTP |
| WMT | 3 | C | UTP |
The exact SQL behind every number
SELECT
ticker,
tape_number,
multiIf(tape_number = 1, 'A', tape_number = 2, 'B', 'C') AS tape,
multiIf(tape_number = 3, 'UTP', 'CTA / CQ') AS plan
FROM
(
SELECT
ticker,
any(tape) AS tape_number
FROM global_markets.stocks_trades
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'QQQ', 'KO', 'JNJ', 'XOM', 'WMT', 'SPY', 'IWM', 'GLD', 'HYG')
AND sip_timestamp >= toDateTime64('2026-09-15 04:00:00', 9, 'UTC')
AND sip_timestamp < toDateTime64('2026-09-16 04:00:00', 9, 'UTC')
GROUP BY ticker
)
ORDER BY tape_number, tickerThe basket holds 12 household symbols from a single pinned session. GLD carries tape 1, which is Tape A, published under the CTA / CQ plan. At the far end of the sort, WMT carries tape 3, Tape C. Exchange-traded funds are where this surprises people: a fund's tape follows the fund's own listing venue, not the tapes of the stocks it holds, so a fund and its largest holding can sit on different tapes.
Which plan publishes each tape, and what the streams are called
Two national market system plans divide the work. The CTA plan and the companion CQ plan cover Tapes A and B, trades on one and quotes on the other. The UTP plan covers Tape C, trades and quotes together. Each plan runs its own consolidator, usually called a SIP, and each publishes named output streams:
- CTS, the Consolidated Tape System, carries Tape A and Tape B trades.
- CQS, the Consolidated Quotation System, carries Tape A and Tape B quotes.
- UTDF, the UTP Trade Data Feed, carries Tape C trades.
- UQDF, the UTP Quotation Data Feed, carries Tape C quotes.
- UBBO, the UTP BBO feed, is UQDF stripped down to the best bid and offer.
Nasdaq has long operated the UTP processor, and the CTA and CQ processor has sat under NYSE. That plumbing matters to a reader for one reason. Entitlements are granted per plan, not per symbol. For how these consolidated plans compare with the proprietary feeds each exchange sells directly, see SIP versus direct exchange feeds.
Why a one-plan subscription looks like a data bug
The failure is specific, and it costs people days. You subscribe to UTP, build a watchlist, and a large slice of the symbols never ticks. Prices sit stale and charts flatline at the prior close. Nothing is broken. The quiet symbols are Tape A and Tape B names, and a UTP feed does not carry them at all.
The hole is easiest to see as a share of message traffic across the clock.
| et_time | tape_a_pct | tape_b_pct | tape_c_pct |
|---|---|---|---|
| 04:00 | 14 | 0 | 86 |
| 05:00 | 12.2 | 0 | 87.8 |
| 06:00 | 11.7 | 0 | 88.3 |
| 07:00 | 16 | 0 | 84 |
| 08:00 | 20.9 | 0 | 79.1 |
| 09:00 | 23 | 0 | 77 |
| 10:00 | 25.4 | 0 | 74.6 |
| 11:00 | 24.7 | 0 | 75.3 |
| 12:00 | 27.5 | 0 | 72.5 |
| 13:00 | 31.5 | 0 | 68.5 |
| 14:00 | 32.9 | 0 | 67.1 |
| 15:00 | 35.4 | 0 | 64.6 |
| 16:00 | 26.8 | 0 | 73.2 |
| 17:00 | 10.7 | 0 | 89.3 |
| 18:00 | 9.8 | 0 | 90.2 |
| 19:00 | 9.5 | 0 | 90.5 |
The exact SQL behind every number
SELECT
formatDateTime(toStartOfHour(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_time,
round(100 * countIf(tape = 1) / count(), 1) AS tape_a_pct,
round(100 * countIf(tape = 2) / count(), 1) AS tape_b_pct,
round(100 * countIf(tape = 3) / count(), 1) AS tape_c_pct
FROM global_markets.stocks_trades
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'QQQ', 'KO', 'JNJ', 'XOM', 'WMT', 'SPY', 'IWM', 'GLD', 'HYG')
AND sip_timestamp >= toDateTime64('2026-09-15 04:00:00', 9, 'UTC')
AND sip_timestamp < toDateTime64('2026-09-16 04:00:00', 9, 'UTC')
GROUP BY et_time
HAVING count() >= 100
ORDER BY et_timeEach row is one hour of the ET clock, with the share of prints on each tape. In the hour labelled 10:00 ET the basket's prints split 25.4% Tape A and 74.6% Tape C, with Tape B at 0% for that hour: not one print in the basket came in on tape 2. Read the columns down rather than across a single row. The proportions a panel like this shows depend entirely on which names the universe holds, and a hand-picked basket can leave a tape unrepresented for an hour at a time. A missing plan is the same shape of hole with none of the randomness. It is not one quiet hour but a fixed fraction of your universe that stays dead in every hour of every day.
Two checks separate this from an outage. Sort the quiet symbols by listing venue and see whether they cluster on one or two tapes. Then count the distinct values of the tape field on the messages you did receive: a feed that only ever returns tape 3 carries only Tape C. Fees are set per plan as well, and they move often enough that a monthly figure quoted here would age badly. What real time market data costs covers the fee structure, and whether you are billed at professional or retail rates is a separate determination, laid out in professional versus non professional market data.
How the tapes interact with the NBBO
The national best bid and offer is a cross-venue construct, and it pays to be exact about what crosses. For any one symbol the NBBO is built from the protected quotes of every exchange that trades it, so a Tape C stock's best bid can come from NYSE Arca and its best offer from IEX. What does not cross is the symbol set. The CQ processor publishes the consolidated best bid and offer for Tape A and Tape B symbols, and the UTP processor does the same for Tape C symbols. No single publisher emits one all-symbol NBBO.
For anyone reconstructing quotes, a best price computed from one plan's quote stream is complete for that plan's symbols and silent for the rest, and that silence is indistinguishable from a wide market until you check the tape. The mechanics of the quote itself are covered in what the NBBO is.
Symbol gotchas that differ by tape
Share-class and preferred notation was never standardized across the plans, and the split follows the tape. CTA and CQ symbols on Tapes A and B put a separator before the class letter, so a class B share appears with a dot. UTP symbols on Tape C append the class character straight onto the root with no separator, so some Nasdaq-listed class shares read as ordinary five-letter tickers.
Those 10 symbols are class-share pairs from the same session, sorted by tape. BRK.A sits on Tape A and carries the dot. GOOGL sits on Tape C and carries nothing. Vendors re-render that separator to taste, as a hyphen, a slash, a space or a lowercase trailing letter, and a join between two sources that chose differently drops rows without complaining. The full version of that trap is in why ticker symbols break datasets.
Test symbols are the other one. Each plan reserves symbols that exist only to exercise the feed, and they print trades that look entirely real. The ZVZZT family on Tape C is the familiar set, and the CTA tapes carry their own test issues. None has an issuer or a filing history. They surface in a top-gainers screen or a universe build that filtered on price alone. Exclude them by name at ingest.
A tape assignment also holds only until a company moves its listing. A transfer from Nasdaq to NYSE shifts the symbol from Tape C to Tape A on the effective date, and a cached symbol-to-tape map built before then will route it to a feed that no longer carries it.
FAQ
What is the difference between Tape A, Tape B, and Tape C?
They are three sets of US stocks, split by listing venue. Tape A is NYSE-listed securities, Tape B is securities listed on other exchanges such as NYSE Arca, NYSE American, Cboe BZX and IEX, and Tape C is Nasdaq-listed securities. Each tape carries the same kind of trade and quote message.
How do I find out which tape a stock is on?
Read the tape field on any consolidated trade or quote message for that symbol, where 1 is Tape A, 2 is Tape B and 3 is Tape C. Checking the stock's listing exchange gives the same answer, as long as the listing is current.
Is Tape C the same thing as the UTP plan?
They are related but not interchangeable. Tape C names the symbol set, Nasdaq-listed securities. The UTP plan names the arrangement that collects and publishes data for that set, through its processor and its UTDF and UQDF streams.
Are OTC stocks on Tape A, B, or C?
No. The three tapes cover exchange-listed securities. Securities quoted over the counter are not listed on an exchange, so they fall outside the CTA, CQ and UTP tapes and arrive through separate OTC quotation data.
Every panel here ships with the SQL that produced it, so a symbol's tape is a query rather than a lookup you have to trust. To check one for yourself, ask the question in plain English on the Strasmore terminal.