How to extract a table from many pages without code
You have a handful of product pages, job posts or listings open in tabs, and you want them side by side in a spreadsheet. The Extract to table tool in the scrape.land dashboard does exactly that without code: paste up to 20 page URLs, describe the columns in plain words, and each page becomes one row you can download as a CSV.
Where to find it
Sign in, open Tools in the dashboard sidebar and pick Extract to table. The Tools page lists three tools (Local businesses, Lead Finder and Extract to table), and every run uses request units from your plan, exactly like the API.
The first time you open Tools it asks for a key. Click Create a key for Tools, or paste a key you already have and click Use this key. The key is kept in that browser only, and it shows up with your other API keys, where you can revoke it like any other.
Step 1: paste the page URLs
Put one URL per line in the first box. A few details worth knowing:
- At most 20 pages run per extraction. If you paste more, only the first 20 are used.
- Duplicate URLs are dropped, so each page is fetched and billed once.
- If you leave off
https://, it is added for you.
The tool works best when every URL is the same kind of page, for example 20 product pages from different shops, or 15 job ads. Mixing a product page with a news article gives you a table with two sets of columns and a lot of empty cells.
Step 2: describe the columns
The second box, What to pull from each page, takes a plain description of the columns you want, separated by commas. The placeholder shows the idea: product name, price as a number, in stock (true or false).
If you are not sure where to start, click one of the Recipes above the box. Each one fills in a tested description you can edit:
| Recipe | Columns it asks for |
|---|---|
| Product page | product name, brand, price as a number, currency, in stock (true or false) |
| Job post | job title, company, location, remote (true or false), salary range, date posted |
| Property listing | address, price as a number, bedrooms, bathrooms, floor area, listing agent |
| Company profile | company name, what it does in one sentence, headquarters city, year founded, contact email |
| Article | headline, author, publish date, a two-sentence summary |
Writing your own description is mostly about being specific:
- Say the type. "price as a number" gives you
49.99you can sum in a spreadsheet; "price" alone may give you$49.99orFrom $49. - Say the format for dates and yes/no values. "publish date as YYYY-MM-DD" and "in stock (true or false)" keep every row consistent.
- Keep it to what is on the page. The model reads the page's text and its structured data (JSON-LD, OpenGraph and similar), so ask for things a visitor could see or a search engine could read.
The column headers come from the field names the model returns for your description, so short, plain wording gives tidy headers.
Step 3: run it and read the table
Click Extract. The status line shows an estimate of the units the run will use, then counts pages as they finish. Three pages are read at a time, and the table fills in as each one lands, so you can watch the first rows while the rest are still running. Stop ends the run early and keeps the rows you already have.
The table's first column, Page, links to each URL. The other columns are every field returned by any page, so if one page has a field the others lack, those cells are simply blank. If the model returns a list for a page (say, a category page with many products), the tool keeps the first item, because the tool's promise is one row per page. When a page fails, its row shows the error across the whole width instead of data.
Step 4: download the CSV
When the run finishes, click Download CSV. The file has a url column followed by your columns, one row per page that succeeded; failed pages are left out. It opens directly in Excel, Numbers and Google Sheets, accents and currency symbols included. As a safety measure, a cell that starts with = or @ is prefixed with an apostrophe, so text scraped from a page can never run as a spreadsheet formula.
Each run is also saved under Recent searches at the top of the tool, in your browser, so you can reopen a table after a refresh without paying for it again.
Which plan you need, and what it costs
Extract to table uses AI extraction, so it needs the Scale plan or higher. On a lower plan the run stops with a message saying AI extraction starts at Scale; CSS and XPath extraction through the API still works on every plan.
Each page is one fetch (1 request unit) plus the fast AI model (from +2 units), so plan on about 3 units per page. A very long page can cost a little more; the Usage page shows the exact figure. A fetch or AI extraction that fails is not billed. See pricing.
What the tool does under the hood
For each URL, the tool sends one ordinary API request with your description as the prompt and the fast model. If you outgrow the tool, this is the call to automate:
curl https://scrape.land/v1/extract \
-H "X-Api-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://shop.example/item/42",
"prompt": "product name, price as a number, in stock (true or false)",
"model": "fast"}'Move from the tool to the API when you need more than 20 pages at once, want to run on a schedule, or want the same column names every time. The API accepts a schema that pins the output keys, and "render": true for pages that only show their content after JavaScript runs. The Tools page does not render JavaScript, so a page like that shows an error in its row.
Next steps
To pin exact column names, read structured data with an AI schema. For many URLs from code, see batch scraping. Every parameter is in the docs, and you can create a free account to look around the dashboard.