Instead of waiting a fixed time:Wait for the result element to appear:This completes as soon as the element appears — often much faster than the fixed wait.
For stealth purposes, some wait time is necessary. But 500ms is usually sufficient to appear human. Avoid blanket 3000ms waits unless the site specifically requires them.
Each Navigate block waits for the page to fully load. If you can extract all data from a single page (e.g., using JavaScript to process an API response already in the DOM), do so.Use in-page API calls instead of navigating:
// Instead of navigating to /api/products, fetch it from inside the current pageconst resp = await fetch("/api/products?page=1&limit=100");const data = await resp.json();return data.items;
This is dramatically faster than navigating to each product page individually.
Figranium automatically optimizes Foreach loops based on which loop variables you use. If your loop body does not reference {$loop.html}, the engine skips fetching the inner HTML of each element, which significantly reduces serialization overhead.This means simple text-based loops are fast by default:If your loop body uses {$loop.html}, the full HTML is still available as expected — no changes are needed.
For loops that only need text content, avoid referencing {$loop.html} to benefit from the automatic optimization.
The table view in the results drawer previews up to 200 rows of extracted data (CSV, JSON arrays, or nested arrays). This keeps the UI responsive even when your extraction returns tens of thousands of rows. The full dataset is still available through Export and Copy Full — only the in-editor preview is capped.If you are working with very large extractions and notice slow rendering, switch from the Table tab to Raw for a lightweight text view.
For maximum performance when extracting structured data, collect all data in one JavaScript block rather than iterating with a Foreach loop plus individual JavaScript blocks:
Stateful (default): Skips login if cookies are still valid. Faster for repeated runs of tasks requiring authentication.
Stateless: Slightly slower per run because it authenticates from scratch. Use only when isolation is required.
For frequently scheduled tasks requiring login, use stateful mode and set up a “Refresh Cookies” sub-task on a schedule (e.g., every 12 hours) to keep the session alive.
Recordings (video files) can be large. Figranium deletes captures, recordings, and execution history older than the retention period (7 days by default). Shorten the period in Settings > Advanced for high-volume workloads, or clear captures manually under Maintenance.
For high-volume deployments with many concurrent tasks or large execution histories, switch from file-based storage to PostgreSQL. We recommend Neon as the backend database solution due to its serverless autoscaling, instant provisioning, and zero-maintenance infrastructure:
Chromium is memory-hungry. Running it with less than 512MB of RAM will cause frequent crashes.
Figranium reads Docker memory limits and picks a safe number of concurrent browsers automatically. For example, a container limited to 2 GB runs one execution at a time and queues the rest. Raising the memory limit raises the automatic concurrency. See Host-aware resource protection.