Tabstack Browser Automation - Automate the web in your app or agent, no browser to host

by•
Give /automate a task in plain English and it drives a real browser to do it: navigate a site, click through a multi-step flow, fill a form, reach a page that only renders after interaction. The result streams back in one API call. It's an API you call, not a framework you install. Browser and LLM included, nothing to host, no concurrency ceiling. Accessibility-tree automation spends 60 to 80% fewer tokens than screenshot-based agents. Built by Mozilla. Ephemeral, no training on your data.

Add a comment

Replies

Best
how good is it for social media auto posting?

 we're actually going to show off those kinds of use cases on our livestream later today! Currently, we don't have credential or session management, so the authentication into your social channels would be the trickier part. However, if you had a wrapper around Tabstack that you were feeding auth keys or cookie sessions to, it should work really really well. Watch our YouTube for the livestream—should be in 4 or so hours:

I have some experience with workflow automation, so this caught my attention. Is it fair to think of Tabstack as browser automation powered by AI, rather than a traditional RPA workflow? I'd love to understand where the biggest differences are.

Is it fair to think of Tabstack as browser automation powered by AI?

Correct. Extract structured data to a schema you define, convert pages to Markdown, run cited multi-source research, and automate browser tasks using .

The key differenciator? . Every call runs on a Mozilla-backed platform. The pages you extract, the answers you research, and the tasks you automate stay yours, handled responsibly and never used to train models.

Private by default, transparent by design. is just different.

 Thanks for the clarification! The privacy-first approach is definitely a strong differentiator, especially for workflows that involve sensitive business data. Looking forward to seeing how Tabstack evolves.

awesome! really looking forward to seeing what you're building with - feel free to add your review here:

oh and please help us spread the word on LinkedIn!

The accessibility-tree approach for 60-80% fewer tokens vs screenshot agents is a smart tradeoff. Curious how it holds up on pages where the a11y tree is sparse or mislabeled (canvas-heavy apps, unlabeled divs) does it fall back to vision, or does the task just fail there?

 Honest answer: it doesn't silently switch to a pixel/vision mode when the tree is thin. /automate works from the accessibility snapshot, so if an interactive element is genuinely absent or mislabeled in the tree (canvas-drawn controls, unlabeled divs with click handlers), the agent can't reliably target it and that step will struggle rather than fall back to vision.

So the tradeoff is real in both directions: on structured, semantically-labeled pages you get the token savings and reliability; on pixel-only or canvas-heavy UIs, a tree-based approach is weakest, and we won't paper over that today. If your workflow lives mostly in that canvas-heavy territory, it's worth testing on your actual target pages before you commit.

The managed-browser-on-your-side model is the right call, hosting headless Chrome for a fleet of agents gets miserable fast. Before I wired this into an agent loop I'd want to know what happens on a partial run: if a five-step task dies at step three and my agent retries the whole call, does it replay steps one and two? For a task that submits a form or clicks confirm that replay is the scary part. Can a run resume from where it stopped, or is each call all-or-nothing?

 Each /automate call is stateless and self-contained. There's no checkpoint and no resume-from-step, so if a task dies at step three, retrying the call starts a fresh run from the top rather than picking up where it stopped.

Worth knowing: it's goal-driven, not a recorded macro. A retry doesn't blindly replay "click X, then click Y" from a saved log; the agent re-plans from the live page state toward the task. So it won't automatically re-run steps one and two as a fixed script. But that's not an idempotency guarantee either. Nothing on our side dedupes a form submit or a confirm click, so if the page state after a partial run is ambiguous, a retry can still re-fire an irreversible action.

For anything that submits or confirms, that means don't rely on the retry to be safe. Keep the destructive step idempotent on your end (an idempotency key, or a check that it already happened) and it's a non-issue.

