Drive any browser flow.
From one API call.
Click, type, wait, evaluate JavaScript, solve reCAPTCHA — all from a single request body. The same patterns that drive a real user, in clean JSON, without a line of Puppeteer.
# Click a "show more" button, wait for the network, then extract.
curl -X POST https://api.datasonar.dev/v1/scrape \
-H "Authorization: Bearer osk_..." \
-d '{
"url": "https://example.com/products",
"actions": [
{"type": "click", "selector": ".load-more"},
{"type": "wait", "ms": 2000},
{"type": "click", "selector": ".load-more"},
{"type": "wait", "ms": 2000}
],
"format": "markdown"
}'Action macros, not Puppeteer code
Describe what the browser should do in a JSON array — click, type, wait. No Puppeteer scripts to maintain, no headless Chrome to deploy. The same JSON works on every site.
JavaScript eval for anything else
When a page returns data your declarative actions can't shape, drop in a JavaScript expression. We execute it inside the rendered page and return the result. Anything you can pull with browser DevTools, you can pull with one API call.
Captcha detection in the same call
Set solve_captcha: true on any scrape. We detect reCAPTCHA v3 site keys automatically and solve them inline. The token comes back in the response, ready to attach to your follow-up request.
Stealth countermeasures built in
Every automation request runs with browser fingerprint randomization, headless-flag stripping, and the JavaScript checks bot defenses use — neutralized. The same protections that work on simple scrapes work on multi-step flows.
Recipes that ship today
Scrape pages behind a login
Type credentials, click submit, wait for the dashboard, then extract — all in one request body. The session lives only for the call, so there's no token storage to manage.
Walk an infinite-scroll feed
Loop click and wait actions to scroll through endless feeds. Each scroll triggers the next page of results; the final extraction captures everything loaded so far.
Submit a search and parse results
Type a query, click search, wait for the results to render, extract structured product data. Useful for monitoring competitor inventory or testing your own search relevance.
Extract data only a script knows how to find
Pages that store data in JavaScript variables, React state, or post-render DOM mutations — use js_eval to read it directly from the runtime instead of fighting the rendered HTML.
Solve reCAPTCHA v3 inline
Pages with reCAPTCHA v3 challenges block standard scrapers. With solve_captcha: true, we detect and solve the challenge in the same call, returning the verification token.
Multi-step checkout flow
Drive a complete user journey — add to cart, click next, fill shipping, click pay — and capture the final state. Useful for end-to-end testing and pricing intelligence.
Automation questions
What action types are supported? ▾
click (target any CSS selector), type (typing into form fields), and wait (fixed delays). Combined with js_eval for arbitrary in-page evaluation, this covers the vast majority of interactive flows.Can I combine actions with JavaScript eval? ▾
Are sessions persisted between requests? ▾
How long can a single automation call take? ▾
Does this work on JavaScript-heavy single page apps? ▾
wait_until parameter lets you specify exactly when to consider the page ready.How is captcha solving billed? ▾
solve_captcha: true, and is also available standalone at /v1/captcha/solve and /v1/captcha/auto. Each call counts as a single API request. Typical solve latency is 300–800 ms.What if the action fails — wrong selector, element not found? ▾
How is this different from running Puppeteer myself? ▾
Skip the Puppeteer boilerplate.
Every endpoint, every automation primitive, free up to 1,000 requests a month.