Platform / Capabilities

Web scraping API for HTTP, browser, and structured results

Submit a URL, track the asynchronous job, and retrieve HTML, text, or typed data. RunHarvester keeps acquisition, extraction, and request diagnostics connected.

By · Updated

Submit a request from your backend

Keep credentials in a server-side secret store. Generate a unique idempotency key for a new logical request and retain it with the exact body. The following example submits work; it does not immediately return the finished page.

Request / responseExample
curl --request POST "https://api.runharvester.com/api/v1/data/requests" \
  --header "X-API-Key: YOUR_API_KEY" \
  --header "Idempotency-Key: YOUR_UNIQUE_REQUEST_KEY" \
  --header "Content-Type: application/json" \
  --data '{"url":"https://example.com/catalog","mode":"auto"}'

Poll the state, then retrieve the result

Save the returned id. Poll the status endpoint with backoff and jitter until the request completes or reaches a terminal failure. Pending, running, and solving_captcha are not completed states.

After completed, retrieve the result and validate its content. A successful HTTP response alone does not prove that a target returned the page or records you expected.

Request / responseExample
GET /api/v1/data/requests/{id}
GET /api/v1/data/requests/{id}/result

Choose acquisition and output independently

Select HTTP if the initial response holds the required data, switch to browser mode for JavaScript execution, or choose auto to let the system handle route selection. Residential modes indicate an egress requirement. Availability depends on account status and deployment details.

To produce typed output, include extraction.fields or reference an active recipe you own. Structured extraction is limited to individual requests; Data API batches process only raw scrape jobs. Browser Workflows serves as a separate API for versioned browser automation.

Handle failures without hiding them

RESULT_NOT_READY means the result was requested before completion. RESULT_EXPIRED means the retained result is no longer available. Inspect public error fields and trace events before deciding whether to retry.

Resubmit the interrupted request using its original idempotency key and payload. Each retry of a failed job generates a new request ID. For bounded retries, retrieve outcomes before expiration and apply the returned billing metadata for cost reconciliation.

Integrate in your existing runtime

Use the documented HTTP interface from your backend. The integration guides contain submission and polling examples; no frontend API key or invented SDK is required.

A few useful answers

Common questions

Does submitting a request return the finished result?

No. Keep the request ID, check its status, and get the result once finished. States like Pending, running, and solving_captcha mean it's not done yet. Fetching a result prematurely yields RESULT_NOT_READY; check for errors rather than assuming every response is scraped data.

Read the documentation
Can I submit structured extraction in a Data API batch?

Data API batches accept raw scrape jobs only. Submit structured extraction as individual requests. Browser Workflow batches belong to a separate API and should not be confused with Data API batches.

Read the documentation
How long can I retrieve a result?

Data retention is governed by your specific service and plan settings. Make sure to review the expiry details provided and fetch any necessary results prior to expiration. If a Data API result expires, it will return RESULT_EXPIRED. Ensure you export necessary data to your personal storage instead of relying on retained results as a permanent archive.

Read the documentation
How do I retry without creating duplicate work?

Generate an Idempotency-Key before submission and store it with the exact request body. Reuse it when retrying the same submission after a network interruption. A new logical request requires a new key. Retrying a failed request creates a new request ID; preserve the original for diagnosis.

Read the documentation
Where should I keep API keys?

Store API keys securely in a server-side secret manager and assign only the necessary scopes for the integration. Avoid placing credentials in public frontend code, documentation examples, or logs. Browser Workflow keys and scopes are scoped to their specific project and environment.

Read the documentation
What determines the cost of a request?

Request cost depends on the active route and caching behavior. Auto serves as a routing policy, not a fixed price. Rely on response billing metadata and the current pricing version as the definitive source; plan prices and allowances are sourced from the live catalog.

Read the documentation

Put it to work

Start with one real request.

Inspect the result. Refine your workflow. Choose a plan for your workload.