# Earnings Call Transcript Scraper (`junipr/earnings-call-scraper`) Actor

Scrape earnings call transcripts for any publicly traded company. Get structured Q\&A, management remarks, and financial commentary from earnings calls.

- **URL**: https://apify.com/junipr/earnings-call-scraper.md
- **Developed by:** [junipr](https://apify.com/junipr) (community)
- **Categories:** News, Lead generation
- **Stats:** 53 total users, 7 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 1.00 out of 5 stars

## Pricing

$10.40 / 1,000 transcript scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Earnings Call Transcripts Scraper

### Introduction

The Earnings Call Transcripts Scraper extracts and structures earnings call transcripts for publicly traded companies. Point it at one or more ticker symbols and it returns clean, machine-readable JSON with the full transcript, speaker-by-speaker breakdowns, Q&A exchanges, extracted financial metrics (revenue, EPS, margins, guidance), and forward-looking statements automatically flagged and categorised.

Transcripts are sourced from Motley Fool (the most scraper-friendly public source), SEC EDGAR 8-K filings (the gold-standard public record), and Seeking Alpha preview pages. The actor tries your preferred source first and falls back automatically so you always get maximum coverage.

**Primary use cases:**
- Financial modelling teams pulling earnings data into spreadsheets or data pipelines
- AI and LLM teams building training datasets from real financial language
- Hedge funds and asset managers monitoring portfolio companies quarterly
- Financial journalists researching earnings trends and executive commentary
- Academic researchers studying corporate communications and guidance accuracy
- Individual investors doing fundamental analysis on watchlist companies
- Fintech startups building financial data products without expensive subscriptions

**Key differentiators:** multi-source with automatic fallback, structured JSON parsing (not just raw text), per-speaker segmentation, Q&A section identification, regex-based financial metric extraction, forward-looking statement categorisation, and pay-per-use pricing — no subscription required.

---

### Why Use This Actor

Financial transcript data has historically been locked behind expensive subscriptions. This actor gives you programmatic access to public transcript content at a fraction of the cost.

| Feature | This Actor | Seeking Alpha Premium | AlphaSense | Financial Modeling Prep API |
|---------|-----------|----------------------|------------|----------------------------|
| Price | $10.40 / 1,000 transcripts | $239/year subscription | $2,000+/year | $29/month subscription |
| Per-transcript pricing | Yes (PPE) | No | No | No |
| Structured JSON output | Yes | HTML/PDF | Proprietary | JSON (limited) |
| Speaker identification | Yes | Yes | Yes | Basic |
| Q&A section parsing | Yes | Manual | Yes | No |
| Financial metrics extraction | Yes | No | Yes (proprietary NLP) | No |
| Forward-looking statements | Yes | No | Yes | No |
| SEC EDGAR fallback | Yes | No | No | No |
| Zero-config first run | Yes | Account required | Enterprise sales | API key required |
| Apify ecosystem integration | Full | None | None | None |

**Cost comparison:** Analysing one company across four quarters costs $0.04 with this actor. Doing the same for a 50-stock portfolio across one year (200 transcripts) costs $2.08 — versus hundreds of dollars per month on any subscription platform.

---

### Proxy Requirements

This actor requires **residential proxy** to access Motley Fool and SEC EDGAR, which block datacenter IP addresses.

- **Apify paid plans**: Residential proxy is included. The actor uses it by default.
- **Apify free plan**: Free plan does not include residential proxy. You can provide your own residential proxy URL in the proxy configuration, or the actor will attempt to run without proxy (results may be empty or blocked).
- **Without residential proxy**: The actor will still run but may return zero results due to IP blocking by Motley Fool and SEC EDGAR.

### How to Use

#### Zero-config (just add tickers)

```json
{
  "tickers": ["AAPL", "MSFT"]
}
````

This retrieves the most recent transcripts for Apple and Microsoft from all configured sources with full parsing enabled.

#### Multi-company portfolio monitoring

```json
{
  "tickers": ["AAPL", "MSFT", "GOOGL", "AMZN", "META", "NVDA"],
  "maxTranscriptsPerCompany": 1,
  "quarters": ["Q1 2025"]
}
```

#### Historical research across multiple years

```json
{
  "tickers": ["AAPL"],
  "maxTranscriptsPerCompany": 12,
  "fiscalYears": [2023, 2024, 2025],
  "extractMetrics": true,
  "extractForwardLooking": true
}
```

#### Metadata-only lightweight run (smaller output)

```json
{
  "tickers": ["TSLA", "NFLX", "UBER"],
  "includeFullText": false,
  "maxTranscriptsPerCompany": 4
}
```

#### Via the Apify API (Node.js example)

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('junipr/earnings-call-scraper').call({
  tickers: ['AAPL', 'MSFT'],
  maxTranscriptsPerCompany: 4,
  extractMetrics: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

***

### Input Configuration

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `tickers` | array | `["AAPL", "MSFT"]` | Stock ticker symbols. Max 50. |
| `companyNames` | array | `[]` | Company names as fallback when ticker lookup fails. |
| `cikNumbers` | array | `[]` | SEC CIK numbers for direct EDGAR lookup. |
| `quarters` | array | `[]` | Filter by fiscal quarter, e.g. `["Q1 2025"]`. Empty = all. |
| `fiscalYears` | array | `[]` | Filter by fiscal year, e.g. `[2024, 2025]`. Empty = all. |
| `maxTranscriptsPerCompany` | integer | `4` | Max transcripts per company (1–20). |
| `dateFrom` | string | `null` | ISO 8601 lower date bound, e.g. `"2024-01-01"`. |
| `dateTo` | string | `null` | ISO 8601 upper date bound, e.g. `"2025-12-31"`. |
| `sources` | array | `["motley_fool", "sec_edgar"]` | Sources to try. Options: `motley_fool`, `seeking_alpha`, `sec_edgar`. |
| `preferredSource` | string | `"motley_fool"` | Primary source tried first. Falls back if unavailable. |
| `extractMetrics` | boolean | `true` | Extract financial metrics (revenue, EPS, margins, guidance). |
| `extractForwardLooking` | boolean | `true` | Flag forward-looking statements. |
| `includeFullText` | boolean | `true` | Include the complete transcript text. Set to `false` for smaller output. |
| `splitBySpeaker` | boolean | `true` | Parse transcript into per-speaker segments. |
| `proxyConfiguration` | object | `{ "useApifyProxy": false }` | Proxy settings. Residential proxy recommended for Seeking Alpha. |

***

### Output Format

Each dataset item represents one earnings call transcript. Key fields:

```json
{
  "ticker": "AAPL",
  "companyName": "Apple Inc.",
  "cik": "0000320193",
  "quarter": "Q1 2025",
  "fiscalYear": 2025,
  "callDate": "2025-01-30",
  "callType": "earnings",
  "source": "motley_fool",
  "sourceUrl": "https://www.fool.com/earnings-call-transcripts/...",
  "transcript": {
    "fullText": "...",
    "wordCount": 8421,
    "sections": {
      "operatorIntro": "Good afternoon and welcome to the Apple Q1 2025 earnings call...",
      "preparedRemarks": [
        {
          "speaker": "Tim Cook",
          "title": "CEO",
          "affiliation": "Apple",
          "text": "Thank you. We're pleased to report another record quarter..."
        }
      ],
      "questionAndAnswer": [
        {
          "questionSpeaker": "Erik Woodring",
          "questionAffiliation": "Morgan Stanley",
          "questionText": "Can you talk about iPhone demand trends in China?",
          "answerSpeaker": "Tim Cook",
          "answerTitle": "CEO",
          "answerText": "We remain very excited about the opportunity in China..."
        }
      ],
      "closingRemarks": "Thank you all for joining. That concludes today's call."
    }
  },
  "participants": [
    { "name": "Tim Cook", "title": "CEO", "affiliation": "Apple", "role": "executive" },
    { "name": "Luca Maestri", "title": "CFO", "affiliation": "Apple", "role": "executive" },
    { "name": "Erik Woodring", "title": "Analyst", "affiliation": "Morgan Stanley", "role": "analyst" }
  ],
  "metrics": [
    { "name": "revenue", "value": "revenue of $124.3 billion", "period": "Q1 2025", "context": "...total revenue of $124.3 billion for the quarter..." }
  ],
  "forwardLookingStatements": [
    { "statement": "We expect revenue to grow in the mid-single digits in Q2.", "speaker": "Luca Maestri", "category": "guidance" }
  ],
  "scrapedAt": "2025-03-11T12:00:00Z",
  "errors": []
}
```

A run summary is written to the Key-Value Store under `OUTPUT` with totals, per-company breakdowns, and source attribution.

***

### Tips and Advanced Usage

**Building financial models:** The `metrics` array gives you structured value strings (e.g. `"$124.3 billion"`) with surrounding context. Feed these into a normalisation script or LLM prompt to extract clean numbers for spreadsheet ingestion.

**Sentiment analysis from Q\&A tone:** The `questionAndAnswer` array lets you compare analyst question sentiment versus executive answer length and tone across consecutive quarters — a signal used in quantitative research.

**Forward-looking statement accuracy tracking:** Collect `forwardLookingStatements` from one quarter and compare against actual reported figures the following quarter to score guidance accuracy over time.

**LLM summarisation pipeline:** Pass `transcript.fullText` directly to GPT-4 or Claude with a prompt like "Summarise this earnings call in 5 bullet points with the key guidance." The word count field helps you chunk long transcripts for context window limits.

**Event study research:** Combine `callDate` with stock price APIs (e.g. Yahoo Finance) to study abnormal returns around earnings call dates. The structured data makes it easy to tag calls with positive vs negative guidance and correlate with price movements.

**Combining with other actors:** Pair this actor with a news scraper to correlate earnings call themes with subsequent news coverage, or with a financial data API for quantitative signal generation.

***

### Pricing

This actor uses Pay-Per-Event (PPE) pricing: **$10.40 per 1,000 transcripts scraped**.

Pricing includes all platform compute costs — no hidden fees.

A billable event (`transcript-scraped`) is charged only when a transcript is successfully located, text extracted, and the result pushed to the dataset. Failed lookups, blocked sources, and companies with no transcripts available are **not billed**.

| Scenario | Transcripts | Estimated Cost |
|----------|-------------|---------------|
| Single company, latest quarter | 1 | $0.01 |
| Portfolio (10 stocks), latest quarter | 10 | $0.10 |
| Annual review (1 company, 4 quarters) | 4 | $0.04 |
| Sector analysis (50 companies, 1 quarter) | 50 | $0.52 |
| Historical research (10 companies, 3 years) | 120 | $1.25 |
| Quant fund quarterly refresh (500 companies) | 2,000 | $20.80 |

Compare to Seeking Alpha Premium at $239/year or AlphaSense starting at $2,000/year — pay only for what you actually use.

***

### FAQ

#### What sources does it scrape transcripts from?

The actor scrapes Motley Fool (most scraper-friendly, good coverage), SEC EDGAR 8-K filings (official public filings, highest legal certainty, US public companies only), and Seeking Alpha public preview pages (best coverage but anti-bot protection means residential proxy is recommended). You can configure which sources to use and in what order via `sources` and `preferredSource`.

#### Can I get transcripts for international companies?

SEC EDGAR only covers US-listed companies. Motley Fool and Seeking Alpha cover major international companies listed on US exchanges (e.g. ASML, NVO, TSM). For companies not in the built-in ticker map, provide the ticker and the actor will attempt to find transcripts using the ticker as a search term.

#### How far back do transcripts go?

Coverage varies by source. Motley Fool has transcripts going back to approximately 2016. SEC EDGAR EDGAR filings go back decades. In practice, the most reliable coverage starts around 2018–2019 across all sources.

#### Does it work for private companies?

No. Earnings call transcripts are a public company phenomenon — only companies required to report quarterly results (US exchange-listed companies) hold public earnings calls. Private companies do not have public transcripts.

#### What if a transcript is behind a paywall?

Seeking Alpha limits full transcript access to subscribers. When partial content is returned, the actor sets an `PARTIAL_TRANSCRIPT` error in the `errors` array and automatically falls back to Motley Fool or SEC EDGAR for a more complete version. You will never be billed for a failed or partial-only extraction.

#### Can I use this to train AI models?

Yes. The structured JSON output (speaker turns, Q\&A exchanges, section boundaries) is well-suited for fine-tuning LLMs on financial language, training earnings call summarisation models, or building financial NLP datasets. SEC EDGAR content is explicitly public domain US government data with no copyright restrictions.

#### How accurate is the speaker identification?

Speaker identification uses pattern matching against common transcript formatting conventions (e.g. `"Tim Cook — CEO"` or `"Tim Cook (Apple)"`). Accuracy is high for well-formatted Motley Fool transcripts and moderate for SEC EDGAR filings which have more variable formatting. When a speaker cannot be identified, the segment is labeled `"Unidentified"` rather than silently dropped.

#### Does it extract specific financial numbers?

Yes. The `metrics` array uses regex patterns to find mentions of revenue, EPS, gross margin, operating income, net income, and guidance figures. Each match includes the raw value string (e.g. `"$89.5 billion"`) and surrounding context for verification. These are best-effort extractions — always verify critical figures against official SEC filings before making financial decisions.

# Actor input Schema

## `tickers` (type: `array`):

Stock ticker symbols to search for (e.g. \["AAPL", "MSFT", "GOOGL"]). Max 50. Leave empty to use defaults.

## `companyNames` (type: `array`):

Company names to search for as fallback when ticker lookup fails (e.g. \["Apple Inc.", "Microsoft"]).

## `cikNumbers` (type: `array`):

SEC CIK numbers for direct EDGAR lookup (e.g. \["0000320193"] for Apple). Use for precise company identification.

## `quarters` (type: `array`):

Filter transcripts by fiscal quarter (e.g. \["Q1 2025", "Q4 2024"]). Leave empty for all available quarters.

## `fiscalYears` (type: `array`):

Filter transcripts by fiscal year (e.g. \[2024, 2025]). Leave empty for all available years.

## `maxTranscriptsPerCompany` (type: `integer`):

Maximum number of transcripts to retrieve per company. Min: 1, Max: 20.

## `dateFrom` (type: `string`):

Only include transcripts from this date onward (ISO 8601, e.g. "2024-01-01").

## `dateTo` (type: `string`):

Only include transcripts up to this date (ISO 8601, e.g. "2025-12-31").

## `sources` (type: `array`):

Sources to scrape transcripts from. Options: motley\_fool, seeking\_alpha, sec\_edgar.

## `preferredSource` (type: `string`):

Primary source to try first. Falls back to other sources if unavailable.

## `extractMetrics` (type: `boolean`):

Extract mentioned financial metrics (revenue, EPS, gross margin, operating income, guidance).

## `extractForwardLooking` (type: `boolean`):

Flag forward-looking statements (guidance, outlook, expectations, targets).

## `includeFullText` (type: `boolean`):

Include the complete transcript text in output. Set to false for metadata-only runs (smaller output).

## `splitBySpeaker` (type: `boolean`):

Parse transcript into per-speaker segments with Q\&A identification.

## `proxyConfiguration` (type: `object`):

Residential proxy is required — Motley Fool and SEC EDGAR block datacenter IPs. Apify paid plans include residential proxy. Free-plan users: provide your own residential proxy URL.

## Actor input object example

```json
{
  "tickers": [
    "AAPL",
    "MSFT"
  ],
  "companyNames": [],
  "cikNumbers": [],
  "quarters": [],
  "fiscalYears": [],
  "maxTranscriptsPerCompany": 4,
  "dateFrom": "",
  "dateTo": "",
  "sources": [
    "motley_fool",
    "sec_edgar"
  ],
  "preferredSource": "motley_fool",
  "extractMetrics": true,
  "extractForwardLooking": true,
  "includeFullText": true,
  "splitBySpeaker": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Scraped earnings call transcripts as structured JSON objects — one item per transcript.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("junipr/earnings-call-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("junipr/earnings-call-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call junipr/earnings-call-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=junipr/earnings-call-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Earnings Call Transcript Scraper",
        "description": "Scrape earnings call transcripts for any publicly traded company. Get structured Q&A, management remarks, and financial commentary from earnings calls.",
        "version": "1.0",
        "x-build-id": "BlfxtgPhKxj9GqUuA"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/junipr~earnings-call-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-junipr-earnings-call-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/junipr~earnings-call-scraper/runs": {
            "post": {
                "operationId": "runs-sync-junipr-earnings-call-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/junipr~earnings-call-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-junipr-earnings-call-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "tickers": {
                        "title": "Ticker Symbols",
                        "type": "array",
                        "description": "Stock ticker symbols to search for (e.g. [\"AAPL\", \"MSFT\", \"GOOGL\"]). Max 50. Leave empty to use defaults.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "AAPL",
                            "MSFT"
                        ]
                    },
                    "companyNames": {
                        "title": "Company Names",
                        "type": "array",
                        "description": "Company names to search for as fallback when ticker lookup fails (e.g. [\"Apple Inc.\", \"Microsoft\"]).",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "cikNumbers": {
                        "title": "SEC CIK Numbers",
                        "type": "array",
                        "description": "SEC CIK numbers for direct EDGAR lookup (e.g. [\"0000320193\"] for Apple). Use for precise company identification.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "quarters": {
                        "title": "Quarter Filter",
                        "type": "array",
                        "description": "Filter transcripts by fiscal quarter (e.g. [\"Q1 2025\", \"Q4 2024\"]). Leave empty for all available quarters.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "fiscalYears": {
                        "title": "Fiscal Year Filter",
                        "type": "array",
                        "description": "Filter transcripts by fiscal year (e.g. [2024, 2025]). Leave empty for all available years.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "maxTranscriptsPerCompany": {
                        "title": "Max Transcripts Per Company",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of transcripts to retrieve per company. Min: 1, Max: 20.",
                        "default": 4
                    },
                    "dateFrom": {
                        "title": "Date From",
                        "type": "string",
                        "description": "Only include transcripts from this date onward (ISO 8601, e.g. \"2024-01-01\").",
                        "default": ""
                    },
                    "dateTo": {
                        "title": "Date To",
                        "type": "string",
                        "description": "Only include transcripts up to this date (ISO 8601, e.g. \"2025-12-31\").",
                        "default": ""
                    },
                    "sources": {
                        "title": "Sources",
                        "type": "array",
                        "description": "Sources to scrape transcripts from. Options: motley_fool, seeking_alpha, sec_edgar.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "motley_fool",
                            "sec_edgar"
                        ]
                    },
                    "preferredSource": {
                        "title": "Preferred Source",
                        "enum": [
                            "motley_fool",
                            "seeking_alpha",
                            "sec_edgar"
                        ],
                        "type": "string",
                        "description": "Primary source to try first. Falls back to other sources if unavailable.",
                        "default": "motley_fool"
                    },
                    "extractMetrics": {
                        "title": "Extract Financial Metrics",
                        "type": "boolean",
                        "description": "Extract mentioned financial metrics (revenue, EPS, gross margin, operating income, guidance).",
                        "default": true
                    },
                    "extractForwardLooking": {
                        "title": "Extract Forward-Looking Statements",
                        "type": "boolean",
                        "description": "Flag forward-looking statements (guidance, outlook, expectations, targets).",
                        "default": true
                    },
                    "includeFullText": {
                        "title": "Include Full Transcript Text",
                        "type": "boolean",
                        "description": "Include the complete transcript text in output. Set to false for metadata-only runs (smaller output).",
                        "default": true
                    },
                    "splitBySpeaker": {
                        "title": "Split By Speaker",
                        "type": "boolean",
                        "description": "Parse transcript into per-speaker segments with Q&A identification.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Residential proxy is required — Motley Fool and SEC EDGAR block datacenter IPs. Apify paid plans include residential proxy. Free-plan users: provide your own residential proxy URL.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
