Forms are the boring part. Hand them over.

Give it the URL and the data. It finds the fields by their labels, clicks through the wizard, solves supported CAPTCHAs, and returns the confirmation as JSON. One browser per form, in parallel.

permits.harwick.gov/applyParking permitFull nameEmailStreet addressStart date1Ada Lovelace2ada@example.com312 Analytical Row4Next MondaySubmitoutput{ "confirmation_number": "HW-4KQ7" }Donepermits.harwick.gov/applyParking permitFull nameEmailStreet addressStart date1Ada Lovelace2ada@example.com312 Analytical Row4Next MondaySubmitoutput{ "confirmation_number": "HW-4KQ7" }Donepermits.harwick.gov/applyParking permitFull nameEmailStreet addressStart date1Ada Lovelace2ada@example.com312 Analytical Row4Next MondaySubmitoutput{ "confirmation_number": "HW-4KQ7" }Donepermits.harwick.gov/applyParking permitFull nameEmailStreet addressStart date1Ada Lovelace2ada@example.com312 Analytical Row4Next MondaySubmitoutput{ "confirmation_number": "HW-4KQ7" }DoneApply for a parking permit for Ada on harwick.gov→ submitted; the confirmation number returned as JSONpermits.harwick.gov/applyParking permitFull nameEmailStreet addressStart date1Ada Lovelace2ada@example.com312 Analytical Row4Next MondaySubmitoutput{ "confirmation_number": "HW-4KQ7" }Donepermits.harwick.gov/applyParking permitFull nameEmailStreet addressStart date1Ada Lovelace2ada@example.com312 Analytical Row4Next MondaySubmitoutput{ "confirmation_number": "HW-4KQ7" }Donepermits.harwick.gov/applyParking permitFull nameEmailStreet addressStart date1Ada Lovelace2ada@example.com312 Analytical Row4Next MondaySubmitoutput{ "confirmation_number": "HW-4KQ7" }Donepermits.harwick.gov/applyParking permitFull nameEmailStreet addressStart date1Ada Lovelace2ada@example.com312 Analytical Row4Next MondaySubmitoutput{ "confirmation_number": "HW-4KQ7" }DoneApply for a parking permit for Ada on harwick.gov→ submitted; the confirmation number returned as JSON
of our hardest tasks solved
82%
per solved task on that benchmark
17¢
forms at once; 1,000 from $25,000 total paid
10 to 1,000

One form, start to finish

  1. 1

    You describe it

    The URL and the values in one sentence, or a template filled from a row of your spreadsheet. Add an output schema for the confirmation fields you want back.
  2. 2

    It fills and submits

    Labels and roles tell it which field is which. Dropdowns, dates and uploads are ordinary actions. Tell it where to stop if a person should look first.
  3. 3

    You get the receipt

    Confirmation numbers come back as JSON, and files it saves land in the workspace. Failures come back with the step and the page state. Behind a login? See login automation.

One run per row.

Runs are independent: one browser per row. Concurrency is per project: it starts at 10 and rises with the project's total paid, up to 1,000 at once from $25,000. Each run bills model tokens plus browser time at $0.02 per hour, and $5/GB if it uses the residential proxies.
from browser_use_sdk.v4 import BrowserUse applicant = {"name": "Ada Lovelace", "email": "ada@example.com"}receipt = {    "type": "object",    "properties": {"confirmation_number": {"type": "string"}},    "required": ["confirmation_number"],} with BrowserUse() as client:    run = client.runs.create(        f"Open https://example.com/signup and submit the form with {applicant}. "        "Stop before any payment step and report the confirmation number.",        output_schema=receipt,    )    done = client.runs.wait_for_completion(run.id)    if done.status.value != "completed":  # check the site before retrying        raise RuntimeError(done.error or done.status.value)    print(done.output)
fill.pyAPI V4 · Python and TypeScript SDK

Measured on the standard live-web benchmark.

Online-Mind2Web runs on real websites: shopping, finance, travel, government forms. All 300 tasks, none removed.

Browser Use Cloud (v4): 98% with our own agentic judge. The best human-graded results on the official leaderboard are 97.7% and 97.3%; different judges, so not one ranking.

  • Browser Use Cloud (v4)98%
  • Hark97.7%
  • Yutori Navigator n1.597.3%
  • OpenAI GPT-5.4 computer use (self-reported)92.8%
  • Enhans ACT-2 (GPT-5.4)92.7%
  • ChatGPT Atlas agent mode (retired, self-reported)70.9%
  • Gemini 2.5 Computer Use69%
  • OpenAI Operator (retired)61.3%
  • Claude Computer Use 3.7 (without thinking)56.3%

Accuracy · longer is better · scale 0–100%

OnlineMind2Web · updated 2026-08-07 · all benchmarks
Every agent benchmark

What is your form job?

The same form, many times
Fixed form: a Playwright script. Changing form: replay a saved agent run; if it breaks, check what it sent before rerunning.
Portals with no API
Supplier, insurance and government portals you are allowed to use. One agent task covers many of them.
Logins and MFA
Passwords as secret bindings, TOTP codes from 1Password, or a saved profile that skips the login. See login automation.
Government and grant applications
Long forms that end in a CAPTCHA. Supported CAPTCHAs are solved by default; solving is not guaranteed.
Onboarding and data entry
One run per CSV row. An output schema returns each confirmation number as parsed JSON.
File uploads and receipts
Put IDs, PDFs and invoices in a workspace once. Every run can attach them, and saves receipts there.

Questions people ask

Can it automate a portal that has no API?

Yes, as long as you are allowed to use it: your own accounts, or portals your clients authorize you to work in. Connector tools need an API on the other end; the agent works from what the page shows, so one task works across portals.

How do I download invoices from a portal with no API every day?

Stable portal: a Playwright script run by cron. Save the login with storageState, log in again when it expires, and call download.saveAs before the browser context closes. Portal that changes: from cron, start a Browser Use run with a saved profile and a workspace, and ask the agent to save the invoices there and to repair its rerunnable script if the site changed. List the workspace files by API; download links last 60 seconds.

How does it know which field is which?

It reads the labels and roles on the page, like a person. When the portal moves a field, the same task still works.

Multi-page wizards, dropdowns, uploads?

Yes. Custom dropdowns, date pickers, multi-step forms and file uploads from the workspace are ordinary browser actions to it. Workspace files sync between runs, not live, so parallel runs do not see each other's saves.

Can it fill forms behind a login with MFA?

Yes. Pass the password as a secret binding: the task names an alias and the value is typed only on the hostnames you list. Once typed, the value is on the page like any input. A 1Password vault also supplies TOTP codes and security-question answers, and a saved profile or cookies synced from your own Chrome skip the login while the site's cookies stay valid. AgentMail gives the run its own email address; accounts registered with that address get their codes in the agent's inbox. Secret bindings, 1Password and AgentMail are not available in the EU region.

What about the CAPTCHA on the submit button?

Cloud browsers solve supported CAPTCHAs automatically by default, outside the EU region. Solving is not guaranteed: if one stays, a person can finish it in the live view while the browser is open, and a follow-up run continues in the same session.

How do I keep it from doing something I cannot undo?

Say so in the task, for example stop before payment or before the final submit. The run ends there and the browser stays open for 2 minutes, or longer with keepAlive (paid projects, up to the browser's 4-hour lifetime, billed as browser time), so a person can check the page in the live view. A follow-up run in the same session then submits; pass any secret bindings again.

What does a form cost?

Model tokens plus browser time at $0.02 per hour. On our hardest benchmark the agent solves 82% of tasks at 17¢ per solved task; a short form costs less than that.