Supadata JS SDK

The official TypeScript/JavaScript SDK for Supadata.
Get your free API key at supadata.ai and start scraping data in minutes.
Installation
npm install @supadata/js
Usage
Initialization
import {
Crawl,
CrawlJob,
JobResult,
Map,
Metadata,
Scrape,
Supadata,
Transcript,
TranscriptOrJobId,
YoutubeChannel,
YoutubePlaylist,
YoutubeVideo,
} from '@supadata/js';
const supadata = new Supadata({
apiKey: 'YOUR_API_KEY',
});
Metadata
const metadata = await supadata.metadata({
url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
});
console.log(metadata);
Transcripts
const transcriptResult = await supadata.transcript({
url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
lang: 'en',
text: true,
mode: 'auto',
});
if ('jobId' in transcriptResult) {
console.log(`Started transcript job: ${transcriptResult.jobId}`);
const jobResult = await supadata.transcript.getJobStatus(
transcriptResult.jobId
);
if (jobResult.status === 'completed') {
console.log('Transcript:', jobResult.result);
} else if (jobResult.status === 'failed') {
console.error('Transcript failed:', jobResult.error);
} else {
console.log('Job status:', jobResult.status);
}
} else {
console.log('Transcript:', transcriptResult);
}
YouTube
const translated: Transcript = await supadata.youtube.translate({
videoId: 'dQw4w9WgXcQ',
lang: 'es',
});
const channel: YoutubeChannel = await supadata.youtube.channel({
id: 'https://youtube.com/@RickAstleyVEVO',
});
const channelVideos: VideoIds = await supadata.youtube.channel.videos({
id: 'https://youtube.com/@RickAstleyVEVO',
type: 'all',
limit: 10,
});
const playlist: YoutubePlaylist = await supadata.youtube.playlist({
id: 'PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI',
});
const playlistVideos: VideoIds = await supadata.youtube.playlist.videos({
id: 'https://www.youtube.com/playlist?list=PLlaN88a7y2_plecYoJxvRFTLHVbIVAOoc',
limit: 10,
});
const transcriptBatch = await supadata.youtube.transcript.batch({
videoIds: ['dQw4w9WgXcQ', 'xvFZjo5PgG0'],
lang: 'en',
});
console.log(`Started transcript batch job: ${transcriptBatch.jobId}`);
const videoBatch = await supadata.youtube.video.batch({
videoIds: ['dQw4w9WgXcQ', 'xvFZjo5PgG0', 'L_jWHffIx5E'],
});
console.log(`Started video batch job: ${videoBatch.jobId}`);
const batchResults = await supadata.youtube.batch.getBatchResults(
transcriptBatch.jobId
);
if (batchResults.status === 'completed') {
console.log('Batch job completed:', batchResults.results);
console.log('Stats:', batchResults.stats);
} else {
console.log('Batch job status:', batchResults.status);
}
const searchResults = await supadata.youtube.search({
query: 'never gonna give you up',
type: 'video',
uploadDate: 'all',
duration: 'all',
sortBy: 'relevance',
features: ['hd'],
limit: 20,
nextPageToken: '...',
});
const channelSearch = await supadata.youtube.search({
query: 'fireship',
type: 'channel',
limit: 5,
});
const playlistSearch = await supadata.youtube.search({
query: 'javascript tutorials',
type: 'playlist',
limit: 10,
});
Web
const webContent: Scrape = await supadata.web.scrape('https://supadata.ai');
const siteMap: Map = await supadata.web.map('https://supadata.ai');
const crawl: JobId = await supadata.web.crawl({
url: 'https://supadata.ai',
limit: 10,
});
const crawlResults: CrawlJob = await supadata.web.getCrawlResults(crawl.jobId);
Error Handling
The SDK throws SupadataError for API-related errors. You can catch and handle these errors as follows:
import { SupadataError } from '@supadata/js';
try {
const transcript = await supadata.youtube.transcript({
videoId: 'INVALID_ID',
});
} catch (e) {
if (e instanceof SupadataError) {
console.error(e.error);
console.error(e.message);
console.error(e.details);
console.error(e.documentationUrl);
}
}
Example
See the example directory for a simple example of how to use the SDK.
API Reference
See the Documentation for more details on all possible parameters and options.
License
MIT