One API for 65 platforms and 572 endpoints: social, commerce, retail, jobs, finance, web scraping.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer <SOCIALCRAWL_API_KEY>. Optional — discovery tools work without it. Get a free key at socialcrawl.dev (100 credits, no credit card required).
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Free checks: balance (with this session's spend), transactions (itemised ledger; the receipts for one request_id), status (platform health; read it before retrying a 502/503) and freshness (whether this server's bundled catalogue is behind the API).
balance (default, with this session's spend), transactions (ledger), status (platform health), freshness (catalogue vs live API).
transactions: page size.
transactions: next_cursor from the last page.
transactions: receipts for one request.
Free checks: balance (with this session's spend), transactions (itemised ledger; the receipts for one request_id), status (platform health; read it before retrying a 502/503) and freshness (whether this server's bundled catalogue is behind the API).
| Argument | Type | Description |
|---|---|---|
| view | string | balance (default, with this session's spend), transactions (ledger), status (platform health), freshness (catalogue vs live API). |
| limit | integer | transactions: page size. |
| cursor | string | transactions: next_cursor from the last page. |
| request_id | string | transactions: receipts for one request. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"view": {
"enum": [
"balance",
"transactions",
"status",
"freshness"
],
"type": "string",
"description": "balance (default, with this session's spend), transactions (ledger), status (platform health), freshness (catalogue vs live API)."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "transactions: page size."
},
"cursor": {
"type": "string",
"description": "transactions: next_cursor from the last page."
},
"request_id": {
"type": "string",
"description": "transactions: receipts for one request."
}
},
"additionalProperties": false
}Walk a paged endpoint (id, platform+resource or path) to `items` unique rows, the last page or max_credits: cursors supplied, duplicates dropped, stops on a 402, refused free when one page exceeds max_credits. Small results come back whole. result_id (+offset, limit, format) reads a stored result, free. Spends credits.
| Argument | Type | Description |
|---|---|---|
| id | string | platform/resource of a paged endpoint, e.g. 'tiktok/post/comments'. |
| items | integer | Stop once this many unique rows are collected. |
| limit | integer | result_id: rows (200). |
| fields | string | Row paths as socialcrawl_endpoint lists them, e.g. 'comment.text,comment.engagement.likes'. |
| format | string | jsonl (default), json or csv. |
| offset | integer | result_id: first row. |
| params | object | Params for every page, as in socialcrawl_request. No cursor. |
| confirm | boolean | true only once the user approved spending above the threshold (default 100 credits). |
| result_id | string | Read a stored result instead of walking. Free. |
Read before calling: one endpoint's purpose, params, where the rows are and up to 25 response fields, cost rule, paging, latency, timeout, next endpoints and a sample link. id (or platform+resource, path), a platform slug (its endpoints) or a guide topic. Free.
| Argument | Type | Description |
|---|---|---|
| id* | string | 'platform/resource' for its contract; a platform slug for its endpoint table; or a guide topic (errors, pricing, pagination, judgments, hydration, overview). |
| page | integer | Page of a long guide (default 1). |
| method | string | Only for an id served by several methods. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "'platform/resource' for its contract; a platform slug for its endpoint table; or a guide topic (errors, pricing, pagination, judgments, hydration, overview)."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page of a long guide (default 1)."
},
"method": {
"enum": [
"GET",
"POST",
"PATCH",
"DELETE"
],
"type": "string",
"description": "Only for an id served by several methods."
}
},
"additionalProperties": false
}Exact credits before you spend: one call (id, platform+resource or path, plus the params you will send; calls for a job total; items for a walk) or a plan of several calls. Uses the API's estimator when available, else the bundled pricing. A platform slug gives its price table; no id gives the pricing overview. Free.
| Argument | Type | Description |
|---|---|---|
| id | string | 'platform/resource'; a platform slug for its price table; none for the overview. |
| body | object | POST body, for batch endpoints. |
| plan | array | Several calls to total, instead of id. |
| calls | integer | Number of such calls (an array is read as plan). |
| items | integer | Rows wanted (prices a walk). |
| method | string | |
| params | object | The exact params you will send. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"type": "string",
"description": "'platform/resource'; a platform slug for its price table; none for the overview."
},
"body": {
"type": "object",
"description": "POST body, for batch endpoints.",
"additionalProperties": {}
},
"plan": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 3
},
"body": {
"type": "object",
"additionalProperties": {}
},
"method": {
"$ref": "#/properties/method"
},
"params": {
"type": "object",
"additionalProperties": {}
},
"repeat": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 50,
"description": "Several calls to total, instead of id."
},
"calls": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "Number of such calls (an array is read as plan)."
},
"items": {
"type": "integer",
"minimum": 1,
"description": "Rows wanted (prices a walk)."
},
"method": {
"enum": [
"GET",
"POST",
"PATCH",
"DELETE"
],
"type": "string"
},
"params": {
"type": "object",
"description": "The exact params you will send.",
"additionalProperties": {
"anyOf": [
{
"type": [
"string",
"number",
"boolean"
]
},
{
"type": "array",
"items": {
"$ref": "#/properties/params/additionalProperties/anyOf/0"
}
}
]
}
}
},
"additionalProperties": false
}Start here: a task in plain words -> the best endpoints (3 by default) of 646, each with the params the task supplies (URLs and @handles resolved), the params still missing, the credit cost and the exact call. With no task it lists platforms, or one platform's endpoints. Free; no key needed.
| Argument | Type | Description |
|---|---|---|
| task | string | The job in plain words; URLs and @handles in it are resolved and filled. Omit to list platforms. |
| limit | integer | Endpoints to return (default 3). |
| platform | string | Only this platform's endpoints (slug, e.g. 'tiktok'); alone, lists them. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"task": {
"type": "string",
"maxLength": 500,
"description": "The job in plain words; URLs and @handles in it are resolved and filled. Omit to list platforms."
},
"limit": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Endpoints to return (default 3)."
},
"platform": {
"type": "string",
"description": "Only this platform's endpoints (slug, e.g. 'tiktok'); alone, lists them."
}
},
"additionalProperties": false
}Stateful work by area + action: monitors (scheduled recipes, webhooks, alerts), cohorts (mention search over your own panel of accounts), web (scrape, search, crawl and agent jobs, change monitors, browser sessions) and jobs (Prism background jobs). A wrong field is refused free with the rules. Managing is free; scrapes, jobs, queries and monitor runs bill credits. dry_run: true validates and quotes a create/update and never creates it. rows_new alerts need track (id=monitors).
| Argument | Type | Description |
|---|---|---|
| id | string | Monitor, cohort, query, web job/monitor/session or prism job id. |
| area* | string | What to manage. |
| input | object | The action's fields, e.g. { recipe, cadence }, { url }, { keywords }, or the job body (max_credits, confirm allowed). Monitor alert rules, incl. rows_new: socialcrawl_endpoint id=monitors. |
| action* | string | monitors: create|list|get|runs|timeseries|pause|resume|delete. cohorts: create|add_members|estimate_cost|query|query_status|query_results|query_cancel|get|delete. web: scrape|search|map|extract|crawl|batch_scrape|agent|crawl_preview|job_get|job_list|job_cancel|job_errors|monitor_*|session_*. jobs: submit|list|get. |
| dry_run | boolean | |
| idempotencyKey | string | For web crawl/batch, cohort writes and job submit. |
Call one endpoint (platform+resource, or id, or path). Validated locally first (a bad call is free), quoted, refused above max_credits and confirmed above the threshold. A large page is cut at row boundaries; socialcrawl_collect result_id reads the rest. Spends credits; needs SOCIALCRAWL_API_KEY.
| Argument | Type | Description |
|---|---|---|
| body | object | JSON body for POST batch endpoints, e.g. { ids: [...] }. |
| fields | string | Row paths exactly as socialcrawl_endpoint lists them, e.g. 'post.id,post.content.text,post.engagement.*' (or an array). Cuts tokens. |
| format | string | json (default), csv (canonical columns) or summary. |
| method | string | Only for a resource served by several methods (prism/jobs). Inferred: a body selects POST. |
| params | object | Query params, e.g. { handle: 'x', limit: 10 }. Arrays join with commas (label). Sent as strings. |
| confirm | boolean | true only once the user approved spending above the threshold (default 100 credits). |
| platform* | string | Platform slug, e.g. 'tiktok'. An unknown slug gets a did-you-mean. |
| resource* | string |
| max_credits | integer | Spend cap: refused free when the quoted hold exceeds it (collect: the walk's budget). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"type": "string",
"minLength": 3,
"description": "platform/resource of a paged endpoint, e.g. 'tiktok/post/comments'."
},
"items": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Stop once this many unique rows are collected."
},
"limit": {
"type": "integer",
"description": "result_id: rows (200)."
},
"fields": {
"type": "string",
"description": "Row paths as socialcrawl_endpoint lists them, e.g. 'comment.text,comment.engagement.likes'."
},
"format": {
"enum": [
"jsonl",
"json",
"csv"
],
"type": "string",
"description": "jsonl (default), json or csv."
},
"offset": {
"type": "integer",
"description": "result_id: first row."
},
"params": {
"type": "object",
"description": "Params for every page, as in socialcrawl_request. No cursor.",
"additionalProperties": {
"anyOf": [
{
"type": [
"string",
"number",
"boolean"
]
},
{
"type": "array",
"items": {
"$ref": "#/properties/params/additionalProperties/anyOf/0"
}
}
]
}
},
"confirm": {
"type": "boolean",
"description": "true only once the user approved spending above the threshold (default 100 credits)."
},
"result_id": {
"type": "string",
"description": "Read a stored result instead of walking. Free."
},
"max_credits": {
"type": "integer",
"minimum": 1,
"description": "Spend cap: refused free when the quoted hold exceeds it (collect: the walk's budget)."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"area",
"action"
],
"properties": {
"id": {
"type": "string",
"description": "Monitor, cohort, query, web job/monitor/session or prism job id."
},
"area": {
"enum": [
"monitors",
"cohorts",
"web",
"jobs"
],
"type": "string",
"description": "What to manage."
},
"input": {
"type": "object",
"description": "The action's fields, e.g. { recipe, cadence }, { url }, { keywords }, or the job body (max_credits, confirm allowed). Monitor alert rules, incl. rows_new: socialcrawl_endpoint id=monitors.",
"additionalProperties": {}
},
"action": {
"type": "string",
"minLength": 1,
"description": "monitors: create|list|get|runs|timeseries|pause|resume|delete. cohorts: create|add_members|estimate_cost|query|query_status|query_results|query_cancel|get|delete. web: scrape|search|map|extract|crawl|batch_scrape|agent|crawl_preview|job_get|job_list|job_cancel|job_errors|monitor_*|session_*. jobs: submit|list|get."
},
"dry_run": {
"type": "boolean"
},
"idempotencyKey": {
"type": "string",
"minLength": 16,
"description": "For web crawl/batch, cohort writes and job submit."
}
},
"additionalProperties": false
}| Resource path, e.g. 'post/comments'; path params as 'jobs/{job_id}' + params.job_id, or the concrete path. |
| max_items | integer | Show at most this many rows; the full page stays behind the result link. |
| max_credits | integer | Spend cap: refused free when the quoted hold exceeds it (collect: the walk's budget). |
| idempotencyKey | string | Makes a retry safe: a replay returns the original response for 0 credits (24h). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"platform",
"resource"
],
"properties": {
"body": {
"type": "object",
"description": "JSON body for POST batch endpoints, e.g. { ids: [...] }.",
"additionalProperties": {}
},
"fields": {
"type": "string",
"description": "Row paths exactly as socialcrawl_endpoint lists them, e.g. 'post.id,post.content.text,post.engagement.*' (or an array). Cuts tokens."
},
"format": {
"enum": [
"json",
"csv",
"summary"
],
"type": "string",
"description": "json (default), csv (canonical columns) or summary."
},
"method": {
"enum": [
"GET",
"POST",
"PATCH",
"DELETE"
],
"type": "string",
"description": "Only for a resource served by several methods (prism/jobs). Inferred: a body selects POST."
},
"params": {
"type": "object",
"description": "Query params, e.g. { handle: 'x', limit: 10 }. Arrays join with commas (label). Sent as strings.",
"additionalProperties": {
"anyOf": [
{
"type": [
"string",
"number",
"boolean"
]
},
{
"type": "array",
"items": {
"$ref": "#/properties/params/additionalProperties/anyOf/0"
}
}
]
}
},
"confirm": {
"type": "boolean",
"description": "true only once the user approved spending above the threshold (default 100 credits)."
},
"platform": {
"type": "string",
"minLength": 1,
"description": "Platform slug, e.g. 'tiktok'. An unknown slug gets a did-you-mean."
},
"resource": {
"type": "string",
"minLength": 1,
"description": "Resource path, e.g. 'post/comments'; path params as 'jobs/{job_id}' + params.job_id, or the concrete path."
},
"max_items": {
"type": "integer",
"minimum": 1,
"description": "Show at most this many rows; the full page stays behind the result link."
},
"max_credits": {
"type": "integer",
"minimum": 1,
"description": "Spend cap: refused free when the quoted hold exceeds it (collect: the walk's budget)."
},
"idempotencyKey": {
"type": "string",
"minLength": 16,
"description": "Makes a retry safe: a replay returns the original response for 0 credits (24h)."
}
},
"additionalProperties": false
}