SocialRouter aggregates multiple scraping providers behind a single API. Each provider has different strengths, pricing, and platform coverage.

How routing works

When you send a request to /v1/extract, SocialRouter:
  1. Detects the platform from the URL
  2. Finds all providers that support the requested platform + extraction type
  3. Selects the cheapest available provider (or your preferred one if specified)
  4. Calls the provider and normalizes the response
  5. If the provider fails, automatically falls back to the next available one

Choosing a provider

By default, SocialRouter picks the cheapest provider. You can override this with the provider parameter:
{
  "url": "https://linkedin.com/in/example",
  "type": "profile.info",
  "provider": "apify"
}

Model slug

Every (provider, platform, extraction type) combination has a unique slug of the form <provider>/<platform>/<type> — for example apify/linkedin/profile.info or brightdata/instagram/post.likes. You can find them on the providers page; each row has a copy button. The slug is the most direct way to pin a request: it fully specifies the routing target on its own, so you can pass it as model instead of the three discrete provider / platform / type fields.
{
  "url": "https://linkedin.com/in/example",
  "model": "apify/linkedin/profile.info"
}
The two forms are interchangeable. If you send both, the discrete fields take precedence. Like provider, sending a model pins the route and disables failover.

Current providers

Use GET /v1/providers to see live status and pricing. The catalogue is derived from the provider registry — when a new provider is added, it appears automatically.
Provider availability and pricing can change. Always check the providers endpoint for current information.

Failover

If the primary provider returns an error, SocialRouter transparently retries with the next available provider. The response includes which provider actually fulfilled the request in the provider field. You are only charged for the provider that succeeds.