This month's UScraper update tightens four things that matter most when you're building real workflows: canvas interactions, project organization, multi-value inputs, and loop control. We rewrote the drag layer for smoother block placement, shipped Workspaces so research, lead gen, and e-commerce projects can live side by side, added a Multiple Texts field to Type Text so one block can fan out across keywords, and introduced a brand-new Loop Continue block that advances internal loops without closing the browser.
01 — Canvas
Smoother drag on the canvas
The canvas was the first thing we touched. Moving blocks that already sit on
the canvas now feels much steadier: the block captures the pointer, stores the
starting pointer and block coordinates, compensates for the current zoom level
with dragScale, and updates its position through translate3d(...).
ScraperCanvas batches those position updates through
requestAnimationFrame, so fast pointer movement no longer floods React with
one state update per browser event.
A few things changed under the hood:
- Pointer events and pointer capture keep the block in control until the drag ends, even if the cursor moves quickly.
- Zoom-aware coordinates divide pointer delta by canvas scale, so dragging feels right at 50%, 100%, or 150% zoom.
requestAnimationFramebatching lets the canvas apply the latest pending position once per frame instead of re-rendering for every move event.
If you've ever dragged a block across a crowded graph and felt the motion lag behind the cursor, that's the bug class we went after.
02 — Organization
Workspaces for parallel projects
Heavy users have been telling us the project list grew faster than the sidebar could keep up. Workspaces are the answer: each Workspace is a named container with its own project list, browser sessions, and run history. Switching workspaces keeps your canvas zoom, the open browser, and recent run state intact for that context — and leaves the others untouched.
Typical setups we're already seeing internally:
- Research workspace for review-site scrapers (Trustpilot, G2, Capterra).
- Lead Gen workspace for people-finder and directory pipelines.
- E-commerce workspace for listing and price-monitor projects.
The new sidebar workspace list keeps recent projects scoped per workspace, adds a New Workspace flow with color selection, and lets projects move between Standalone Projects and any Workspace through the row menu.
03 — Inputs
Multi-input Type Text
Navigate has supported a Multiple URLs field for a while — paste a list and the block runs once per URL. The same pattern now exists on Type Text via a new Multiple Texts parameter. Drop in a list of search terms, filter values, or any string and the downstream graph runs once per value, reusing the same browser session.
A few details worth knowing:
- One value per line in the Multiple Texts textarea. Empty lines are skipped.
clearFirststill works — the field is cleared before each value so you don't end up concatenating keywords.- The run panel shows the current iteration (
2/4) and the current value in the run-step label, so you can tell at a glance which input is being processed. - It's purely opt-in: a
Type Textblock with a single value behaves exactly like before.
This is ideal for "run the same flow for each keyword" workloads — SERP sweeps, marketplace category dumps, multi-region searches — without duplicating block branches in the graph.
04 — Loop control
Loop Continue, an explicit boundary
Multi-input loops on Navigate could quietly restart by closing and
reopening the browser, but that trick doesn't generalise to other blocks: a
session opened mid-flow, cookies set during login, or scroll state can't be
recreated for free. So we added a new Loop Continue block to make the
loop boundary explicit.
Here's the mental model:
- Loop Continue advances the innermost active multi-input loop and jumps execution back to the block that started it (the Navigate or Type Text with multiple values).
- When the loop is exhausted, Loop Continue falls through along its outgoing edge so the run can continue toward export, an End block, or a parent loop.
- End is unchanged: it still terminates the entire run and closes the browser. It does not advance loops.
The runtime keeps active loops on a stack, so nested multi-input loops work the way you'd expect: an inner Loop Continue only advances the inner loop, and the outer loop only steps forward when its own Loop Continue runs.
Putting it together
A worked example
Picture a small SERP harvester:
- Navigate to
https://example.com/search. - Type Text with
laptop,keyboard,monitor,webcamin the Multiple Texts field, targeting the search input. - Click the search button, Sleep briefly for hydration, then Structured Export the result rows.
- Go Back to clear the page state.
- Loop Continue so the next keyword starts cleanly from the search results page.
- After the last keyword, Loop Continue follows its outgoing edge into End.
The same browser session stays open for all four keywords, the export file appends across iterations, and the run panel labels each step with the keyword and the iteration index, so debugging stays grounded.
FAQ
Frequently asked questions
Yes. Single-value Type Text blocks, graph-based loops, and the End block all behave exactly as before. The new behaviours only activate when you fill in Multiple Texts or add a Loop Continue block to the graph.
This update is rolling out automatically — restart UScraper to pick it up. We'll keep iterating on Workspaces, internal loops, and canvas ergonomics through the rest of the quarter, so let us know what you'd like next.

