SocialTap API
Public social media data through one API key and one JSON schema.
SocialTap returns public social media data (transcripts today; profiles, posts and comments next) from every major platform through one API key, one credit balance and one response schema per resource.
Get started Open the playground Pricing
- 4 endpoints
- 4 platforms
- 1 schema
- From $0.50 per 1,000 credits
What you can fetch
Every cell is a live endpoint. Each column returns the same JSON schema on every platform.
Coming soon
Schema previews for resources without an endpoint yet. They may change before the first endpoint ships.
How it works
One API key
Send it in the
Authenticationx-api-keyheader on every request, for every platform.One schema per resource
Transcripts look the same whichever platform they come from. Learn a schema once.
Transcript schemaPay per success
Prepaid credits, one balance. Failed requests are free. Cache hits are free.
Credits
A request in seconds
Returns the timed transcript of a public YouTube video, short or live replay: the creator's manual captions when they exist, otherwise YouTube's auto-generated track, in the language you ask for. Videos without any caption track are transcribed from their audio with speech-to-text. Accepts every YouTube URL form (watch, youtu.be, shorts, live, embed, music.) or a bare 11-character video ID.
curl -G 'https://staging.socialtap.dev/v1/youtube/transcript' \
--data-urlencode 'url=https://www.youtube.com/watch?v=dQw4w9WgXcQ' \
-H "x-api-key: $SOCIALTAP_API_KEY"const params = new URLSearchParams({
url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
});
const res = await fetch(`https://staging.socialtap.dev/v1/youtube/transcript?${params}`, {
headers: { "x-api-key": process.env.SOCIALTAP_API_KEY },
});
const { data, meta } = await res.json();import os
import requests
res = requests.get(
"https://staging.socialtap.dev/v1/youtube/transcript",
params={"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"},
headers={"x-api-key": os.environ["SOCIALTAP_API_KEY"]},
)
body = res.json()
data, meta = body["data"], body["meta"]{
"data": {
"available_languages": [
"en",
"de-DE",
"ja"
],
"duration_ms": 213000,
"id": "dQw4w9WgXcQ",
"is_auto_generated": false,
"language": "en",
"platform": "youtube",
"segments": [
{
"end_ms": 3040,
"start_ms": 1360,
"text": "[♪♪♪]"
},
{
"end_ms": 21880,
"start_ms": 18640,
"text": "♪ We're no strangers to love ♪"
},
{
"end_ms": 26960,
"start_ms": 22640,
"text": "♪ You know the rules and so do I ♪"
}
],
"source": "captions",
"text": "[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules and so do I ♪ ♪ A full commitment's what I'm thinking of ♪ ♪ You wouldn't get this from any other guy ♪ ♪ I just wanna tell you how I'm feeling ♪ ♪ Gotta make you understand ♪ ♪ Never gonna give you up ♪ ♪ Never gonna let …",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
},
"meta": {
"request_id": "req_3f9c2a7d1e8b4c6a9f0e2d4b6a8c0e1f",
"platform": "youtube",
"source": "captions",
"is_cached": false,
"credits_charged": 1,
"latency_ms": 511,
"fetched_at": "2026-10-25T12:00:00Z"
}
}Long arrays and strings are shortened for display.
Measured, not promised
- Median latency (p50)
- 1,580 ms
- p95 latency
- 4,013 ms
- Success rate
- 94.5%
- Requests measured
- 220
Request-weighted averages across endpoints.
Staging measurements, not production. Measured on our staging environment, over the 7 days before 2026-10-25. How it is measured.
Simple, prepaid pricing
Requests start at 1 credit. Buy credits in packs; bigger packs cost less per credit.
- Failed requests are free: errors cost 0 credits.
- Cache hits are free: responses served from the cache cost 0 credits.
- Credits never expire.
- One credit balance for every endpoint and platform.
| Credits | Price | Per 1,000 credits |
|---|---|---|
| 25,000 | $20 | $0.80 |
| 100,000 | $70 | $0.70 |
| 500,000 | $300 | $0.60 |
| 2,000,000 | $1,000 | $0.50 |