
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
earningscall
Advanced tools
The EarningsCall JavaScript library provides convenient access to the EarningsCall API. It includes a pre-defined set of classes for API resources that initialize themselves dynamically from API responses.
The EarningsCall JavaScript library provides convenient access to the EarningsCall API from applications written in the JavaScript language (with TypeScript support). It includes a pre-defined set of classes for API resources that initialize themselves dynamically from API responses.
This library is designed for maximum efficiency and minimal dependencies:
fetch API for HTTP requestsThe lightweight implementation means faster install times, reduced security attack surface, and better reliability since there are no third-party dependencies to maintain.
Install the package with:
npm install earningscall
Start using it in your code:
ESM (ECMAScript Modules)
import { getCompany } from "earningscall";
CommonJS
const { getCompany } = require('earningscall');
To obtain a company’s transcript for a particular year and quarter, use the getBasicTranscript() method. This method returns the complete transcript as a single continuous text string, as well as the date of the conference call.
import { getCompany } from "earningscall";
const company = await getCompany({ symbol: "AAPL" }); // Get Company object by ticker symbol "AAPL"
const companyInfo = company.companyInfo;
console.log(`Company name: ${companyInfo.name} Sector: ${companyInfo.sector} Industry: ${companyInfo.industry}`);
const transcript = await company.getBasicTranscript({ year: 2021, quarter: 3 });
console.log(`${companyInfo.symbol} Q3 2021 Transcript: "${transcript?.text.slice(0, 100)}..."`);
Output
Company name: Apple Inc. Sector: Technology Industry: Consumer Electronics
AAPL Q3 2021 Transcript: "Good day, and welcome to the Apple Q3 FY 2021 Earnings Conference Call. Today's call is being recorded..."
To access every available transcript for a specific company, use the events() method. This approach provides a comprehensive list of the company’s conference call transcripts in one place.
import { getCompany } from "earningscall";
const company = await getCompany({ symbol: "AAPL" });
console.log(`Getting all transcripts for: ${company.companyInfo.name}...`);
const events = await company.events();
for (const event of events) {
const transcript = await company.getBasicTranscript({ event });
console.log(`${company.companyInfo.symbol} Q${event.quarter} ${event.year}`);
console.log(` * Transcript Text: "${transcript?.text.slice(0, 100)}..."`);
}
Output
Getting all transcripts for: Apple Inc...
* Q4 2023
Transcript Text: "Good day and welcome to the Apple Q4 Fiscal Year 2023 earnings conference call. Today's call is bein..."
* Q3 2023
Transcript Text: "Good day and welcome to the Apple Q3 Fiscal Year 2023 earnings conference call. Today's call is bein..."
* Q2 2023
Transcript Text: "At this time for opening remarks and introductions, I would like to turn the call over to Suhasini T..."
* Q1 2023
...
You can access earnings call transcripts segmented by speaker to gain a clearer understanding of who said what. The data is returned as an array of objects, where each object includes the speaker’s name, their professional title, and the text they provided. This structure makes it easy to identify the individual’s role and contributions during the call.
import { getCompany } from "earningscall";
const company = await getCompany({ symbol: "AAPL" });
const speakerGroups = await company.getSpeakerGroups({ year: 2024, quarter: 2 });
const firstSpeaker = speakerGroups?.speakers[0];
const secondSpeaker = speakerGroups?.speakers[1];
const thirdSpeaker = speakerGroups?.speakers[2];
console.log(`Speaker: ${firstSpeaker?.speakerInfo?.name}, ${firstSpeaker?.speakerInfo?.title}`);
console.log(`Text: ${firstSpeaker?.text?.slice(0, 100)}...`);
console.log(`Speaker: ${secondSpeaker?.speakerInfo?.name}, ${secondSpeaker?.speakerInfo?.title}`);
console.log(`Text: ${secondSpeaker?.text?.slice(0, 100)}...`);
console.log(`Speaker: ${thirdSpeaker?.speakerInfo?.name}, ${thirdSpeaker?.speakerInfo?.title}`);
console.log(`Text: ${thirdSpeaker?.text?.slice(0, 100)}...`);
Output
Speaker: Suhasini Chandramouli, Director of Investor Relations
Text: Good afternoon and welcome to the Apple Q2 fiscal year 2024 earnings conference call. My name is Suh...
Speaker: Tim Cook, CEO
Text: Thank you, Suhasini. Good afternoon, everyone, and thanks for joining the call. Today, Apple is repo...
Speaker: Luca Maestri, CFO
Text: Thank you, Tim, and good afternoon, everyone. Revenue for the March quarter was $90.8 billion, down ...
Word-level timestamps are precise markers that indicate the exact point in time when each word in a transcript is spoken during an audio recording.
Why Are Word-Level Timestamps Useful?
Here's how you can retrieve the word-level timestamps for a single quarter:
import { getCompany } from "earningscall";
const company = await getCompany({ symbol: "AAPL" });
const wordLevelTranscript = await company.getWordLevelTimestamps({ year: 2021, quarter: 3 });
const firstSpeaker = wordLevelTranscript?.speakers[0];
const wordsAndStartTimes = firstSpeaker?.words.map((word, index) => ({
word,
startTime: firstSpeaker.startTimes[index]
}));
console.log(`Speaker: ${firstSpeaker?.speaker}`);
console.log("Words with start times:", wordsAndStartTimes);
Output
Speaker: Suhasini Chandramouli, Director of Investor Relations
Words with start times: [
{ word: 'Good', startTime: 0.049 },
{ word: 'day,', startTime: 0.229 },
{ word: 'and', startTime: 0.489 },
{ word: 'welcome', startTime: 0.609 },
{ word: 'to', startTime: 0.929 },
...
]
Prepared remarks and Q&A sections are key parts of earnings call transcripts that provide valuable insights to investors and analysts.
Here's how you can retrieve the prepared remarks and Q&A for a single quarter.
import { getCompany } from "earningscall";
const company = await getCompany({ symbol: "AAPL" });
const transcript = await company.getQuestionAndAnswerTranscript({ year: 2021, quarter: 3 });
console.log(`${company} Q3 2021 Prepared Remarks: "${transcript?.preparedRemarks.slice(0, 100)}..."`);
console.log(`${company} Q3 2021 Q&A: "${transcript?.questionsAndAnswers.slice(0, 100)}..."`);
Output
Apple Inc. Q3 2021 Prepared Remarks: "Good day, and welcome to the Apple Q3 FY 2021 Earnings Conference Call. Today's call is being record..."
Apple Inc. Q3 2021 Q&A: "Our first question comes from Katie Huberty from Morgan Stanley. Please go ahead. Hello, Katie. Your..."
If you want to download the audio file for a single quarter, you can do so with the downloadAudioFile method.
import { getCompany } from "earningscall";
const company = await getCompany({ symbol: "AAPL" });
console.log(`Downloading audio file for ${company} Q3 2021...`);
const audioFile = await company.downloadAudioFile({ year: 2021, quarter: 3 });
console.log(`Audio file downloaded to: ${audioFile?.outputFilePath}`);
Output
Downloading audio file for Apple Inc. Q3 2021...
Audio file downloaded to: AAPL_2021_Q3.mp3
import { getAllCompanies } from "earningscall";
const companies = await getAllCompanies();
console.log(companies);
Output
[
Company {
companyInfo: {
exchange: 'NASDAQ',
symbol: 'AAPL',
name: 'Apple Inc.',
sector: 'Technology',
industry: 'Consumer Electronics'
},
name: 'Apple Inc.',
events_: undefined
},
Company {
companyInfo: {
exchange: 'NASDAQ',
symbol: 'MSFT',
name: 'Microsoft Corporation',
sector: 'Technology',
industry: 'Software - Infrastructure'
},
name: 'Microsoft Corporation',
events_: undefined
}
]
By default, this library grants you access to only two companies, Apple Inc. and Microsoft, Inc.
To gain access to 5,000+ companies please signup here to get your API key: https://earningscall.biz/api-pricing
Once you have access to your API key, you can set the API Key like this:
For access to the full library of 5,000+ companies, you must set an API key.
You can set the API key with the setApiKey functions.
import { setApiKey } from "earningscall";
setApiKey("YOUR-SECRET-API-KEY");
You can also set the API key in the EARNINGSCALL_API_KEY environment variable.
export EARNINGSCALL_API_KEY="YOUR-SECRET-API-KEY"
import { listSP500Companies } from "earningscall";
const companies = await listSP500Companies();
console.log(companies);
Output
[
{ symbol: 'AAPL', name: 'Apple Inc.' },
{ symbol: 'GOOGL', name: 'Alphabet Inc.' },
{ symbol: 'MSFT', name: 'Microsoft Corporation' },
...
]
FAQs
The EarningsCall JavaScript library provides convenient access to the EarningsCall API. It includes a pre-defined set of classes for API resources that initialize themselves dynamically from API responses.
The npm package earningscall receives a total of 73 weekly downloads. As such, earningscall popularity was classified as not popular.
We found that earningscall demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.