Social media data API for developers
Profiles, posts, comments, followers and ads from LinkedIn, Instagram, TikTok, Reddit, YouTube and more. Ready for your app or your AI agent.
- $1 in free credits
- No card, no subscription
- No rate limit on paid usage
- Failed calls are free
- X
- TikTok
- YouTube
- Bluesky
- Snapchat
- Google Maps
- Apollo
curl -X POST https://api.socialrouter.io/v1/extract/tiktok/profile.info \
-H "Authorization: Bearer sr_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.tiktok.com/@tiktok"}'- platforms
- 12platforms
- endpoints
- 61endpoints
- per record, from
- $0.0017per record, from
In your code in two minutes
REST, TypeScript SDK or MCP. Same catalogue behind all three.
Your agent calls it. No key to paste.
Pick your client:
Run this command, then sign in when your client asks:
claude mcp add --transport http socialrouter https://mcp.socialrouter.io/mcp --scope userOne POST. Any language.
Call any service with a single POST:
curl -X POST https://api.socialrouter.io/v1/extract/linkedin/profile.info -H "Authorization: Bearer sr_live_your_key_here" -H "Content-Type: application/json" -d '{"url": "https://www.linkedin.com/in/satyanadella"}'TypeScript, typed per service.
Install the TypeScript SDK:
npm install @socialrouter/sdkAlso: OpenAPI spec · llms.txt · CLI · Claude Code skills
Ship the feature, not the scraper
Lead generation
Pull the people who engaged with a competitor's post, then enrich each profile with title and company.
Social listening
Search posts and subreddits for brand and keyword mentions, on a schedule, straight into your own store.
Analytics dashboards
Track profile and post metrics across platforms with one response shape, so the chart code is written once.
Competitor tracking
Watch a company's posts, reviews and listings and diff them between runs.
AI agents
Give Claude, Codex or Gemini a social data tool over MCP. The agent calls it; no key to paste.
Automation
Call it from n8n, Make or a cron job. One authenticated POST, JSON back.
Why not just scrape it yourself?
Building it takes weeks. Keeping it working takes longer.
| Capability | SocialRouter | Build it yourself | Single provider | Actor marketplace |
|---|---|---|---|---|
| One request shape across platforms | ||||
| One response shape across platforms | ||||
| Automatic failover, where several providers serve a service | ||||
| Pay per record, no subscription | ||||
| MCP server for AI agents | ||||
| Provider API changes absorbed for you |
Every endpoint you need, one call each
POST /v1/extract/{platform}/{service} with a URL or a query in the body. Same request, same response envelope, on every platform.
- POST
/v1/extract/linkedin/profile.posts$0.0077 / record - POST
/v1/extract/linkedin/post.likes$0.0069 / record - POST
/v1/extract/linkedin/profile.info$0.0017 / record - POST
/v1/extract/linkedin/post.search$0.0028 / record - POST
/v1/extract/linkedin/post.comments$0.0028 / record - POST
/v1/extract/linkedin/company.info$0.0017 / record - POST
/v1/extract/linkedin/job.info$0.0017 / record - POST
/v1/extract/linkedin/job.search$0.0017 / record - POST
/v1/extract/linkedin/post.info$0.0017 / record - POST
/v1/extract/linkedin/profile.search$0.0017 / record
Prices are per record returned. Browse every service & price
Production-ready from the first call
The boring parts of a data integration, handled: one shape, clear errors, failover and fair billing.
One response shape
The same envelope on every platform and every provider: id, status, data, served_by, credits_used. You write your parsing once.
Errors you can act on
A wrong field or URL returns a 400 that names the offending input and the format it expected. Unknown services come back with a did-you-mean.
Failover built in
Where several providers serve a service, a failing one hands the same request to the next inside the same call. No retry loop on your side.
Pin or bring your own key
Let the router choose, pin an offer with the provider field, or register your own provider key and be billed by them directly.
Billed per record returned
A failed attempt costs nothing, including failed attempts inside a call that later succeeded elsewhere.
OpenAPI and llms.txt
A generated OpenAPI 3.1 spec and an llms.txt, so your client generator or your coding agent reads the live catalogue.
3 data providers behind the API. You sign none of them.
Browse all services & pricingApify23 services
- Bright Data40 services
- Apollo6 services
FAQ
The questions worth answering before you write any code.
Which platforms and endpoints are supported?
LinkedIn, Instagram, X, Reddit, Facebook, TikTok, YouTube, Pinterest, Bluesky, Snapchat and Google Maps. Each service has its own endpoint, POST /v1/extract/{platform}/{service}. The live list, with inputs and prices, is on the services page and at GET /v1/services.
Is the API synchronous?
Yes. The response is already completed or failed when the call returns. A call returns up to 250 records; asynchronous jobs for larger pulls are not available yet.
How do I authenticate?
Send your API key as a bearer token in the Authorization header. Keys start with sr_live_ and are created from the dashboard. MCP clients sign in through OAuth and never see a key.
What happens when a provider fails mid-request?
The request moves to the next compatible provider inside the same call — you do not retry, and nothing changes on your side. If every provider in the chain fails, you get an error back.
Am I charged when an extraction fails?
No. You are billed per record actually returned, so a failed attempt costs nothing — including the failed attempts inside a request that later succeeded on another provider.
Can I choose which provider runs my request?
Yes. By default SocialRouter picks one and queues the rest as fallbacks. You can pin a specific provider in the request, with the others still behind it, or register your own provider key and be invoiced by them directly.
Are there rate limits?
Free accounts are capped at 2 requests per minute. Pay-as-you-go usage is not rate limited.
Do you keep the data I extract?
Your inputs and the records a provider returns are stored to serve and cache the request. That is the only thing we do with them, and our licence to hold them ends when they are deleted from our cache and logs — see the privacy policy.
Is there a subscription or a minimum?
No. There is no monthly fee, no minimum and no commitment — you pay for the records you extract and you can stop whenever you want.
Your first call is one curl away
61 endpoints across 12 platforms.
curl -X POST https://api.socialrouter.io/v1/extract/linkedin/profile.info \
-H "Authorization: Bearer $SOCIALROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.linkedin.com/in/satyanadella"}'$1 in free credits. No card, no subscription.