Google Sheet Exporter
Pricing
Pay per event
Google Sheet Exporter
Export public Google Sheets to clean dataset rows with normalized headers, raw cells, sheet IDs, gids, and CSV/JSON automation outputs.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Export public Google Sheets to clean Apify dataset rows, JSON, CSV, Excel, webhooks, and API workflows.
Google Sheet Exporter turns any public/shared Google Sheet into structured dataset records. Paste a spreadsheet URL, a spreadsheet ID, or a direct CSV export URL, and the actor fetches the public CSV feed, parses the header row, normalizes duplicate or blank column names, and saves one dataset item per sheet row.
What does Google Sheet Exporter do?
Google Sheet Exporter reads public Google Sheets through their CSV export endpoint and converts rows into structured Apify dataset items.
It is useful when you need to:
- ✅ Import a public Google Sheet into an Apify automation.
- ✅ Schedule recurring exports from shared operations sheets.
- ✅ Convert a published Google Sheet to JSON without writing glue code.
- ✅ Preserve row numbers, tab gids, raw cells, and normalized column names.
- ✅ Send Google Sheet rows to webhooks, Make, Zapier, Airtable, BigQuery, or your own API.
Who is it for?
This actor is built for automation operators, data teams, developers, no-code builders, marketers, analysts, and lead generation teams that already use Google Sheets as a lightweight database.
Common users include:
- 🧑💻 Developers who need a simple Google Sheets CSV to JSON API.
- 📊 Analysts who want scheduled copies of public spreadsheet data.
- 🧰 No-code operators who connect Apify datasets to Make or Zapier.
- 🧾 Lead teams that receive public prospect lists in Google Sheets.
- 🏛️ Civic, research, and community teams that publish open spreadsheets.
Why use it?
Google Sheets already has export URLs, but production workflows need more than a raw CSV download. This actor adds validation, parsing, metadata, normalized keys, dataset storage, scheduling, API access, and integrations.
You get repeatable exports with clear errors when a sheet is private or not published.
Supported Google Sheet inputs
You can paste:
- Standard Google Sheet edit URLs.
- Spreadsheet IDs.
- URLs with
#gid=...for specific tabs. - Direct
/export?format=csvURLs. - Published CSV URLs with
output=csv.
Data output table
| Field | Description |
|---|---|
_rowNumber | Row number in the source sheet. The header row is row 1. |
_sourceUrl | The URL or ID you entered. |
_fetchUrl | The resolved public CSV URL used by the actor. |
_sheetId | Parsed spreadsheet ID when available. |
_gid | Worksheet tab gid. |
_fetchedAt | Timestamp for the export run. |
_rawRow | Original CSV cells as an array. |
columns | Object with normalized header keys and cell values. |
| Dynamic columns | Top-level normalized columns such as email, company, or student_name. |
How much does it cost to export Google Sheets?
The actor uses pay-per-event pricing. Each run has a small start fee and then charges per exported row. Small test runs are inexpensive, and larger scheduled exports receive tiered per-row discounts.
Because this actor uses direct HTTP CSV exports and no browser, compute costs are low.
How to use Google Sheet Exporter
- Open the actor on Apify.
- Add one or more public Google Sheet URLs or IDs.
- Set a
gidif your URL does not already include the tab you need. - Choose the maximum rows per sheet.
- Run the actor.
- Download the dataset as JSON, CSV, Excel, XML, or RSS.
- Connect the dataset to your automation workflow.
Input settings
Sheet URLs or IDs
Use startUrls for all sheet sources. You can add one source or many sources in the same run.
Worksheet gid override
Use gid when you paste a spreadsheet ID or a URL without a tab identifier. Google Sheets usually uses gid=0 for the first tab.
Maximum rows per sheet
Use maxRowsPerSheet to cap output volume. The actor always treats the first CSV row as headers and starts emitting data from row 2.
Trim cell values
Enable trimValues to remove surrounding whitespace from cells.
Include raw row arrays
Enable includeRawRow when you need the original CSV row alongside normalized fields.
Skip blank rows
Enable skipBlankRows to ignore empty spacer rows.
Output example
{"_rowNumber": 2,"_sourceUrl": "https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit#gid=0","_sheetId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","_gid": "0","_fetchedAt": "2026-06-21T00:00:00.000Z","_rawRow": ["Alexandra", "Female", "4. Senior", "CA", "English", "Drama Club"],"columns": {"student_name": "Alexandra","gender": "Female","class_level": "4. Senior"},"student_name": "Alexandra","gender": "Female","class_level": "4. Senior"}
Header normalization
Headers are converted to lowercase snake_case keys.
Examples:
Student Namebecomesstudent_name.E-mail Addressbecomese_mail_address.- blank headers become
column_1,column_2, and so on. - duplicate headers receive suffixes such as
status_2.
Exporting multiple tabs
Google Sheets identifies each tab with a gid. To export multiple tabs, add the same spreadsheet more than once with different gid values in the URL, or run separate tasks for each tab.
Automatic tab discovery is intentionally not required for reliable v1 exports. Explicit gids keep the workflow predictable.
Private sheet troubleshooting
The actor only supports public/shared/published sheets that Google can export without account cookies or OAuth.
If a run fails with a permission message:
- Open the sheet in Google Sheets.
- Click Share.
- Allow access to anyone with the link, or publish the sheet.
- Re-run the actor with the same URL.
Tips for reliable exports
- ✅ Put stable column names in row 1.
- ✅ Avoid merged cells in source data tabs.
- ✅ Use explicit
gidvalues for multi-tab spreadsheets. - ✅ Keep
maxRowsPerSheetsmall for smoke tests. - ✅ Schedule recurring runs for monitoring public sheets.
Integrations
Google Sheet Exporter works with Apify datasets and integrations:
- Send rows to a webhook after every run.
- Sync dataset items to Make or Zapier.
- Download CSV or Excel for reporting.
- Call the actor from a backend using the Apify API.
- Chain it before enrichment, validation, or lead scoring actors.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/google-sheet-exporter').call({startUrls: [{ url: 'https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit#gid=0' }],maxRowsPerSheet: 25});console.log(run.defaultDatasetId);
API usage with Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/google-sheet-exporter').call(run_input={'startUrls': [{'url': 'https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit#gid=0'}],'maxRowsPerSheet': 25,})print(run['defaultDatasetId'])
API usage with cURL
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~google-sheet-exporter/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"startUrls":[{"url":"https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit#gid=0"}],"maxRowsPerSheet":25}'
MCP usage
Use this actor from Apify MCP with Claude Code, Claude Desktop, or other MCP clients.
MCP server URL:
https://mcp.apify.com/?tools=automation-lab/google-sheet-exporter
Claude Code setup:
$claude mcp add apify-google-sheet-exporter https://mcp.apify.com/?tools=automation-lab/google-sheet-exporter
Claude Desktop JSON config:
{"mcpServers": {"apify-google-sheet-exporter": {"url": "https://mcp.apify.com/?tools=automation-lab/google-sheet-exporter"}}}
Example prompts:
- “Export this public Google Sheet and summarize the rows.”
- “Run Google Sheet Exporter every day and compare today’s dataset with yesterday’s.”
- “Convert this public spreadsheet to JSON and send the rows to my webhook.”
Scheduling
Create an Apify task with your sheet URL and schedule it hourly, daily, or weekly. This is useful for public directories, lead lists, signup sheets, inventory trackers, and research datasets.
Limitations
- Private Google account data is not supported.
- The actor does not use OAuth.
- The first row is treated as headers.
- Automatic worksheet discovery is not part of v1.
- Google may block export for sheets that are not public or not shared correctly.
Legality
Only export sheets you are allowed to access. Public Google Sheets can contain personal or sensitive data, so review the source’s terms, privacy expectations, and applicable laws before storing or processing rows.
FAQ
Can it export private Google Sheets?
No. The actor intentionally supports public/shared sheets only. Private account access would require OAuth and user-specific permissions.
Can I export multiple sheets in one run?
Yes. Add multiple startUrls. For multiple tabs from the same spreadsheet, include each tab URL with its own gid.
Why did my run return a permission error?
Google returned an HTML permission or sign-in page instead of CSV. Share or publish the sheet publicly, then run again.
Does it preserve original column names?
The original row is preserved in _rawRow. Normalized names are used in columns and top-level fields for easier integrations.
Related scrapers and utilities
- https://apify.com/automation-lab/website-contact-finder
- https://apify.com/automation-lab/sitemap-url-extractor
- https://apify.com/automation-lab/domain-availability-checker
- https://apify.com/automation-lab/seo-audit-tool
Changelog
- v0.1 — Initial public Google Sheets CSV export, batch URLs, row metadata, raw rows, and normalized columns.