Strasmore Research
Learn Matt ConnorBy Matt Connor

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.

QueryUS listing exchanges and the tape each one assigns
venuemic_codetapetape_numberplan
New York Stock ExchangeXNYSA1CTA / CQ
Cboe BZXBATSB2CTA / CQ
Investors ExchangeIEXGB2CTA / CQ
Long-Term Stock ExchangeLTSEB2CTA / CQ
NYSE American, LLCXASEB2CTA / CQ
NYSE Arca, Inc.ARCXB2CTA / CQ
NasdaqXNASC3UTP
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, venue
Run this yourself

7 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.

QueryThe tape carried by a basket of household symbols, one September 2026 session
tickertape_numbertapeplan
GLD1ACTA / CQ
HYG1ACTA / CQ
IWM1ACTA / CQ
JNJ1ACTA / CQ
KO1ACTA / CQ
SPY1ACTA / CQ
XOM1ACTA / CQ
AAPL3CUTP
MSFT3CUTP
NVDA3CUTP
QQQ3CUTP
WMT3CUTP
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, ticker
Run this yourself

The 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.

QueryShare of prints on each tape, by ET clock hour, across the same basket
et_timetape_a_pcttape_b_pcttape_c_pct
04:0014086
05:0012.2087.8
06:0011.7088.3
07:0016084
08:0020.9079.1
09:0023077
10:0025.4074.6
11:0024.7075.3
12:0027.5072.5
13:0031.5068.5
14:0032.9067.1
15:0035.4064.6
16:0026.8073.2
17:0010.7089.3
18:009.8090.2
19:009.5090.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_time
Run this yourself

Each 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.

QueryClass-share symbols and the notation each tape uses
tickertape_numbertapeclass_notation
BRK.A1Aseparator
BRK.B1Aseparator
HEI1Ano separator
HEI.A1Aseparator
LEN1Ano separator
LEN.B1Aseparator
FOX3Cno separator
FOXA3Cno separator
GOOG3Cno separator
GOOGL3Cno separator
The exact SQL behind every number
SELECT
    ticker,
    tape_number,
    multiIf(tape_number = 1, 'A', tape_number = 2, 'B', 'C')   AS tape,
    if(position(ticker, '.') > 0, 'separator', 'no separator') AS class_notation
FROM
(
    SELECT
        ticker,
        any(tape) AS tape_number
    FROM global_markets.stocks_trades
    WHERE ticker IN ('BRK.A', 'BRK.B', 'LEN', 'LEN.B', 'HEI', 'HEI.A', 'GOOG', 'GOOGL', 'FOX', 'FOXA')
      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, ticker
Run this yourself

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.