Google Sheets Export & Scraper
Pricing
$2.00 / 1,000 sheet exports
Google Sheets Export & Scraper
Export any public Google Sheet to flat JSON rows, a full xlsx workbook, or both. Typed values, multi-tab, hyperlinks and formulas optional. No Google Cloud project, no OAuth, no API key — just paste a sharing URL.
Pricing
$2.00 / 1,000 sheet exports
Rating
0.0
(0)
Developer
Sourabh Kumar
Actor stats
0
Bookmarked
6
Total users
3
Monthly active users
3 days ago
Last modified
Categories
Share
Overview
Export any public Google Sheet to flat JSON rows, a full xlsx workbook, or both — with no Google Cloud project, no OAuth, no service account. Just paste a sharing URL.
$2 per 1,000 sheet tabs exported. No per-run fee in rows mode.
Works on any sheet shared as "Anyone with the link can view," in any language, hosted in any region.
Why this scraper (vs. official API or competitors)
| Concern | Google Sheets API | Other Apify actors | Google Sheets Export |
|---|---|---|---|
| OAuth or service account required? | Yes | Often yes | No |
| Multi-tab export in a single run? | Yes (with code) | Usually one-tab-per-run | Yes, native |
| Hyperlinks + cell formulas alongside values? | Partial (separate calls) | Rarely | Yes, opt-in |
| Full xlsx workbook with formatting? | No (rebuild yourself) | Rare | Yes |
| Per-run start fee? | n/a | Often $0.05 to $0.20 | None |
| Price per 1,000 results | Free (with quota + setup cost) | Often split across 2 to 4 actors | $2 |
The free public gviz/tq endpoint is great if your needs end at one tab to CSV. The moment you need multiple tabs, typed values, hyperlinks, formulas, or a real xlsx — you're writing glue. This Actor is that glue, billed by the tab.
What data can you extract?
| 📑 Sheet name | 🔢 Typed cell values | 📊 All columns from your sheet | 🔗 Hyperlinks (opt-in) |
| ➗ Cell formulas (opt-in) | 📦 Full xlsx workbook | 📋 Workbook metadata | 🗂 Tabs (gid + hidden state) |
| 🏷 Named ranges | 🆔 Spreadsheet ID | 📝 Workbook title | 🎯 Server-side query (SQL-like) |
rows mode
One dataset item per spreadsheet row. Every column from your sheet becomes a field on the item, with the original type preserved (numbers stay numeric, dates stay dates). Plus:
sheetName— which tab the row came from._links— clickable URLs from=HYPERLINK()cells. Only present whenincludeHyperlinks: true._formulas— original cell formulas like=SUM(B:B). Only present whenincludeFormulas: true.
workbook mode
Two files in the key-value store:
workbook.xlsx— the full xlsx as Google's/export?format=xlsxreturns it: formulas, formatting, hyperlinks, embedded charts.metadata.json— workbook title,spreadsheetId, every tab (name + gid + hidden), named ranges.
How to scrape Google Sheets: step by step
- Create a free Apify account. Takes 30 seconds, no card needed.
- Open Google Sheets Export & Scraper in the Apify Console.
- Paste the sharing URL of any public Google Sheet. Make sure the sheet is set to "Anyone with the link → Viewer."
- Click Start. Most runs finish in under 30 seconds; large workbooks take a minute.
- Export as JSON, CSV, or Excel — or fetch via API. xlsx files come straight from the key-value store.
How much does Google Sheets Export & Scraper cost?
Pay-per-result. Three numbers to remember:
- Per 1,000 results: $2.00 (one result = one sheet tab exported).
- Free-plan yield: roughly 2,500 tabs on Apify's $5/month free credits.
- Starter-plan yield: about 14,500 tabs on the $29/month Starter plan.
No per-run fee in rows mode. workbook and both modes add $0.005 per run for the xlsx fetch — a 3-tab both run runs $0.011 total. Compute is on the house in pay-per-event mode.
Input
{"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/1wZhPLMCHKJvwOkP4juclhjFgqIY8fQFMemwKL2c64vk/edit","outputMode": "rows","sheetNames": ["Items"],"maxRows": 1000,"includeHyperlinks": true,"includeFormulas": false,"query": "select A,B,C where C > 100 order by C desc","range": "A1:C500","headers": 1}
| Field | Type | Default | Note |
|---|---|---|---|
spreadsheetUrl | string | — | Full URL of a public sheet (/d/{id}/edit). Published URLs (/d/e/...) are rejected. |
outputMode | enum | rows | rows, workbook, or both. |
sheetNames | string[] | all tabs | Export only these tabs. Ignored in workbook mode (Google's xlsx export always includes every tab). |
maxRows | integer | unlimited | Cap rows per tab. Ignored when query is set. |
includeHyperlinks | boolean | false | Add _links field per row. Triggers one xlsx fetch. |
includeFormulas | boolean | false | Add _formulas field per row. Triggers one xlsx fetch. |
query | string | — | Google Visualization Query Language pass-through. |
range | string | — | A1-notation cell range, e.g. A1:C100. |
headers | integer (0–10) | auto | How many leading rows are headers. 0 = headerless (Column A, Column B, ...). |
Recipes (ready-to-paste)
Export a single tab to JSON
{"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/1wZhPLMCHKJvwOkP4juclhjFgqIY8fQFMemwKL2c64vk/edit","sheetNames": ["Items"]}
Back up an entire workbook as xlsx
{"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/1wZhPLMCHKJvwOkP4juclhjFgqIY8fQFMemwKL2c64vk/edit","outputMode": "workbook"}
Pull the first 100 rows of every tab
{"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/1wZhPLMCHKJvwOkP4juclhjFgqIY8fQFMemwKL2c64vk/edit","maxRows": 100}
Filter server-side with a SQL-like query
{"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/1wZhPLMCHKJvwOkP4juclhjFgqIY8fQFMemwKL2c64vk/edit","query": "select A,B,C where C > 100 order by C desc limit 25"}
Preserve hyperlinks from =HYPERLINK() cells
{"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/1wZhPLMCHKJvwOkP4juclhjFgqIY8fQFMemwKL2c64vk/edit","includeHyperlinks": true}
Include cell formulas alongside values
{"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/1wZhPLMCHKJvwOkP4juclhjFgqIY8fQFMemwKL2c64vk/edit","includeFormulas": true}
Slice a specific cell range
{"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/1wZhPLMCHKJvwOkP4juclhjFgqIY8fQFMemwKL2c64vk/edit","range": "A1:C500"}
Both modes in one run (rows + xlsx backup)
{"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/1wZhPLMCHKJvwOkP4juclhjFgqIY8fQFMemwKL2c64vk/edit","outputMode": "both","includeHyperlinks": true}
Output
rows mode — dataset item
{"sheetName": "Items","edition": "2015.10.21","position": 1,"headline": "Every place name in the United States.","text": "Sometimes, bureaucracy creates poetry. Since 1890, the U.S. Board on Geographic Names has been cataloguing, standardizing, and promulgating official names for the places we hike, swim, work, and call home...","links": "http://geonames.usgs.gov/index.html\nhttp://geonames.usgs.gov/domestic/index.html","hattips": "https://twitter.com/emilymbadger/status/653982851386310656","_links": {"hattips": "https://twitter.com/emilymbadger/status/653982851386310656"},"_formulas": null}
_links and _formulas are absent from the row unless their flag is enabled and the row actually carries a hyperlink or formula. They are never emitted as literal null.
workbook mode — key-value store
workbook.xlsx is the binary file. metadata.json looks like:
{"title": "Data Is Plural — Structured Archive","spreadsheetId": "1wZhPLMCHKJvwOkP4juclhjFgqIY8fQFMemwKL2c64vk","tabs": [{ "name": "Items", "gid": "0", "hidden": false },{ "name": "Notes", "gid": "1234567", "hidden": false },{ "name": "Community-Built Tools", "gid": "987654", "hidden": false }],"namedRanges": [{ "name": "AllData", "range": "" }],"filterViews": [],"pivotTables": [],"tables": []}
filterViews, pivotTables, and tables are reserved for a future release; emitted as empty arrays today.
Field availability by mode
| Field group | rows | workbook | both |
|---|---|---|---|
| Dataset items (one per row) | ✅ | — | ✅ |
sheetName on each item | ✅ | — | ✅ |
| Typed cell values per column | ✅ | — | ✅ |
_links field (when enabled) | ✅ | — | ✅ |
_formulas field (when enabled) | ✅ | — | ✅ |
workbook.xlsx in key-value store | — | ✅ | ✅ |
metadata.json (tabs, namedRanges, title) | — | ✅ | ✅ |
Server-side query and range | ✅ | — | ✅ (rows side only) |
| Per-tab pricing event fires | ✅ | — | ✅ |
| Workbook pricing event fires | — | ✅ | ✅ |
FAQ
How much does Google Sheets Export & Scraper cost?
Google Sheets Export & Scraper uses pay-per-result pricing. You pay $2.00 for 1,000 results (one result = one sheet tab exported). The Apify Free plan gives you $5 in usage credits a month, enough for around 2,500 tabs. If you run regularly, the $29/month Starter plan covers about 14,500 tabs.
No subscription lock-in. Pause whenever.
Is it legal to scrape Google Sheets?
Scraping public data is generally allowed in the US and most of the EU, as long as you don't collect personal data covered by GDPR or CCPA without a lawful basis. This Actor only touches sheets the owner has explicitly published as "Anyone with the link can view" — but how you use the output is on you.
Apify's full breakdown: Is web scraping legal?.
Can I integrate Google Sheets Export & Scraper with other tools?
Push results into Make, Zapier, Slack, Airbyte, GitHub, Google Sheets, Google Drive, and more. Apify treats every actor as a webhook source, so anything that consumes webhooks or pulls from an API works.
Full list: Apify integrations.
Can I use Google Sheets Export & Scraper with the Apify API?
Yes. Every run is available via the Apify REST API:
curl -X POST "https://api.apify.com/v2/acts/sourabhbgp~google-sheets-export/runs?token=APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/.../edit"}'
Docs: Apify API reference.
Can I use Google Sheets Export & Scraper through an MCP Server?
Yes. Apify ships an MCP server that exposes every actor as a tool, so Claude Desktop, Cursor, and any other MCP-capable client can call Google Sheets Export & Scraper. Setup: Apify MCP docs.
Your feedback
Bug, missing field, or odd behavior? Drop a note in the Issues tab. Reports go to a human and fixes usually ship the same week.

