
Extract Data From a Website to Google Sheets Automatically
For a public page, put =IMPORTXML("https://example.com/prices", "//td") or =IMPORTHTML("https://example.com/prices", "table", 1) in a cell. For pages you sign into, or several sites on a schedule, describe the rows to BrowseWiz in Chrome and ask it to update the sheet daily. You choose between the two before you write any formula or prompt, because the choice depends on one thing: who opens the page.
A formula asks for the page on its own and carries none of your sign-ins. A browser extension reads the page you already see. Settle that first and the rest of the setup follows from it.
Table of Contents
- Two Forms That Work: a Formula and a Plain-Language Request
- Setting Up a Sheet That Refills Itself
- Symptoms That Tell You the Method Is Wrong
- Choosing by Where the Page Opens
- What BrowseWiz Takes Off Your Plate
- Frequently Asked Questions
Two Forms That Work: a Formula and a Plain-Language Request
Public page, one table or list (type into a cell):
=IMPORTHTML("PAGE_URL", "table", TABLE_NUMBER)
=IMPORTXML("PAGE_URL", "XPATH_QUERY")
Signed-in page or several sites (type into the BrowseWiz side panel):
Open . For each , put , ,
and a source link in a new sheet. If a page asks me to sign in,
write "Signed out". Update this sheet every at ,
updating rows in place and keeping the old value in a Previous column.Google's help page for IMPORTHTML documents the table form, and the help page for IMPORTXML documents the XPath form. In both formulas, PAGE_URL is the full address in quotes. TABLE_NUMBER picks which table on the page you get, counting from 1. XPATH_QUERY names the elements to pull, such as //h3 for every third-level heading.
The plain-language request does the same job with no query language. The bracketed parts define one row per item and its columns. The source link lets you check any number against its page. The "Signed out" clause turns a failed page into a readable cell instead of a silent gap. The last sentence sets the schedule.
Here is a filled example: Every Monday at 8:00, open the Listings page in my dealer portal, where I'm signed in, and for each car put model, year, mileage, price and a source link in a new sheet. Update rows in place and keep the old price in a Previous column. The Previous column only appears because the request asks for it. Leave that clause out and the refresh simply overwrites the old value.
Setting Up a Sheet That Refills Itself
The steps below cover the signed-in route. For a public table, the IMPORTXML Google Sheets formula above is the whole setup.
- Open the site in Chrome and sign in as usual, including any two-factor code or company single sign-on.
- Test the page in a private window. If it shows a sign-in screen there, skip formulas and continue with the steps below.
- Open the BrowseWiz side panel on that page and describe the rows, using the request template above.
- Read the plan BrowseWiz shows, approve it, then grant tab access and sign in to Google once when asked.
- Check the new sheet in your Drive. Make sure the columns match what you described and that the source links open the right pages.
- Ask for the schedule in the same chat, or accept the daily update offer after the first run.
- Add a monitor for the one value that should interrupt your day, such as a price crossing a threshold.
BrowseWiz reads the page in your own signed-in Chrome, so there is no cookie export and no password upload. Our walkthrough for scraping a signed-in site shows the approval screens step by step.
Symptoms That Tell You the Method Is Wrong
An empty cell or a parse error from a formula that looks correct usually means the formula got a different page from the one you see. A sign-in wall, a cookie banner or a page that builds its content after loading all leave nothing for the XPath to match. Rewriting the query will not help. Run the private-window test, and if the data is not visible there, move that source to the browser route. Our note on what IMPORTXML cannot collect goes through the page types one at a time.
Slow loading across several spreadsheets has a different cause. Google documents a per-creator usage limit on import functions, and when you hit it the sheet shows: "Loading data may take a while because of the large number of requests. Try to reduce the amount of IMPORTHTML, IMPORTDATA, IMPORTFEED or IMPORTXML functions across spreadsheets you've created" (Google Docs Editors Help). The limit is counted per creator, so spreading the same formulas across more files does not get around it. Use fewer formulas, each pulling a whole table, or move the bulk of the work out of formulas.
Expect gaps in a scheduled sheet if your laptop was asleep at run time. Scheduled refreshes and monitors run only while Chrome is open. Set the run time for an hour when the browser is normally open, not for the middle of the night.
Picture a sheet that suddenly fills with "Signed out" in one column: that is the fallback clause doing its job. If a site signs you out, you sign in again in Chrome and the next run picks up from there. Without that clause, the same failure shows up as stale numbers that look current, which is harder to catch.
Last, people often try to point the extraction at a sheet they already use for reporting. BrowseWiz creates its own new sheet and keeps writing to it. Build your charts and summaries on top of that sheet instead of trying to redirect the rows elsewhere.
Choosing by Where the Page Opens
If the data sits in a public table and you need it from a single site, use the formula. It costs nothing, lives in the cell, and you will know within a minute whether it works.
If the page needs your login, or you are collecting the same fields from several sites, the browser route is the one that works, and you only need to write it once. Scheduled sheet updates run up to once a day, at the time you set. That suits morning price checks, weekly listing reviews and daily sales logs. Our guide to updating a Google Sheet on a schedule covers the choice between a dated log and rows updated in place.
If you need runs while your computer is off, very large volumes, or hand-offs into many other systems, a cloud-run scraping service is the better fit. You give up running in your own signed-in browser in exchange for runs that do not depend on your machine. If you were also considering Google's own AI features inside a cell, our Gemini in Sheets alternative page compares the two approaches.
What BrowseWiz Takes Off Your Plate
You describe the rows in plain words, and there are no selectors or scrapers to build or fix. Because it uses no selectors or recorded clicks, a redesigned page does not break the request. One plain-language message can cover several sites instead of one robot per site. Monitors alert you when a change matters, such as a price dropping below $900, and check about every 5 minutes.
The agent asks before it acts, and you can skip asking on trusted sites or for a plan you approved. You can choose the model with your own API key or an OpenAI-compatible endpoint. Our scraping use cases cover price tracking, lead lists and dealer inventory.
The Free plan includes one daily scheduled task and one monitor, which is enough to run one real sheet before you decide. Compare the Free, Pro and Max tiers on the pricing page. For a team setup, contact us.
Frequently Asked Questions
How to get Google Sheets to pull data from a website?
Start with what you can see without signing in. If the data is a table, IMPORTHTML with the table number is quicker to get right than XPath. If it is a list, a price or a set of headings, IMPORTXML with a short XPath such as //h3 works. Make the first query broad and narrow it once rows appear. If you get nothing back after two or three tries on a page you can see clearly, the formula is probably being served a different page. In that case, switch to a browser-based method instead of continuing to adjust the query.
How to automatically pull data from a website?
Decide what "automatically" has to mean for you. It can mean pulling again whenever the sheet recalculates, refreshing at a fixed hour each day, or alerting you the moment a value crosses a line. Formulas fit the first. A scheduled task fits the second. A monitor fits the third. Many jobs combine a daily refresh for the full table with a monitor on the single field you would act on. That way the sheet stays complete, and you only hear about it when something worth your attention changes.
Why can't Google Sheets fetch data from a URL?
There are three common reasons. The page may require a login, which the formula cannot provide. The content may load after the initial page arrives, so the formula finds nothing to match. Or you may have run into Google's per-creator limit on import functions, which shows up as a long-running loading message instead of an error. The first two are problems of reach and cannot be fixed by rewriting the formula. The third clears when you cut the number of import formulas across all the spreadsheets you created.
How can I automatically import CSV files into Google Sheets?
When the CSV sits at a public link, Sheets' IMPORTDATA function belongs to the same import family and is subject to the same per-creator limit. When the CSV is an export inside a portal you sign into, skip the file. Ask BrowseWiz for the rows straight from the page the export is built from, so they arrive as columns you can refresh. For statements and invoices you need to keep as files, BrowseWiz can download them and log the file name, size and status in a Google Sheet.

About Tom
I'm a software engineer and solutions architect specializing in AI-driven tools and productivity software, passionate about helping users reclaim their valuable time through intelligent automation.