# Windmill - Scrape.do Integration > Source: https://scrape.do/documentation/integrations/windmill/ Step-by-step guide to integrate Scrape.do with Windmill for parallel web scraping flows in TypeScript Scrape.do works in Windmill as a plain GET request from a TypeScript step, so there's nothing to install on your workers. Paste one OpenFlow YAML file and you get a flow that scrapes a list of URLs in parallel, with retries and a summary of successes and failures. ## 1. Create the Flow from YAML - Sign in at [app.windmill.dev](https://app.windmill.dev) or your self-hosted instance. - Click **+ Flow** to create a new flow. - Open the **⋮** menu in the toolbar and choose **Edit in YAML**. - Select everything in the editor and paste the contents of the flow file below. **Download this Windmill flow** (OpenFlow YAML). The graph rebuilds with two modules: `scrape_loop`, a for-loop that runs the scrape step, and `summarize`, which splits successes from failures. ## 2. Add Your Token and Inputs Click **Test flow**. Windmill builds an input form from the flow's schema: - **token** - Your API token from your [dashboard](https://dashboard.scrape.do). For anything you deploy or share, click the **$** icon on the field and bind it to a Windmill secret variable. - **urls** - The pages to scrape - **render** - Turn on to render JavaScript in a headless browser - **super_proxy** - Turn on to use residential and mobile proxies `render` and `super_proxy` use extra credits, so leave them off unless the target needs them. > If you're unable to get a response, visit the [playground](https://dashboard.scrape.do/playground) and experiment with parameters like **Super**, **Render JavaScript**, and **Block Resources** until you get a successful response. ## 3. Run the Flow Click **Test flow**. The loop runs 5 iterations in parallel and retries a failed request twice, 3 seconds apart. Each iteration returns `url`, `status`, `title`, `h1`, `html_length` and `scraped_at`, and the last step returns the roll-up: ```json { "total": 3, "success": 3, "failed": 0, "rows": [ ... ], "errors": [] } ``` The loop settings live in the YAML: `parallel: true`, `parallelism: 5` and `skip_failures: true`, so one dead URL doesn't stop the run. ## 4. Deploy and Trigger - Click **Deploy**. - Attach a schedule, or call the flow from its webhook URL. Full tutorial with every step: [How to Build a Parallel Web Scraper in Windmill with Scrape.do (TypeScript)](/blog/windmill-web-scraper/)