Google Sheets Export & Import: Dataset to Sheet, No Failed Runs
Pricing
from $0.14 / 1,000 row written to the sheets
Google Sheets Export & Import: Dataset to Sheet, No Failed Runs
Writes an Apify dataset, JSON or CSV to a Google Sheet (append, replace, update by key) or imports a sheet. Waits out Google's 429 limit, no duplicate rows, rolls over at the cell cap. Inputs: spreadsheet, mode, datasetId. $0.005 per job + $0.0002 per row. Agent-ready via x402 and MCP, no OAuth.
Pricing
from $0.14 / 1,000 row written to the sheets
Rating
0.0
(0)
Developer
Adam Pearce
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
Send your scraper results to Google Sheets, and never lose a run to Google's rate limit again. This Actor writes any Apify dataset, JSON array or CSV/Excel file into a Google Sheet (append, replace, or update rows by a key column), or imports a sheet into a dataset. When Google says "too many requests" (HTTP 429), it waits and tries again instead of failing. When a spreadsheet fills up, it carries on in the next one. If anything genuinely cannot be written, it tells you exactly which rows and saves them. No silent half-imports.
What does Google Sheets Export & Import do?
- Export: dataset (or JSON, or a CSV/Excel/JSON file link) to a Google Sheet tab.
- Three write modes: append below existing rows, replace the tab's contents, or update by key (match on
url,id,sku,email... change only the fields you send, add rows for new keys). - Import: read a tab into an Apify dataset (first row = column names).
- Plugs in after any scraper: add it on your scraper's Integrations tab and the Dataset field is set to
{{resource.defaultDatasetId}}for you, so every finished scrape lands in your sheet. - No Google login screen: you share the sheet with one email address. That means it works from schedules, the API, n8n, Make, Zapier and AI agents, where an OAuth "Connect Google account" step cannot be clicked.
Why use it instead of a free Google Sheets actor?
The most used free Google Sheets actor on the Store had 56% of its runs fail in the last 30 days (49,232 of 88,370, Apify Store stats, 29-10-2026). Its own page lists the reasons: Google's limit of about 60 writes a minute ("the run fails and nothing is imported"), the spreadsheet cell cap ("errors out, nothing is imported"), and the Google account connection. This Actor is built around exactly those three:
| Problem | What happens here |
|---|---|
| Google's 429 rate limit | Waited out with exponential backoff (1 s, 2 s, 4 s ... 64 s, honouring Google's Retry-After), then retried. Every wait is counted in the run report. |
| Retries adding duplicate rows | Rows are written to exact row numbers, so a retried request rewrites the same cells. Nothing is ever written twice. |
| Few big writes instead of many small ones | Up to 10,000 rows (and about 1.5 MB) per request, so a 50,000-row export is 5 or 6 writes, nowhere near the limit. |
| Spreadsheet full (Google allows 10 million cells) | Rolls over into your next overflow spreadsheet with the same tab name and columns. Without one, it writes what fits and saves the rest as UNWRITTEN_ROWS.csv (not charged). |
| Run stopped or timed out | Progress is saved after every write. Resurrect the run and it continues from the next row. |
| Columns shuffled | Your sheet's column order is kept. New fields are added as new columns on the right, so formulas and charts keep pointing at the right columns. |
How to use it
- Open your Google Sheet, click Share, add
nerolabs-sheets@nero-labs-sheets.iam.gserviceaccount.comas an Editor, untick "Notify people", and click Share. - Paste the sheet's link into Spreadsheet.
- Pick a Mode and a source: a Dataset, Raw data (JSON) or a File link.
- Run it. The report row shows rows written, new columns, rate limits waited out and the sheet link.
To run it after every scrape: open your scraper, go to Integrations, add "Google Sheets Export & Import", fill in Spreadsheet and Mode. Done.
The form comes prefilled with a Nero Labs demo sheet so you can see a run work straight away. That sheet is shared by everyone and replaced on every run (50 rows max), so use your own sheet for real data.
Input example
{"spreadsheet": "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit","sheetName": "Leads","mode": "update","keyColumn": "url","datasetId": "{{resource.defaultDatasetId}}"}
Other useful fields: Columns to export (pick and order fields), Flatten nested fields (on by default, address/city style, the same names as Apify's CSV export), Let Google read values (turn text dates and =formulas into real dates and formulas; off by default so text stays text), Overflow spreadsheets, Rows per tab, Max rows, Skip first rows.
Output
Export modes write one report row per run (also saved as OUTPUT):
{"status": "ok","mode": "append","message": "Wrote 3000 row(s) (3000 added, 0 updated) to Leads Sheet / Leads. Google rate-limited 4 request(s); each was waited out and retried, nothing was lost.","spreadsheetUrl": "https://docs.google.com/spreadsheets/d/.../edit","tabs": ["Leads Sheet / Leads"],"rowsWritten": 3000,"rowsAppended": 3000,"rowsUpdated": 0,"rowsNotWritten": 0,"columnsAdded": ["phone"],"rateLimitHits": 4,"retries": 4,"secondsWaitedForGoogle": 21.4,"rolledOverTo": [],"warnings": []}
Import mode puts the sheet's rows in the dataset, using the header row as field names. You can download the dataset as JSON, CSV, Excel or HTML.
How much does it cost?
Pay per event, no subscription:
- $0.005 per job (once per run that writes or imports at least one row)
- $0.0002 per row written (appended, replaced or updated)
- $0.0001 per row imported
Examples: sending 1,000 rows after each daily scrape costs about $0.21 a run, roughly $6 a month. A one-off 50,000-row export costs about $10. Rate-limit retries, skipped rows, rows that did not fit and failed writes are never charged. Higher Apify plans get up to 30% off per row.
Limits and honest notes
- Google allows 10 million cells per spreadsheet (all tabs together) and 50,000 characters per cell. Longer cells are shortened and counted in the report.
- The service account cannot create new spreadsheets by itself (Google gives service accounts no Drive storage), which is why overflow uses spreadsheets you create and share.
- Update mode matches keys after trimming spaces, and never rewrites the key cell. It does not roll over into overflow spreadsheets.
- Replace mode overwrites rows from the top and then removes old rows left below, so the tab is never empty while it works. It keeps your existing columns.
- The Google connection is shared by all users of this Actor. Google's quota is shared too, which is exactly why every request is paced and retried rather than fired at once.
- Your data goes straight from Apify to Google's API. Nothing is stored by Nero Labs.
FAQ
Do I need to connect my Google account? No. Sharing the sheet with the service account email is the whole setup, and you can remove it from the Share list at any time.
Can an AI agent use this? Yes. There is no interactive login, so agents can call it through Apify's MCP server or pay per call with x402. Give it a spreadsheet the account is shared on.
What if a run fails anyway? The report and the run's status say why in plain words (for example "Share the sheet with ... as an Editor"). Rows that were not written are listed and saved, never dropped quietly.
Will it overwrite my formulas? Append writes only into empty rows. Update writes only the fields you send. Replace rewrites the data rows.
If this saved you a failed export, a review on the Store page helps a lot. Questions or ideas: use the Issues tab.