Social media scraping APIWatches with webhooks
Any public profile, post or ad.
One request, one schema.Most APIs tell you what a number is.
This one tells you when it changed.
Creators, posts, comments, transcripts and ads, returned as one unified schema. A failed or empty request costs nothing.Watch a creator, a hashtag, or an ad account and take a webhook when something moves.
1,000 credits, once · no card · or try a free tool
Using an agent? Add the MCP server
curl -G ${API}/v1/tiktok/video \
-H "x-api-key: ${KEY}" \
-d url=7318842019283746306{
"platform": "tiktok",
"id": "7318842019283746306",
"type": "video",
"authorHandle": "zachking",
"viewCount": 12480221,
"likeCount": 1842003,
"commentCount": 9241,
"shareCount": 44018,
"publishedAt": "2026-08-14T09:12:44.000Z"
}- 15:02:09TT@clip.9c14views
- 14:57:09IG@voguefollowers
- 14:52:09YT@fireshipviews
- 14:47:09TT@clip.7f2aviewssent
- 14:42:09FBad:Ridgeactive adssent
- 14:37:09YT@veritasiumsubs
- 14:32:09IG@nasaposts
- 14:27:09TT@zachkingfollowers
- 14:22:09YT@mkbhdviewssent
- 251 endpoints · 43 platforms
- failures cost 0
- empty results cost 0
- cache hits cost 0
Every platform
251 endpoints, 7 record types.
Ordered by what is answering right now, not by catalogue size. Each tile links to that platform's endpoints in the API reference.
Social
- Facebook22ad · post · event
- TikTok28live · song · video
- YouTube17video · search · channel
- Deezer11album · track · artist
- GitHub10user · activity · followers
- Instagram19post · search · profile
- Mixcloud8tag · search · upload
- Reddit9post · user · search
- Spotify7album · track · artist
- PeerTube7video · search · channel
- Dailymotion5video · search · channel
- Odysee5video · search · channel
- Substack5post · posts · profile
- LinkedIn8ad · post · company
- Threads5post · search · profile
- Apple Music4album · track · artist
- BitChute4video · search · channel
- Mastodon4post · profile · userPosts
- Pinterest4pin · board · search
- Twitch4clip · profile · userVideos
- X / Twitter6tweet · profile · community
- Bluesky3post · profile · userPosts
- SoundCloud3track · artist · artistTracks
- Telegram3post · channel · channelPosts
- Rumble5video · search · comments
- Kwai3post · profile · userPosts
- Snapchat3profile · spotlight · spotlightComments
- Truth Social3post · profile · userPosts
- Kick1clip
Commerce, search and property
What is verifiedFor agents
Use it from Claude, Cursor or any agent
Add the MCP server and your agent can pull profiles, videos, transcripts and ads itself, with each tool's credit cost in front of it before it calls.
claude mcp add --transport http truescrape https://api.truescrape.com/mcp \
--header "x-api-key: YOUR_API_KEY" --scope userLoad only some platforms
Every platform loads by default. A smaller set keeps your agent’s context lean.
1,000 credits, once, no card. Paste it where the config says YOUR_API_KEY. Once you have a key, Agent integrations can fill it in for you.
Then ask
“Summarise the last 10 videos on @mkbhd's channel”
youtube_channelVideos · 1 credit, then youtube_transcript · 1 credit per video
“Find recent YouTube reviews of the Framework Laptop and list what reviewers complain about”
youtube_search · 1 credit, then youtube_transcript · 1 credit per video
“Compare @veritasium and @3blue1brown: subscribers, and what each uploaded most recently”
youtube_channel · 1 credit per channel, then youtube_channelVideos · 1 credit per channel
Building your own agent? Every operation and its price is at /openapi.json and /llms.txt. The CLI and the agent skill are on the agents page.
The billing contract
Eight promises, each with a test that fails if we break it
These are not positioning lines. They are numbered clauses in the specification, and the execution pipeline enforces them in a fixed order: validate, preflight, cache, charge, run, settle.
| Ref | Promise | What that means in practice |
|---|---|---|
| P1 | You are never charged for a failed request. | Upstream blocks, timeouts, rate limits, not-founds, schema drift, and our own internal errors all refund in full before the error reaches you. |
| P2 | You are never charged for an empty result. | A profile with no posts, a video with no captions, a search with no hits: you still get a 200, and creditsCharged reads 0. |
| P3 | Cache hits cost 0 credits. | Pass cache_max_age=7d to say how stale you will tolerate. A hit never invokes a scraper and never bills. |
| P4 | An invalid API key is an auth error, not a billing error. | A wrong key returns 401. A 402 always means the key is valid and the balance is not. The two are never confused. |
| P5 | Every endpoint's price is machine-readable. | x-credit-cost sits on every operation in openapi.json, so an agent can compute spend from the spec alone. |
| P6 | A balance can never go negative. | Charges are a conditional database update. Run a thousand concurrent requests against a balance of one and exactly one succeeds. |
| P7 | Per-tenant cache isolation is standard. | Not an enterprise upsell. Turn it on and your team reads and writes only its own scope, permanently. |
| P8 | Hard daily spend caps. | Set a ceiling in credits per UTC day. Requests past it fail with 429 before any charge is taken, not after. |
One schema
7 objects. Every platform.
Everyone else in this category returns whatever shape the platform happened to give them, so every customer writes an adapter per platform. There are 7 record types here (Creator, Post, Transcript, Comment, Ad, Product, PropertyListing), and a platform maps onto one of them or it does not ship. Read the two payloads below: different platforms, identical field names, identical types. The untouched upstream response is always available under raw.
GET /v1/tiktok/video
{
"platform": "tiktok",
"id": "7318842019283746306",
"type": "video",
"authorHandle": "zachking",
"viewCount": 12480221,
"likeCount": 1842003,
"commentCount": 9241,
"shareCount": 44018,
"publishedAt": "2026-08-14T09:12:44.000Z"
}GET /v1/youtube/video
{
"platform": "youtube",
"id": "8XkPqR2nLvE",
"type": "short",
"authorHandle": "mrbeast",
"viewCount": 12480221,
"likeCount": 1842003,
"commentCount": 9241,
"shareCount": null,
"publishedAt": "2026-08-14T09:12:44.000Z"
}Null is not zero. A platform that does not expose share counts returns null. A post with no shares returns 0. Conflating those two silently corrupts every average built on top of them.
Nothing is lost. Pass include_raw=true and the original payload comes back beside the normalised one, byte for byte.
Write the integration once. Adding a platform to your product stops being an adapter and starts being a string in a query parameter.
Async by default
No thirty-second ceiling to design around
Every scrape is a job. The synchronous endpoints are a convenience wrapper that waits for a fast one, never the other way round. A full-channel transcript pull just runs until it is finished.
curl -X POST ${API}/v1/subscriptions \
-H "x-api-key: ${KEY}" \
-H "content-type: application/json" \
-d '{
"endpoint": "youtube.channelVideos",
"params": { "handle": "@mrbeast" },
"webhook_url": "https://you.example/hooks/social"
}'We poll on your behalf and call your webhook when the data actually moves. Watch the endpoint whose result changes for the thing you care about: a video list changes when they upload, a profile changes when they rename. Signed deliveries and retries. A delivery that exhausts its retries is logged, not queued for later, so treat your endpoint being up as part of the contract.
curl -X POST ${API}/v1/jobs/batch \
-H "x-api-key: ${KEY}" \
-H "content-type: application/json" \
-d '{
"endpoint": "youtube.transcript",
"targets": ["8XkPqR2nLvE", "dQw4w9WgXcQ", "... up to 500"]
}'
# 202 Accepted, no 30-second ceiling. Poll or take the webhookFailed and empty targets are refunded automatically as the batch runs, so a job that half-fails bills for exactly the half that worked.
Free tools
Use the API without signing up for anything
Every tool below runs against the same endpoints you would call in production, with the same schema. No account, no email, no watermark on the output.
YouTube transcript extractor
Paste a video URL, get plain text, timestamped text, or an SRT file.
runs on /v1/youtube/transcript
YouTube channel viewer
Look up subscribers, total views, links, and recent uploads for any channel.
runs on /v1/youtube/channel
YouTube video analyzer
Views, likes, engagement rate, hashtags, and metadata for any video or Short.
runs on /v1/youtube/video
YouTube comment analyzer
Read a video’s first comments: most liked, most replied-to, questions, common words.
runs on /v1/youtube/video/comments
Bulk YouTube transcript extractor
Paste a channel or a list of URLs and download every transcript at once.
runs on /v1/youtube/transcript
TikTok profile viewer
Look up followers, likes, bio and verification for any public TikTok profile.
runs on /v1/tiktok/profile
TikTok engagement rate calculator
Average and median engagement rate over recent videos, with the formula shown.
runs on /v1/tiktok/user-videos
TikTok transcript extractor
Paste a TikTok video link, get its captions as text, timestamps, or SRT.
runs on /v1/tiktok/transcript
TikTok username checker
See whether a public TikTok profile exists for a handle.
runs on /v1/tiktok/profile
Instagram profile viewer
Look up followers, posts, bio and verification for any public Instagram profile.
runs on /v1/instagram/profile
Instagram highlight viewer
List and play the highlight reels pinned to any public Instagram profile.
runs on /v1/instagram/user-highlights
LinkedIn profile viewer
See the public name, headline, followers and links of any LinkedIn profile.
runs on /v1/linkedin/profile
Snapchat profile viewer
Look up the public name, avatar and subscriber count of any Snapchat profile.
runs on /v1/snapchat/profile
Threads profile viewer
Look up the public bio, followers and links of any Threads profile.
runs on /v1/threads/profile
Bluesky profile viewer
Look up the bio, followers, following and post count of any Bluesky profile.
runs on /v1/bluesky/profile
Instagram reel downloader
Paste a reel or video link, preview it, and save the file.
runs on /v1/instagram/post
Facebook video downloader
Paste a Facebook reel or video link, preview it, and save the file.
runs on /v1/facebook/post
X (Twitter) video downloader
Paste the link of an X post with a video, preview it, and save the file.
runs on /v1/twitter/tweet
Questions
What people ask first
- Do you charge for failed requests?
- No. A failed request costs nothing, whatever the cause: an upstream block, a timeout, a rate limit, a not-found, or a bug on our side. An empty result costs nothing either, because the target genuinely having no data is an answer. Cache hits are free.
- Is there a subscription?
- No. Credits are bought once and never expire, and the free grant is a one-time 1,000 credits with no card required. Every endpoint is available on every plan, including the free one — there is no feature gating by tier.
- Do you scrape private or logged-in data?
- No. TrueScrape reads public, logged-out data only. No authenticated scraping, no cookies, no logged-in sessions, and public Pages rather than personal profiles. If a request would require signing in, we do not serve it.
- How do I find out when a creator posts?
- Create a watch on a target and point a webhook at your endpoint. TrueScrape checks it on your schedule, compares the content rather than the raw payload, and calls your webhook only when something actually changed. Each check is billed like a normal request, so a failed or empty check is refunded.
- What happens if a job takes longer than a request timeout?
- Submit it as an async job instead. Jobs have no timeout ceiling, batches take up to 500 targets in one call, and you collect the result when it is ready. Nothing needs to complete inside a single HTTP request.
- What does the data look like across different platforms?
- One schema. A creator, a post, a comment and a transcript have the same shape whether they came from YouTube, TikTok, Instagram or anywhere else, and the untouched upstream payload is still there in the raw field if you need it.
Stop polling. Start subscribing.
Start with a free tool to see the data quality, then take a key and point a webhook at it. There is nothing to cancel and nothing expires.