> ## Documentation Index
> Fetch the complete documentation index at: https://fruitstand.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Query Earnings Call Transcripts in Snowflake SQL

> Query earnings call transcripts in Snowflake SQL: list a company's calls, read one in order, split prepared remarks from Q&A and find the analysts who asked.

*By [Fruit Stand Team](https://fruitstand.dev/about.md) · November 3, 2026 · Guides*

To query earnings call transcripts in SQL, store them one paragraph per row
with the company, fiscal quarter, speaker and paragraph number, then filter
and sort on those columns. In Fruit Stand's Earnings Call Transcripts listing
on Snowflake, Apple's July 30, 2026 call comes back as 108 rows from 12
speakers, ready to read in order or split into prepared remarks and Q\&A.

This post is about working with transcripts once they're in Snowflake. If
you don't have them yet, [Where to Get Earnings Call Transcripts in
Bulk](https://fruitstand.dev/blog/earnings-call-transcripts-bulk.md) compares the sources, from free
datasets and APIs to Snowflake Marketplace listings.

Below are the queries to list a company's calls, read one in order, split the
prepared remarks from the Q\&A, and find which analysts asked questions. They
use Apple, but work for any ticker.

## List a company's calls

```sql theme={null}
select fiscal_year, fiscal_quarter, report_date,
       count(*) as paragraphs,
       count(distinct speaker) as speakers
from earning_call_transcripts_flat_vw
where symbol = 'AAPL'
group by 1, 2, 3
order by report_date desc;
```

For Apple this returns every call since fiscal Q4 2005, reported in October
2005\. The three most recent, as of November 4, 2026:

| Fiscal year | Quarter | Call date | Paragraphs | Speakers |
| - | - | - | -: | -: |
| 2026 | 4 | Nov 2, 2026 | 122 | 15 |
| 2026 | 3 | Jul 30, 2026 | 108 | 12 |
| 2026 | 2 | Apr 30, 2026 | 52 | 13 |

Fiscal quarters follow the company's own calendar. Apple's fiscal year ends
in September, so its "Q3 2026" call covered April to June. Use `report_date`
when you need calendar time. The examples below use the July call.

## Read one call in order

```sql theme={null}
select paragraph_number, speaker, content
from earning_call_transcripts_flat_vw
where symbol = 'AAPL'
  and fiscal_year = 2026
  and fiscal_quarter = 3
order by paragraph_number;
```

`speaker` holds the person's name, such as the CEO, the CFO, the investor
relations host, the operator and each analyst. To rebuild the full text as
one document, aggregate the paragraphs in order:

```sql theme={null}
select listagg(speaker || ': ' || content, '\n\n')
         within group (order by paragraph_number) as transcript
from earning_call_transcripts_flat_vw
where symbol = 'AAPL' and fiscal_year = 2026 and fiscal_quarter = 3;
```

## Split prepared remarks from the Q\&A

Calls open with prepared remarks from management, then the operator opens
the line for questions. The first paragraph spoken by `Operator` marks the
switch:

```sql theme={null}
with call as (
    select *
    from earning_call_transcripts_flat_vw
    where symbol = 'AAPL' and fiscal_year = 2026 and fiscal_quarter = 3
),
qa as (
    select min(paragraph_number) as qa_start
    from call
    where speaker = 'Operator'
)
select
    iff(c.paragraph_number < q.qa_start, 'Prepared remarks', 'Q&A') as section,
    count(*) as paragraphs,
    sum(length(c.content)) as characters,
    count(distinct c.speaker) as speakers
from call c
cross join qa q
group by 1
order by 1;
```

For Apple's July 2026 call:

| Section | Paragraphs | Characters | Speakers |
| - | -: | -: | -: |
| Prepared remarks | 32 | 24,488 | 3 |
| Q\&A | 76 | 23,908 | 12 |

The prepared remarks came from three people (the investor relations host,
the CEO and the CFO). The Q\&A was about as long, with far more voices. This
split works for most calls: 95% of calls since January 2025 in the listing
have an `Operator` paragraph. For the rest, look for the host's handoff,
such as a paragraph mentioning "questions".

## Find which analysts asked questions

Each analyst speaks right after the operator introduces them, so the
speakers who follow an `Operator` paragraph are the analysts:

```sql theme={null}
with ordered as (
    select paragraph_number, speaker,
           lag(speaker) over (order by paragraph_number) as previous_speaker
    from earning_call_transcripts_flat_vw
    where symbol = 'AAPL' and fiscal_year = 2026 and fiscal_quarter = 3
)
select distinct speaker
from ordered
where previous_speaker = 'Operator'
  and speaker <> 'Operator'
order by speaker;
```

On Apple's July 2026 call, that returns the seven analysts who asked
questions. Run it across a company's last eight calls to see which analysts
cover it most closely.

## The free option in Snowflake

Snowflake's free public data share (Snowflake Public Data, Free) also has
earnings call transcripts, in `company_event_transcript_attributes`. Each row
is a whole event, with the transcript as JSON. Its `speaker_mapping` gives
each speaker's name, role and company, so analysts come labeled with their
firm. To get the same paragraph-per-row shape as above, flatten it:

```sql theme={null}
select p.index as paragraph_number,
       s.value:speaker_data:name::string as speaker,
       s.value:speaker_data:role::string as role,
       s.value:speaker_data:company::string as company,
       p.value:text::string as content
from snowflake_public_data_free.public_data_free.company_event_transcript_attributes t,
     lateral flatten(t.transcript:paragraphs) p,
     lateral flatten(t.transcript:speaker_mapping) s
where t.primary_ticker = 'AAPL'
  and t.event_type = 'Earnings Call'
  and t.transcript_type = 'SPEAKERS_ANNOTATED'
  and t.fiscal_year = '2026' and t.fiscal_period = 'Q3'
  and s.value:speaker = p.value:speaker
qualify row_number() over (partition by p.index order by t.updated_at desc) = 1
order by p.index;
```

For Apple's July call it returns the same 108 paragraphs from 12 speakers as
the queries above. Checked on November 4, 2026:

* **It lags.** The latest event was August 5, 2026, so Apple's November 2
  call isn't there yet.
* **Duplicates.** Each call appears as a `RAW` and a `SPEAKERS_ANNOTATED`
  transcript, and sometimes more than once, so pick one type and the latest
  row, as the `qualify` does.
* **Roles included.** Speaker roles and firms are the one thing the free data
  gives you that our listing doesn't.

For how it compares with other sources on coverage and price, see
[Where to Get Earnings Call Transcripts in Bulk](https://fruitstand.dev/blog/earnings-call-transcripts-bulk.md).

## Things to know

* **Speaker names, not roles.** `speaker` is the person's name. To label
  roles, map names to titles for the company's executives, or use the
  operator pattern above to tell analysts from management.
* **Fiscal vs. calendar quarters** differ by company, as above. Compare
  companies by `report_date`, not `fiscal_quarter`.
* **Upcoming calls.** A call can appear shortly before or after its date as
  new transcripts are added weekly. Filter on `report_date <= current_date()`
  for completed calls only.

## F.A.Q.

> [accordion] How far back do earnings call transcripts go?
>
> The listing has transcripts since 2005 for 4,500+ companies. Apple's start in October 2005; coverage for smaller companies often starts later.

> [accordion] Can I search across all companies' calls?
>
> Yes. Drop the ticker filter and search `content` with `ilike`, or use Snowflake Cortex for semantic search. Filter by `report_date` to limit the time range.

> [accordion] How quickly are new calls added?
>
> The listing refreshes weekly, adding new and updated transcripts.

> [accordion] Can I use the transcripts to train a model?
>
> Yes, with Fruit Stand's Earnings Call Transcripts listing you can use the transcripts to train models.

To query any company's calls in SQL, start a free 30-day trial of the
[Earnings Call Transcripts listing on the Snowflake Marketplace](https://app.snowflake.com/marketplace/listing/GZTYZ40XYU5).
The schema is in the [dataset docs](https://fruitstand.dev/datasets/earnings-call-transcripts.md). For
other places to get transcripts, see
[Where to Get Earnings Call Transcripts in Bulk](https://fruitstand.dev/blog/earnings-call-transcripts-bulk.md).
Questions? Reach out at [contact@fruitstand.dev](mailto:contact@fruitstand.dev).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.