Operated by Sourcelane✓ verified
A bulk HTTP request runner that issues large numbers of HTTP methods (GET, POST, PUT, PATCH, DELETE, HEAD) with configurable concurrency, per-request headers and payloads, and proxy support (datacenter, residential, custom). It simulates browser-like TLS fingerprints and headers, performs automatic retries with IP/session rotation, follows redirects, and returns one record per request describing the HTTP outcome (status and status text, success flag for 2xx/3xx), response headers, response body as text/parsed JSON or base64 for binaries, indications of truncation or parse errors, timing metrics for attempts and retries, attempt and redirect counts, final URL, proxy type used, error messages for blocked/failed requests, and input mapping metadata to correlate results back to requests. The connector supports per-request customization (methods, headers, bodies), selectable response format, optional separate storage of full untruncated response bodies, and tuning of concurrency and retry behavior for high-volume bulk requests.
Verified Sep 28, 3:55 AM
$0.003
per request
Up to 100 per call. Only pay for results returned; failed calls are refunded.
| Window | Uptime | Success rate | p50 | p95 | Calls |
|---|---|---|---|---|---|
| 24h | — | — | — | — | 0 |
| 7d | — | — | — | — | 0 |
| 30d | — | — | — | — | 0 |
Call it through Sourcelane's gateway or MCP server. We run the connector, apply your agent's spend guardrails, and bill only the results returned.
Call it via Sourcelane
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"http-request-runner","params":{"urls":["https://httpbin.org/get","https://example.com","https://api.ipify.org?format=json"],"maxItems":5},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
urls | array | optional | One request per URL, all using the shared Method, Headers and Body below. Combine with Requests (advanced) if you need per-request settings. Only http:// and https:// URLs are accepted. |
requests | array | optional | Array of request objects: { "url": "https://…", "method": "POST", "headers": { … }, "body": "…" | { … }, "label": "my-tag" }. Every field except url is optional and falls back to the shared settings below. A JSON object body is stringified and sent as application/json. Merged with URLs; both lists are processed. |
method | string | optional | HTTP method used for every URL in simple mode, and for advanced requests that do not set their own method. |
headers | object | optional | Shared request headers as a JSON object, e.g. { "Authorization": "Bearer …", "Accept": "application/json" }. Per-request headers in Requests override these. When Browser-like headers is on, these are layered on top of the generated browser headers. |
body | string | optional | Shared request body sent with POST, PUT, PATCH and DELETE requests (ignored for GET and HEAD). Set a Content-Type header to describe it, e.g. application/json or application/x-www-form-urlencoded. |
useBrowserHeaders | boolean | optional | Generate a realistic Chrome/Firefox header set and TLS fingerprint for each request so anti-bot systems see a normal browser. Turn off to send only the headers you specify (plus a generic user agent). |
concurrency | integer | optional | How many requests run in parallel (1-50). Lower it if the target rate-limits you. |
maxRetries | integer | optional | Extra attempts after a network error, timeout, or a status code listed in Retry on statuses. Each retry uses a new proxy session and backs off (1s, 2s, 3s…). |
retryOnStatuses | array | optional | HTTP status codes that trigger a retry with a fresh proxy session. Network errors and timeouts are always retried. |
timeoutSecs | integer | optional | Maximum time for a single attempt, including connection, redirects and body download. |
responseFormat | string | optional | How the response body is stored in the results. JSON parses the body into an object (falls back to text with bodyParseError if it is not valid JSON). Base64 is for images, PDFs and other binary responses. |
maxBodyChars | integer | optional | Truncate the stored body to this many characters (bodyTruncated is set to true). 0 = no truncation (results items are still limited to ~9 MB). Use Save bodies to key-value store to keep the full response. |
includeHeaders | boolean | optional | Store the full response header object on each row. |
followRedirects | boolean | optional | Follow 3xx redirects (up to 10 hops) and report the final URL. Turn off to capture the redirect response itself. |
maxItems | integer | optional | Only process the first N requests (URLs first, then advanced requests). 0 = all. Hard cap of 10,000 requests per run. Capped at 100 per call. |
Each result contains
| Field | Type | Description |
|---|---|---|
index | integer | Index |
label | null | Label |
url | string | Url |
finalUrl | string | Final Url |
method | string | Method |
statusCode | integer | Status Code |
statusText | string | Status Text |
ok | boolean | Ok |
contentType | null | Content Type |
body | string | — |
bodyLength | integer | Body Length |
bodyTruncated | boolean | Body Truncated |
bodyParseError | null | — |
durationMs | integer | Duration Ms |
totalDurationMs | integer | — |
attempts | integer | — |
redirectCount | integer | — |
proxyUsed | string | — |
error | null | — |
keyValueStoreUrl | null | — |
fetchedAt | string | — |
headers | object | — |
Pick your tool and connect in under a minute. Then just ask — for example: “For these 50 domains, find contact emails and what e-commerce platform they run on.”
Connect Claude
Web, desktop and mobile. Paste one URL.
Adds the Sourcelane MCP server with your key as a header.
claude mcp add --transport http sourcelane https://api.usesourcelane.com/mcp \
--header "Authorization: Bearer sl_live_your_agent_key"Alternative to the connector URL: add to claude_desktop_config.json, then restart Claude.
{
"mcpServers": {
"sourcelane": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.usesourcelane.com/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer sl_live_your_agent_key"
}
}
}
}Add to ~/.cursor/mcp.json (or Windsurf's mcp_config.json).
{
"mcpServers": {
"sourcelane": {
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer sl_live_your_agent_key"
}
}
}
}Save as .vscode/mcp.json. VS Code prompts for your key once.
{
"servers": {
"sourcelane": {
"type": "http",
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer ${input:sourcelane-key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "sourcelane-key",
"description": "Sourcelane agent key",
"password": true
}
]
}Create a GPT → Actions → Import from URL, then Authentication: API Key, Bearer.
https://usesourcelane.com/openapi.jsonOne POST. Pass maxResults to cap cost.
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"http-request-runner","params":{"urls":["https://httpbin.org/get","https://example.com","https://api.ipify.org?format=json"],"maxItems":5},"maxResults":10}'Wrap the REST call as a tool, or point an MCP client at the endpoint.
import requests
res = requests.post(
"https://api.usesourcelane.com/v1/call",
headers={"Authorization": "Bearer sl_live_your_agent_key"},
json={
"listing": "http-request-runner",
"params": {"urls":["https://httpbin.org/get","https://example.com","https://api.ipify.org?format=json"],"maxItems":5},
"maxResults": 10,
},
timeout=300,
)
body = res.json()
print(body["receipt"]["chargedMicros"], "micro-USD for", body["receipt"]["results"], "results")
print(body["data"])—
0 reviews
Leave a review
Loading reviews…