14,000 people search “data scraping from website to excel” every month. I was one of them a year ago. You want data from a website, you want it in a spreadsheet, you figure it can’t be that complicated. Right?
It can. I tested all four methods people recommend. Three of them are fragile, manual, or both.
You can get website data into Excel or Google Sheets. But the way most tutorials teach it (Power Query, IMPORTXML, browser extensions) breaks on 80% of modern websites. The one that actually works at scale: call an API that returns clean JSON and pipe it into your spreadsheet.
We process over 2 million API requests per month across our Google Search API , Amazon product data API , Google Maps API , Crunchbase API , Translator API , and Jobs Search API . So I’ve watched, firsthand, where spreadsheet scraping falls apart. And I’ll show you the approach that doesn’t.
I’m covering all four methods here, telling you straight what each one can and can’t do. Then I’ll walk you through the full setup for the one I’d actually pick.
4
Methods tested
1
That actually scales
10 min
Setup time (API method)
Free
200 req/month to start
All 4 methods at a glance
Before we get into each one, here’s the comparison table. I rated them on what actually matters when you need web data in a spreadsheet:
| Method | Difficulty | Reliability | Automation | JS sites? | Cost |
|---|---|---|---|---|---|
| Excel Power Query | Easy | Low | Limited | ✗ | Free |
| Google Sheets IMPORTXML | Medium | Low | None | ✗ | Free |
| Browser extensions | Easy | Medium | None | Partial | Free / $10+/mo |
| API → Spreadsheet ⭐ | Easy | High | Full | ✓ | Free tier / $9.99+ |
Let me walk through each one. What it does, when it works, where it breaks.
Method 1: Excel Power Query (free, built-in, limited)
Power Query is built into Excel. It’s the first thing most people try, because it’s right there: Data → Get Data → From Web, paste a URL, and Excel tries to detect tables on the page.
How it works
- Open Excel, click Data → From Web
- Paste the URL of the page you want to scrape
- Excel loads the page and shows you any HTML
<table>elements it finds - Select the table, click Load, and the data lands in your spreadsheet
When it works, it feels great. The thing is, it doesn’t work very often.
The catch
Power Query reads the raw HTML that the server sends back. In 2016, that was fine, most websites rendered content server-side. In 2026? The majority of commercial sites load their data through JavaScript after the initial page load.
Try it on Amazon. Zero product tables. Google search results? Nothing. Any React, Vue, or Angular app? Empty.
The real limitation
Power Query works on static HTML tables — things like Wikipedia data tables, government statistics pages, and simple price lists hosted on older websites. If the site loads data via JavaScript (which includes Amazon, Google, eBay, LinkedIn, and most modern web apps), Power Query sees an empty page.
And there’s no scheduling in desktop Excel. You can hit refresh manually, but there’s no “check this page every morning at 8 AM” unless you’re on Excel Online or Power BI.
When Power Query makes sense: a one-time grab from a simple site with visible HTML tables. Government data, university research pages, static price lists. Don’t fight it for anything beyond that.
Method 2: Google Sheets IMPORTXML (free, fragile)
If you use Google Sheets, you’ve probably seen IMPORTXML mentioned. It’s a built-in function that fetches a web page and extracts data using XPath expressions.
How it works
In any cell, type:
| |
First argument is the URL. Second is an XPath expression that tells Sheets which HTML elements to pull. Google fetches the page, parses the HTML, and drops matching elements into your cells.
For about 10 minutes, it feels like magic. Then reality shows up.
The problems
First: XPath is fragile. The website changes its HTML structure (and every website does, constantly), your formula breaks. That div[@class='price'] becomes span[@data-testid='product-price'] overnight, and your sheet fills with #N/A errors. I’ve seen people rebuild their formulas every two weeks. That’s not a workflow, that’s a chore.
Second: no JavaScript rendering. Same problem as Power Query. IMPORTXML fetches raw HTML, not the rendered page. Amazon, Google, any modern SPA, nothing useful comes back.
Third: rate limits. Google caps IMPORTXML at roughly 50 calls per spreadsheet. Need 100 product pages? Half your formulas return errors.
When IMPORTXML is worth using
Grabbing a single data point from a simple page, like a stock price from a static finance page or an exchange rate from a government site. For anything involving multiple pages, dynamic content, or data you need to actually rely on, look elsewhere.
Method 3: Browser extensions (easy but manual)
Chrome scraping extensions sit in your toolbar and try to auto-detect tabular data on whatever page you’re viewing. Click the icon, it highlights the data it found, export to CSV or Excel.
How they work
- Install the extension from the Chrome Web Store
- Navigate to the page with the data you want
- Click the extension icon, it scans the page for tables and lists
- Review what it found, adjust if needed
- Click Export to CSV or Export to Excel
The nice thing: extensions do see JavaScript-rendered content because they read the page after the browser has fully loaded it. So they can grab data from Amazon product listings, Google results, other dynamic pages.
The problem
It’s completely manual. Every time you want fresh data, you open the browser, navigate to the page, click the extension, wait, export. There’s no “run this every morning.” One-time grab? Sure. Ongoing monitoring? Not happening.
Accuracy varies a lot too. The auto-detection guesses which part of the page is “the table.” Sometimes it nails it. Sometimes it grabs the navigation menu or sidebar ads. You end up cleaning the output longer than it took to export.
And there’s a privacy angle. These extensions can read every page you visit. Some of the free ones monetize by collecting your browsing data. Worth checking the privacy policy before you install one.
The verdict on extensions
Good for a quick, one-time data grab from a page you're already looking at. Not a solution for anything you need to do more than once, and definitely not for anything you want to automate.
Method 4: API → Google Sheets (the one that actually works)
Do you see the pattern with the first three methods? They all try to reverse-engineer a webpage’s visual layout. Websites change their HTML, JavaScript rendering makes the raw source useless, and you’re always one site update away from broken data.
An API flips the whole thing. Instead of parsing messy HTML, you call an endpoint that returns clean, structured JSON. Every field labeled, every value typed, same format every single time.
Getting JSON into a spreadsheet is a solved problem.
Think of it this way: you’re not “scraping” anymore. You’re requesting data from a service that has already solved the hard parts (rendering, parsing, anti-bot handling) and hands you a clean response. Your spreadsheet just receives it.
| Approach | What you get | Example output |
|---|---|---|
| HTML scraping | Raw HTML tags, mixed content, broken fragments | <div class="a-price"><span>$29</span>... |
| API → JSON | Labeled fields, typed values, consistent structure | {"product_price": "$29.99", "rating": 4.5} |
JSON
Structured, clean data
→
Apps Script / Power Query
📊
Your spreadsheet
I’ll walk you through two tutorials: Google search results (using the Google Search API ) and Amazon product data, both into Google Sheets via Apps Script.
Apps Script is Google’s built-in scripting language. Free, runs in the cloud, nothing to install. If you prefer Excel, I cover that at the end.
Step 1: Get your API key (2 minutes)
You need a free RapidAPI account and an API key. Same key works for both the Google Search API and the Amazon scraping API .
- Go to the FlyByAPIs Google Search API on RapidAPI
- Click Subscribe to Test and pick the free plan (200 requests/month, no credit card)
- Copy your API key from the header parameters section
Keep this key handy. You’ll paste it into the script next.
Step 2: Open Apps Script
- Open a new Google Sheet (or the one where you want the data)
- Go to Extensions → Apps Script
- Delete any code in the editor
- You’re ready to paste
Tutorial A: Google search results → Google Sheets
This script calls the FlyByAPIs Google search endpoint with your keyword and writes the top 10 results (position, title, URL, domain) directly into your sheet.
Paste this into the Apps Script editor:
| |
Click Run (the play button). Google will ask you to authorize the script, click through the permissions. First run takes 5-10 seconds.
Check your sheet. You should see 10 rows of Google search results with position, title, URL, and domain. Clean, structured, no cleanup needed.
20 lines of code. No XPath, no CSS selectors, no HTML parsing. The API did the hard work and your script just put the results where you wanted them.
What you can do with this
Change the keyword variable to track your own brand's rankings, monitor competitor positions, or research which pages rank for any term. You can add multiple keywords by looping through a list in column A, one API call per keyword.
Want to track rankings for several keywords at once? Here’s a version that reads keywords from column A and writes results to separate sheets:
| |
Create a sheet called “Keywords”, list your keywords in column A starting from row 2, and run it. Each keyword gets its own tab with fresh ranking data.
💡 Pro tip
The same API key works across all FlyByAPIs endpoints — Google Search, Amazon, Google Maps, Crunchbase, Translator, and Jobs Search. One key, six data sources, all clean JSON into your spreadsheet.
Tutorial B: Amazon product data → Google Sheets
This one might be even more useful if you’re in e-commerce. The Amazon data extraction API returns structured product data (titles, prices, ratings, review counts, ASINs) as clean JSON.
| |
Run it. Your sheet fills with Amazon product data: real prices, real ratings, real review counts. Not scraped HTML fragments that might be the product title or might be a breadcrumb. Structured data, every time.
| Field | What it contains | Spreadsheet column |
|---|---|---|
| title | Full product name | A — Title |
| price | Current sale price | B — Price |
| rating | Average rating (1.0–5.0) | D — Rating |
| reviews_count | Total review count | E — Reviews |
| asin | Amazon Standard ID | F — ASIN |
Why the API approach wins for spreadsheet users
Same format every time
The API returns the same JSON structure on every call. Your columns don't shift, your data doesn't garble. Compare that to HTML scraping, where one site redesign breaks everything.
Works on JavaScript-heavy sites
Amazon, Google, every modern SPA. The API handles rendering, anti-bot protection, and data extraction on its side. You just get clean JSON back.
Runs on a schedule
Set up a time trigger and your data refreshes itself. Every hour, every day, every week. No browser to open, no buttons to click.
Step 3: Set up automatic updates
This is where the setup goes from “useful one-time thing” to “system that runs itself.”
In the Apps Script editor:
- Click the clock icon on the left sidebar (Triggers)
- Click + Add Trigger
- Choose your function (e.g.,
scrapeAmazonProducts) - Set event source to “Time-driven”
- Set the interval (hourly, daily, or weekly)
- Click Save
That’s all. Your Google Sheet now pulls fresh data from the Amazon product API or the FlyByAPIs search endpoint on whatever schedule you pick. No human needed.
We have a sheet tracking competitor prices on Amazon for one of our clients. Runs every morning at 6 AM, and by the time the team opens it at 9, fresh data is already there. Took maybe 15 minutes to set up.
No credit card required · Works with Google Sheets and Excel
What about Excel? (Yes, it works too)
Everything above uses Google Sheets because Apps Script makes API calls simple and free.
But if you’re an Excel person, you have two options:
| Feature | Google Sheets + Apps Script | Excel Power Query | Excel VBA |
|---|---|---|---|
| Setup time | 5 min | 10 min | 15 min |
| Auto-schedule | Built-in triggers | Excel 365 only | Task Scheduler |
| Runs in cloud | ✓ | ✗ | ✗ |
| Extra libraries | None | None | VBA-JSON |
Option A: Power Query with a web API
Excel’s Power Query can also fetch data from any URL that returns JSON, including API endpoints.
- Go to Data → Get Data → From Other Sources → From Web
- Select Advanced
- In the URL field, paste your API endpoint:
https://google-serp-search-api.p.rapidapi.com/search?q=your+keyword&num=10&gl=us - Add HTTP headers:
x-rapidapi-key: your API keyx-rapidapi-host:google-serp-search-api.p.rapidapi.com
- Click OK and Power Query opens the JSON response
- Expand the
data→organic_resultscolumn, select the fields you want, and click Close & Load
The data loads as an Excel table. Refresh manually with Data → Refresh All, or schedule automatic refreshes if you’re on Excel 365 with a Microsoft account.
Option B: VBA macro
If you want full control, a VBA macro works too. More code than Apps Script, same result:
| |
You’ll need the VBA-JSON library
for JSON parsing. Import the JsonConverter.bas module into your VBA project. One extra step, but after that it works the same way.
VBA is more code than Apps Script, but you get the same structured data, the same reliability, same API key. Pick whichever spreadsheet your team already lives in.
My recommendation: Google Sheets + Apps Script is easier for most people. Runs in the cloud, triggers are built in, code is simpler. Use Excel if your workflow already lives there.
What to build next
The same pattern (API call → JSON → spreadsheet) works for any data source with an API. Here are things people have built with this:
📊 SEO rank tracker
Monitor 50 keywords daily. The Google Search API returns position, title, URL, and featured snippets — one call per keyword.
🏷️ Amazon price monitor
Track competitor prices across 200 ASINs with the Amazon data API. Trigger twice daily, conditional-format price drops. Full guide: building a price tracker.
📍 Local business monitor
Pull Google Maps listings for specific searches using the Maps extraction API. Track which competitors show up in the local pack.
🔎 Lead generation
Extract business data from Google Maps into a sheet — names, addresses, phones, ratings, websites. Sales teams love this one.
If spreadsheets aren’t enough and you want to go full code, we have guides for web scraping with Python and scraping with Node.js .
Bottom line
You can get web data into Excel or Google Sheets. But the tutorials that tell you it’s “easy” with Power Query or IMPORTXML leave out the part where those methods break on 80% of modern websites.
What actually holds up: call a web data API that returns structured JSON, pipe it into your spreadsheet with a simple script, set a trigger to keep it fresh. 10 minutes of setup.
The FlyByAPIs free tier gives you 200 requests per month to test it. No credit card, no commitment. If it works for you (and I think it will), paid plans start at $9.99/month for 15,000 requests.
I know I’m biased. This is what we sell. But I spent a year watching the other methods break before I built this, and the API approach is the one that doesn’t.
200 requests/month free · Google Search, Amazon, and Maps APIs
P.S. If you build something cool with this approach, send me a message. I collect the creative use cases. Some of the best product ideas I’ve seen started as “I just needed this data in a spreadsheet.”
Oriol.
