Google Sheets is handy because the data is instantly shared with colleagues, and you can filter it, build pivot tables and feed it into reports. The question is how to get it there from a website. Here are three ways, from completely free to automated, with an honest look at where each one breaks.
Option 1. IMPORTHTML and IMPORTXML
Google Sheets has built-in functions that load a page and pull data out of it. Nothing to install.
IMPORTHTML: tables and lists
=IMPORTHTML("https://example.com/prices", "table", 1)
Arguments: the page URL, the type ("table" or "list" for a bulleted or numbered list), and which table or list on the page to take, starting at 1. Tables and lists are counted separately. If there are several tables, try 1, 2, 3…
In some locales arguments are separated by semicolons instead of commas.
IMPORTXML: any element via XPath
=IMPORTXML("https://example.com/catalog", "//div[@class='product']//h3")
The second argument is an XPath query; the optional third one is a locale for parsing. This pulls, say, every card title. For the price you need a second formula in the next column:
=IMPORTXML("https://example.com/catalog", "//div[@class='product']//span[@class='price']")
To find an XPath, open your browser's developer tools (F12), right-click the element and choose "Copy → Copy XPath". The copied path usually points to one specific element, so generalize it by removing indexes like [3].
Limits
These functions are useful, but they have limits, several of them spelled out in Google's help:
- Refresh. Import functions check for updates every hour while the document is open. Reloading the tab does not refresh them; to force a refresh, delete the formula and enter it again.
- Quotas. With many requests a function can sit on "Loading…" or show an error. Google gives no number; the quota counts across all documents the owner has.
- No
NOW(),RAND()and similar — you cannot defeat caching with a "random" URL parameter. - Result too large. IMPORTXML can fail with "Result too large"; narrow the query.
- Google's servers load the page, not your browser. Data that appears only after you sign in is out of reach. In practice, content the site renders with scripts after loading usually does not show up either: the functions see the raw HTML.
- No pagination. Each page needs its own formula. Tolerable for
?page=1…?page=20, impossible for infinite scroll. - Fragile. The site renames a CSS class and your XPath stops matching.
Bottom line: IMPORTHTML is great for public HTML tables such as exchange rates, timetables and reference lists. IMPORTXML suits simple pages where you are willing to maintain the XPath. Card catalogs with hundreds of lazily loaded items need something else.
Option 2. Via the clipboard
The fastest manual route is to collect with an extension and paste.
- Open the page with the list and click the Grabsavo icon.
- It finds a table or repeated blocks and marks the rows with teal frames and row numbers. If it picked the wrong list, switch candidates.
- Check the columns in the preview: rename, change types, add a missing field by clicking an element on the page.
- Set up pagination if there are several pages.
- When the run is done, export to the clipboard.
- In Google Sheets click cell
A1and pressCtrl+V(Cmd+Von a Mac).
The data lands in columns with headers. This works in the free version — up to 10 pages and 500 rows per run.
Option 3. Direct export to Google Sheets
If you export regularly, copy-paste gets old. Grabsavo can export results straight to Google Sheets, with no file in between.
When it helps most:
- Template + schedule (Pro). Save the setup for a site as a template and schedule runs: every hour, 6, 12 or 24 hours, or weekly. Scheduled runs work while the browser is open. After each run Grabsavo compares the result with the previous one and marks new, changed and gone rows.
- Teamwork. The sheet is already shared, so nobody waits for you to send a file.
How to lay out a sheet for regular exports is covered in How to monitor competitor prices in a spreadsheet.
Which to choose
| Task | Method |
|---|---|
| Public HTML table, hourly refresh is fine | IMPORTHTML |
| Simple page, a few fields, you can maintain XPath | IMPORTXML |
| Card catalog, one-off export | Grabsavo + clipboard |
| Data behind your own sign-in | Grabsavo — runs in your session |
| Regular export with change tracking | Grabsavo: template + schedule + Google Sheets export |
Prepare the data before pasting
Sheets recognizes numbers according to the spreadsheet's locale. "$1,299.00" may stay text, and SUM will ignore it. Two ways out:
- clean it in Grabsavo first: the "price → number + currency" step splits it into the number
1299and the currency; - clean it in the sheet:
=VALUE(REGEXREPLACE(B2, "[^0-9.]", ""))
This keeps only digits and the decimal point (for a US-style locale). More in Data cleaning after scraping: 10 techniques.
Common paste surprises
- Leading zeros. SKU
00123becomes123. Set the column to plain text first (Format → Number → Plain text). - Long numbers. Barcodes of 13+ digits may show in scientific notation. Same fix.
- Dates.
03/04can become March 4 or April 3 depending on locale. Convert dates toYYYY-MM-DDbefore export. - Links. If you will use a link column as a key or for item-page details, keep the full URL rather than a hyperlink with other text.
Privacy
Grabsavo collects in your browser, with your session. Page data is not sent to Grabsavo servers; the only exception is the optional AI assistant, which receives a cleaned sample of 2–3 list items. If your data includes people's names or contacts, read Web scraping and the law.
Try it
Practice collecting and exporting on our demo catalog, which has every kind of pagination. Install the extension from /install.
Sources
- Google Docs Editors Help: Learn more about Import functions
- Google Docs Editors Help: IMPORTHTML and IMPORTXML