Is there a concurrency limit when calling the API for multiple tasks?

 There's no separate concurrency cap. What governs parallel tasks is a per-minute request rate limit, and it's per account (shared across every API key and every endpoint, not per key or per endpoint):

  • Trial / Individual: 10 requests/min

  • Team: 25 requests/min

  • Pro: 100 requests/min

Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset, so the clean pattern is to read X-RateLimit-Remaining off your successful calls and throttle before you hit zero. If you do go over, you get a 429 with a Retry-After header, and the SDKs retry that automatically with backoff.

So fire off as many tasks in parallel as you like: the limit you'll actually bump into is requests per minute, not a fixed number of concurrent connections.

to learn more about 's per-minute request rate limits and usage, you can read the docs:

hope it helps!

Is this running remotely on another server? Seems really cool. How does things like Google auth work?

 Yeah, fully hosted: the browser runs on our infrastructure, so you just call the API and get the result back, nothing to run on your side.

Auth flows are the honest edge of the hosted API. It's stateless per call and doesn't manage sessions or credentials, so an interactive login (OAuth, "Sign in with Google," anything that hands back a session you need to hold onto) isn't something it carries across calls. It's built for public pages. Two ways people handle that:

1. Run the engine locally. /automate is powered by , our open browser-automation engine. Run it in your own environment, complete the login yourself, and it drives your authenticated session directly. That's the right path when the task genuinely needs to be signed in.

2. Split the work. Keep the authenticated steps in your own code and point hosted Tabstack at whatever's reachable without a session. You own the login; Tabstack does the structured extraction and automation around it.

Thanks, glad it caught your eye!

Congrats on the launch, folks! Turning "give agents the web" into five clean endpoints instead of a black box is an interesting call.

Just a curious question: when an agent's task requires a page that robots.txt disallows, does the API fail with a clear signal to reroute, or is that boundary invisible until production?

 thanks! It fails fast with a clear signal. A disallowed URL comes back as a 422 with the message blocked by robots.txt, surfaced in the SDK as a typed UnprocessableEntityError, so you can catch that specific case and reroute (skip the URL, try an allowed path, hand it back to your planner) instead of guessing. It's synchronous on the call, and it fires the same way mid-/automate, so an agent hits the boundary the moment it tries the page, not later.

One detail worth knowing: the check fails open. If a site's robots.txt can't be fetched or parsed, the request proceeds rather than blocking, so you only get the 422 on an actual disallow, not on an ambiguous or missing file.

Compliance is on by default, so this is the intended behavior rather than something you configure.

That clears it up, thanks Tessa. Goal-driven re-plan is the right default for read tasks, but it makes retries scary for anything that writes. If a run already hit submit before it died, a fresh re-plan can submit again, and most web forms won't dedupe that for you. In our own agent loops we gate the side-effecting step behind an idempotency key so a second attempt no-ops, but that only holds if the target honors it. Any notion of marking a step do-once so a retry skips it?

 Straight answer: no, there's no do-once or idempotency-key primitive today. A run is stateless with no persisted step ledger, so on a retry there's nothing server-side for it to consult and skip against. Your instinct is the correct one, and honestly the target is the only place a true do-once can live, since it's the only party that can guarantee the no-op. An idempotency key that the target honors is exactly right.

One softer lever in the meantime: since the task is natural language, you can fold the guard into the task itself and have the agent check for the post-submit state (a confirmation page, an existing record) before it acts. That's best-effort model judgment, not a guarantee, so it complements your idempotency key rather than replacing it.

It's a sharp ask, though. A first-class "mark this step do-once" is a genuinely useful primitive for write-heavy agent loops, and I'll flag it to the team.

Wow, another great innovation. I hope this works both ways and makes it more standard to implement accessibility trees. A11y continues to be important in the agentic web!

 🙌

Schema extraction in one call actually worked on a messy docs page, which was a nice surprise. The robots.txt compliance by default is a solid touch.

 Thank you, that's the best kind of surprise to hear about. And the robots.txt default isn't an accident, it's the Mozilla way. We think agents should access the web the way it asks to be accessed. Respecting that by default matters more to us than shipping a bypass. Appreciate you noticing it.

First
Previous
123
•••
Next
Last