# Activepieces - Scrape.do Integration > Source: https://scrape.do/documentation/integrations/activepieces/ Step-by-step guide to integrate Scrape.do with Activepieces for scheduled bulk web scraping flows Scrape.do works in Activepieces through the built-in **HTTP** piece, so there is no custom piece to install. Import the ready-made flow, add your token, and it scrapes a list of URLs on a schedule and returns clean fields for each page. The flow has four steps: **Schedule** → **Build URL List** → **Loop Over URLs** → (**Scrape.do Request** → **Extract Fields**). ## 1. Import the Flow - Download the flow template below. - Open [cloud.activepieces.com](https://cloud.activepieces.com) or your self-hosted instance and sign in. - Go to **Flows** > **Import Flow** and select the file. All four steps appear wired up in a new draft. **Download the Activepieces flow** to import it into your instance. ## 2. Add Your Scrape.do Token Open the **Scrape.do Request** step. Under **Query Params** you'll see two entries: | Key | Value | |---|---| | `token` | `YOUR_SCRAPEDO_TOKEN` | | `url` | `{{step_2.item.url}}` | - Replace the placeholder with your API token from your [dashboard](https://dashboard.scrape.do). - Leave the `url` mapping as it is. It pulls the current item from the loop. - Put the placeholder back before you export the flow for anyone else. ## 3. Set the URLs to Scrape Open the **Build URL List** step and swap in your own URLs. Each object becomes one loop item, so keep the `{ url: '...' }` shape: ```javascript export const code = async (inputs) => { const urls = [ 'https://books.toscrape.com/catalogue/page-1.html', 'https://books.toscrape.com/catalogue/page-2.html', 'https://books.toscrape.com/catalogue/page-3.html', ]; return urls.map((url) => ({ url })); }; ``` To read the list from a spreadsheet, delete this step and add **Google Sheets** > **Get Rows** in its place. Point the loop at that step's output and map the URL column in the HTTP step. ## 4. Add Parameters for Hard Targets The template sends plain requests. For JavaScript-heavy or protected pages, add query params in the **Scrape.do Request** step: - **render** - Set to `true` to render the page in a headless browser - **super** - Set to `true` to use residential and mobile proxies Both use extra credits (5 for `render`, 10 for `super`, 25 for both, against 1 for a plain request), so turn them on per target. See [request costs](/documentation/request-costs) for details. > 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. ## 5. Test and Publish - Click **Test Flow**. Each loop pass sends one Scrape.do request and returns an object with `url`, `status`, `title`, `h1`, `html_length` and `scraped_at`. - Click **Publish** and the schedule takes over. Full tutorial with every step: [How to Build a Bulk Web Scraper in Activepieces with Scrape.do (Low Code)](/blog/activepieces-web-scraper/)