Google Sheets template

Google Sheets Website Scraper

Scrape data from any website to Google Sheets: page titles, descriptions and Markdown, or the text behind any CSS selector.

Set up in four steps.

About two minutes from copy to first results.

  1. 1

    Copy the sheet

    Make your own copy in Google Drive. Nothing is shared back with us.

  2. 2

    Get a free API key

    Sign up for Geekflare: 500 free credits a month, 500 pages, no card needed.

  3. 3

    Add your key

    In the sheet, open Website Scraper → Set API key and paste it.

  4. 4

    Paste URLs and run

    Add URLs in column A, an optional CSS selector in column B, then Website Scraper → Scrape new rows.

What every run logs.

Results are written next to each URL, so the sheet stays one row per page. Re-scraping overwrites them with fresh data.

Title, DescriptionThe page's title and meta description, when no selector is set.
ContentThe page as clean Markdown, ready for an LLM. With a selector, the text of every match, one per line.
WordsA word count of the content, to spot thin or empty pages.
StatusOK, the number of selector matches, “Blocked by the site” or the error, so failed rows are easy to filter.
Last scrapedWhen the row was last fetched, for daily re-scrapes.

Scraping websites into Google Sheets.

What the template does under the hood, and where Google Sheets' own import formulas stop working.

How to extract data from a website to Google Sheets

Paste the pages you want in column A, one URL per row. Leave column B empty to get each page whole: its title, meta description and the content as clean Markdown. Add a CSS selector to get only what matches, such as .price for prices or article h2 for headlines, one match per line.

Then run Website Scraper → Scrape new rows. Results are written next to each URL, so the sheet stays one row per page, ready to sort, filter or chart. New rows are picked up on the next run, and a daily schedule re-scrapes everything to keep it fresh.

Scrape dynamic web pages in Google Sheets

Google Sheets' IMPORTXML and IMPORTHTML read the HTML a server sends and never run its JavaScript. On a dynamic page, where the content is added by script after load, they find nothing: product grids, prices, reviews and search results come back empty or as an error.

This template sends each URL to the Geekflare Web Scraping API instead, which loads the page in a real browser when it needs one, so the sheet gets the content a visitor sees. Try it on testingurl.dev/scraping/js-rendered, a test page whose product grid is added by JavaScript after load: IMPORTXML sees an empty #app container, and the template returns all ten products, or just their names with the selector .card h3.

The template is plain Google Apps Script, so you can read and change all of it under Extensions → Apps Script.

What it costs to run.

1 credit per page, on the same credits as every Geekflare API. Failed pages cost nothing.

Free$0/mo

500

pages a month

500 credits

Starter$19/mo

10,000

pages a month

10,000 credits

Growth$69/mo

100,000

pages a month

100,000 credits

Business$349/mo

1,000,000

pages a month

1,000,000 credits

Questions

Before you copy it.

Yes. The sheet calls the Geekflare Web Scraping API with your key, at 1 credit a page. A free account includes 500 credits a month with no card required.

Yes. Pages are rendered in a real browser when they need it, so content added by JavaScript is in the result. Google Sheets' IMPORTXML can't do that: it only reads the HTML before any script runs.

Yes. Copy the template, add your API key from the menu, paste URLs and run it. The code is there if you want to change it, but you never have to open it.

Put a CSS selector in column B, for example .price or article h2. The Content column gets the text of every matching element, one per line. Test selectors first with the free CSS Selector Tester.

Some sites serve a challenge page instead of the real one. The sheet marks those rows rather than saving the challenge page, so you can filter them out.

As many as you like. Google stops a single run after a few minutes, so long lists are done in chunks: run Website Scraper → Scrape new rows again and it continues where it stopped.

Copy it, add your key, and start scraping.

500 free credits a month. No card required.