Extract website data for free with the site's own download button, Google Sheets, a local browser extension, or Python. Start with an export; use Sheets for a simple HTML table and a browser extension for repeating listings that need clicks or pagination.
Which free website extraction method should you use?
| Source | Start here | Main limit |
|---|---|---|
| CSV download or documented API | The site's export or API | License, access rules, and quotas |
| A public HTML table | Google Sheets IMPORTHTML | Does not operate an interactive browser |
| Repeating listings or clickable next pages | A local browser scraper | Needs selectors and a tested navigation plan |
| Several repeatable HTML tables | Python and pandas | Requires a little code and maintenance |
| A small one-off selection | Copy and paste, then clean | Easy to miss rows or misalign columns |
An API may have a free allowance rather than unlimited free use. Read its conditions before building around it.
Extract a website table into Google Sheets
- Open a blank Google Sheet.
- Paste the public page URL into cell
A1. - In
A3, enter:
=IMPORTHTML(A1,"table",1)
The final number selects the table, starting at 1. Change it to 2 or 3 if you imported the wrong table. Use "list" instead of "table" for a supported HTML list.
Check headers, record counts, and number formats. Then use File → Download → Comma-separated values (.csv) to save the selected sheet.
If the import fails, check that the URL opens publicly and contains a real HTML table. Content loaded only after clicks or JavaScript execution needs a different method. Repeating the same formula will not turn Sheets into a browser.
Extract listings without coding using a free browser extension
Look for a browser scraper that runs locally, lets you select repeating records, and exports CSV. Check that extraction and export are free for the number of pages you need. For product cards, directory listings, or clickable next pages, choose one that supports pagination and scrolling.
- Install the extension and open it on the target page.
- Enter the starting URL and define which pages to collect.
- Select the repeating record and the text or links you want in each row. Preview the selection.
- Add and test pagination, Load more, or scrolling if needed.
- Run locally, inspect the results, and export CSV.
Test two pages first. Confirm that the next-page step finds new records and stops at the end. Browser execution can load JavaScript content, but compatibility varies by site; it does not grant permission to bypass restrictions.
Extract website tables with free Python tools
Install the table-reading packages:
python -m pip install pandas lxml
Then run:
import pandas as pd
url = input("Public page URL: ").strip()
tables = pd.read_html(url)
print(f"Found {len(tables)} tables")
tables[0].to_csv("data.csv", index=False)
This exports the first HTML table. Inspect tables and select another index if necessary.
If a column contains identifiers, preserve them during extraction. For a column named product_code, use pd.read_html(url, converters={"product_code": str}). Match the actual header and check a value with leading zeros before exporting; changing the CSV's import format later cannot restore digits already lost.
This example reads one page. It does not collect pagination, render JavaScript, or bypass access restrictions. If the site returns an access error, use an approved export or API, or request permission.
ValueError: No tables found usually means the response contains no table that pandas can parse. For static product cards, Python's Beautiful Soup can select HTML elements, but you must write selectors for that site's structure. For content loaded by JavaScript, switch to a browser-based method instead of expecting read_html to execute the page.
Make the free extraction useful
Keep the source URL and collection date with your output. Preserve product codes and postal codes as text so leading zeros survive. Check duplicate records using a stable ID rather than a name alone.
For recurring work, save your original extraction separately from the cleaned version. That gives you something to compare when the website changes.
For messy page text, try the ChatGPT website extraction prompt. Before scaling up, review the legal limits of scraping.