{"slug":"x402-agent-tools-nerolabs-workers-dev-google-sheets-e250c9","title":"Writes up to 1,000 JSON rows to a Google Sheet (append, replace, or update rows ","host":"x402-agent-tools.nerolabs.workers.dev","method":"POST","resource":"https://x402-agent-tools.nerolabs.workers.dev/google-sheets","category":"other","description":"Writes up to 1,000 JSON rows to a Google Sheet (append, replace, or update rows matched on keyColumn, adding new keys) or reads a tab back as JSON (mode import). No OAuth: share the sheet with nerolabs-sheets@nero-labs-sheets.iam.gserviceaccount.com as Editor. Keeps column order, adds new fields on ","price_listed":0.0052,"price_asked":0.0052,"state":"answering","state_label":"Answering","checks_7d":2,"answered_7d":2,"latency_ms_median":319,"reported_calls_30d":1,"reported_payers_30d":1,"networks":["eip155:8453"],"badge":"unverified","paid_checks_7d":0,"paid_ok_7d":0,"example_input":{"body":{"mode":"append","rows":[{"city":"London","company":"Northwind Traders","rating":4.6}],"sheetName":"Leads","spreadsheet":"https://docs.google.com/spreadsheets/d/1gV5ZFKQsKgake9aKTTQRaPRwmA7yS4BZySrmzGqNVAg/edit"},"bodyType":"json","method":"POST","type":"http"},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"additionalProperties":false,"properties":{"body":{"additionalProperties":false,"properties":{"addNewRows":{"default":true,"description":"Update mode: add rows for keys not yet in the sheet (default true).","type":"boolean"},"columns":{"description":"Optional: only these fields, in this order.","items":{"type":"string"},"type":"array"},"keyColumn":{"description":"Update mode: the field that identifies a row, such as id, url, sku or email.","type":"string"},"limit":{"default":200,"description":"Import mode: rows to read (default 200, at most 1,000).","maximum":1000,"minimum":1,"type":"integer"},"mode":{"default":"append","description":"append: add rows after the last row with data. replace: overwrite the tab, then remove old rows left below. update: match rows on keyColumn and change only the fields sent, adding rows for new keys. import: read the tab back as JSON rows (first row = column names).","enum":["append","replace","update","import"],"type":"string"},"offset":{"description":"Import mode: rows to skip first.","minimum":0,"type":"integer"},"parseValues":{"default":false,"description":"true: values are entered as if typed (dates, numbers, =formulas). false (default): written exactly as sent.","type":"boolean"},"rows":{"description":"Rows to write (append, replace, update), as JSON objects; keys become columns. Up to 1,000 per call. Nested objects become parent/child columns.","items":{"type":"object"},"type":"array"},"sheetName":{"description":"Tab name. Created if missing. Default: the tab in the link, or the first tab.","type":"string"},"spreadsheet":{"description":"Google Sheet link or ID. The sheet must be shared with nerolabs-sheets@nero-labs-sheets.iam.gserviceaccount.com as an Editor (no OAuth).","type":"string"}},"required":["spreadsheet"],"type":"object"},"bodyType":{"enum":["json","form-data","text"],"type":"string"},"method":{"enum":["POST"],"type":"string"},"type":{"const":"http","type":"string"}},"required":["type","method","bodyType","body"],"type":"object"},"output":{"properties":{"example":{"properties":{"count":{"type":"integer"},"rows":{"items":{"properties":{"columnsAdded":{"items":{"type":"string"},"type":"array"},"finishedAt":{"type":"string"},"googleRequests":{"type":"integer"},"message":{"type":"string"},"mode":{"type":"string"},"rateLimitHits":{"type":"integer"},"retries":{"type":"integer"},"rolledOverTo":{"items":{"type":"string"},"type":"array"},"rowsAppended":{"type":"integer"},"rowsImported":{"type":"integer"},"rowsNotWritten":{"type":"integer"},"rowsRead":{"type":"integer"},"rowsSkippedNoKey":{"type":"integer"},"rowsUpdated":{"type":"integer"},"rowsWritten":{"type":"integer"},"secondsWaitedForGoogle":{"type":"integer"},"spreadsheetTitle":{"type":"string"},"spreadsheetUrl":{"type":"string"},"status":{"type":"string"},"tabs":{"items":{"type":"string"},"type":"array"},"totalColumns":{"type":"integer"},"truncatedCells":{"type":"integer"},"unwrittenRowsFile":{"type":"string"},"warnings":{"items":{"type":"string"},"type":"array"}},"type":"object"},"type":"array"}},"type":"object"},"type":{"type":"string"}},"required":["type"],"type":"object"}},"required":["input"],"type":"object"},"history":[{"day":"2026-10-31","reachable":true,"status":402,"valid_402":true,"asked_usdc":0.0052,"price_match":true,"latency_ms":587,"error":null},{"day":"2026-10-29","reachable":true,"status":402,"valid_402":true,"asked_usdc":0.0052,"price_match":true,"latency_ms":51,"error":null}],"description_full":"Writes up to 1,000 JSON rows to a Google Sheet (append, replace, or update rows matched on keyColumn, adding new keys) or reads a tab back as JSON (mode import). No OAuth: share the sheet with nerolabs-sheets@nero-labs-sheets.iam.gserviceaccount.com as Editor. Keeps column order, adds new fields on the right, waits out Google rate limits. $0.005 per call plus $0.0002 per row sent, or $0.0001 per row allowed on import. Runs nerolabs/google-sheets-export.","last_updated":"2026-10-29T16:15:26.252Z","schemes":["exact"]}