Sourcelane

HTTP Request Runner

Web & SEO Tools

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, 12:10 AM

$0.003

per request

Up to 100 per call. Only pay for results returned; failed calls are refunded.

What people use it for

Trust & reliability

7d uptime trend
WindowUptimeSuccess ratep50p95Calls
24h————0
7d————0
30d————0

Calling contract

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://cool-puffin-608.convex.site/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

FieldTypeRequiredDescription
urlsarrayoptionalOne 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.
requestsarrayoptionalArray 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.
methodstringoptionalHTTP method used for every URL in simple mode, and for advanced requests that do not set their own method.
headersobjectoptionalShared 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.
bodystringoptionalShared 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.
useBrowserHeadersbooleanoptionalGenerate 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).
concurrencyintegeroptionalHow many requests run in parallel (1-50). Lower it if the target rate-limits you.
maxRetriesintegeroptionalExtra 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…).
retryOnStatusesarrayoptionalHTTP status codes that trigger a retry with a fresh proxy session. Network errors and timeouts are always retried.
timeoutSecsintegeroptionalMaximum time for a single attempt, including connection, redirects and body download.
responseFormatstringoptionalHow 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.
maxBodyCharsintegeroptionalTruncate 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.
includeHeadersbooleanoptionalStore the full response header object on each row.
followRedirectsbooleanoptionalFollow 3xx redirects (up to 10 hops) and report the final URL. Turn off to capture the redirect response itself.
maxItemsintegeroptionalOnly 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

FieldTypeDescription
indexintegerIndex
labelnullLabel
urlstringUrl
finalUrlstringFinal Url
methodstringMethod
statusCodeintegerStatus Code
statusTextstringStatus Text
okbooleanOk
contentTypenullContent Type
bodystring—
bodyLengthintegerBody Length
bodyTruncatedbooleanBody Truncated
bodyParseErrornull—
durationMsintegerDuration Ms
totalDurationMsinteger—
attemptsinteger—
redirectCountinteger—
proxyUsedstring—
errornull—
keyValueStoreUrlnull—
fetchedAtstring—
headersobject—

Use HTTP Request Runner from Claude, ChatGPT or Cursor

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.

  1. 1Copy your personal connector URL
  2. 2In Claude open Settings → Connectors → Add custom connector
  3. 3Paste the URL and click Add — done
Manual setup (config files, REST, Python) +

Claude Code

Adds the Sourcelane MCP server with your key as a header.

terminal
claude mcp add --transport http sourcelane https://cool-puffin-608.convex.site/mcp \
  --header "Authorization: Bearer sl_live_your_agent_key"

Claude Desktop (config file)

Alternative to the connector URL: add to claude_desktop_config.json, then restart Claude.

claude_desktop_config.json
{
  "mcpServers": {
    "sourcelane": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://cool-puffin-608.convex.site/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer sl_live_your_agent_key"
      }
    }
  }
}

Cursor & Windsurf

Add to ~/.cursor/mcp.json (or Windsurf's mcp_config.json).

mcp.json
{
  "mcpServers": {
    "sourcelane": {
      "url": "https://cool-puffin-608.convex.site/mcp",
      "headers": {
        "Authorization": "Bearer sl_live_your_agent_key"
      }
    }
  }
}

VS Code

Save as .vscode/mcp.json. VS Code prompts for your key once.

.vscode/mcp.json
{
  "servers": {
    "sourcelane": {
      "type": "http",
      "url": "https://cool-puffin-608.convex.site/mcp",
      "headers": {
        "Authorization": "Bearer ${input:sourcelane-key}"
      }
    }
  },
  "inputs": [
    {
      "type": "promptString",
      "id": "sourcelane-key",
      "description": "Sourcelane agent key",
      "password": true
    }
  ]
}

ChatGPT Custom GPT (Actions)

Create a GPT → Actions → Import from URL, then Authentication: API Key, Bearer.

OpenAPI schema URL
https://sourcelane-amber.vercel.app/openapi.json

REST

One POST. Pass maxResults to cap cost.

curl
curl -X POST https://cool-puffin-608.convex.site/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}'

Python, LangChain, CrewAI, OpenAI Agents SDK…

Wrap the REST call as a tool, or point an MCP client at the endpoint.

python
import requests

res = requests.post(
    "https://cool-puffin-608.convex.site/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"])

Reviews

—

0 reviews

5
0
4
0
3
0
2
0
1
0

Leave a review

Loading reviews…